2016-04-17 2 views
1

Je souhaite utiliser la messagerie sécurisée dans mon applet par le package org.globalplatform. J'ai une bibliothèque en C# qui implémente certaines des commandes de globalplatform. Je peux ouvrir le canal sécurisé à la carte en mode CLR, MAC et ENC et je peux charger et installer l'applet sur la carte dans le mode mentionné. Aussi j'ouvrir un canal sécurisé dans mon applet réponse d'authentification succčs et externe 9000. comme ceci:secureChannel.unwrap function return 6982 (Le statut de sécurité n'est pas satisfait)

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

et

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);   
    } 

mais quand je veux commande Déballer apdu « qui wraped par la bibliothèque mondiale de la plate-forme C# » dans mon applet, CardManager retour 6982 (État de sécurité non satisfid) Code .unwraping:

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); 

trace de apdu de canal sécurisé:

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. 

Quelqu'un peut-il m'aider? Merci beaucoup,

Mohsen.

+0

Ajout des commandes APDU trace à votre question est utile. Vous pouvez également remplacer 'ISO7816.SW_CONDITIONS_NOT_SATISFIED' par' (court) secureChannel.getSecurityLevel() 'dans le bloc' if (...) 'pour vérifier sa valeur. :) – Abraham

+1

salut abraham, (bref) secureChannel.getSecurityLevel() return 0x81 –

+0

Salut cher Mohsen. Vous avez été restreint aux valeurs CLA à 'CLA_GP' ou' 0x84' dans la 4ème ligne de la méthode 'SDInstruction' et le CLA de votre dernière commande APDU est' 0x04'. Droite? Existe-t-il une restriction similaire pour cette commande dans votre applet? – Abraham

Répondre

0

Je pense que votre commande de déballage spécifie une longueur incorrecte.
essayer:

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

merci Paul, vous aviez raison. :RÉ –