Zunächst einmal weiß ich wie ein Duplikat aussehen könnte: ePassport reading with PN532, Keep Getting SW1 SW2 = 0x69 0x88 (Incorrect Secure Messaging Data Objects)Lesen EF.COM von ePassport versagt bei READ BINARY mit rAPDU 6988 (Fehlerhafte Secure Messaging Data Objects)
..aber ich bin einen Schritt weiter im Prozess.
Ich versuche, ein MRTD (ePass) mit Python und einem PN7120 NFC-Leser zu lesen. Ich habe pyPassport 2.0 als Basis verwendet.
Ich weiß, der Leser ist in Ordnung, weil ich Pässe mit dem gleichen Gerät mit einem Android-Setup lesen kann.
Ich folgte the ICAO 9303 Part 11 documentation und simuliert das "bearbeitete Beispiel" (Anhang D, gleiche Datei).
Das Problem
Wenn ein echter Pass verwenden, werden die Schritte "Applet wählen Sie", "get Herausforderung", "do bac" und "Datei auswählen" Schritt funktionieren aber binäre Ergebnisse in 69 88 gelesen (Falsche Secure Messaging-Datenobjekte).
Wenn ich das "bearbeitete Beispiel" simuliere, indem ich ksmac/ssc injiziere, komme ich zum exakt gleichen ProtectedAPDU Ergebnis wie auf Seite 75 (AppD-7) Punkt g angegeben.
Auch der Schritt "Datei auswählen" verwendet fast das gleiche Verfahren (siehe def protect) mit Erfolg (rAPDU 90 00).
Ich habe alles bis ins kleinste Detail mindestens zweimal verglichen und sehe wirklich nicht, wohin ich als nächstes schauen soll. Ich hoffe, dass jemand einen Rat oder Einsichten geben kann.
Das entsprechende Protokoll (Fehler am Ende)
Calculate Session Keys (KSenc and KSmac) using Appendix 5.1
KSenc: 3DE649F8AEA41C04FB6D4CD9043757AD
KSmac: 8C34AD61974F68CEBA3E0EAEA1456476
Calculate Send Sequence Counter
SSC: AB1D2F337FD997D6
Reading Common
Select File
APDU 00 A4 02 0C 02 [011E]
Mask class byte and pad command header
CmdHeader: 0CA4020C80000000
Pad data
Data: 011E800000000000
Encrypt data with KSenc 3DE649F8AEA41C04FB6D4CD9043757AD
EncryptedData: FF0E241E2F94B508
Build DO'87
DO87: 870901FF0E241E2F94B508
Concatenate CmdHeader and DO87
M: 0CA4020C80000000870901FF0E241E2F94B508
Compute MAC of M
Increment SSC with 1
SSC: AB1D2F337FD997D7
Concatenate SSC and M and add padding
N: AB1D2F337FD997D70CA4020C80000000870901FF0E241E2F94B5088000000000
Compute MAC over N with KSmac 8C34AD61974F68CEBA3E0EAEA1456476
CC: 22FF803EC3104336
Build DO'8E
DO8E: 8E0822FF803EC3104336
Construct and send protected APDU
ProtectedAPDU: 0CA4020C15870901FF0E241E2F94B5088E0822FF803EC310433600
[SM] - 0C A4 02 0C 15 [870901FF0E241E2F94B5088E0822FF803EC3104336] 00
[SM] - [990290008E08AAEA3B783FD6CA9D] 90 00
Receive response APDU of MRTD's chip
RAPDU: 990290008E08AAEA3B783FD6CA9DC29000
Read Binary
APDU 00 B0 00 00 [] 04
Mask class byte and pad command header
CmdHeader: 0CB0000080000000
Build DO'97
DO97: 970104
Concatenate CmdHeader and DO97
M: 0CB0000080000000970104
Compute MAC of M
Increment SSC with 1
SSC: AB1D2F337FD997D8
Concatenate SSC and M and add padding
N: AB1D2F337FD997D80CB00000800000009701048000000000
Compute MAC over N with KSmac 8C34AD61974F68CEBA3E0EAEA1456476
CC: 68DD9FD88472834A
Build DO'8E
DO8E: 8E0868DD9FD88472834A
Construct and send protected APDU
ProtectedAPDU: 0CB000000D9701048E0868DD9FD88472834A00
[SM] - 0C B0 00 00 0D [9701048E0868DD9FD88472834A] 00
[SM] - [] 69 88 //SM data objects incorrect
Dank !!
Ich bekomme die exakt gleichen Ergebnisse für die zwei geschützten APDUs. Aber solltest du SSC nicht bei Null starten (wenn das sichere Messaging nach BAC ist)? – martijno
Egal, SSC Null. BAC startet SSC mit einem Wert, der auf den ausgetauschten Randoms basiert. – martijno