2011-05-12 9 views

Respuesta

18

Los valores de las claves privadas están codificados como ASN.1 INTEGER, que son valores con signo en formato de complemento a dos. El byte cero inicial es necesario cuando se establece el MSB del valor de la clave RSA (sin firmar). Tener el conjunto MSB sin un byte cero inicial significaría un valor negativo.

Las especificaciones de ASN.1 son gratuitas y están enlazadas desde Wikipedia. La sección relevante aquí está en X.690, "8.3 Codificación de un valor entero".

Proporcionaré un ejemplo aquí en caso de que la página vinculada desaparezca.

Si tiene OpenSSL, puede generar claves de prueba con:

openssl genrsa -out test.pem 512 
openssl rsa -in test.pem -out test.der -outform der 

está aquí datos de la muestra de test.der:

30 82 01 3b
ASN.1 SECUENCIA, longitud 0x13b, contenidos siguen

02 01 00
versión: ASN.1 INTEGER, longitud almacenada 1, valor 0

02 41 00 c0 8e ... (bytes de datos 65)
módulo: ASN.1 INTEGER, almacenado longitud 65, el valor 0xc08e ... (que conduce cero bytes necesario porque el módulo es> 2^511)

02 03 01 00 01
exponente público: 0x10001 (cero bytes no es necesario porque exponente es < 2^23)

02 41 00 b5 87 ... (65 bytes de datos)
exponente privado: 0xb587 ...

02 21 00 e7 18 ... (33 bytes de datos)
prime1: 0xe718 ...

02 21 00 d5 43 ... (33 bytes de datos)
prime2: 0xd543 ...

02 20 75 67 a1 ... (32 bytes de datos)
exponent1: 0x7567 ... (líder de bytes cero no requiere porque exponente es < 2^255)

02 20 0a f6 3f ... (32 bytes de datos)
exponent2: 0x0af6 ...

02 21 00 c7 13 ... (33 bytes de datos)
coeficiente: 0xc713 ...

+0

Su respuesta está muy bien explicado. El uso de openssl para demostrar la explicación fue útil. –

+0

tenga en cuenta que las muestras enteras ASN.1 DER se pueden generar muy bien con openssl, p. Ej.: 'x = 128; openssl asn1parse -genstr "INTEGER: $ x" -noout -out data && hexdump -C data' – mykhal

Cuestiones relacionadas