ho un'autocertificazione firmata da algoritmo SHA1withECDSA utilizzando BouncyCastle. Sotto BC posso verificarlo facilmente, ma quando lo faccio su JavaCard mi invia ogni volta false (Curve secp192r1 da NIST). Il certificato tiene il segno in chiaro (non X9.62 significa solo r + s senza alcun TAG).Verifica firma SHA1withECDSA su JavaCard
C'è il mio codice per verificare che (con i valori putted costante - per le prove ovviamente).
byte [] certdata = {...}
Signature signature = Signature.getInstance(Signature.ALG_ECDSA_SHA, false);
ECPublicKey ecpk = (ECPublicKey) KeyBuilder.buildKey(KeyBuilder.TYPE_EC_FP_PUBLIC, KeyBuilder.LENGTH_EC_FP_192, true);
ecpk.setA(new byte[]{...}, (short)0, (short)0x0018);
ecpk.setB(new byte[]{...}, (short)0, (short)0x0018);
ecpk.setG(new byte[]{...}, (short)0, (short)0x0031);
//Point format: uncompressed tag(0x04), x, y
ecpk.setK((short)0x0001);
ecpk.setR(new byte[]{}, (short)0, (short)0x0018);
ecpk.setW(new byte[]{}, (short)0, (short)0x31);
ecpk.setFieldFP(new byte[]{}, (short)0, (short)0x0018);
signature.init(ecpk, Signature.MODE_VERIFY);
boolean result = signature.verify(certdata, (short)0, (short)certdata.length, signtab, (short)0, (short)signtab.length);
if(result) ISOException.throwIt((short)0x0001);
else ISOException.throwIt((short)0x0002);
}
'...' invece di byte per visione chiara (192bits curva può fare grande disordine).
certificato con TAGS spiegazione pastebin:
Grazie per qualsiasi aiuto
Sevar
Modifica: Nuovi test: Tutti i test ri sulla stessi dati (PublicKey, PrivateKey , Messaggio da firmare) il segno è casuale, quindi userò il segno 2 (signT - segno generato dal Terminale (BC), signC - il segno genera d da Chip)
signt cant essere verificata sul chip, ma può essere verificata su Terminal. signC è verificata CHIP & Terminal
quindi controllato incrocio tra API
Relazione trasversale diretto a BC funziona bene
Relazione trasversale diretto al chip è non funziona
coppia di chiavi generate bene perché quando ho messo PrivateKey e PublicKey generati da BC a CHIP, quindi s l'ignatura generata sul CHIP può essere verificata da CHIP.
- coppia di chiavi generata ben
Non ho idea di che cosa dovrei controllare ora. Probabilmente il problema può essere con l'array di riempimento nel passo ECDSA e = SHA1 (Messaggio). Cosa succede con l'array dopo l'hash (l'hash è più corto della curva e la carta deve dichiarare la dimensione dell'array prima della copia)
Come stai cavando con questo Sevar? Sarebbe bello se avessi fornito feedback per i commenti/le risposte, ecc. –