2017-11-15 5 views
0

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 !!

+0

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

+0

Egal, SSC Null. BAC startet SSC mit einem Wert, der auf den ausgetauschten Randoms basiert. – martijno

Antwort

0

es herausgefunden:

Aufgrund einer Binär-/hex/string Umwandlungsfehler (here) der SM Validierungsschritt für die SELECT-FILE Antwort war übersprungenen und somit wurde die SSC nicht korrekt inkrementiert.

Verwandte Themen