=-[ 0x19 ]-==================================================================
=-[ NetSearch Ezine #7 ]-====================================================
=-[ Tarjetas Magneticas ]-===================================================
=-[ por MaDj0kEr ]-==========================================================



1. Que es una banda magnetica. Como funciona.

Una banda magnetica, habitualmente situada en una tarjeta que cumple el standard
ISO 7810 en cuanto a caracteristicas fisicas y en ocasiones, sigue el ISO 7811
que establece un standard para la grabacion de las bandas.

La banda esta formada por sustancias ferromagneticos. Estas sustancias tienen la
curiosa propiedad de mantener los efectos de un campo magnetico una vez que este
deja de aplicarse. Es decir, las particulas que forman la banda son pequeos
imanes que tienen dos polaridades... norte y sur. Si a una particula se le
aplica un campo magnetico lo suficientemente fuerte, esta cambiara su polaridad.
Esto es, el norte pasara a ser el sur y viceversa.

La fuerza del campo magnetico necesario para producir este cambio es lo que se
conoce como fuerza coercitiva. Para nuestro estudio, solo debemos saber que 
podemos diferenciar materiales de alta y de baja coercividad. Casi todas las
tarjetas que nosotros manejamos son de baja coercividad. Es necesario un
grabador mas barato para generarlas, al tener que crear un campo magnetico
localizado de menor intensidad. Las podemos distinguir a "ojo": Si la banda
magnetica es negra, la tarjeta sera de alta coercividad (las tarjetas de
los aeropuertos), si es oscura pero tirando a marron, la tarjeta es de baja
coercividad (cualquier tarjeta de credito).

Ya sabemos que la informacion se almacena dependiendo de las polaridades de las
particulas. Mas concretamente, el estado inicial de una tarjeta consiste en que
todas las particulas tienen la misma orientacion por lo que las lineas de flujo
iran de un extremo a otro. En el momento que alteremos la orientacion de una
particula, esta particula causara un cambio en las lineas de flujo. Es con este
mecanismo con el que codificaremos unos y ceros en la banda magnetica.

Dependiendo del grosor de la banda magnetica, distinguiremos distintas pistas
en ella. Por ejemplo, una tarjeta de credito puede contener tres pistas de datos
dentro de la misma banda.

Ademas, podemos utilizar mayor o menor densidad de informacion por pulgada (bpi)
para optimizar el tamao de nuestra banda. A mayor densidad, mas costosos son
los lectores y sobre todo, los grabadores.

2. Metodos habituales de representacion de informacion.

Los datos sabemos que se almacenan en forma binaria, pero se nos pueden ocurrir
mil formas de guardarlos. Existen dos standards de codificacion que no son
obligatorios ni mucho menos, pero si son ampliamente utilizados, ya sea para
representar datos numericos (BCD) o alfanumericos (ALPHA).

2.1. Formato BCD

Cada caracter queda determinado por 5 bits. Se definen 16 caracteres con la
combinacion de 4 bytes, y el quinto se utiliza como bit de paridad. La tabla de
caracteres es la siguiente. (donde b1 es el bit menos significativo y b5 es el
bit de paridad).

 b5 b4 b3 b2 b1       caracter

 1  0  0  0  0           0
 0  0  0  0  1           1
 0  0  0  1  0           2
 1  0  0  1  1           3
 0  0  1  0  0           4
 1  0  1  0  1           5
 1  0  1  1  0           6
 0  0  1  1  1           7
 0  1  0  0  0           8
 1  1  0  0  1           9
 1  1  0  1  0           : [Control]
 0  1  0  1  1           ; [Centinela de inicio]
 1  1  1  0  0           < [Control]
 0  1  1  0  1           = [Separador de campo]
 0  1  1  1  0           > [Control]
 1  1  1  1  1           ? [Centinela de fin]

La banda magnetica comienza con una serie de bits a cero. Continua con un
centinela de inicio, que indica que los bits comienzan a estar agrupados de
cinco en cinco. Al final de los datos, se encuentra el centinela de fin, al que
acompaa un caracter LRC que esta formado por la suma de las paridades de los
bits de datos (1 a 4).

2.2. Formato ALPHA

Funciona igual que el formato BCD pero usaremos 7 bits en lugar de 5 para
generar un juego de 64 caracteres.

 b7 b6 b5 b4 b3 b2 b1      caracter

 1  0  0  0  0  0  0        espacio
 0  0  0  0  0  0  1           !
 0  0  0  0  0  1  0           "
 1  0  0  0  0  1  1           #
 0  0  0  0  1  0  0           $
 1  0  0  0  1  0  1           % [Centinela de inicio]
 1  0  0  0  1  1  0           &
 0  0  0  0  1  1  1           '
 0  0  0  1  0  0  0           (
 1  0  0  1  0  0  1           )
 1  0  0  1  0  1  0           *
 0  0  0  1  0  1  1           +
 1  0  0  1  1  0  0           ,
 0  0  0  1  1  0  1           -
 0  0  0  1  1  1  0           .
 1  0  0  1  1  1  1           /
 0  0  1  0  0  0  0           0
 1  0  1  0  0  0  1           1
 1  0  1  0  0  1  0           2
 0  0  1  0  0  1  1           3
 1  0  1  0  1  0  0           4
 0  0  1  0  1  0  1           5
 0  0  1  0  1  1  0           6
 1  0  1  0  1  1  1           7
 1  0  1  1  0  0  0           8
 0  0  1  1  0  0  1           9
 0  0  1  1  0  1  0           :
 1  0  1  1  0  1  1           ;
 0  0  1  1  1  0  0           <
 1  0  1  1  1  0  1           =
 1  0  1  1  1  1  0           >
 0  0  1  1  1  1  1           ? [Centinela de fin]
 0  1  0  0  0  0  0           @
 1  1  0  0  0  0  1           A
 1  1  0  0  0  1  0           B
 0  1  0  0  0  1  1           C
 1  1  0  0  1  0  0           D
 0  1  0  0  1  0  1           E
 0  1  0  0  1  1  0           F
 1  1  0  0  1  1  1           G
 1  1  0  1  0  0  0           H
 0  1  0  1  0  0  1           I
 0  1  0  1  0  1  0           J
 1  1  0  1  0  1  1           K
 0  1  0  1  1  0  0           L
 0  1  0  1  1  0  1           M
 0  1  0  1  1  1  0           N
 1  1  0  1  1  1  1           O
 1  1  1  0  0  0  0           P
 0  1  1  0  0  0  1           Q
 0  1  1  0  0  1  0           R
 1  1  1  0  0  1  1           S
 0  1  1  0  1  0  0           T
 1  1  1  0  1  0  1           U
 1  1  1  0  1  1  0           V
 0  1  1  0  1  1  1           W
 0  1  1  1  0  0  0           X
 1  1  1  1  0  0  1           Y
 1  1  1  1  0  1  0           Z
 0  1  1  1  0  1  1           [
 1  1  1  1  1  0  0           \
 0  1  1  1  1  0  1           ]
 0  1  1  1  1  1  0           ^ [Separador de campo]
 1  1  1  1  1  1  1           _

2.3. Pistas de datos

Tambien de forma standard se definen tres pistas distintas dentro de una banda,
asi como para que deben usarse:

Pista 1 - 210 bpi - ALPHA - Lectura
Pista 2 - 75 bpi  - BCD   - Lectura
Pista 3 - 210 bpi - BCD   - Lectura y escritura

2.4. Analisis de una tarjeta standard

Por ejemplo, estudiemos la informacion de una tarjeta de credito (alterada
para no dar datos de su propietario):

Pista 1:
%B5477536478050012^PEREZ SANCHEZ/JUAN        ^0209101267320000000000376000000?G

% = Centinela de inicio
B = Codigo de formato
5477536478050012 = Numero de tarjeta
^ = Separador de campo
PEREZ SANCHEZ/JUAN = Titular de la tarjeta
^ = Separador de campo
0209 = Fecha de caducidad (Sept. 2002)
10126732 = Numero 1
0000000000 = Padding
376 = Numero 2
000000 = Padding
? = Centinela de final
G = LRC (no valido en este caso por tener datos alterados)

Pista 2:
;5477536478050012=02091012673237600000?4

; = Centinela de inicio
5477536478050012 = Numero de tarjeta
= = Separador de campo
0209 = Fecha de caducidad (Sept. 2002)
10126732 = Numero 1
376 = Numero 2
00000 = Padding
? = Centinela de final
4 = LRC (no valido en este caso por tener datos alterados)

Pista 3:

;015477536478050012=7242025002501302015021502240000002090=15064941302000000000011227641875282000000000?>

; = Centinela de inicio
01 = Codigo de formato
5477536478050012 = Numero de tarjeta
= = Separador de campo
724 = Indicador de pais (Espaa)
2025002501302015021502240000 = Desconocido. Incluye el pin cifrado.
0209 = Fecha de caducidad (Sept. 2002)
0 = Padding
= = Separador de campo
Resto de datos desconocidos.
? = Centinela de final
> = LRC (no valido en este caso por tener datos alterados)

Otro ejemplo puede ser una tarjeta regalo de El Corte Ingles. Veamosla:

Pista 1 - 210 bpi - ALPHA
Pista 2 - 75 bpi  - BCD

Pista 1:

%B0000107067191^                          ^0000011710640000601000000000000000?E

% = Centinela de inicio
B = Codigo de formato
0000107067191 = Numero de tarjeta.
^ = Separador de campo
  = Espacio reservado para identificacion de propietario ??
^ = Separador de campo
resto = Desconocido. No es el saldo porque no varia al utilizar la tarjeta.
? = Centinela de fin
E = LRC 

Pista 2:

;0000107067191=00000117106400006010000?4

; = Centinela de inicio
0000107067191 = Numero de tarjeta
= = Separador de campo
resto = Desconocido
? = Centinela de fin
4 = LRC

3. Otros usos no standard.

Tarjetas de aparcamiento y tarjetas de transporte, por ejemplo, en la Comunidad
de Madrid funcionan de forma similar salvo que con codificaciones no standard y
con bandas que solo admiten una pista.

Un ejemplo del contenido del abono transportes de zona B2 de Diciembre 2001:

00000000000000000000000000000000000000000000000000000000000000000000000000001110
00101100001111111111111000111111111111111111111111111101101101011100010111111111

Con un poco de tiempo y comparandolo con los de otras fechas y otras zonas
posiblemente podriamos sacar algo en claro. Por el momento no parece utilizar
codificacion standard.

Algo que si usa codificacion standard pero no del todo son las tarjetas de
fotocopiadoras que podemos encontrar en alguna universidad espaola. En la pista
2 almacenan los siguientes datos, alterando un poco el standard BCD:

?3<>49117000019500000000000200?*

? = Centinela de final (en lugar del de inicio)
3<> = Cabecera
49117 = Numero de serie?
195 = Fotocopias restantes
200 = Fotocopias restantes del uso anterior
? = Centinela de final
* = LRC no standard.

Por ultimo, el volcado de una tarjeta de control de acceso a una habitacion de
hotel. Tambien sin comentar:

Pista 3 - 74 bpi:

0000000000000000000000000000000000001100001111100110001110001001111011111001010001
1010110110101001111110011011011101011100111110110100111010001110100010010000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000
