2017-11-02 5 views
0

Ich habe erstellt mehr 1024-Bit-DIE-codierte RSAPublicKeys (PKCS # 1) mit dem OpenSSL-Befehl:Ist die Länge eines DER-codierten RSAPublicKey (PKCS # 1) für ein 1024-Bit-RSA-Schlüsselpaar konsistent?

openssl genrsa 1024 | openssl rsa -outform DER -RSAPublicKey_out -out pubkey.der 

Bisher hat genau 140 Bytes jede Public-Key-Datei wie folgt erstellt. Sind öffentliche 1024-Bit-RSA-Schlüssel in diesem Format immer 140 Byte lang, oder kann diese Größe variieren?

I've learned that the size of a DER encoded private key can vary.

+0

Ja, die Größe kann variieren. Ich habe keine Ahnung, was der zweite Befehl in Ihrer Pipe ist, weil 'RSAPublicKey_out' keine gültige Option für meine Version von openssl ist. –

Antwort

1

Es sollte immer 140 Byte für einen 1024-Bit-Schlüssel sein, einen Exponentenwert von F3 (0x010001).

Die Codierung des öffentlichen Schlüssels ist

SEQUENCE (RSAPublicKey) 
30 xa [ya [za ...]] 
    INTEGER (n) 
    02 xb [yb [zb ...]] [pb] ... 
    INTEGER (e) 
    02 xc [yc [zc ...]] [pc] ... 

Wo pb und pc optional Füllbytes sind, und die xa-Xc (und y/za-c) Werte (von negativ die ganzen Zahlen zu vermeiden) sind BER-Längen.

Wenn e 0x010001 ist, dann codiert es als 02 03 01 00 01, immer 5 Bytes.

Die Schlüsselgröße eines RSA-Schlüssels wird durch die Länge der Bitfolge bestimmt, die mit dem ersten gesetzten Bit beginnt. Also für einen 1024-Bit-Schlüssel der Wert zwischen 2^1023 und 2^1024 sein wird, und dass es wie

0b1xxx_xxxx {1016 other "don't care" bits} 

aussehen Da das hohe Bit gesetzt ist, würde die Zahl ohne Polsterung negativ sein, so dass die Die 1024-Bit-Nummer wird in 128 Wert-Bytes und ein vorangestelltes Byte "das Vorzeichen-Bit ist nicht gesetzt" oder 129 Bytes codiert.

So jetzt wissen wir die volle codierte Länge der Integer, 129. Das ist 0x81 in hex, was größer ist als 0x79 (die größte "kompakte" BER Länge), so dass die Länge in langer Form geschrieben wird: 0x81 (die Länge ist ausgedrückt in den nächsten 1 Byte (s)) 0x81.

02 81 81 00 [128 more bytes representing n] 

So e bis 5 Bytes codiert und n codiert bis 132 (128 + 1 + 2 + 1), die 137 ist

in hex 0x89 137 ist, so dass die Sequenzlänge 0x89 0x81 sein . 137 Byte Inhalt + 2 Byte Länge + 1 Byte Tag => 140 Byte.

Diese Berechnung geht davon aus, dass niemand mit der Definition der Schlüsselgröße schlecht ist. Eine lockere Interpretation (die, pro http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Br1.pdf ist falsch) würde den Wert n zwischen 2^1016 und 2^1024 setzen (aka "es benötigt 128 Bytes, wen interessiert welches Bit ist die höchste gesetzt?"). In diesem Fall könnte das Füllbyte von n verschwinden und die Länge würde auf 139 fallen.

Verwandte Themen