LES CARTES A PUCES ASYNCHRONES
Principe
Les cartes à puces émettent un train de données juste après avoir été remises
à zéro (reset). Ceci est appelé ATR "answer to reset".
La liaison entre la carte et le terminal externe est sous forme half duplex,
sur la même ligne.
Les octets peuvent être encodés en convention directe ou inverse. L'un étant
le complément à l'envers de l'autre. Pour passer de l'un à l'autre, inverser les
bits et lire à l'envers :
- En convention directe, l'état de repos Z vaut 1, l'état forcé bas vaut 0,
et la transmission est effectuée LSB en premier (dans le même sens qu'une
liaison série PC).
- En convention inverse, l'état de repos Z vaut 0, l'état forcé bas vaut 1,
et la transmission est effectuée MSB en premier.
Les deux protocoles qui sont le plus utilisés sont appelés T=0 et T=1. T=0
est le plus simple basé sur une transmission par caractères, T=1 est plus
complexe et met en place une transmission par bloc avec un protocole
supplémentaire.
Interfaces
Interfaces physiques : 
Interfaces électriques :

Protocole série standard avec un bit start, 8 bits de donées, 1 bit de parité
paire (convention directe) ou impaire (convention inverse) et 1 bit de stop.
Interfaces vers un port COM d'un PC
voici le schéma d'une interface vers le port série
d'un PC, inspiré d'un schéma Electronique Pratique HS Interfaces
PC N°4 (Patrick Gueulle).

