"... Le chemin n'est pas si difficile à comprendre. Les forces de la nature, les inclinations naturelles, les événements ...
Une compréhension primitive du monde ne remarque que quatre éléments et ne va pas plus loin. C’est comme si l’univers se résume à quatre phénomènes compréhensibles et compréhensibles. "
Stephen Erickson.
"Marée de minuit."
Bonjour, Habr!
Le sujet de l'APDU a été soulevé à plusieurs reprises, mais concernait principalement les cartes à puce, pour lesquelles vous avez besoin d'un lecteur de carte et d'une carte qui n'est pas dommage, plus un logiciel, car travailler avec l'interface de la console OpenSC, au moins dans Window $, est légèrement inconfortable.
Pour ce faire, j'ai écrit un petit programme avec une interface de fenêtre qui fonctionne via Winscard.
Les sources et les binaires peuvent être téléchargés
ici .
Ceci compilé sous Visual studio 2008, vous devez ajouter le projet WinSCard.Lib à partir du SDK Microsoft Windows au projet.
Très probablement, il y aura du poisson bleu EToken PRO Java 72 K avec des certificats EDS expirés il y a de nombreuses années (en utilisant une «bataille» avec un EDS existant, le jeton n'est pas recommandé pour les expériences!).
JaCarta Pro convient également, qui ne diffèrent des etokens qu'en externe.
Vous pouvez également essayer de travailler avec le Gemalto SafeNet eToken 5100, ils peuvent afficher le contenu des répertoires, mais ils ne pourront pas lire le fichier en raison du très petit délai (probablement plusieurs millisecondes) entre les commandes pour sélectionner et lire le fichier, à la suite de quoi la commande pour lire le fichier se réfère manuellement déjà sur une place vide (code d'erreur 69 85). C'est peut-être l'une des raisons pour lesquelles sur certaines plates-formes sur ces jetons, ils ne voient plus les clés. En ce qui concerne SafeNet eToken 5100 (avec une inscription honnête sur le côté «Made in China»), je note ce qui suit: «JaCarta Single Client» ne veut pas travailler avec et affiche un message indiquant que ce produit n'est pas pris en charge, le client PKI eToken PKI 5.1 64 bits d'Aladdin Il ne le voit pas, mais la version 32 pour Win XP fonctionne avec, bien que pour ce jeton, il est conseillé d'installer le client d'authentification SafeNet d'origine, bien sûr.
D'autres jetons, y compris la famille JaCarta, ne fonctionneront pas, car les commandes APDU pour eux sont tous complètement différents et leur valeur numérique décrite dans la norme ISO7816 ne correspond pas.
Des détails sur le format des commandes APDU peuvent être trouvés, par exemple,
ici .
Un lecteur avec un poisson bleu peut se familiariser avec le travail de l'APDU sans se lever du canapé.
Il est nécessaire d'installer le pilote pour eToken eToken PKI Client 5.1 ou "JaCarta Single Client" et de connecter le token.
Pour une vue détaillée du contenu du jeton sous une forme pratique et une réconciliation avec ce que donnent les commandes APDU, vous pouvez utiliser celui que j'ai écrit sur l'éditeur
Autoit JaCarta .
Lancez APDUExplorer, sélectionnez «Aladdin Token JC 0» ou «ARDS JaCarta 0» ou «SafeNet Token JC 0» dans la liste des lecteurs et vous pouvez entrer des commandes.
Vous pouvez entrer à la fois par des deux-points et par des espaces ou tous ensemble.
Tout d'abord, vous pouvez vérifier les performances en cliquant sur «Vérifier ATR» et obtenir une réponse symbolique.
La première commande consiste à sélectionner l'applet par défaut et à aller dans le répertoire racine avec l'identifiant 3f00 (cet identifiant est peut-être la seule chose commune aux jetons de tous les fournisseurs).
00: A4: 00: 04: 00
Ensuite, nous obtenons une liste de dossiers dans le répertoire racine
80: 01: 01: 00: 04: 09: 02: 00: 00: CD (la commande est la constante "Liste des dossiers de rapport").
Une réponse doit être reçue:
0a 02 66 66 0b 01 00 90 00
Le deuxième octet de la réponse est la taille des données reçues - deux octets, c'est-à-dire un seul dossier (l'identificateur de fichier ou de dossier dans l'APDU prend toujours deux octets).
Et nous ne voyons qu'un seul dossier avec l'identifiant 66 66, appelé répertoire Aladdin AID.
Liste des fichiers de rapport (également constante)
80: 01: 02: 00: 04: 09: 02: 00: 00: CD
Doit être reçu
0a 00 0b 01 00 90 00
La réponse à la position 01 est 00.
Accédez au répertoire 66 66
00 A4 08 04 02 66 66 00
Il s'agit d'une commande SELECT FILE, son format: quatre octets, la commande 00 A4 08 04 elle-même, puis la taille du champ de données du chemin complet (dans l'exemple 02 octets), puis le chemin lui-même (dans l'exemple 66 66) et 00 doivent être complétés.
Liste des rapports des répertoires 66 66
80: 01: 01: 00: 04: 09: 02: 00: 00: CD
Octets de résolution:
0a 04 50 01 50 00 0b 01 00 90 00
Le champ de réponse 01 (taille de réponse) indique 04, c'est-à-dire 4 octets = deux dossiers 50 01 et 50 00, tandis que 50 01 est le dossier de service et 50 00 est le principal, appelé répertoire PKCS # 11, où toutes les données sont stockées
Signaler l'annuaire 66 66
80: 01: 02: 00: 04: 09: 02: 00: 00: CD
Octets de résolution:
0a 00 0b 01 00 90 00
Aucun fichier ici.
Des études ont montré qu'il n'y a pas de dossiers et fichiers visibles dans le répertoire 50 01, alors allez dans le répertoire principal 50 00
00 A4 08 04 04 66 66 50 00 00
Liste des dossiers de rapport
80: 01: 01: 00: 04: 09: 02: 00: 00: CD
La réponse dépendra de ce qui est stocké sur le jeton.
Liste des fichiers de rapport
80: 01: 02: 00: 04: 09: 02: 00: 00: CD
Octets de résolution:
0a 14 00 0f 00 02 00 03 00 04 00 05 00 06 00 07 00 08 00 09 00 0a 0b 01 00 90 00
Nous voyons 14 fichiers (champ de réponse 01), puis tous les 2 octets ce sont des noms de fichiers, puis il y a des informations de service.
Chaque jeton des modèles étudiés contient toujours un répertoire système b000 et le fichier système 0002, essayez de le lire, et d'autres fichiers peuvent être lus selon le même principe.
Accédez au répertoire b0 00
00 A4 08 04 06 66 66 50 00 B0 00 00
Obtenez une liste de fichiers
80: 01: 02: 00: 04: 09: 02: 00: 00: CD
Octets de résolution:
0a 02 00 02 0b 01 00 90 00
Nous voyons le fichier 00 02 (l'octet dans le champ de réponse 01 est la taille du nom (chaque nom prend toujours deux octets, les champs suivants sont les noms de fichier, dans ce cas, il n'y a qu'un seul fichier, qui est déterminé par la valeur du champ 01).
Sélectionnez le fichier 0002 de B000 pour le chemin complet
00 A4 08 04 08 66 66 50 00 B0 00 00 02 00
Octets de résolution:
01 01 02 02 02 00 02 03 02 00 10 04 08 00 ff 00 00 ff ff ff ff 05 00 90 00
Le format de réponse est le suivant: préambule - 2 octets, type de fichier - 1 octet (fichier 02, dossier 01), délimiteur - 2 octets, nom de fichier - 2 octets, délimiteur - 2 octets, taille du fichier - 2 octets, délimiteur - 2 octets, droits d'accès - 1 octet (00 - accessible à tous, 63 est protégé par un code PIN). Viennent ensuite des informations supplémentaires, se terminant par le code pour une exécution réussie de la commande APDU - 90 00.
Lisez ce fichier, les deux derniers octets de la commande sont la taille du tampon combien lire (dans ce cas, il est égal à la taille du fichier).
80 18 00 00 04 0E 02 00 00 10
Octets de résolution: (la valeur dans chaque cas sera différente):
00 06 63 61 72 64 63 66 00 00 00 00 00 00 00 00 90 00
Je ne considère pas l'authentification sur l'etoken ici, car elle consiste en une séquence de commandes questions-réponses et est cryptée (il existe un projet Antitoken où le problème d'autorisation sur ces produits a été fondamentalement résolu).
Certains autres jetons, tels que JaCarta GOST-2, prennent en charge l'authentification en passant simplement un code PIN.
Vous pouvez obtenir les valeurs APDU des commandes de toutes les cartes à puce et jetons en interceptant le trafic WinSCard.dll en exécutant un sniffer compilé à
partir d'ici (des expériences ont montré que ce sniffer est installé et ne fonctionne que sous Win XP).
Pour référence, résultats possibles de l'exécution des commandes APDU:
90 00 - OK
69 85 - Conditions d'utilisation non satisfaites
63 00 - Échec de l'authentification du cryptogramme hôte (Ext auth)
64 00 - Pas de diagnostic spécifique
67 00 - Longueur incorrecte en Lc
67 XX - Erreur, paramètre P3 incorrect (code ISO)
68 81 - Le canal logique n'est pas pris en charge ou n'est pas actif
69 82 - Statut de sécurité non satisfait
69 83 - Code secret verrouillé
69 85 - Aucun EF actuellement sélectionné, aucune commande à surveiller / aucun fichier Transaction Manager
6A 80 - Les paramètres du champ de données sont incorrects
6A 81 - La carte est bloquée ou la commande n'est pas prise en charge
6A 82 - Fichier introuvable
6A 85 - Lc incompatible avec la structure TLV
6A 86 - P1 P2 incorrect
6A 88 - Données référencées non trouvées (mise à jour init)
6D 00 - Instruction invalide
6E 00 - Classe invalide