Gibt es eine standardisierte fixed-length-Kodierung für EC public-keys?
Ich Frage mich, ob es (und ich hoffe, es ist) ein standard für public-key Größe für ECDH (Elliptic Curve Diffie-Hellman) und ECDSA (Elliptic Curve Digital Signature Algorithm) für jeden Typ Kurve über prime Felder (192, 224, 256, 384 und 521).
- Gute Frage, security.stackexchange.com
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie eine der "named curves" dann den öffentlichen Schlüssel Größe ist festgelegt und angewiesen auf das "Feld" Größe der zugrunde liegenden Kurve.
Komprimierte vs. unkomprimierte Darstellung
Public-key-Größen weitere hängt davon ab, ob die "unkomprimierte" Darstellung oder die "komprimierte" Darstellung verwendet wird. In der unkomprimierten form, die public-key Größe ist gleich zwei mal das Feld die Größe (in bytes) + 1, in der komprimierten form ist es Feldgröße + 1. Wenn also deine Kurve ist definiert
secp256r1
(auch alsNIST P-256
oderX9.62 prime256v1
), dann wird das Feld Größe ist 256 bit oder 32 bytes. Und damit der öffentliche Schlüssel wäre genau 65 bytes (32*2 +1) lang in unkomprimierter form und 33 Byte (32 +1) lange in der komprimierten form.Die unkomprimierte form besteht aus einem 0x04 (in Analogie zu den DER OKTETT-STRING-tag) plus die Verkettung der binären Darstellung der X-Koordinate plus die binäre Darstellung der y-Koordinate der öffentlichkeit zeigen.
GF(2^p) Fall
Wenn das zugrunde liegende Feld GF(2^p), dann x und y kann man als Elemente von [0, n-1]. Sie sind codiert der üblichen Weise Ganzzahlen codiert sind, und den verbleibenden Platz zu füllen, genau log2(p)/8 bytes mit null-Werten aufgefüllt.
GF(2^m) Fall
Für GF(2^m) x und y kann aufgefasst werden als Polynome a_0x_0 + ... + a_m-1 mit Koeffizienten a_i 0 oder 1. Ihre binäre Darstellung ist einfach die Verkettung der Koeffizienten.
Weiter Lesen
Die genauen details finden Sie in SEC1v2. (Vor allem Abschnitt 2.3.3 Elliptische-Kurven-Punkt-zu-Byte-String Konvertierung auf den Seiten 10 und 11.)
War ich auf der Suche nach der Antwort ziemlich lange und wollte mir in Java. Meine Aufgabe war es, zu get key Größe von X509Certificate (website, um korrekt zu sein)
Methode #1 - eigentlich ist die Berechnung:
(Überprüfung, ob erste byte 0x04 können Hinzugefügt werden)
Methode #2 - Import aus einige "Interna":