Il est très proche des schémas Dumbmouse,
Smartmouse ou Phénix, un peu éloigné du lecteur JDM (qui
est un exemple d'un mauvais montage). Les différences sont données
ci dessous :

L'avantage du montage proposé, est que contrairement au Phoenix ou Dumbmouse,
'il peut aussi servir en mode espion, lorsque l'on cherche à intercepter
les échanges entre un terminal et une carte. Dans ce cas, il suffit d'enlever
le jumper de l'horloge et de débrancher l'alimentation .

Le premier contact et la réponse au reset : ATR
- Alimenter la carte, avec reset (C2) à 0Volt, présenter l'oscillateur (C3),
- Programmer le port série en 8.Even.1
- Essayer de recevoir avec reset=0 avec un time out = 2 secondes (çà
c'est la théorie=20600*ietu, en pratique 200ms est ok)
- Si rien reçu, essayer de recevoir avec reset=1 avec time out = 2 secondes
(çà c'est la théorie=20600*ietu, en pratique 200ms est
ok)
- Si rien reçu, sortir du programme, la carte est muette
Il faut maintenir le reset dans l'état où la carte a répondu.
Si on présente une horloge externe à la carte, le débit série est de Fx/372.
9600 Bauds pour un quartz 3.57 MHz. Sinon, la vitesse de transmission est de
9600 Bauds normalement mais peut varier. L'interface peut alors mesurer la
vitesse de transmission avec le temps entre le 1er front descendant (bit reset)
et le 2ème front descendant. Ce temps vaut 3 fois le temps bit (etu) soit 312 µs
pour 9600 bauds, quelque soit la convention de transmission.
La carte émet avec un bit de parité, et vérifie la parité des octets qu'elle
reçoit en utilisant : 8.Even.1 si convention directe 8.Odd.1 si convention
inverse. Si un octet reçu par la carte n'est pas correct en parité, la carte
peut émettre une condition d'erreur revélée par une mise à zéro de la ligne I/O
(C7) pendant 2 temps bits.
Le premier octet reçu (TS) est soit 0x03 soit 0x3B

Si on détecte une convention inverse (0x03 lu), on reprogramme le port COM en
8.odd.1
Suivant TS, l'ATR est composé d'au plus 31 caractères :
- T0 : Caractere de format qui précise la présence des caractères TA1, TB1,
TC1, TD1 et le nombre de caractères historiques ; obligatoire
- TAi, TBi, TCi, TDi, spécifient les détails de la liaison ; optionnels
- noter que TD1 spécifie la présence des caractères TA2, TB2, TC2, TD2
et le protocole T
- T1, ... , TK : caractères historiques (max,15) ; optionnel
- T1 est l'octet de categorie, codé selon ISO7816-4 chap 8
- T1=00 la suite est un COMPACT-TLV
- T1=10 la suite est une clause DIR
- T1=80 la suite est un COMPACT-TLV
- autres valeurs dépendantes de l'application
- Les 3 derniers octets sont le status
- en général les deux derniers sont SW1 SW2 (voir plus
bas) = 90 00
- et l'avant dernier est le statut de vie de la carte, par exemple
00=user,01=manufacturing,02=personalizing pour une cartes ACOS
- TCK : Somme de controle ; la valeur de TCK est telle qu'une addition sans
retenue (ou exclusif) des octets T0 jusqu'à TCK est nulle ; obligatoire si
T=0 n'est pas le seul protocole cité dans les TDi.

quelques exemples d'ATR :
CHOIX DU PROTOCOLE
En cas de protocoles mutliples, il faut choisir le protocole utilisé par un
ordre PTS (Protocol Type Selection). La demande PTS est envoyée avec 5 octets :
- PTSS=0xFF
- PTS0 caractere de format, indique présence de PTS1,2,3 (b4-6) et choix du
protocole (b0-3)
- [PTS1]
- [PTS2]
- [PTS3]
- PCK verification
UTILISATION EN PROTOCOLE 0 : GENERALITES
Tous les échanges sont à l'initiative de l'interface, qui émet une commandes
sur 5 octets (classe, instruction, parametre 1, parametre 2, longueur).
L'échange se termine toujours par l'émission d'un statut.
Envoi de données :
-
Envoi: CLA INS P1 P2 LEN
-
Reçu : PROC
-
Envoi : DATA (LEN bytes)
-
Reçu : SW1 SW2
|
Lecture de données :
-
Envoi: CLA INS P1 P2 LEN
-
Reçu : PROC
-
Reçu : DATA (LEN bytes)
-
Reçu : SW1 SW2
|
CLA classe de la commande : 0 à 0xFE (FF=PTS)

INS instruction : en général pair

Les valeurs 6x et 9x sont interdites dans l'ISO7816
PROC octet de procedure, renvoyé par la carte suite à CLA
INS P1 P2 LEN

SW1, SW2 octets d'état, renvoyé par la carte suite à la
fin de l'échange

Exemples :
- Teste une classe : CLA 00 00 00 00 - 6E 00 si la classe n'existe
pas
- Teste une instruction : CLA INS 00 00 00 00 - 6E 00 ou 6D 00
si l'instruction n'existe pas
- Teste une zone mémoire : CLA A4 00 00 02 - CLA - FileID (2 bytes) -
61 xx (xx=longueur) ou 9x 00 pour ok
Cas particulier de la carte bancaire
Lecture de zones
- 32 octets à partir de l'adresse 08E0 (publique)
- BC B0 08 E0 20 B0 ............ 90 00
- 60 octets à partir de l'adresse 0948 (publique)
- BC B0 09 48 3C B0 ............. 90 00
- 64 octets à partir de l'adresse 0260 (privé)
- BC B0 02 60 40 B0 ............. 90 00
Transcodage et présentation du code privé
- on part de 4 chiffres de 0 à 9, codés en BCD cela donne : aaaa bbbb cccc
dddd
- on ajoute 2 zéros devant et 14 uns dérrière : 00aa aabb bbcc ccdd dd11
1111 1111 1111 on obtient 4 octets qui sont envoyés à la carte (INS=20), puis
ratifiés (INS=40)
- BC 20 00 00 04 - 20 - C1 C2 C3 FF - 90 00
- BC 40 00 00 00 - 90 00
A l'envers, si la carte reçoit : 95 10 7F FF = 1001 0101 0001 0000 0111 1111
1111 1111, le code est 5441
Cas particulier de la carte GSM
Recherche des instructions reconnues par une carte GSM :

Recherche des fichiers reconnus par une carte GSM :

Transcodage et présentation de code pin GSM
- On part des 4 chiffres du code pin de 0 à 9, codés en BCD cela donne :
aaaa bbbb cccc dddd
- on transcode les 4 chiffres en ASCII et on ajoute 4 octets à FF :
- 0011aaaa 0011bbbb 0011cccc 0011dddd FF FF FF FF
- on obtient 8 octets qui sont présentés à la carte (INS=20) :
- A0 20 00 01 08 - 20 - C1 C2 C3 C4 FF FF FF FF - 90 00
- Désactivation du code
- A0 26 00 01 08 - 26 - C1 C2 C3 C4 FF FF FF FF - 90 00
- Activation du code
- A0 28 00 01 08 - 28 - C1 C2 C3 C4 FF FF FF FF - 90 00
Divers
Recherche de l'IMSI (international mobile subscriber identity)
- select A0 A4 00 00 02 - A4 - 7F 20 - 9F 16
- select A0 A4 00 00 02 - A4 - 6F 38 - xx xx
- read A0 B0 00 00 09 - B0 - imsi - 90 00
Séléction d'une application
Les cartes à puces peuvent supporter chacune plusieurs applications.
Par exemple, on trouve maintenant l'application MONEO sur nos cartes bancaires
au standard GMV.
Chaque application est référencée dans la norme ISO7816-5,
à laide d'un AID ( Application IDentifier), lui même composé
d'un RID (Registered Application Provider Identifier, 5 octets) et d'un PIX
(Proprietary Application Identifier Extension, 0 à 11 octets)
La séquence à envoyer est par exemple : 00 A4 04 00 07 A0 00
00 00 03 10 10
La séquence à envoyer pour explorer une carte est : 00 A4 04
00 0E 315041592E5359532E4444463031

Standards internationaux
The basic contact smart card standard is the ISO 7816 series, part 1- 10
while contactless cards will be governed by the ISO 14443 standard. These
standards are derived from the identification card standards and detail the
physical, electrical, mechanical, and application programming interface. Below
is a list of the contact card standards.
- ISO 7816 - Identification Cards - Integrated Circuit(s) Cards With
Contacts
- 7816-1 (1987) : Physical characteristics
- 7816-2 (1988) : Dimension and location of contacts
- 7816-3 (1989) : Electronic signals and transmission protocol
- Amendment 1 (1992) : Protocol T=1
- Amendment 2 (1994) : Revision of Protocol Type Selection
- Latest version is dated 1997 -- txt
version here (59 kbytes) --
- 7816-4 (1995) : Interindustry commands and responses
- 7816-5 (1994) : Numbering system and registration procedure for
application identifiers
- Amendment 1 (CD) : Registration of identifiers
- 7816-6 (1996) Interindustry data elements
- 7816-7 Interindustry commands for Structured Card Query Language (SCQL)
- 7816-8 Security related interindustry commands
- 7816-10 Electronic signals and answer to reset for synchronous
cards
- ETSI TE-9. Telecom standard. Dutch Chipper are based on this standard
- EMV(www.emvco.com).
Eurocard, Mastercard and VISA standard on smart card payment systems.
Références
- cartesapuce.fr : un site
spécialisé sur les cartes à puces, par B. Tavernier ;
ses 2 articles dans Elektor 11/2006 (lecteurs et article général),
integralement repris dans son livre Les cartes à Puces
- une récapitulation des tentatives de piratages des cartes bancaires
http://www.parodie.com/monetique
- Elektor 234/235 (dec 97 et janv 98), lecteur de cartes asynchrones basé
sur un PIC, sur bus série, P. Gueulle
- Electronique pratique hors série N°4, lecteur de carte à puces asynchrones
sur bus série, P. Gueulle
- Le site des hackers de cartes : HIP
mais qui n'est plus vraiment maintenu
- SIM card research,
un site Russe avec beaucoup de choses...