Ich versuche kryptografische Algorithmen auf der elliptischen Kurve in Java Card zu implementieren.Eingeschränkte elliptische Kurven in Java-Karte
Erstens, ich setzte sie auf 256bit elliptische Kurve (der NIST eins) und es hat gut funktioniert.
Jetzt möchte ich es auf einem 512bits Kurve testen (und nicht 521 wie die NIST eins). Meine Karte unterstützt diese Größe und ich fand eine Datenbank mit elliptischen Kurven (gut für die Kryptographie definiert) dieser Größe. Aber ich bin ein seltsames Problem zu begegnen ...
Wenn ich versuche, meinen Schlüssel zu initialisieren:
ECPublicKey pubKey = (ECPublicKey) KeyBuilder.buildKey(
KeyBuilder.TYPE_EC_FP_PUBLIC, (short) 0x0200, false);
pubKey.setFieldFP(new byte[] { (byte) 0x25, (byte) 0x37,
(byte) 0xD2, (byte) 0x9C, (byte) 0x8B, (byte) 0xFE,
(byte) 0x7D, (byte) 0x9F, (byte) 0x48, (byte) 0x98,
(byte) 0xF7, (byte) 0x60, (byte) 0xF8, (byte) 0x7D,
(byte) 0xBF, (byte) 0x63, (byte) 0x90, (byte) 0x6E,
(byte) 0x28, (byte) 0x99, (byte) 0x0A, (byte) 0x27,
(byte) 0x0C, (byte) 0xA6, (byte) 0x15, (byte) 0xD9,
(byte) 0x1D, (byte) 0xC4, (byte) 0x89, (byte) 0xA8,
(byte) 0xD0, (byte) 0xA1, (byte) 0xA0, (byte) 0xE7,
(byte) 0x52, (byte) 0x43, (byte) 0xB0, (byte) 0x39,
(byte) 0x01, (byte) 0x6A, (byte) 0x61, (byte) 0x43,
(byte) 0x5C, (byte) 0xA5, (byte) 0x91, (byte) 0xE9,
(byte) 0x4B, (byte) 0x1A, (byte) 0xF7, (byte) 0x60,
(byte) 0xC9, (byte) 0xAE, (byte) 0xE2, (byte) 0xCE,
(byte) 0xE0, (byte) 0x15, (byte) 0x53, (byte) 0x51,
(byte) 0x1C, (byte) 0x93, (byte) 0x0E, (byte) 0xF3,
(byte) 0xBA, (byte) 0x0B }, (short) 0x0000, (short) 0x0040);
Die Funktion setFieldFP
wirft ein CryptoException
mit dem Ursachencode ILLEGAL_VALUE
was bedeutet, dass die Schlüssellänge nicht passen ... Aber es tut (0x0200
ist die Größe der Kurve in Bits und 0X0040
ist die Länge der Primzahl in Bytes)!
ich sagte, es ist wirklich seltsam, denn wenn ich mit dem folgenden Wert versuchen:
ECPublicKey pubKey = (ECPublicKey) KeyBuilder.buildKey(
KeyBuilder.TYPE_EC_FP_PUBLIC, (short) 0x0200, false);
pubKey.setFieldFP(new byte[] { (byte) 0xFF, (byte) 0xFF,
(byte) 0xFF, (byte) 0xFF, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0xFF, (byte) 0xFF,
(byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
(byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
(byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
(byte) 0xFF, (byte) 0xFF, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0xFF, (byte) 0xFF,
(byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
(byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
(byte) 0xFF, (byte) 0xFF}, (short) 0x0000, (short) 0x0040);
Es funktioniert gut ...
Also muss ich feststellen, dass die CryptoException
das ausgelöst wird, nicht wirklich betrifft die Größe des Parameters, weil in beiden Fällen die Größe das gleiche ist ...
So what? Unterstützt meine Karte nur elliptische Kurven auf bestimmten Feldern? Ist jemand jemals auf diese Art von Problem gestoßen?
Wo haben Sie Ihre Werte gefunden? – vojta
Der Wert, den ich verwenden möchte, stammt aus dem Projekt 'Arcana-ECDB' (freie Datenbank elliptischer Kurven für die Kryptographie). Ich habe einige Dinge in Java getestet und es funktioniert gut. Die zweiten, die nicht die 'CryptoException' erhebt nur die Haupt' P' definiert in der P-256-Kurve von der NIST, dass ich zwei Mal schrieb einen 64 Byte-Array zu haben ... – Raoul722
Sind Sie sicher, dass Ihr Wert ist Big-Endian und rechtsbündig? – vojta