*1/ Un APDU ou Application Protocol Data Unit est un message échangé entre une carte à puce et un lecteur de carte à puce. Il est normalisé et décrit dans l'ISO 7816 (4ème partie. *2/ Java Card est un système d'exploitation pour carte à puce qui fournit essentiellement un environnement d'exécution pour un sous-ensemble du langage Java spécifiquement destiné aux applications pour carte à puce. Java Card permet l'exécution d'applications au sein des cartes à puce, qui offrent des capacités de mémoire et de traitement limitées. De multiples applications peuvent être déployées avant et même après que la carte à puce a été fournie à l'utilisateur final. Les applications écrites dans le langage de programmation Java peuvent être exécutées en toute sécurité sur l’ensemble des types de cartes disponibles sur le marché.
Après la réinitialisation, la communication entre le terminal et la carte fonctionne avec les APDU (Application Protocol Data Unit).
Voici un tableau regroupant les réponses APDU avec leur description pour le traitement EMV :
Types de réponse APDU:
- (I) Info
- (W) Warning
- (E) Error
- (S) Security
SW1 | SW2 | Type de réponse | Info (EN) | Info (FR) |
---|---|---|---|---|
6 | E | Class not supported. | Classe non prise en charge. | |
61 | — | I | Response bytes still available | Octets de réponse toujours disponibles |
61 | XX | I | Command successfully executed; ‘XX’ bytes of data are available and can be requested using GET RESPONSE. | Commande exécutée avec succès; «XX» octets de données sont disponibles et peuvent être demandés à l'aide de GET RESPONSE. |
62 | — | W | State of non-volatile memory unchanged | État de la mémoire non volatile inchangé |
62 | 0 | W | No information given (NV-Ram not changed) | Aucune information donnée (NV-Ram non modifié) |
62 | 1 | W | NV-Ram not changed 1. | NV-Ram non modifié 1. |
62 | 81 | W | Part of returned data may be corrupted | Une partie des données renvoyées peut être corrompue |
62 | 82 | W | End of file/record reached before reading Le bytes | Fin de fichier / enregistrement atteinte avant la lecture de Le bytes |
62 | 83 | W | Selected file invalidated | Fichier sélectionné invalidé |
62 | 84 | W | Selected file is not valid. FCI not formated according to ISO | Le fichier sélectionné n'est pas valide. FCI non formaté selon ISO |
62 | 85 | W | No input data available from a sensor on the card. No Purse Engine enslaved for R3bc | Aucune donnée d'entrée disponible à partir d'un capteur sur la carte. Aucun moteur de bourse asservi pour R3bc |
62 | A2 | W | Wrong R-MAC | Mauvais R-MAC |
62 | A4 | W | Card locked (during reset( )) | Carte verrouillée (pendant la réinitialisation ()) |
62 | CX | W | Counter with value x (command dependent) | Compteur avec valeur x (dépendant de la commande) |
62 | F1 | W | Wrong C-MAC | Mauvais C-MAC |
62 | F3 | W | Internal reset | Réinitialisation interne |
62 | F5 | W | Default agent locked | Agent par défaut verrouillé |
62 | F7 | W | Cardholder locked | Titulaire de la carte verrouillé |
62 | F8 | W | Basement is current agent | Le sous-sol est l'agent actuel |
62 | F9 | W | CALC Key Set not unblocked | Jeu de clés CALC non débloqué |
62 | FX | W | – | - |
62 | XX | W | RFU | RFU |
63 | — | W | State of non-volatile memory changed | L'état de la mémoire non volatile a changé |
63 | 0 | W | No information given (NV-Ram changed) | Aucune information donnée (NV-Ram changé) |
63 | 81 | W | File filled up by the last write. Loading/updating is not allowed. | Fichier rempli par la dernière écriture. Le chargement / la mise à jour n'est pas autorisé. |
63 | 82 | W | Card key not supported. | Clé de carte non prise en charge. |
63 | 83 | W | Reader key not supported. | Clé de lecteur non prise en charge. |
63 | 84 | W | Plaintext transmission not supported. | La transmission en texte brut n'est pas prise en charge. |
63 | 85 | W | Secured transmission not supported. | La transmission sécurisée n'est pas prise en charge. |
63 | 86 | W | Volatile memory is not available. | La mémoire volatile n'est pas disponible. |
63 | 87 | W | Non-volatile memory is not available. | La mémoire non volatile n'est pas disponible. |
63 | 88 | W | Key number not valid. | Numéro de clé non valide. |
63 | 89 | W | Key length is not correct. | La longueur de clé n'est pas correcte. |
63 | C0 | W | Verify fail, no try left. | Vérifiez l'échec, aucun essai n'est laissé. |
63 | C1 | W | Verify fail, 1 try left. | Vérifiez l'échec, 1 essai à gauche. |
63 | C2 | W | Verify fail, 2 tries left. | Vérifiez l'échec, il reste 2 essais. |
63 | C3 | W | Verify fail, 3 tries left. | Vérifiez l'échec, il reste 3 essais. |
63 | CX | W | The counter has reached the value ‘x’ (0 = x = 15) (command dependent). | Le compteur a atteint la valeur 'x' (0 = x = 15) (en fonction de la commande). |
63 | F1 | W | More data expected. | Plus de données attendues. |
63 | F2 | W | More data expected and proactive command pending. | Plus de données attendues et commande proactive en attente. |
63 | FX | W | – | - |
63 | XX | W | RFU | RFU |
64 | — | E | State of non-volatile memory unchanged | État de la mémoire non volatile inchangé |
64 | 0 | E | No information given (NV-Ram not changed) | Aucune information donnée (NV-Ram non modifié) |
64 | 1 | E | Command timeout. Immediate response required by the card. | Délai d'expiration de la commande. Réponse immédiate requise par la carte. |
64 | XX | E | RFU | RFU |
65 | — | E | State of non-volatile memory changed | L'état de la mémoire non volatile a changé |
65 | 0 | E | No information given | Aucune information donnée |
65 | 1 | E | Write error. Memory failure. There have been problems in writing or reading the EEPROM. Other hardware problems may also bring this error. | Erreur d'écriture. Panne de mémoire. Il y a eu des problèmes d'écriture ou de lecture de l'EEPROM. D'autres problèmes matériels peuvent également entraîner cette erreur. |
65 | 81 | E | Memory failure | Panne de mémoire |
65 | FX | E | – | - |
65 | XX | E | RFU | RFU |
66 | — | S | ||
66 | 0 | S | Error while receiving (timeout) | Erreur lors de la réception (délai d'attente) |
66 | 1 | S | Error while receiving (character parity error) | Erreur lors de la réception (erreur de parité des caractères) |
66 | 2 | S | Wrong checksum | Somme de contrôle incorrecte |
66 | 3 | S | The current DF file without FCI | Le fichier DF actuel sans FCI |
66 | 4 | S | No SF or KF under the current DF | Aucun SF ou KF sous le DF actuel |
66 | 69 | S | Incorrect Encryption/Decryption Padding | Rembourrage de chiffrement / déchiffrement incorrect |
66 | XX | S | – | - |
67 | — | E | ||
67 | 0 | E | Wrong length | Mauvaise longueur |
67 | XX | E | length incorrect (procedure)(ISO 7816-3) | longueur incorrecte (procédure) (ISO 7816-3) |
68 | — | E | Functions in CLA not supported | Fonctions dans CLA non prises en charge |
68 | 0 | E | No information given (The request function is not supported by the card) | Aucune information fournie (la fonction de demande n'est pas prise en charge par la carte) |
68 | 81 | E | Logical channel not supported | Canal logique non pris en charge |
68 | 82 | E | Secure messaging not supported | Messagerie sécurisée non prise en charge |
68 | 83 | E | Last command of the chain expected | Dernière commande de la chaîne attendue |
68 | 84 | E | Command chaining not supported | Chaînage de commandes non pris en charge |
68 | FX | E | – | - |
68 | XX | E | RFU | RFU |
69 | — | E | Command not allowed | Commande non autorisée |
69 | 0 | E | No information given (Command not allowed) | Aucune information donnée (commande non autorisée) |
69 | 1 | E | Command not accepted (inactive state) | Commande non acceptée (état inactif) |
69 | 81 | E | Command incompatible with file structure | Commande incompatible avec la structure des fichiers |
69 | 82 | E | Security condition not satisfied. | Condition de sécurité non satisfaite. |
69 | 83 | E | Authentication method blocked | Méthode d'authentification bloquée |
69 | 84 | E | Referenced data reversibly blocked (invalidated) | Données référencées bloquées de manière réversible (invalidées) |
69 | 85 | E | Conditions of use not satisfied. | Conditions d'utilisation non satisfaites. |
69 | 86 | E | Command not allowed (no current EF) | Commande non autorisée (pas d'EF actuel) |
69 | 87 | E | Expected secure messaging (SM) object missing | Objet de messagerie sécurisée (SM) attendu manquant |
69 | 88 | E | Incorrect secure messaging (SM) data object | Objet de données de messagerie sécurisée (SM) incorrect |
69 | 8D | Reserved | Réservé | |
69 | 96 | E | Data must be updated again | Les données doivent être mises à jour à nouveau |
69 | E1 | E | POL1 of the currently Enabled Profile prevents this action. | POL1 du profil actuellement activé empêche cette action. |
69 | F0 | E | Permission Denied | Permission refusée |
69 | F1 | E | Permission Denied – Missing Privilege | Autorisation refusée - Privilège manquant |
69 | FX | E | – | - |
69 | XX | E | RFU | RFU |
6A | — | E | Wrong parameter(s) P1-P2 | Mauvais paramètre (s) P1-P2 |
6A | 0 | E | No information given (Bytes P1 and/or P2 are incorrect) | Aucune information donnée (les octets P1 et / ou P2 sont incorrects) |
6A | 80 | E | The parameters in the data field are incorrect. | Les paramètres du champ de données sont incorrects. |
6A | 81 | E | Function not supported | Fonction non prise en charge |
6A | 82 | E | File not found | Fichier non trouvé |
6A | 83 | E | Record not found | Enregistrement non trouvé |
6A | 84 | E | There is insufficient memory space in record or file | L'espace mémoire est insuffisant dans l'enregistrement ou le fichier |
6A | 85 | E | Lc inconsistent with TLV structure | Lc incompatible avec la structure TLV |
6A | 86 | E | Incorrect P1 or P2 parameter. | Paramètre P1 ou P2 incorrect. |
6A | 87 | E | Lc inconsistent with P1-P2 | Lc incompatible avec P1-P2 |
6A | 88 | E | Referenced data not found | Données référencées non trouvées |
6A | 89 | E | File already exists | Le fichier existe déjà |
6A | 8A | E | DF name already exists. | Le nom DF existe déjà. |
6A | F0 | E | Wrong parameter value | Valeur de paramètre incorrecte |
6A | FX | E | – | - |
6A | XX | E | RFU | RFU |
6B | — | E | ||
6B | 0 | E | Wrong parameter(s) P1-P2 | Mauvais paramètre (s) P1-P2 |
6B | XX | E | Reference incorrect (procedure byte), (ISO 7816-3) | Référence incorrecte (octet de procédure), (ISO 7816-3) |
6C | — | E | Wrong length Le | Longueur incorrecte Le |
6C | 0 | E | Incorrect P3 length. | Longueur P3 incorrecte. |
6C | XX | E | Bad length value in Le; ‘xx’ is the correct exact Le | Mauvaise valeur de longueur dans Le; 'xx' est le Le exact exact |
6D | — | E | ||
6D | 0 | E | Instruction code not supported or invalid | Code d'instruction non pris en charge ou non valide |
6D | XX | E | Instruction code not programmed or invalid (procedure byte), (ISO 7816-3) | Code d'instruction non programmé ou invalide (octet de procédure), (ISO 7816-3) |
6E | — | E | ||
6E | 0 | E | Class not supported | Classe non prise en charge |
6E | XX | E | Instruction class not supported (procedure byte), (ISO 7816-3) | Classe d'instructions non prise en charge (octet de procédure), (ISO 7816-3) |
6F | — | E | Internal exception | Exception interne |
6F | 0 | E | Command aborted – more exact diagnosis not possible (e.g., operating system error). | Commande abandonnée - un diagnostic plus précis n'est pas possible (par exemple, erreur du système d'exploitation). |
6F | FF | E | Card dead (overuse, …) | Carte morte (surutilisation,…) |
6F | XX | E | No precise diagnosis (procedure byte), (ISO 7816-3) | Pas de diagnostic précis (octet de procédure), (ISO 7816-3) |
9- | — | |||
90 | 0 | I | Command successfully executed (OK). | Commande exécutée avec succès (OK). |
90 | 4 | W | PIN not succesfully verified, 3 or more PIN tries left | Le code PIN n'a pas été vérifié avec succès, il reste 3 tentatives de code PIN ou plus |
90 | 8 | Key/file not found | Clé / fichier introuvable | |
90 | 80 | W | Unblock Try Counter has reached zero | Débloquer Try Counter a atteint zéro |
91 | 0 | OK | D'accord | |
91 | 1 | States.activity, States.lock Status or States.lockable has wrong value | States.activity, States.lock Status ou States.lockable a une valeur incorrecte | |
91 | 2 | Transaction number reached its limit | Le numéro de transaction a atteint sa limite | |
91 | 0C | No changes | Aucun changement | |
91 | 0E | Insufficient NV-Memory to complete command | Mémoire NV insuffisante pour terminer la commande | |
91 | 1C | Command code not supported | Code de commande non pris en charge | |
91 | 1E | CRC or MAC does not match data | CRC ou MAC ne correspond pas aux données | |
91 | 40 | Invalid key number specified | Numéro de clé non valide spécifié | |
91 | 7E | Length of command string invalid | Longueur de la chaîne de commande non valide | |
91 | 9D | Not allow the requested command | Ne pas autoriser la commande demandée | |
91 | 9E | Value of the parameter invalid | Valeur du paramètre non valide | |
91 | A0 | Requested AID not present on PICC | AID demandé non présent sur PICC | |
91 | A1 | Unrecoverable error within application | Erreur irrécupérable dans l'application | |
91 | AE | Authentication status does not allow the requested command | L'état d'authentification n'autorise pas la commande demandée | |
91 | AF | Additional data frame is expected to be sent | Une trame de données supplémentaire devrait être envoyée | |
91 | BE | Out of boundary | Hors limites | |
91 | C1 | Unrecoverable error within PICC | Erreur irrécupérable dans PICC | |
91 | CA | Previous Command was not fully completed | La commande précédente n'était pas complètement terminée | |
91 | CD | PICC was disabled by an unrecoverable error | PICC a été désactivé par une erreur irrécupérable | |
91 | CE | Number of Applications limited to 28 | Nombre de demandes limité à 28 | |
91 | DE | File or application already exists | Le fichier ou l'application existe déjà | |
91 | EE | Could not complete NV-write operation due to loss of power | Impossible de terminer l'opération d'écriture NV en raison d'une panne de courant | |
91 | F0 | Specified file number does not exist | Le numéro de fichier spécifié n'existe pas | |
91 | F1 | Unrecoverable error within file | Erreur irrécupérable dans le fichier | |
92 | 0x | I | Writing to EEPROM successful after ‘x’ attempts. | L'écriture dans l'EEPROM a réussi après les tentatives de «x». |
92 | 10 | E | Insufficient memory. No more storage available. | Mémoire insuffisante. Plus de stockage disponible. |
92 | 40 | E | Writing to EEPROM not successful. | L'écriture dans l'EEPROM n'a pas réussi. |
93 | 1 | Integrity error | Erreur d'intégrité | |
93 | 2 | Candidate S2 invalid | Candidat S2 invalide | |
93 | 3 | E | Application is permanently locked | L'application est verrouillée en permanence |
94 | 0 | E | No EF selected. | Aucun EF sélectionné. |
94 | 1 | Candidate currency code does not match purse currency | Le code de devise du candidat ne correspond pas à la devise de la bourse | |
94 | 2 | Candidate amount too high | Montant du candidat trop élevé | |
94 | 2 | E | Address range exceeded. | Plage d'adresses dépassée. |
94 | 3 | Candidate amount too low | Montant du candidat trop faible | |
94 | 4 | E | FID not found, record not found or comparison pattern not found. | FID introuvable, enregistrement introuvable ou modèle de comparaison introuvable. |
94 | 5 | Problems in the data field | Problèmes dans le domaine des données | |
94 | 6 | E | Required MAC unavailable | MAC requis indisponible |
94 | 7 | Bad currency : purse engine has no slot with R3bc currency | Mauvaise devise: le moteur de la bourse n'a pas de slot avec la devise R3bc | |
94 | 8 | R3bc currency not supported in purse engine | La devise R3bc n'est pas prise en charge dans le moteur de bourse | |
94 | 8 | E | Selected file type does not match command. | Le type de fichier sélectionné ne correspond pas à la commande. |
95 | 80 | Bad sequence | Mauvaise séquence | |
96 | 81 | Slave not found | Esclave introuvable | |
97 | 0 | PIN blocked and Unblock Try Counter is 1 or 2 | PIN bloqué et débloquer Try Counter est 1 ou 2 | |
97 | 2 | Main keys are blocked | Les touches principales sont bloquées | |
97 | 4 | PIN not succesfully verified, 3 or more PIN tries left | Le code PIN n'a pas été vérifié avec succès, il reste 3 tentatives de code PIN ou plus | |
97 | 84 | Base key | Touche de base | |
97 | 85 | Limit exceeded – C-MAC key | Limite dépassée - clé C-MAC | |
97 | 86 | SM error – Limit exceeded – R-MAC key | Erreur SM - Limite dépassée - Touche R-MAC | |
97 | 87 | Limit exceeded – sequence counter | Limite dépassée - compteur de séquences | |
97 | 88 | Limit exceeded – R-MAC length | Limite dépassée - longueur R-MAC | |
97 | 89 | Service not available | Service non disponible | |
98 | 2 | E | No PIN defined. | Aucun code PIN défini. |
98 | 4 | E | Access conditions not satisfied, authentication failed. | Les conditions d'accès ne sont pas remplies, l'authentification a échoué. |
98 | 35 | E | ASK RANDOM or GIVE RANDOM not executed. | ASK RANDOM ou GIVE RANDOM non exécuté. |
98 | 40 | E | PIN verification not successful. | La vérification du code PIN n'a pas réussi. |
98 | 50 | E | INCREASE or DECREASE could not be executed because a limit has been reached. | AUGMENTER ou DIMINUER n'a pas pu être exécuté car une limite a été atteinte. |
98 | 62 | E | Authentication Error, application specific (incorrect MAC) | Erreur d'authentification, spécifique à l'application (MAC incorrect) |
99 | 0 | 1 PIN try left | 1 PIN essayer à gauche | |
99 | 4 | PIN not succesfully verified, 1 PIN try left | PIN non vérifié avec succès, 1 PIN essayer à gauche | |
99 | 85 | Wrong status – Cardholder lock | Mauvais état - Verrouillage du titulaire de la carte | |
99 | 86 | E | Missing privilege | Privilège manquant |
99 | 87 | PIN is not installed | Le code PIN n'est pas installé | |
99 | 88 | Wrong status – R-MAC state | Mauvais état - état R-MAC | |
9A | 0 | 2 PIN try left | 2 PIN essayer à gauche | |
9A | 4 | PIN not succesfully verified, 2 PIN try left | PIN non vérifié avec succès, 2 PIN essayer à gauche | |
9A | 71 | Wrong parameter value – Double agent AID | Valeur de paramètre incorrecte - AID de l'agent double | |
9A | 72 | Wrong parameter value – Double agent Type | Valeur de paramètre incorrecte - Type d'agent double | |
9D | 5 | E | Incorrect certificate type | Type de certificat incorrect |
9D | 7 | E | Incorrect session data size | Taille de données de session incorrecte |
9D | 8 | E | Incorrect DIR file record size | Taille d'enregistrement de fichier DIR incorrecte |
9D | 9 | E | Incorrect FCI record size | Taille d'enregistrement FCI incorrecte |
9D | 0A | E | Incorrect code size | Taille de code incorrecte |
9D | 10 | E | Insufficient memory to load application | Mémoire insuffisante pour charger l'application |
9D | 11 | E | Invalid AID | AID non valide |
9D | 12 | E | Duplicate AID | AID en double |
9D | 13 | E | Application previously loaded | Application précédemment chargée |
9D | 14 | E | Application history list full | Liste complète de l'historique des applications |
9D | 15 | E | Application not open | Application non ouverte |
9D | 17 | E | Invalid offset | Décalage non valide |
9D | 18 | E | Application already loaded | Application déjà chargée |
9D | 19 | E | Invalid certificate | Certificat invalide |
9D | 1A | E | Invalid signature | Signature non valide |
9D | 1B | E | Invalid KTU | KTU non valide |
9D | 1D | E | MSM controls not set | Contrôles MSM non définis |
9D | 1E | E | Application signature does not exist | La signature de l'application n'existe pas |
9D | 1F | E | KTU does not exist | KTU n'existe pas |
9D | 20 | E | Application not loaded | Application non chargée |
9D | 21 | E | Invalid Open command data length | Longueur de données de commande d'ouverture non valide |
9D | 30 | E | Check data parameter is incorrect (invalid start address) | Vérifier que le paramètre de données est incorrect (adresse de début non valide) |
9D | 31 | E | Check data parameter is incorrect (invalid length) | Vérifier que le paramètre de données est incorrect (longueur non valide) |
9D | 32 | E | Check data parameter is incorrect (illegal memory check area) | Le paramètre de vérification des données est incorrect (zone de vérification de la mémoire illégale) |
9D | 40 | E | Invalid MSM Controls ciphertext | Texte chiffré des contrôles MSM non valide |
9D | 41 | E | MSM controls already set | Contrôles MSM déjà définis |
9D | 42 | E | Set MSM Controls data length less than 2 bytes | Définir une longueur de données MSM Controls inférieure à 2 octets |
9D | 43 | E | Invalid MSM Controls data length | Longueur des données des contrôles MSM non valides |
9D | 44 | E | Excess MSM Controls ciphertext | Excédent MSM Controls texte chiffré |
9D | 45 | E | Verification of MSM Controls data failed | La vérification des données des contrôles MSM a échoué |
9D | 50 | E | Invalid MCD Issuer production ID | ID de production de l'émetteur MCD non valide |
9D | 51 | E | Invalid MCD Issuer ID | ID d'émetteur MCD non valide |
9D | 52 | E | Invalid set MSM controls data date | La valeur des données de contrôle MSM définie n'est pas valide |
9D | 53 | E | Invalid MCD number | Numéro MCD non valide |
9D | 54 | E | Reserved field error | Erreur de champ réservé |
9D | 55 | E | Reserved field error | Erreur de champ réservé |
9D | 56 | E | Reserved field error | Erreur de champ réservé |
9D | 57 | E | Reserved field error | Erreur de champ réservé |
9D | 60 | E | MAC verification failed | La vérification MAC a échoué |
9D | 61 | E | Maximum number of unblocks reached | Nombre maximum de déblocages atteint |
9D | 62 | E | Card was not blocked | La carte n'a pas été bloquée |
9D | 63 | E | Crypto functions not available | Fonctions cryptographiques non disponibles |
9D | 64 | E | No application loaded | Aucune application chargée |
9E | 0 | PIN not installed | PIN non installé | |
9E | 4 | PIN not succesfully verified, PIN not installed | PIN non vérifié avec succès, PIN non installé | |
9F | 0 | PIN blocked and Unblock Try Counter is 3 | PIN bloqué et débloquer Try Counter est 3 | |
9F | 4 | PIN not succesfully verified, PIN blocked and Unblock Try Counter is 3 | Le code PIN n'a pas été vérifié avec succès, le code PIN est bloqué et le déblocage du compteur de tentatives est 3 | |
9F | XX | Command successfully executed; ‘xx’ bytes of data are available and can be requested using GET RESPONSE. | Commande exécutée avec succès; 'xx' octets de données sont disponibles et peuvent être demandés à l'aide de GET RESPONSE. | |
9x | XX | Application related status, (ISO 7816-3) | Statut lié à l'application, (ISO 7816-3) |
Comprendre EMV et les APDU
- Le protocole de communication EMV : Europay Mastercard Visa, est depuis 1995 le standard international de sécurité des cartes de paiement (cartes à puce). Il tire son nom des organismes fondateurs.
- Les Commandes et Réponses APDU : Application Protocol Data Unit est un message échangé entre une carte à puce et un lecteur de carte à puce. Il est normalisé et décrit dans l’ISO 7816 partie 4
- COMMANDE APU:
Le terminal envoie une commande APDU à la carte. Cette commande a un en-tête obligatoire et un corps facultatif.
- RÉPONSE APU:
La carte exécutera la commande et renverra une réponse APDU au terminal. L’APDU de réponse a un corps facultatif composé de données et une remorque obligatoire avec deux octets d’état « SW1 » et « SW2 ». SW1 et SW2 combinés sont le mot d’état (SW). Si le mot d’état a la valeur 0x9000 (SW1 = 0x90, SW2 = 0x00), la commande a été exécutée avec succès par la carte.
Définition Application Protocol Data Unit
Commande APDU | ||
---|---|---|
Field name | Length (bytes) | Description |
CLA | 1 | Classe d’instruction – indique le type de la commande, par exemple « interindustry » ou « proprietary » |
INS | 1 | Code d’instruction – indique le code de commande, « write data » par exemple |
P1-P2 | 2 | Paramètres d’instructions pour la commande, par exemple la position du curseur (offset) du fichier où écrire des données |
Lc | 0, 1 ou 3 | Définit le nombre (Nc) d’octets envoyés par la commande |
Données envoyées | Nc | Nc octets |
Le | 0, 1, 2 ou 3 | Définit le nombre (Ne) maximum d’octets attendus dans la réponse |
Réponse APDU | ||
Réponse | Nr (au maximum Ne) | Donnée de réponse |
SW1-SW2 (Statut de la réponse) | 2 | Statut résultant de la commande, par exemple 90 00 (hexadecimal) indique que l’opération s’est effectuée avec succès. |
- Tutoriel EMV
- Script pour lire toutes les données d’une carte EMV
- Commandes APDU et Réponses APDU
- Lire les données d’une carte de crédit EMV
- Simulation et test de cartes EMV
LES SYSTÈMES D’EXPLOITATION POUR CARTE A PUCE
# La théorie en profondeur
Structure des fichiers
Les fichiers d’une carte à puce sont organisés en arborescence. Le fichier le plus haut est le fichier maître (MF). Le MF possède un ou plusieurs fichiers de définition d’application (ADF). À l’intérieur d’un ADF se trouvent des fichiers élémentaires Applicaton (AEF) qui contiennent des données.
Vous pouvez sélectionner rapidement un ADF avec l’Application Identifier (AID). Dans un ADF, vous pouvez sélectionner des AEF avec le Short File Identifier (SFI).
APDU – Application Protocol Data Unit
Après la réinitialisation, la communication entre le terminal et la carte fonctionne avec les APDU.
Commande APDU
Le terminal envoie une commande APDU à la carte. Cette commande a un en-tête obligatoire et un corps facultatif.
Réponse APDU
La carte exécutera la commande et renverra une réponse APDU au terminal. L’APDU de réponse a un corps facultatif composé de données et une remorque obligatoire avec deux octets d’état “SW1” et “SW2”. SW1 et SW2 combinés sont le mot d’état (SW). Si le mot d’état a la valeur 0x9000 (SW1 = 0x90, SW2 = 0x00), la commande a été exécutée avec succès par la carte.
Lire le script EMV
Pour lire toutes les données de la carte, vous pouvez utiliser le script contenu dans la section suivante:
Ligne 06
Ce script fonctionne avec Mastercard ou VISA car les deux cartes utilisent des AID différents. Vous devrez activer l’AID correspondant à votre carte.
Ligne 13
Pour lire les données de la carte, nous devons d’abord sélectionner le bon ADF. Nous le ferons avec une commande SELECT encodée en tant que commande APDU de cas 4 et transmise à l’aide de card.sendApdu ():
La commande SELECT prend en charge les options suivantes:
La méthode card.sendAPDU () prend en charge un autre paramètre, qui est utilisé pour définir une liste de codes SW attendus. [0x9000] définit une liste avec une seule entrée 0x9000.
Ligne 17
Maintenant, nous créons une boucle qui commence par le premier AEF (SFI = 1) et se termine par SFI 31.
Ligne 19
Dans une deuxième boucle, le nombre record de chaque AEF sera itéré de 1 à 16.
Ligne 21
Avec la commande READ RECORD émise à l’aide de card.sendApdu (), nous pouvons obtenir les données.
Ligne 22
Si le mot d’état a la valeur 0x9000, la commande a réussi et l’objet tlv sera imprimé.
# Passons à la pratique
TELECHARGEMENT DE BP-TOOLS Version: 20.04:
https://www.eftlab.com/download/win-3264/
https://www.eftlab.com/download/amd64-os-x/
https://www.eftlab.com/download/ubuntu-bionic-64-bit/
https://www.eftlab.com/download/amd64-ubuntu-xenial/
https://www.eftlab.com/download/amd64-debian-jessie/
# SOURCES
- Le format APDU pour communiquer en NFC
- Dossier technique : Fonctionnement des cartes à puces _by J-J Brucker
- Un framework de fuzzing pour cartes `a puce : application aux protocoles EMV_ by Lancia
- La norme EMV (2009)_by Samia Bouzefrane
- Thèse “Les cartes à puces – TFE de Réseaux de télécommunications” _ by Faculté d’ingénieur, ESIB
- Stucture EMV_ by Openscdp.org “Read Emv “