		***********************************
		*       CARTE BANCAIRE VISA       *
		*                Par              *
		*           D. O'CONNELL          *
		*               Pour              *
		*              NO-WAY             *
		***********************************


Ce texte vous es propos  titre purement informatif, je dgage toutes
responsabilites quand  l'utilisation que vous pouvez en faire.


I Gnralites:

Une carte bancaire est un moyen de paiement lectronique, pour ce faire on
dispose de trois solutions, la puce de la carte, les pistes magntiques ou
simplement le numro de carte en cas de tlpaiement (pour les ignares  a
veux dire paiement  distance).

Le plus sur des moyens tant l'interrogation de la puce, c'est ce  qui est
utilis pour les paiements en magasin quand vous tapez votre code.
Les pistes  magntiques  sont  interroges  lors d' un retrait dans un DAB
(Distributeur Automatique de Billets) sans vrification de la puce.
Le numero de carte est utilis par les anciens "terminaux" dit fer  repasser
o l'embossage de la carte tait tranfr par carbonne et pour les prises de
commande par tlphone.

II Les pistes magntiques

Les cartes VISA comportent plusieurs pistes le standard ISO en definie 3, les
cartes franaises en utilisent 4 ISO1, ISO2, et 2 autres propre  la France
T2, et T3 bravo la normalisation... Cependant pour des raisons de compatilite
et de cot une seule et utilise  la fois gnralement ISO2 mais parfois ISO1
dans les anciens terminaux.


Les informations sont codes en bi-phase le mieux tant de voir le dessin pour
comprendre:

Signal       +---+   +---+       +-+ +-+ +   +---+ +-+   +-+ +---+
	     +   +---+   +       + +-+ +-+   +   +-+ +---+ +-+   +
Valeur         0   0   0           1   1       0   1   0   1   0

Simple non ?? Le bit est cod suivant deux frquence la frquence pour le 1
tant deux fois celle du 0.
Un prochain article intgrera je l'espre le schma d'un lecteur/criveur de
piste magntique, sachez qu'une tte magntique de magntophone fait trs bien
l'affaire pour la lecture.

Bon maintenant il faut encore savoir comment interprter les bits lus, il y a
deux standard pour cela:
-ANSI/ISO BCD FORMAT
BCD signifie Binary Coded Decimal ou Decimal Cod Binaire, le code est sur 5
bits 4 d'information et un de parit. La parit est impaire cela signifie que
chaque mot de 5 bits doit comporter un nombre IMPAIRE de 1.
La lecture commence, contre toute logique, par le bit le moins significatif!!


----DONNEES----   Parit
b1  b2   b3  b4     b5      Caractre     Fonction

0   0    0   0      1           0           Donne
1   0    0   0      0           1             "
0   1    0   0      0           2             "
1   1    0   0      1           3             "
0   0    1   0      0           4             "
1   0    1   0      1           5             "
0   1    1   0      1           6             "
1   1    1   0      0           7             "
0   0    0   1      0           8             "
1   0    0   1      1           9             "
0   1    0   1      1           :           Control
1   1    0   1      0           ;            Start
0   0    1   1      1           <           Control
1   0    1   1      0           =          Sparateur
0   1    1   1      0           >           Control
1   1    1   1      1           ?             Fin

