2016-04-17 11 views
1

Ich möchte Secure Messaging in meinem applet by org.globalplatform-Paket verwenden. Ich habe eine Bibliothek in C#, die einige globale Platform-Befehle implementiert. Ich kann sicheren Kanal zu Karte im CLR-, MAC- und ENC-Modus öffnen und ich kann Applet auf Karte im erwähnten Modus laden und installieren. Auch ich öffnen sicheren Kanal in meinem Applet successfuly und externe Authentifizierungsantwort 9000. wie folgt aus:secureChannel.unwrap function return 6982 (Sicherheitsstatus nicht erfüllt)

case INS_INIT_UPDATE: 
case INS_External_AUTHENTICATION: 
     SDInstruction(apdu); 
     break; 

und

private void SDInstruction(APDU apdu) 
    { 
     byte[] buf = apdu.getBuffer(); 
     byte cla = buf[ISO7816.OFFSET_CLA]; 
     byte ins = buf[ISO7816.OFFSET_INS]; 

    apdu.setIncomingAndReceive(); 
     if(ins == INS_INIT_UPDATE) 
      secureChannel = GPSystem.getSecureChannel(); 

     short len = secureChannel.processSecurity(apdu); 

     apdu.setOutgoing(); 
    apdu.setOutgoingLength(len); 
     apdu.sendBytes(ISO7816.OFFSET_CDATA, (short) len);   
    } 

aber wenn ich unwrap Befehl apdu wollen "die durch die globale Plattform C# -Bibliothek wraped" in meinem Applet, das Rückcardmanager 6982 (Sicherheitsstatus nicht satisfid) .unwraping Code:

byte[] buf = apdu.getBuffer(); 
if (secureChannel.getSecurityLevel() < (SecureChannel.AUTHENTICATED)) 
       ISOException.throwIt(ISO7816.SW_CONDITIONS_NOT_SATISFIED); 

     short len = secureChannel.unwrap(buf, (short) 0, (short) buf.length); 

Spur von sicherem Kanal apdu:

Command APDU >> Class=00 Ins=A4 P1=04 P2=00 P3=09 Data=A00000030800001000 
Response APDU << SW=611A 
Command APDU >> Class=00 Ins=C0 P1=00 P2=00 P3=1A 
Response APDU << SW=9000 Data=61174F06000010000100790D4F0BA00000030800001000010009 
Command APDU >> Class=80 Ins=50 P1=00 P2=00 P3=08 Data=0101010101010101 
Response APDU << SW=611C 
Command APDU >> Class=00 Ins=C0 P1=00 P2=00 P3=1C 
Response APDU << SW=9000 Data=4D0022840106A783224FFF01AF258B0267752E248D07854961DA9851 
Command APDU >> Class=84 Ins=82 P1=01 P2=00 P3=10 Data=F6E5BC84DE83E5242E8B6C9CA0ECB741 
Response APDU << SW=9000 
Command APDU >> Class=04 Ins=20 P1=00 P2=80 P3=0E Data=3131313131315F34DCF6BE7EDD3A 
Response APDU << SW=6982 
Wrapping apdu command faild. 

Kann mir jemand helfen? Vielen Dank,

Mohsen.

+0

Hinzufügen von APDU-Befehlen Spur zu Ihrer Frage nützlich ist. Sie können 'ISO7816.SW_CONDITIONS_NOT_SATISFIED 'auch durch' (kurz) secureChannel.getSecurityLevel() 'im' if (...) 'Block ersetzen, um dessen Wert zu überprüfen. :) – Abraham

+1

hallo abraham, (kurz) secureChannel.getSecurityLevel() zurück 0x81 –

+0

Hallo lieber Mohsen. In der 4. Zeile der 'SDInstruction'-Methode wurden CLA-Werte auf' CLA_GP' oder '0x84' eingeschränkt und die CLA des letzten APDU-Befehls ist '0x04'. Recht? Gibt es ähnliche Einschränkungen für diesen Befehl in Ihrem Applet? – Abraham

Antwort

0

Ich denke, dass Ihr Auspacken Befehl eine falsche Länge angibt.
Versuch:

short len = secureChannel.unwrap(buf, (short) 0, (short)(ISO7816.OFFSET_CDATA + apdu.getIncomingLength())); 
+0

danke Paul, du hattest Recht. : D –