"... Der Weg ist nicht so schwer zu verstehen. Die Kräfte der Natur, natürliche Neigungen, Muster von Ereignissen ...
Ein primitives Verständnis der Welt bemerkt nur vier Elemente und geht nicht weiter. Es ist, als ob das Universum auf vier verständliche verständliche Phänomene hinausläuft. "
Stephen Erickson.
"Mitternachtsflut."
Hallo Habr!
Das Thema APDU wurde wiederholt angesprochen, betrifft jedoch hauptsächlich Smartcards, für die Sie einen Kartenleser und eine Karte benötigen, die nicht schade ist, sowie Software, da die Arbeit mit der OpenSC-Konsolenschnittstelle, zumindest in Windows $, gelinde gesagt unpraktisch ist.
Zu diesem Zweck habe ich ein kleines Programm mit einer Fensteroberfläche geschrieben, die über Winscard funktioniert.
Quellen und Binärdateien können hier heruntergeladen
werden .
Um dies unter Visual Studio 2008 zu kompilieren, müssen Sie das WinSCard.Lib-Projekt aus dem Microsoft Windows SDK zum Projekt hinzufügen.
Höchstwahrscheinlich wird es Blue Fish EToken PRO Java 72 K mit EDS-Zertifikaten geben, die vor vielen Jahren abgelaufen sind (bei einem „Kampf“ mit einem vorhandenen EDS wird das Token für Experimente nicht empfohlen!).
Geeignet sind auch JaCarta Pro, die sich nur äußerlich von etokens unterscheiden.
Sie können auch versuchen, mit dem Gemalto SafeNet eToken 5100 zu arbeiten. Sie können den Inhalt von Verzeichnissen anzeigen, können die Datei jedoch aufgrund des sehr kurzen Zeitlimits (wahrscheinlich mehrere Millisekunden) zwischen den Befehlen zum Auswählen und Lesen der Datei nicht lesen, weshalb der Befehl zum Lesen der Datei manuell verweist bereits an einer leeren Stelle (Fehlercode 69 85). Vielleicht ist dies einer der Gründe, warum auf einigen Plattformen auf diesen Token die Schlüssel nicht mehr angezeigt werden. In Bezug auf SafeNet eToken 5100 (mit einer ehrlichen Aufschrift auf der Seite „Made in China“) stelle ich Folgendes fest: „JaCarta Single Client“ möchte nicht damit arbeiten und zeigt die Meldung an, dass dieses Produkt nicht unterstützt wird, Aladdins 64-Bit-eToken PKI-Client 5.1 Er sieht es nicht, aber die 32-Version unter Win XP funktioniert damit, obwohl es für dieses Token natürlich ratsam ist, den ursprünglichen SafeNet-Authentifizierungsclient zu installieren.
Andere Token, einschließlich der JaCarta-Familie, funktionieren nicht, da die APDU-Befehle für sie alle völlig unterschiedlich sind und ihr im ISO7816-Standard beschriebener digitaler Wert nicht übereinstimmt.
Details zum Format von APDU-Befehlen finden Sie beispielsweise
hier .
Ein Leser mit einem blauen Fisch kann sich mit der Arbeit von APDU vertraut machen, ohne von der Couch aufzustehen.
Es ist erforderlich, den Treiber für eToken eToken PKI Client 5.1 oder "JaCarta Single Client" zu installieren und das Token zu verbinden.
Für eine detaillierte Ansicht des Inhalts des Tokens in einer bequemen Form und eine Abstimmung mit den APDU-Befehlen können Sie die von mir im Autoit
JaCarta Editor geschriebene verwenden .
Starten Sie APDUExplorer, wählen Sie "Aladdin Token JC 0" oder "ARDS JaCarta 0" oder "SafeNet Token JC 0" aus der Liste der Leser und Sie können Befehle eingeben.
Sie können sowohl durch Doppelpunkte als auch durch Leerzeichen oder alle zusammen eingeben.
Zunächst können Sie die Leistung überprüfen, indem Sie auf "ATR prüfen" klicken und eine Token-Antwort erhalten.
Der erste Befehl besteht darin, das Standard-Applet auszuwählen und in das Stammverzeichnis mit der Kennung 3f00 zu wechseln (diese Kennung ist möglicherweise das einzige, was Token von Anbietern gemeinsam haben).
00: A4: 00: 04: 00
Als nächstes erhalten wir eine Liste der Ordner im Stammverzeichnis
80: 01: 01: 00: 04: 09: 02: 00: 00: CD (der Befehl ist die Konstante "Berichtsordnerliste").
Eine Antwort sollte erhalten werden:
0a 02 66 66 0b 01 00 90 00
Das zweite Byte in der Antwort ist die Größe der empfangenen Daten - zwei Bytes, dh nur ein Ordner (die Datei- oder Ordnerkennung in der APDU benötigt immer zwei Bytes).
Und wir sehen nur einen Ordner mit der Kennung 66 66, der als Aladdin AID-Verzeichnis bezeichnet wird.
Berichtsdateiliste (auch konstant)
80: 01: 02: 00: 04: 09: 02: 00: 00: CD
Muss empfangen werden
0a 00 0b 01 00 90 00
Die Antwort auf Position 01 lautet 00.
Gehen Sie in das Verzeichnis 66 66
00 A4 08 04 02 66 66 00
Dies ist der Befehl SELECT FILE, dessen Format: vier Bytes, der Befehl 00 A4 08 04 selbst, dann die Größe des Datenfelds des vollständigen Pfads (im Beispiel 02 Bytes), dann der Pfad selbst (im Beispiel 66 66) und 00 müssen vervollständigt werden.
Liste der Verzeichnisse melden 66 66
80: 01: 01: 00: 04: 09: 02: 00: 00: CD
Resv-Bytes:
0a 04 50 01 50 00 0b 01 00 90 00
Das Antwortfeld 01 (Antwortgröße) zeigt 04 an, d.h. 4 Bytes = zwei Ordner 50 01 und 50 00, wobei 50 01 der Dienstordner und 50 00 der Hauptordner ist, der als PKCS # 11-Verzeichnis bezeichnet wird und in dem alle Daten gespeichert sind
Berichtsverzeichnisliste 66 66
80: 01: 02: 00: 04: 09: 02: 00: 00: CD
Resv-Bytes:
0a 00 0b 01 00 90 00
Keine Dateien hier.
Studien haben gezeigt, dass das Verzeichnis 50 01 keine sichtbaren Ordner und Dateien enthält. Wechseln Sie daher in das Hauptverzeichnis 50 00
00 A4 08 04 04 66 66 50 00 00
Berichtsordnerliste
80: 01: 01: 00: 04: 09: 02: 00: 00: CD
Die Antwort hängt davon ab, was auf dem Token gespeichert ist.
Berichtsdateiliste
80: 01: 02: 00: 04: 09: 02: 00: 00: CD
Resv-Bytes:
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
Wir sehen 14 Dateien (Antwortfeld 01), dann alle 2 Bytes sind dies Dateinamen, dann gibt es Dienstinformationen.
Jedes Token der untersuchten Modelle enthält immer ein b000-Systemverzeichnis und die 0002-Systemdatei. Versuchen Sie, sie zu lesen, und andere Dateien können nach demselben Prinzip gelesen werden.
Gehen Sie in das Verzeichnis b0 00
00 A4 08 04 06 66 66 50 00 B0 00 00
Holen Sie sich eine Liste der Dateien
80: 01: 02: 00: 04: 09: 02: 00: 00: CD
Resv-Bytes:
0a 02 00 02 0b 01 00 90 00
Wir sehen Datei 00 02 (das Byte im Antwortfeld 01 ist die Namensgröße (jeder Name benötigt immer zwei Bytes, die folgenden Felder sind die Dateinamen, in diesem Fall gibt es nur eine Datei, die durch den Wert von Feld 01 bestimmt wird).
Wählen Sie die Datei 0002 aus B000 für den vollständigen Pfad
00 A4 08 04 08 66 66 50 00 B0 00 00 02 00
Resv-Bytes:
01 01 02 02 02 00 02 03 02 00 10 04 08 00 ff 00 00 ff ff ff 05 00 90 00
Das Antwortformat ist wie folgt: Präambel - 2 Bytes, Dateityp - 1 Byte (02-Datei, 01-Ordner), Trennzeichen - 2 Bytes, Dateiname - 2 Bytes, Trennzeichen - 2 Bytes, Dateigröße - 2 Bytes, Trennzeichen - 2 Bytes, Zugriffsrechte - 1 Byte (00 - für alle verfügbar, 63 ist durch einen PIN-Code geschützt). Dann kommen einige Overhead-Informationen, die mit dem Code für die erfolgreiche Ausführung des APDU-Befehls - 90 00 enden.
Lesen Sie diese Datei. Die letzten zwei Bytes des Befehls geben die Größe des Puffers an, wie viel Sie lesen müssen (in diesem Fall entspricht dies der Dateigröße).
80 18 00 00 04 0E 02 00 00 10
Resv-Bytes: (der Wert ist jeweils unterschiedlich):
00 06 63 61 72 64 63 66 00 00 00 00 00 00 00 00 90 00
Ich erwäge hier keine Authentifizierung für das Etoken, da es aus einer Folge von Frage-Antwort-Befehlen besteht und verschlüsselt ist (es gibt ein Antitoken-Projekt, bei dem das Autorisierungsproblem für diese Produkte grundlegend gelöst wurde).
Einige andere Token, wie z. B. JaCarta GOST-2, unterstützen die Authentifizierung durch einfaches Übergeben eines PIN-Codes.
Sie können die APDU-Werte von Befehlen beliebiger Smartcards und Token abrufen, indem Sie den Datenverkehr von WinSCard.dll abfangen, indem Sie einen
von hier kompilierten Sniffer ausführen (Experimente haben gezeigt, dass dieser Sniffer installiert ist und nur unter Win XP ausgeführt wird).
Als Referenz mögliche Ergebnisse der Ausführung von APDU-Befehlen:
90 00 - OK
69 85 - Nutzungsbedingungen nicht erfüllt
63 00 - Authentifizierung des Host-Kryptogramms fehlgeschlagen (Ext auth)
64 00 - Keine spezifische Diagnose
67 00 - Falsche Länge in Lc
67 XX - Fehler, falscher Parameter P3 (ISO-Code)
68 81 - Logischer Kanal wird nicht unterstützt oder ist nicht aktiv
69 82 - Sicherheitsstatus nicht erfüllt
69 83 - Geheimcode gesperrt
69 85 - Keine aktuell ausgewählte EF, kein Befehl zum Überwachen / keine Transaction Manager-Datei
6A 80 - Die Parameter im Datenfeld sind falsch
6A 81 - Karte ist blockiert oder Befehl wird nicht unterstützt
6A 82 - Datei nicht gefunden
6A 85 - Lc stimmt nicht mit der TLV-Struktur überein
6A 86 - Falsches P1 P2
6A 88 - Referenzierte Daten nicht gefunden (Init upd)
6D 00 - Ungültige Anweisung
6E 00 - Ungültige Klasse