Voici donc un code purement numrique, pas vident pour crire un nom! Mais
voici ZORO avec son ANSI/ISO ALPHA FORMAT:

	 --------Donnes-------   Parit
	 b1  b2  b3  b4  b5  b6     b7    Caractre   Fonction

	  0   0   0   0   0   0     1     espace (0H) Spcial
	  1   0   0   0   0   0     0        ! (1H)      "
	  0   1   0   0   0   0     0        " (2H)      "
	  1   1   0   0   0   0     1        # (3H)      "
	  0   0   1   0   0   0     0        $ (4H)      "
	  1   0   1   0   0   0     1        % (5H)    Start
	  0   1   1   0   0   0     1        & (6H)   Spcial
	  1   1   1   0   0   0     0        ' (7H)      "
	  0   0   0   1   0   0     0        ( (8H)      "
	  1   0   0   1   0   0     1        ) (9H)      "
	  0   1   0   1   0   0     1        * (AH)      "
	  1   1   0   1   0   0     0        + (BH)      "
	  0   0   1   1   0   0     1        , (CH)      "
	  1   0   1   1   0   0     0        - (DH)      "
	  0   1   1   1   0   0     0        . (EH)      "
	  1   1   1   1   0   0     1        / (FH)      "

	  0   0   0   0   1   0     0        0 (10H)   Donnes
	  1   0   0   0   1   0     1        1 (11H)     "
	  0   1   0   0   1   0     1        2 (12H)     "
	  1   1   0   0   1   0     0        3 (13H)     "
	  0   0   1   0   1   0     1        4 (14H)     "
	  1   0   1   0   1   0     0        5 (15H)     "
	  0   1   1   0   1   0     0        6 (16H)     "
	  1   1   1   0   1   0     1        7 (17H)     "
	  0   0   0   1   1   0     1        8 (18H)     "
	  1   0   0   1   1   0     0        9 (19H)     "

	  0   1   0   1   1   0     0        : (1AH)   Spcial
	  1   1   0   1   1   0     1        ; (1BH)      "
	  0   0   1   1   1   0     0        < (1CH)      "
	  1   0   1   1   1   0     1        = (1DH)      "
	  0   1   1   1   1   0     1        > (1EH)      "
	  1   1   1   1   1   0     0        ? (1FH)     FIN
	  0   0   0   0   0   1     0        @ (20H)   Spcial

	  1   0   0   0   0   1     1        A (21H)   Donnes
	  0   1   0   0   0   1     1        B (22H)     "
	  1   1   0   0   0   1     0        C (23H)     "
	  0   0   1   0   0   1     1        D (24H)     "
	  1   0   1   0   0   1     0        E (25H)     "
	  0   1   1   0   0   1     0        F (26H)     "
	  1   1   1   0   0   1     1        G (27H)     "
	  0   0   0   1   0   1     1        H (28H)     "
	  1   0   0   1   0   1     0        I (29H)     "
	  0   1   0   1   0   1     0        J (2AH)     "
	  1   1   0   1   0   1     1        K (2BH)     "
	  0   0   1   1   0   1     0        L (2CH)     "
	  1   0   1   1   0   1     1        M (2DH)     "
	  0   1   1   1   0   1     1        N (2EH)     "
	  1   1   1   1   0   1     0        O (2FH)     "
	  0   0   0   0   1   1     1        P (30H)     "
	  1   0   0   0   1   1     0        Q (31H)     "
	  0   1   0   0   1   1     0        R (32H)     "
	  1   1   0   0   1   1     1        S (33H)     "
	  0   0   1   0   1   1     0        T (34H)     "
	  1   0   1   0   1   1     1        U (35H)     "
	  0   1   1   0   1   1     1        V (36H)     "
	  1   1   1   0   1   1     0        W (37H)     "
	  0   0   0   1   1   1     0        X (38H)     "
	  1   0   0   1   1   1     1        Y (39H)     "
	  0   1   0   1   1   1     1        Z (3AH)     "

	  1   1   0   1   1   1     0        [ (3BH)    Spcial
	  0   0   1   1   1   1     1        \ (3DH)    Spcial
	  1   0   1   1   1   1     0        ] (3EH)    Spcial
	  0   1   1   1   1   1     0        ^ (3FH)   Separateur
	  1   1   1   1   1   1     1        _ (40H)    Spcial

Ouf voila la parit est toujours impaire, et on continue  lire le LSB en
premier.

On va maintenant s'interesser au donnes contenues dans dans les pistes ISO1,
et ISO2:
Les pistes T2 et T3 des cartes franaise 'seraient' un redit des informations
des pistes ISO2 et ISO3, cette information est non vrifie si vous avez des
renseignements....

Numero de la carte      -> 1111 2222 3333 4444
Date d'expiration       -> 12/99

Piste 2 (BCD,75 bpi)-> ;1111222233334444=9912101xxxxxxxxxxxxx?

Piste 1 (ALPHA,210 bpi)-> %B1111222233334444^PUBLIC/JOHN^9912101xxxxxxxxxxxxx?

PISTE 1
 
 Champ #   Longueur  Fonction
 -------   --------  --------
 1         1         Start Sentinel (STX)
 2         1         Format Code
 3         13/16     Numero de la carte
 4         1         Separateur (^) HEX 5E
 5         2-26      Nom du porteur
 6         1         Separateur (^) HEX 5E
 7         4         Date d'expiration MMAA
 8         3         CODE ??? 101 ou 000 pas d'info
 9         0/5       Verification du code secret
 10                  Depend de 3, 5, 9
 11        11        Rserv
 12        1         FIN (ETX)
 13        1         LRC

    Longueur maximum  79 Caractres



 Champ #   Longueur     Fonction
 -------   --------     -------------

    1         1         Start Sentinel (STX)
    2         13/16     Numero de carte
    3         1         Separateurr (=) HEX 3D
    4         4         Date d'expiration MMAA
    5         3         Code ??? 101 ou 000 pas d'info
    6         0/5       Vrification du code secret
    7                   Depend de 2, 6
    8         1         Fin (ETX)
    9         1         LRC


LRC est une sorte de checksum qui est calcul en faisant un XOR sur tout les
caractres prcdents sauf STX.



III Le numro de carte

 Le numro inscrit sur votre carte est son identite, c'est avec a que toutes
les oprations sont traites.

