Historique, concepts, sécurité des cartes, TP
© Pascal Chour, 1989 - 2021
Mise à jour, juillet 2021, 10ème édition indice 8
Le logiciel PCCAM permet de réaliser les TP décrits dans ce cours
AVERTISSEMENT Le présent cours est destiné à des fins pédagogiques. Ses lecteurs s'engagent à ne pas utiliser les informations qu'il contient à des fins illicites. Ce cours relève de la seule responsabilité personnelle de son auteur et ne peut engager son employeur ou toute institution de formation, qu'elle soit privée ou publique, qui l'emploie. |
NORMALISATION
Survol sur la normalisation en général
Aujourd'hui, vous avez décidé d'acquérir une nouvelle machine à laver ou une téléviseur dernier cri. Les magasins sont nombreux et le choix est vaste. Certains modèles exposés portent une étiquette garantissant la conformité du produit aux normes françaises (NF). Que le ramage est bien en rapport avec le plumage en somme. Même si vous ne les avez jamais lues, une garantie est toujours rassurante. L'un de ces modèles est également conforme aux normes DIN. Quel rapport avec les prises du même nom ou la sensibilité des pellicules photographiques (bon, ok, ça date un peu à l'heure des appareils photos numériques) ?
Aucun, si ce n'est que tous ces produits se réfèrent à un document établi par un organisme de normalisation, en l'occurrence, pour DIN, la Deutches Industrie für Normen.
Ce qui est vrai pour les machines à laver et les téléviseurs l'est également pour les cartes à micro-circuit. L'étude de cette norme vaut bien un chapitre sans doute.
Les organismes de normalisation
Pour éviter des développements anarchiques et limiter l'influence des industriels, la plupart des pays industrialisés se sont munis d'une structure chargée d'édicter des règles définissant les caractéristiques qui, d'un produit industriel, qui d'un formulaire etc.
C'est la raison pour laquelle vous pouvez (en général) visser l'écrou d'un fabricant français X avec la vis d'un fabricant français Z. L'affaire se complique si vous utilisez la vis du fabricant américain Y. En effet, les normes édictées en France n'ont pas forcément cours dans les autres pays et vis, pardon, vice versa.
Les mêmes raisons qui ont prévalu à la constitution d'organismes de normalisation nationaux ont donc prévalu à la création d'un organisme de normalisation international. Peut-être un jour pourrez-vous acheter une machine à laver aux normes ISO.
Les Organismes nationaux de normalisation
En France, c'est l'AFNOR (Association Française de NORmalisation) qui, comme son nom l'indique, est chargée d'édicter les normes françaises. On pourrait citer l'ACNOR (Association Canadienne de NORmalisation) pour le Canada, DIN (Deutsche Industrie für Normen) pour l'Allemagne (à l'époque où la première version de ce document a été écrite, c'était la RFA), l'ANSI (American National Standart Institute) pour les USA, etc.
Ces organismes disposent d'experts dans chacun des domaines étudiés. En France, tout le monde peut participer au processus de normalisation à condition de payer un droit d'inscription... et d'être très disponible car la normalisation est un processus très lent. En pratique, on y rencontre des industriels et des fonctionnaires détachés par leur administration.
Lorsqu'une norme française a été élaborée, on peut souhaiter la voir devenir internationale. Cette décision devra être prise au niveau supérieur par l'ISO (International Standard Organisation) basée à Genève sous l'égide de l'ONU. Seules les associations nationales reconnues disposent d'un droit de vote à l'ISO.
Le Processus de Normalisation à l'ISO
Chaque grand domaine d'activité dispose d'un comité technique (TC Technical Comittee). Ainsi le TC 97 supervise les "systèmes de traitement de l'information". Vous l'avez compris, il y sera beaucoup question d'informatique. Mais l'informatique est vaste domaine qu'il a fallu subdiviser en sous-comité (SC) eux-mêmes subdivisés en groupes de travail (WG Working group). Le TC97/SC17/WG4 (aujourd'hui, ISO/IEC JTC1 SC17) fut responsable d'un avant-projet de norme concernant les cartes d'identification munies de circuit(s) intégrés et de contacts, autrement dit la carte à puce telle que nous l'avons définie dans cet ouvrage. La série des normes ISO/IEC 7816 est celle qui régie encore aujourd'hui le monde des cartes à contacts. Pour les cartes sans contacts, il faut aller voir du coté des normes ISO/IEC 14443.
Prenons un exemple. Supposons que vous soyez expert à l'AFNOR et vous venez de mettre au point l'Azimuteur de Computage à Rétroaction Inverse (ACRI) en complément de l'ACOR (ACOR et ACRI, pas terrible, je sais). La normalisation a bien avancé au niveau national et vous souhaitez aboutir à une norme internationale. Le parcours du combattant commence alors. Vous devez soumettre votre projet au comité technique compétent et demander qu'il soit mis à l'étude.
Le comité technique, dans un délai de trois mois, vous donne sa réponse que nous supposerons positive, pour les besoins de la démonstration. La question est donc soumise au sous-comité compétent qui lui-même la transmet au groupe de travail ad'hoc (ou en crée un si c'est nécessaire). Il vous faudra attendre de trois à douze mois pour que votre dossier qui est devenu un "document de travail" se transforme en Draft Proposal (DP) (avant-projet de norme) ou plus récemment, en « Commitee Draft (CD) ». Cette transmutation ne peut avoir lieu que si le vote du WG est positif.
Le CD est ensuite étudié par le sous-comité qui a trois mois pour se prononcer sur le document. Si le vote est positif, le document changera à nouveau de statut et deviendra un DIS (Draft International Standard, Projet de Norme International) soumis à l'acceptation du TC. Au sommet de la pyramide, le DIS est enfin proposé à tous les états membres, qu'ils fassent ou non partie du Comité technique, en d'autres termes qu'ils soient concernés par le sujet ou non. Chacun dispose de cinq mois pour se prononcer. Le DIS prendra le statut de Norme Internationale (IS International standard) s'il réunit les deux tiers des votes en sa faveur et moins d'un quart en sa défaveur.
Voilà pour la théorie. La pratique respecte les grands principes mais est un peu différente dans les détails. En effet, durant les phases de discussion, les experts émettent des commentaires ou des propositions destinées à être intégrées dans le document final, ou à le faire évoluer. Il ne faut pas oublier que les représentants à l'ISO sont membres d'associations de normalisation nationales et, on le comprendra aisément, la pression des industriels ou des états peut être particulièrement forte si le projet touche un domaine d'activité stratégique pour le pays. C'est ainsi que l'on transforme une réunion technique en débat politique où tous les arguments peuvent être bons du moment qu'ils font évoluer la norme dans le bon sens.
Supposons maintenant que l'un des états membres émette un vote négatif mais que la norme soit acceptée. Rien n'oblige le pays qui a voté négativement à appliquer cette norme. Si son importance économique dans le domaine concerné n'est pas importante, son refus ne le sera pas non plus. Dans le cas contraire, il en va tout autrement. C'est pourquoi une règle s'est instituée à l'ISO qui veut qu'une norme soit en pratique votée à l'unanimité à tous les stades de son cheminement. Le vote final n'est donc plus qu'une formalité mais le délai global peut s'en trouver allongé.
L'ISO, une société d'étude de marché ?
Reprenons le projet de normalisation de l'ACRI. 6 mois après avoir été déposée, la norme internationale est votée. Bravo, vous êtes un diplomate et un technicien hors pair. Indépendamment de cela, il est probable que l'ACRI n'intéresse personne. Vous avez là un magnifique indicateur quant au succès industriel et commercial de ce système. Si par contre, les discussions sont longues et difficiles, que les commentaires concernent la vis de gauche qui fixe la plaque de sécurité ou sur la résistance aux rayonnements lorsque l'on se trouve à 2 années-lumière d'Alpha du Centaure, vous êtes sur la bonne voie.
La carte à micro-circuit a subi le deuxième scénario. Preuve pour ceux qui pourraient encore en douter que le système est promis à un grand avenir et les anecdotes concernant sa courte histoire peuvent déjà permettre de passer agréablement quelques longues soirées d'hiver. La plupart de ces anecdotes m'ont été racontées par Louis Guillou (CCETT) qui a longtemps oeuvré dans le domaine.
En fouillant dans mes archives, j'ai retrouvé un numéro de « le Masque et la Puce" de 1988 écrit par Louis Guillou et édité par le Centre Commun d'Etudes de Télédifusion et Télécommunications (ne cherchez pas, ça n'existe plus). Vous y trouverez des informations très intéressantes sur la normalisation, mais aussi sur la sécurité et sur les cartes sans émetteurs.
Les normes de la carte à micro-circuit
La norme définissant la carte à micro-circuit porte le numéro 7816. Cette norme comprend plusieurs parties :
- ISO7816-1 : caractéristiques physiques de la carte. Elle reprend la norme 7810 qui existait avant la carte à puce.
- ISO7816-2 : position des contacts sur la carte, taille des contacts, rôle des contacts.
- ISO7816-3 : description des signaux électriques, tensions et courants, protocoles de bas niveau, réponse à la RAZ.
- ISO7816-4 : commandes intersectorielles pour les échanges
- ISO7816-5 : enregistrement des fournisseurs d’applications
- ISO7816-6 : éléments de données intersectoriels pour les échanges
- ISO7816-7 : commandes pour un langage de requêtes
- ISO7816-8 : commandes intersectorielles pour une boite à outils crypto
- ISO7816-9 : commandes intersectorielles pour la gestion de la carte et des fichiers
- ISO7816-10 : remise à zéro et réponse à la RAZ pour les cartes en logiques câblées (cartes synchrones)
- ISO7816-11 : vérifications personnelles via des méthodes biométriques
- ISO7816-12 : interface électrique USB et procédures opératoires
- ISO7816-15 : Cryptographic information application
Dans les années 80, les principaux membres Participants étaient la France, le Japon, l'Allemagne, les Etats-Unis et le Royaume-uni. On y trouvait également l'Afrique du Sud, la Belgique, le Canada, l'Italie, la Norvège, la Hollande, la Suède et la Suisse. Au début de la normalisation, les membres de liaisons les plus actifs furent INTAMIC (International Association for Microcircuit Card), MASTERCARD International, VISA International, l'IATA (International Air Transport Association) et EUROCHEQUE.
Dans ce paragraphe, les commentaires ne faisant pas partie de la norme sont notés en italique.
ISO7816-1 - Dimension de la carte
Format | L x l | Epaisseur | |
ID-1 | 85,50 x 53,98 mm | 0,76 mm | La plupart des cartes bancaires, identité, santé... |
ID-2 | 105 x 74 mm | 0,76 mm | |
ID-3 | 125 x 88 mm | 0,76 mm | Passeports et VISAs |
ID-000 | 25 x 15 mm | 0,76 mm | Cartes SIM |
ISO7816-2 - Contacts et dimensions des contacts
Chaque contact doit avoir une surface rectangulaire minimale qui ne doit pas être inférieure à celle qui est spécifiée ci-dessous. Par contre, la forme et les dimensions maximales ne sont pas définies. En tout état de cause, il faut assurer une isolation correcte entre les contacts.
Dimension minimum des contacts
1,70 mm x 2,00 mm
Nombre et position des contacts
8 contacts nommés C1 à C8 ont été définis. Ils sont positionnés comme sur la figure ci-dessous. Ils peuvent se trouver sur le recto ou sur le verso de la carte mais dans tous les cas, les dimensions sont référencées par rapport au coin supérieur gauche de la face correspondante.
Position normalisée
A = 10.25 mm max E = 19.23 mm max
B = 12.25 mm min F = 20.93 mm min
C = 17.87 mm max G = 21.77 mm max
D = 19.87 mm min H = 23.47 mm min
I = 24.31 mm max
J = 26.01 mm min
K = 26.85 mm max
L = 28.55 mm min
Position française (également normalisée)
A = 10.25 mm max E = 09.07 mm max
B = 12.25 mm min F = 10.77 mm min
C = 17.87 mm max G = 11.61 mm max
D = 19.87 mm min H = 13.31 mm min
I = 14.15 mm max
J = 15.85 mm min
K = 16.69 mm max
L = 18.39 mm min
Cette position des contacts correspond à un développement et à une implémentation qui ont eu lieu avant la norme. Elle est connue sous le nom de "position transitoire".
Il s'agit d'un premier exemple de compromis tel qu'il est courant de le rencontrer dans la réglementation internationale.
A l'origine, les premières CAM ont été produites en France, avec les contacts sur le recto de la carte.
Cette position a suscité deux types de critique.
- La première, de nature technique, montre que les contacts placés juste au-dessus de la piste magnétique définie par une norme ISO risquaient d'altérer voire de démagnétiser la piste par échauffement. Il semble donc préférable de positionner le micro-circuit plus bas sur la carte pour éviter cet inconvénient.
- La deuxième plus polémique, souhaite différencier les deux faces de la carte en gardant pour chacune un caractère spécifique. Au recto, l'aspect commercial, au verso l'aspect technique.
La puce devrait donc se trouver au verso de la carte. Comme la piste se trouve sur la position supérieure, les contacts doivent se trouver au-dessous. Il faut donc la placer quelque part au centre, en pratique, au même endroit que celui proposé par la première critique au coté de la carte près.
La première critique peut paraître pleine de bon sens. Même si le risque de démagnétisation de la piste reste à démontrer, il est vrai que l'usinage de la carte s'en trouve compliqué. Il faut en effet insérer la puce dans l'épaisseur de la carte (qui est relativement faible) avec un trou non débouchant.
Pourquoi la France n'a-t-elle donc pas choisie cette position plutôt que celle qui est devenue la norme définitive ?
En plus de la piste dite ISO, certaines cartes françaises sont émises avec des pistes supplémentaires situées à peu près au milieu de la carte : les pistes TRANSAC. Que la puce se trouve en haut ou au milieu de la carte, le même problème se pose.
Pourquoi alors ne pas la placer en bas ?
Il se trouve que cette partie de la carte est réservée à l'embossage (n° ISO, identité dans le cas de la carte bancaire).
On voit donc que les seules positions qui restent possibles se situent entre le haut et le milieu de la carte. La position haute a finalement été adoptée en France parce que les coins de la carte sont plus rigides que le reste de la carte. La puce y est donc moins soumise aux déformations et la fiabilité du système s'en trouve améliorée.
La deuxième critique n'a pas été retenue par un certain nombre de pays et notamment par la France, en accord avec certains émetteurs de cartes de crédit international qui estimaient que la puce améliorant l'image commerciale de la carte, il y avait donc avantage à la placer sur le recto. D'autre part, la règle de la face technique avait déjà été transgressée. En effet, pour éviter que les cartes ne soient trop facilement reproductibles, certains émetteurs utilisaient un hologramme difficile à imiter. Cet hologramme situé sur le recto de la carte avait bien cependant une fonction technique.
Signification des contacts
Chaque contact a une signification précise donnée par la norme. Cette signification est donnée ci-dessous
C5 : Gnd (Masse)
C2 : RST (Ré-initialisation)
C6 : Vpp (Tension programmation)
C3 : CLK (Horloge)
C7 : I/O (Entrées-Sorties)
C4 : RFFU
C8 : RFFU
La carte est alimentée par les contacts C1 et C5. La ré-initialisation du processeur se fait en appliquant un signal sur le contact C2. Le contact C6 sert à fournir la tension de programmation pour l'EPROM (optionnel). Le contact C3 fourni l'horloge du système. Le contact C7 permet à la carte de communiquer avec le monde extérieur. Le dialogue se fait en bidirectionnel à l'alternat. Les contacts C4 et C8 sont réservés à un usage futur.
ISO7816-3 - Signaux électriques et protocole d'échange de données
La partie 3 de la norme ISO 7816-3 spécifie la structure des signaux et la structure des données échangées entre la carte et le monde extérieur lors d'une mise sous-tension ou d'une remise à zéro (RAZ). Par contre, la norme ne spécifie pas les commandes pouvant être adressée à une carte (la nomre ISO7816-4 en propose ainsi qu'une architecture de gestion de données).
Classes de mise en oeuvre
Originellement, la CAM n'était alimentée qu'en 5V. Les nouvelles technologies de composant permettent de fonctionner avec des tensions d'alimentation plus faible. La normalisation a pris en compte cette évolution et introduit plusieurs classes de mise en oeuvre.
- Classe A : 5 V
- Classe B : 3 V
Les cartes doivent fonctionner dans un de ces modes ou dans le mode AB (pour les cartes qui peuvent fonctionner en classe A et en classe B). La détermination de la classe par le coupleur se fait lors de la mise sous tension initiale. Le coupleur doit d'abord opérer en classe B et éventuellement, proposer la classe A selon la (non) réponse de la carte.
Mise en oeuvre de la carte
La norme précise que le mode opératoire décrit est valable pour toutes les CAM à contacts. Une session avec une CAM passe par les phases suivantes :
- activation des contacts par le dispositif d'interface,
- ré-initialisation de la carte,
- réponse à la ré-initialisation,
- commandes,
- désactivation des contacts.
Remarque :
- La ré-initialisation de la carte peut être généré par l'interface à n'importe quel moment (signal RAZ).
- les contacts sont désactivés quand la tension à leur borne est comprise entre 0 et 0.4 volts et le courant inférieur à 1 mA.
- La tension de programmation Vpp ne doit être fournie qu'à la demande de la carte. Vpp n'a de signification qu'en classe A. En classe B, ce contact est réservé à un usage futur.
Phase d'activation des contacts
L'activation des contacts ne doit s'opérer que lorsque tous les contacts de la carte sont correctement positionnés dans le connecteur. La procédure à suivre est la suivante :
- RST est à l'état bas,
- Vcc est actif (la carte est alimentée),
- l'interface est en mode réception sur le signal I/O,
- Vpp est au repos (en classe A),
- une horloge stable est fournie au contact CLK. Sa fréquence peut être comprise entre 1 et 5 MHz en classe A et 1 à 4 MHz en classe B.
Reset à froid de la carte
Deux cas de figures sont à distinguer selon que l'on travaille avec une "carte à réponse asynchrone" ou une "carte à réponse synchrone". Pour ne pas alourdir ce chapitre, nous ne décrirons ici que les cartes à réponse asynchrone qui sont les plus courantes sur le marché.
L'horloge état appliquée sur le contact CLK au temps Ta, la carte devra mettre le ligne I/O à l'état Z dans l'intervalle de 200 cycles d'horloge (ta).
La carte est réinitialisée en maintenant le signal RST à l'état bas au moins pendant 400 cycles d'horloge après que le signal CLK ait été appliqué.
Au temps Tb, le signal RST est retire (mis à l'état haut). La réponse de la carte doit parvenir dans un temps tc compris entre 400 et 40000 cycles d'horloge.
Si ce n'est pas le cas, RST doit être remis à l'état bas et les contacts doivent être désactivés.
Reset à chaud de la carte
Au temps Tc, RST est mis à l'état bas (reset de la carte) pendant au moins 400 cycles d'horloge (te).
Au temps Td, RST est désactivé. La réponse de la carte doit intervenir entre 400 et 40000 cycles d'horloge (tf) après la désactivation de RST.
Si ce n'est pas le cas, RST doit être remis à l'état bas et les contacts doivent être désactivés.
Si vous disposez d'une carte bancaire française émise vers 2000 jusqu'à 2007 environ, vous comprendrez l'utilité de ces deux Reset. Au premier, la carte se met en mode B4B0' (standard de la carte bancaire française jusqu'en 2007). Pour passer en EMV, il faut faire un reste à chaud. Pourquoi ? Explication personnelle : lorsque le standard EMV a été créé (1996) et jusqu'au début des années 2000, le principal pays émetteur de cartes bancaires à puce était la France. Et les cartes émises étaient conformes au standard M4B0 ou B4B0'. Il fallait donc assurer la compatibilité avec le parc existant sans prendre trop de risques avec les terminaux de paiement installés.
On notera que les anciens lecteurs ne permettaient pas toujours de faire un Reset à chaud
Commandes
Toutes les données échangées par l'intermédiaire de la ligne d'entrée/sortie correspondent à l'exécution de commandes. Seule, la demande de RESET passe par la ligne RST.
Durant l'exécution de la commande de la commande, l'attente d'un signal ne doit pas dépasser un délai maximum nommé "temps d'attente". S'il y a dépassement, il faut en conclure que la carte (ou l'interface) est muette.
La réponse à la commande RESET dépend du type de transmission (asynchrone ou synchrone).
Désactivation des contacts
Lorsque l'on ne souhaite plus dialoguer avec la carte ou quand une transaction est avortée, les contacts électriques doivent être désactivés.
La désactivation des contacts s'opère comme suit :
- état bas sur RST,
- état bas sur CLK,
- arrêt de la tension de programmation Vpp,
- état A sur la ligne d'entrée sortie (I/O),
- arrêt de la tension d'alimentation Vcc.
Réponse au RESET
On ne considère ici que la réponse en transmission asynchrone.
En réponse au Reset, la carte doit émettre une suite de caractères dont certains sont obligatoires et d'autres optionnels. Les caractères obligatoires sont TS et T0. Les caractères optionnels sont ceux définissant l'interface (TA(1), TB(1), TC(1), TD(1), TA(2), TB(2), TC(2), TD(2), TA(3), etc.), les caractères dits d'historique (T1 à TK). Un caractère de contrôle d'erreur TCK peut également être présent en final.
Lorsqu'un caractère TD(i) est présent, il code dans le quartet de poids faible le paramètre T dont les valeurs peuvent prendre les valeurs de 0 à 15.
Si T=0, la transmission se fera en asynchrone en mode "caractère » telle que spécifiée ci-après.
Si T=1, la transmission se fera en asynchrone en mode« bloc ».
Les autres valeurs de T sont également définies mais pas forcément spécifiées.
Durée de transmission d'un bit
Il y a une relation linéaire entre le Elementary Time Unit (etu) utilisé pour les transmissions et la fréquence fournie sur le contact CLK (horloge du système).
etu initial = 372/fi en secondes où fi est la fréquence initiale en MHz fournie par l'interface durant la réponse au RESET. Toutes les cartes doivent fonctionner quand fi est compris entre 1MHz et 5 MHz.
Ici encore, la valeur de la fréquence d'horloge a été l'objet de longs débats. Celle-ci a été proposée initialement par la France (3,579545 MHz) et il faut admettre qu'elle a de quoi laisser perplexe. Elle ne correspond pas aux fréquences couramment utilisées en téléinformatique et c'est bien sur ce point qu'elle a été critiquée. En effet, les valeurs couramment utilisées sont généralement un multiple du débit de la ligne en bits par seconde (en fait, un multiple de 32x16 ou 8x64 fois ce débit comme par exemple 4.9152 MHz pour 9600 bps). Alors pourquoi cette valeur ? Ce choix a été motivé par le fait que cette fréquence est couramment utilisée en télévision et que les quartz correspondants sont très courant donc très bon marché, beaucoup plus en tout cas que ceux utilisés en informatique. D'autre part, la dérive introduite par cette valeur par rapport à une transmission à 9600 bps est extrêmement faible (1%) ce qui est bien en deçà des dérives acceptées pour les transmissions en asynchrone. Même si cela n'avait pas été le cas, l'argument aurait eu une faible valeur dans la mesure le système de lecture fourni la fréquence à la carte et ils sont de ce fait synchronisé sur ce point.
Structure d'un caractère
Avant toute transmission d'un caractère, la ligne d'I/O doit être positionnée dans l'état Z. Un caractère est constitué de 10 bits : un bit START à l'état A, 8 bits d'information nommés ba à bh transportant un octet de données et un dixième bit bi de parité paire pour les détections des erreurs de transmission.
Pour un caractère, le temps compris entre le premier front du bit START et le dernier front du nième bit doit être égal à (n+/0,2) etu.
Le délai entre deux caractères consécutifs (entre deux bits START) est au moins de 12 etu, incluant la durée du caractère (10+/0,2) etu plus un temps de garde. Durant le temps de garde, l'interface et la carte doivent être tous les deux en réception (I/O dans l'état Z).
Un octet de donnée est constitué de 8 bits nommés b1 à b8, du bit le moins significatif (lsb, b1) au bit le plus significatif (msb, b8). Les conventions (signification des niveaux Z/A par rapport aux valeurs 0 et 1) et la signification des bits (relations entre ba-bh et b1-b8) sont spécifiées dans le premier caractère TS transmis par la carte en réponse au RESET. La parité est correcte lorsque le nombre de bits à 1 est paire dans la séquence allant de ba à bi.
Durant la réponse au RESET, le délai entre deux caractères consécutifs provenant de la carte ne doit pas être supérieur à 9600 etu encore appelée "temps d'attente initial (initial Waiting Time).
Détection d'erreur et répétition de caractères
La procédure décrite ici est obligatoire pour toutes les cartes utilisant le protocole T=0 (mode caractère). Le mode bloc (protocole T=1) propose un autre mécanisme.
L'émetteur teste la ligne d'I/O (11+/-0,2) etu après le premier front du bit START.
- si la ligne d'I/O est dans l'état Z, l'émetteur considère que le récepteur a reçu le caractère correctement.
- si la ligne d'I/O est dans l'état A, l'émetteur considère que le récepteur a mal reçu le dernier caractère. Il doit être ré-émis après un délai d'au moins 2 etu après la détection de l'indication d'erreur.
Le Récepteur recherche un bit START et échantillonne les bits qui suivent jusqu'au bit de parité qui doit être testé au vol. Si elle est incorrecte, le récepteur transmet un signal d'erreur dans l'état A à partir de (10,5+/-0.2) etu durant 1 etu au minimum et 2 etu au maximum. Suite à cela, il se met en réception pour récupérer le caractère répété.
Durant la réponse au RESET, cette procédure est obligatoire pour la carte mais optionnelle pour l'interface.
Avec cette dernière phrase, on sent là encore le compromis. Cette procédure fut très critiquée par certains pays (Japon, RFA) car elle ne correspondait pas au fonctionnement standard d'une UART (ce qui est vrai). Il faut toutefois admettre que l'interface carte avec son circuit de données bidirectionnel à l'alternat ne correspond pas non plus à une interface standard et que des adaptations sont de toute façon nécessaires. Dans la pratique, cette procédure (que l'on appelle par caractère ou T=0) a été complétée par une procédure par blocs (ou T=1) plus jolie intellectuellement. Car c'est bien de cela qu'il s'agit. Du point de vue de la transmission des données et du téléinformaticien, la procédure proposée par la France (en fait par BULL) en vaut bien une autre. Elle a l'énorme avantage d'être simple à programmer au niveau de la carte et donc de nécessiter peu d'octets ce qui n'est pas le cas d'une procédure par bloc (qui peut nécessiter plus d'octets en mémoire programme mais également en RAM).
Structure et contenu
L'opération de RESET provoque une réponse de la carte d'au plus 32 caractères : 2 caractères obligatoires TS et T0 pouvant éventuellement être suivis des caractères d'interfaces TAi, TBi, TCi, TDi et de caractères d'"historiques" T1, T2 à TK.
Les caractères d'interface spécifient les paramètres physiques du circuit intégré de la carte et les caractéristiques logiques des échanges de données qui suivront.
Les caractères d'historique indiquent, par exemple, qui est le constructeur de la carte, le type de composant qui y est inséré, le masque programme du composant, l'état de vie de la carte, etc...
Pour simplifier la notation, T0, TAi, ..., T1, ..., désigneront aussi bien les octets transmis par la carte que leur contenu.
Structure du caractère TS
Le caractère initial TS permet d'effectuer la synchronisation bit au niveau du circuit de données et définit les conventions de codage de octets de données pour les caractères suivants. Ces conventions se réfèrent à la norme IS0 1177.
Les deux valeurs possibles de TS sont :
- A(ZZAAAAAA)Z soit #3F : 1 correspond à A, ba correspond à b8 (convention inverse).
- A(ZZAZZZAA)Z soit #3B : 1 correspond à Z, ba correspond à b1 (convention directe).
En considérant la ligne d'I/O initialement dans l'état Z, la séquence de synchronisation bit (Z)AZZA permet à l'interface de déterminer la valeur de l'etu initialement utilisée par la carte. Un définition alternée de l'etu est le tiers du delai entre les deux premiers fronts descendants dans TS.
La suite de la réponse au RESET contient un nombre variable de caractères dans l'ordre suivant : T0, le caractère de format, TAi, TBi, TCi, TDi, les caractères d'interface, T1...TK, les caractères d'historique.
La présence des caractères d'interface est déterminé par la valeur de T0 :
Format du caractère T0
Les 4 bits de poids forts de T0 (b8 à b5) sont nommés Y1. Les bits de poids faibles (b4 à b0) indiquent le nombre (0 à 15) de caractères d'historique :
- b5 = 1 => TA1 est présent, absent sinon
- b6 = 1 => TB1 est présent, absent sinon
- b7 = 1 => TC1 est présent, absent sinon
- b8 = 1 => TD1 est présent, absent sinon
Les caractères TAi, TBi, TCi, TDi
Les 4 bits de poids forts de TDi nommés Yi+1 indiquent la présence des octets TAi+1, TBi+1, TCi+1 et TDi+1 selon le même mécanisme que celui décrit pour Y0. Exemple pour Y2 de l'octet TD1 :
- b5 = 1 => TA2 est présent, absent sinon
- b6 = 1 => TB2 est présent, absent sinon
- b7 = 1 => TC2 est présent, absent sinon
- b8 = 1 => TD2 est présent, absent sinon
Pour les octets d'interfaces qui ne sont pas transmis, l'interface doit utiliser les valeurs par défaut correspondantes (données plus loin).
Les caractères T1..TK
Les octets d'historique suivent le dernier octet d'interface transmis. La spécification de ces caractères n'est pas défini par la norme 7816-3.
Dans le cas de la carte M4, on trouve ici le numéro de masque, le mot chronologique, le type de composant, les status ME1 et ME2...
La réponse au RESET est terminée à la fin du temps de garde suivant la transmission du dernier caractère.
Spécification de TA1
Les 4 bits de poids fort de TA1 codent Fi, les 4 bits de poids faible codent Di. ces valeurs permettent de calculer un etu=(Fi/Di) x (1/f) avec fmin=1MHz La valeur par défaut pour FI est 5MHz
Spécification de TB1
TB1 code le courant maximum et la tension pour la programmation de la mémoire. Il faut considérer TB1 avec TB2 s'il est présent. Les bits 7 à 6 code le courant de programmation, les bits 5 à 1 la tension en volts de 5 à 25V. Une valeur à 0 signifie que la tension de programmation est gérée par le composant et Vpp n'est pas connecté..
Spécification de TC1
TC1 code la valeur du temps de garde sur 8 bits. La valeur par défaut est 0. 12etu(QxN/f) avec Q=F/D si T=15 est présent ou Q=Fi/Di si T=15 non présent.
Spécification de TD1
Les bits de poids faibles de TDi codent la valeur de T (protocole). Si TD1 est absent, T=0. Pour tout TDi présent les 4 bits de poids faibles représentent les valeurs possibles de T :
- T=0 : transmission asynchrone en mode caractère à l'alternat
- T=1 : transmission en asynchrone en mode bloc
- T=2 et 3 : réservés
- T=4 : transmission améliorée en asynchrone en mode caractère
- T=5 à T=13 : réservés
- T=14 : transmission non normalisée par le JTC 1 SC 17.
- T=15 : ne référence pas un mode de transmission mais seulement une interface« octet"
Spécification de TA2
TA2 code les possibilités de changement de mode.
Spécification de TB2
TB2 code la valeur en décivolt de la tension de programmation de 50 à 250. Voir TB1 pour plus de précision. si TB2 est présent, la valeur codée dans P11 doit être ignorée.
etc. Voir la norme pour une description plus précise des octets de mise sous tension.
Conclusion sur la norme ISO7816-3
Les paragraphes qui suivent donnent un aperçu de la norme. Cet aperçu est largement incomplet. La norme ISO7816-3 est une suite de compromis pour prendre en compte l'existant (celui de Bull) est les besoins nouveaux qui se sont sur-ajoutés. Le résultat est une norme particulièrement difficile à appréhender et dont la logique est parfois difficile à comprendre sauf si l'on a suivi son évolution depuis le début.
Heureusement, dans la plupart des cas, l'utilisateur d'une carte n'a pas à s'en soucier car le lecteur prend en charge l'essentiel des paramètres. Les cas courants où l'utilisateurs doit éventuellement prendre une décision concernent le paramètre T et le changement de mode. Beaucoup de cartes fonctionnent en T=0 (le protocole ici des premières cartes Bull). Les cartes allemandes fonctionnent généralement en T=1. Il peut être parfois nécessaire de changer de mode pour pouvoir utiliser au mieux certaines cartes teutonnes.
Le changement de mode (Reset à chaud) sera nécessaire pour certaines anciennes cartes bancaires françaises si vous souhaitez accéder au mode EMV. Un exercice des travaux pratiques illustre ce point
ISO7816-4
La norme ISO7816-3 est devenu assez illisible au cours du temps. La norme ISO7816-4 n'est pas mieux. Les travaux sur cette norme ont démarré à la fin des années 1980 lorsqu'il est devenu évident qu'il faudrait normaliser un ensemble d'ordres qui devraient être reconnus par toutes les cartes d'où son nom : commandes intersectorielles pour les échanges ». La première version de la norme date de 1995.
En fait, cette norme décrit un peu plus que des ordres. Elle s'intéresse également à la structure des données dans la carte. Les premières cartes étaient gérées comme une mémoire de masse que l'on gérerait secteur par secteur. Les cartes aux normes ISO7816-4 proposent un système de gestion de fichier avec des règles de contrôle d'accès complètes. Elle propose en particulier un codage de type TLV (Type, Longueur, Valeur ou en anglais, Tag, Length, Value).
Les paragraphes qui suivent donnent un très rapide aperçu de quelques points clés de la norme
Structures de données
Les structures de fichiers définies dans la norme sont les suivantes :
Une carte peut avoir un Master File (MF) auxquels de raccrochent des Dedicated File (DF) ou des Elementary Files (EF). Les DF peuvent être la racine d'autres DF et d'EF. Les EF ne peuvent pas être la racine d'autres fichiers. On a donc une structure de fichier hiérarchique classique dans l'informatique
Les EF peuvent avoir plusieurs structures (transparents, enregistrements de taille fixe, fichiers circulaires, etc. Des descripteurs permettent de savoir de quel type de fichier il s'agit, de l'état dans lequel il se trouve (créé, désactivé...), des modes d'accès (accès libre, contrôlé par un code porteur, contrôlé par une authentification dynamique...) pour les différentes fonctions possibles (création, effacement, lecture, écriture...). On le voie, les possibilités sont importantes.
Il existe des façons d'accéder à ces différents éléments, par des noms longs ou courts et des numéros d'enregistrements.
Commandes
Le tableau qui suit donne la liste des commandes définies dans la version 2003 de la norme. Dans le tableau de gauche, elles sont classées par ordre alphabétiques. Dans celui de droite, par valeur du code instruction de la commande.
LECTEURS DE CARTES
Les CAM communiquent avec l'environnement par l'intermédiaire de lecteurs ou, pour être plus précis, de lecteurs-encodeurs. En effet, à l'inverse de ce que l'on trouve dans le monde des cartes à pistes magnétiques pour lesquelles il existe des systèmes permettant la lecture de la piste (lecteur) et des systèmes permettant à la fois de lire et d'écrire (lecteurs-encodeurs), il est rare que l'on puisse utiliser une CAM sans que le lecteur sache également écrire, ou au moins, offrir à la carte la possibilité de modifier sa mémoire. Dans la suite de ce chapitre, on considérera que tous les lecteurs sont des lecteurs-encodeurs.
Pour ceux qui sont intéressés par les premières générations de lecteurs, ils peuvent consulter la page suivante.
ANATOMIE D'UN LECTEUR DE CAM
Schématiquement, un lecteur de CAM se compose de trois sous-ensembles :
- le connecteur,
- le coupleur,
- l'unité de traitement.
Le connecteur
Le connecteur est un élément mécanique assurant la liaison électrique entre les contacts de la carte et le coupleur devant offrir les caractéristiques suivantes :
- assurer le guidage de la carte de façon à assurer un positionnement correct de ses contacts,
- assurer la liaison électrique entre les contacts et le coupleur,
- autoriser ou non l'activation des contacts de la carte, celle-ci ne devant avoir lieu que lorsque les contacts du connecteurs sont correctement positionnées par rapport à ceux de la carte,
- il ne doit pas risque d'entraîner une détérioration du support plastique, que ce soit par torsion ou par frottement excessif.
Plusieurs méthodes sont utilisés de la plus simple à la plus sophistiquée.
Connecteur à balais
Le connecteur se présente sous la forme d'un boîtier parallélépipédique de dimension légèrement supérieure à celle de la carte. Une fente permet l'introduction de la carte qui est naturellement guidée par les cotés du boîtier. Des contacts à balais viennent frotter sur la carte. Lorsque celle-ci arrive en butée, les balais sont exactement positionnés sur les contacts de la carte (à condition que celle-ci ait été introduite dans le bon sens !). L'autorisation d'activation des contacts peut être faite par un micro-interrupteur à faible course ou par un dispositif opto-électronique.
Ce type de connecteur présente l'avantage d'avoir un encombrement réduit, d'être simple à fabriquer et d'offrir une bonne robustesse étant donné l'absence de pièces en mouvement. Le fait que les balais frottent sur la carte permet d'arracher la couche d'oxyde qui aurait pu se former sur les contacts de la carte. Par contre, ce frottement tend à rayer le support plastique et peut à la longue encrasser les balais et par contre coup, encrasser les contacts de la carte.
Connecteurs à mâchoires
Ce type de connecteur comporte un certain nombre d'éléments mobiles décrits ci-dessous :
- un boîtier plastique forme le corps du connecteur. Il présente une fente en sa face avant pour l'introduction de la carte,
- à l'intérieur de ce boîtier se trouve un chariot mobile guidé par des rails. Au repos, ce chariot est positionné à l'extrémité du boîtier où se trouve la fente. Ce chariot comporte également un aimant dont nous verrons l'usage par la suite.
- Une mâchoire comportant des contacts est placé sur le chariot. Au repos, cette mâchoires est maintenue ouverte grâce à un ressort de rappel. Lorsque le chariot se déplace vers l'arrière du boîtier, la mâchoire se referme.
la carte est insérée dans la fente du boîtier et poussée dans le connecteur. Elle se place sur le chariot et tend à l'entraîner vers l'arrière du boîtier. La mâchoire se referme et vient positionner ses contacts sur ceux de la carte. Le jeu mécanique du système introduit un léger frottement permettant d'arracher la couche d'oxyde qui aurait pu se former. Si l'on continue de pousser la carte, l'ensemble chariot, mâchoire et carte se déplacent vers le fond du boîtier jusqu'à arriver en butée. L'activation des contacts est autorisée par un relais magnétique qui réagi au champ de l'aimant placé sur le chariot. Lorsque celui-ci arrive à une certaine distance du relais, celui se ferme et les contacts de la carte peuvent être activés. La précision n'a pas besoin d'être parfaite car la carte est correctement placée quasiment dès son introduction.
Ce type de connecteur a été fabriqué par la société Bull-CP8. Il présentait l'avantage de ne pas détériorer le support de la carte avec pour corollaire le fait de ne pas encrasser les contacts du connecteur puisque ceux-ci ne frottaient pas sur le support plastique. Il était par contre très volumineux ce qui empêchait son utilisation dans des équipements miniaturisés et relativement complexe à fabriquer étant donné le nombre de pièces entrant dans sa composition.
Les connecteurs venant d'être décrits ne concernent que des systèmes à insertion manuelle de la carte. D'autres procédés existent pour des équipements motorisés.
Les coupleurs
Le coupleur est le dispositif électronique destiné à gérer l'interface carte. Réalisé en élément discret à l'époque héroïque de la CAM, on trouve désormais des dispositifs intégrés relativement miniaturisé. Généralement, le coupleur offre les fonctions suivantes :
- génération de l'horloge. Elle et généralement fixe et vaut la valeur de base fixée par la norme,
- génération des tensions et courant de programmation,
- gestion de la ligne d'entrée-sortie.
L'avènement des cartes comportant leur propre générateur de tension a permis la réalisation de coupleurs simplifiés ne gérant pas la tension de programmation (Vpp n'est plus utilisé).
L'unité de traitement
L'unité de traitement gère le coupleur et le programme en fonction des octets systèmes que celle-ci fournie lors de la remise à zéro. Elle gère également le dialogue avec le système auquel est raccordé le lecteur de carte. De cette façon, ce dernier n'a pas à se préoccuper des caractéristiques physiques de la carte.
Les lecteurs de table
Sous cette appellation, on trouve des lecteurs raccordables à des systèmes informatiques via une ligne asynchrone ou une prise USB. Ils disposent de leur propre alimentation pour les plus anciens ou sont directement alimentés par l'USB pour les lecteurs actuels.
Certains d'entre-eux sont programmables.
Les lecteurs portables
Ces lecteurs sont généralement munis d'un clavier et d'un afficheur LCD. Ils disposent de batteries rechargeables ou parfois une simple pile leur donnant une certaine autonomie et sont raccordables à un système informatique via une ligne asynchrone ou une prise USB. Les premiers lecteurs étaient tous programmables. Dans les années 1990, la plupart étaient programmables ce qui leur permettaient d'adresser plusieurs types de marchés.
Depuis le milieu des années 2000, avec la baisse de coût de production des appareils électroniques et la généralisation des cartes, on trouve de plus en plus de lecteurs dédiés (par exemple, pour lire le contenu de sa carte, pour générer des mot de passe à usage unique, etc.).
Les lecteurs à intégrer
Il s'agit le plus souvent de lecteurs OEM destinés à être intégrés dans d'autres équipements. Ils ne disposent pas d'alimentation en propre et ne sont généralement pas programmables. Certains d'entre eux sont motorisés et peuvent également lire les cartes à piste magnétiques. Dans cette catégorie, on se souvient que dans les années 1990 existait également une offre de lecteurs intégrables dans des micro-ordinateurs qui pour certains se branchait directement sur le bus. Souvent, la partie visible avait l'apparence et les dimensions d'un lecteur de disquette et pouvait donc être installés en face avant de l'ordinateur.
Philips-TRT proposait même un ensemble complet de contrôle d'accès qui empêchait le PC de démarrer le système d'exploitation tant que l'utilisateur ne s'était pas correctement authentifié (la carte additionnelle gérant le lecteur prenait la main sur le bus du PC).
En 1997, Microsoft avait annoncé que le prochain périphérique standard des compatibles PC serait le lecteur de carte. Pour cette raison, Microsoft avait décidé d'intégrer dans son système d'exploitation Windows les primitives permettant à un programme de dialoguer de façon transparente avec des cartes. Pour être d'un coût abordable, le lecteur cible annoncé se résumait quasiment à un simple connecteur. La partie coupleur et unité de traitement était directement gérée par le système d'exploitation, une UART du PC fournissant les signaux nécessaire au dialogue avec la carte.
Au final, cette intégration a donné le PC/SC et en pratique, les lecteurs ont directement été intégrés dans des périphériques USB.
Dialogue lecteur-carte
Lorsqu'il est dit « transparent », le lecteur n'est qu'un intermédiaire entre une unité centrale (UC) et la carte. La procédure de liaison de données permettant à l'UC de communiquer avec le lecteur est en général très simple et permet :
- de mettre la carte sous ou hors tension. Ces ordres sont directement interprétés par le lecteur et sont les seuls pour lesquels il n'est pas transparent,
- d'émettre des ordres élémentaires à la carte et d'en recevoir les réponses.
Ces lecteurs sont bien adaptés à des applications pour lesquelles toute l'intelligence peut être ramenée au niveau de l'UC.
Il a existé de nombreux lecteurs de ce type dans le passé et il en existe encore plus dans les années 2010. Pour ceux qui s'intéressent aux premiers lecteurs, ils pourront jeter un oeil sur les pages de ce site consacré à ce sujet Suivez ce lien.
Un lecteur a eu une destinée particulier et mérite d'être mentionné : il s'agit du TLP224 de Bull-CP8. Sa procédure de liaison est devenu un standard adopté par de nombreux concurrents.
Les lecteurs doivent normalement être conforme à la norme ISO concernant les CAM. Ce n'est malheureusement pas toujours le cas. Les principaux problèmes rencontrés sont les suivants :
- Certaines cartes (anciennes) nécessitent une tension de programmation sur le contact Vpp. La norme prévoit que la valeur de cette tension se situe dans un intervalle [Vmin, Vmax] avec un pas de 0,1 volt. Beaucoup des premiers lecteurs disposaient d'un générateur de tension fonctionnant par pas de 1 volt. Les cartes demandant un Vpp de 12,5 volts (par exemple) n'étaient donc pas acceptées.
- Certains lecteurs ne supportent que les cartes travaillant dans une certaine convention (inverse ou directe, cf chapitre sur la normalisation).
- Certains connecteurs n'acceptent pas les puces en position basse (ou en position haute).
- Beaucoup de lecteurs ne savent travailler qu'avec des cartes asynchrones (qui sont devenues les plus courantes, heureusement).
- Certains lecteurs « mangent » une partie des octets émis par la carte lors de la mise sous tension ce qui complique leur reconnaissance.
Heureusement, la généralisation des applications bancaires à travers l'adoption de la norme EMV et la simplification que cela a occasionné (EMV utilise un sous-ensemble de la norme) fait que finalement, la conformité à EMV a été recherché par la plupart des acteurs ce qui garanti, au moins pour les cartes avec contacts, une certaines garantie d'interopérabilité
On notera que pour des raisons de sécurité, certains lecteurs dits transparents ne le sont pas tout à fait. il s'agit en particulier des lecteurs disposant d'un écran-clavier
Pendant une vingtaine d'années, les tenants de la sécurité prônaient que la saisie du code porteur devait être faite localement sans que le PIN circule sur l'ordinateur auquel il était raccordé.
Cela impliquait généralement de disposer de lecteurs programmables afin de pouvoir leurs faire exécuter la séquence d'ordres nécessaires à la saisie et la présentation du PIN à la carte
Cette volonté partait certes d'un bon sentiment (et accessoirement, d'une bonne vision de la sécurité) mais oubliait complètement l'aspect économique des choses : les lecteurs programmables coûtaient chers.
Au final, beaucoup de projets ont capoté a cause de cette obstination et beaucoup d'énergie a été dépensée pour définir le « futur » standard de lecteur programmable (j'en a connu pas mal le TLP124, le LECAM et ses concurrents, Cybercom, Finread...).
Evidemment, les tenants de cette solution avaient raison... mais beaucoup trop tôt. Il aura fallu attendre la fin des années 2000 pour voir apparaître des lecteurs très bon marché et des standards suffisamment stables pour que ce type de lecteur soit économiquement viable
Ces lecteurs ne sont donc plus complètement transparents puisqu'ils exercent leur intelligence lors des saisie et présentation de code. Bien sûr, cela ne marche que si les applications sont conçues pour. Si elles demandent elles-mêmes le code porteur dans une fenêtre de saisie sur le PC de l'utilisateur, cela annule l'intérêt de disposer d'un tel lecteur. Et il suffit qu'il soit saisie une fois sur le PC pour que le code soit potentiellement compromis (du moins, selon la politique de sécurité qui interdit cette saisie).
Malheureusement, dans un environnement grand public, il est très difficile de maitriser les multiples applications qui pourraient accéder à la carte et il est encore plus difficile de maîtriser un éventuel malware qui se faisant passer pour une application légitime, demandera à l'utilisateur de saisir son code porteur dans une fenêtre idoine, ce que l'utilisateur ne manquera pas de faire, à moins d'avoir été particulièrement bien éduqué ou d'être un paranoïaque accompli
Le débat sur le sujet est donc loin d'être clos en 2012.