Ich habe selbst signiertes Zertifikat signiert von SHA1withECDSA Algorithmus BouncyCastle. Unter BC kann ich es leicht überprüfen, aber wenn ich es auf JavaCard mache, sende ich jedes Mal falsch (Kurve secp192r1 von NIST). Certificate hold sign in plain (nicht X9.62 bedeutet nur R + s ohne TAGs).SHA1withECDSA Unterschrift auf Javacard
Es ist mein Code, um es zu überprüfen (mit Werten als konstant geputtet - für Tests natürlich).
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);
}
'...' anstelle von Bytes für klare Sicht (192bits Kurve kann großes Durcheinander tun).
Zertifikat mit TAGS Erklärung auf Pastebin:
Vielen Dank für jede Hilfe
Sevar
edit: Neue Tests: Alle Tests wieder auf dieselben Daten (PublicKey, PrivateKey , Nachricht zu unterzeichnen) Zeichen ist randomisiert, so werde ich 2 Zeichen (signT - Zeichen von Terminal (BC) erzeugt, signC - Zeichen generieren d von Chip)
signt kippt auf CHIP überprüft werden, sondern kann auf Terminal überprüft werden. signC auf CHIP prüft & Terminal-
so checkte ich Kreuzung zwischen API
Kreuz Beziehung zu BC gerichtet funktioniert gut
Kreuz Beziehung zu CHIP gerichtet nicht
wird funktionieren
Paar Schlüssel generiert gut, weil, wenn ich PrivateKey und PublicKey von BC zu CHIP erzeugt setzen, dann s Ignatur, die auf dem CHIP erzeugt wird, kann durch CHIP verifiziert werden.
- KeyPair gut erzeugt
Ich habe keine Ahnung, was ich jetzt überprüfen sollte. Problem dürfte beim Füllen von Array im ECDSA-Schritt e = SHA1 (Message) sein. Was passiert mit Array nach Hash (Hash ist kürzer als Kurve und Karte muss Größe des Arrays vor der Kopie deklarieren)
Wie ergeht Sie mit diesem Sevar nützlich sein wird? Es wäre schön, wenn Sie Feedback zu den Kommentaren/Antworten etc. geben würden. –