Pour une carte visa le numro a 16 chiffres, les 4 premiers identifient l'
metteur de la carte (la banque) les deux suivants ?? les 7 suivants sont le
numro de compte du titulaire, les deux suivants ?? le dernier est attribu de
faon mathmatique ce qui permettra de vrifier si le numro de carte est
valide ou non. On peut rsumer la situation ainsi:

BBBB??NNNNNNNXXC

B=Code de la banque
N=Numro de compte
C=Checksum
?=Aucune ide souvent 59 ou 60
X=Nombre de carte que vous avez eu ( verifier) souvent 01

Les Banques en fonction des 4 premiers chiffres:
-4970 La Poste
-4975 La Bred
-4972 Le Crdit Lyonnais
-4976 Banque Sofinco
-5131 Crdit Agricole
Je n'en connais pas d'autre mais il suffit de regarder sur la votre pour
trouver (!!?)

Une faon trs simple d'avoir un numro de compte est de regarder votre relev
de compte chaque fois que l'on vous fait un chque le numro de compte sur
lequel il a t tir est inscrit...

Voila le programme (en Basic GW) permettant de calculer le numro d'une visa,
pour tre sur d'un numro de carte vous pouvez vous connecter sur Compuserve,
ou appeller un numro de discution porno... (Enjoy your WANKING), ou utiliser
un soft shareware appel Crdit Card Checking (CCC) distribu par l'ASP.

------------------------------------------------------------------------------
DEFINT A-Z

DIM buf(15)
CLS
INPUT "Numro de la banque (4 chiffres):", bank$
INPUT "Numero de compte (7 chiffres)   :", compt$
INPUT "Les 2 chiffres aprs la banque  :", chif2$
INPUT "Les 2 chiffres avant le checksum:", chich$

FOR j = 1 TO 3
	a$ = MID$(bank$, j, 1)
	buf(j - 1) = VAL(a$)
	
NEXT j

FOR j = 1 TO 2
	buf(j + 3) = VAL(MID$(chif2$, j, 1))
NEXT j

FOR j = 1 TO 7
	buf(j + 5) = VAL(MID$(compt$, j, 1))
NEXT j

FOR j = 1 TO 2
	buf(j + 12) = VAL(MID$(chich$, j, 1))
NEXT j

FOR i = 1 TO 9

modulo = 0

buf(15) = i
FOR k = 0 TO 15
	 IF ((k MOD 2) = (16 MOD 2)) THEN
		j = 2 * buf(k)
		ELSE j = buf(k)
	 END IF
	 IF j >= 10 THEN
		x = (j MOD 10) + 1
		ELSE x = j
	 END IF

modulo = modulo + x

NEXT

LOCATE 10, 10


IF modulo = 0 THEN
 y = 3
END IF
IF (modulo MOD 10 = 0) AND (y <> 3) THEN

 FOR z = 0 TO 15
  PRINT buf(z);
 NEXT
 PRINT ""
 PRINT "Modulo=", modulo
 INPUT z
END IF

NEXT i
------------------------------------------------------------------------------

C'est du brut, libre  vous de rajouter des fioritures mais a marche c'est le
principal non??


Voila la date d'expiration est simplement un flag  l'arrive, donc vous
pouvez donner n'importe quoi dans la limite de deux ans aprs la date actuelle
exemple si on est le 02/94 une date valide est situe entre le 03/94 et le
02/96.

IV La Puce
Bon pas beaucoup d'infos la dessus, c'est un vrai microcontrolleur, avec un
processeur 8 bits, de la RAM et de l' EPROM. La dsignation officielle est CP8
c'est fabriqu par Bull je ne sais pas si il y a des secondes sources (peut
tre Schlumberger mais pas Gemplus).
La carte est scuris par zone, la premire zone en accs libre comporte les
informations embosses (Nom, Prenom, Numero, Date d'expiration), la seconde
zone peut tre lu aprs prsentation d'un code c'est la zone de transaction,
un compteur comptabilise (comme tout bon compteur) les erreurs de prsentation
de code aprs 3 erreurs successives mme sur des terminaux diffrents la
puce est irrmdiablement bloque. La troisime zone est innaccessible depuis
l'exterrieur et comporte les codes de validation des programmes de cryptage
qui sont au nombre de 2 RSA et DES pour plus d'information  ce sujet on peut
se reporter  l'exellent livre "Cryptography and data security" aux ditions
Addison-Wesley. Mais sachez que pour cracker un code DES il vous fraudra
quelques sicles avec un DX2-66 et quelques millions de fois plus pour le RSA.
Je n' ai jammais entendu parler de fraude sur la puce des CB, peut etre que
quelqu'un me contredirra dans un futur (plus ou moins) proche.
Voila j'espre que ce petit fichier vous aura interess, dans un prochain nous
nous interesserons au carte F256 qui sont les puces des cartes de tlphones.

Les informations ci-dessus viennent de Phrack, Science et Vie, d' articles
dans divers jounaux dont j'ai oubli les noms, et du peu de choses
interessantes que l' ducation nationnale m'a apport.
