Domanda

Perché il modulo è riempito con zeri iniziali?Stavo leggendo PKCS#1 e PKCS#8 ma non ho trovato nulla a riguardo.In C# gli zeri iniziali devono essere rimossi, qualcuno sa perché?

A http://etherhack.co.uk/asymmetric/docs/rsa_key_breakdown.html, puoi vedere che il modulo e l'esponente hanno zeri iniziali.La domanda è: perché ce l'hanno, non ho ancora trovato una spiegazione da nessuna parte.

È stato utile?

Soluzione

I valori della chiave privata sono codificati come ASN.1 INTEGER, ovvero valori con segno nel formato del complemento a due.Il byte zero iniziale è necessario quando è impostato l'MSB del valore della chiave RSA (senza segno).Avere l'MSB impostato senza un byte zero iniziale significherebbe un valore negativo.

Le specifiche ASN.1 sono gratuite e sono collegate da Wikipedia.La sezione rilevante qui è in X.690, "8.3 Codifica di un valore intero".

Fornirò qui un esempio nel caso in cui la pagina collegata scompaia.

Se hai openssl, puoi generare chiavi di prova con:

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

Ecco i dati di esempio da test.der:

30 82 01 3b
SEQUENZA ASN.1, lunghezza 0x13b, segue il contenuto

02 01 00
versione:ASN.1 INTEGER, lunghezza memorizzata 1, valore 0

02 41 00 c0 8e ... (65 byte di dati)
modulo:ASN.1 INTEGER, lunghezza memorizzata 65, valore 0xc08e...(è richiesto il byte zero iniziale perché il modulo è > 2^511)

02 03 01 00 01
esponente pubblico:0x10001 (byte zero iniziale non richiesto perché l'esponente è < 2^23)

02 41 00 b5 87 ... (65 byte di dati)
esponente privato:0xb587...

02 21 00 e7 18 ... (33 byte di dati)
primo1:0xe718...

02 21 00 d5 43 ... (33 byte di dati)
primo2:0xd543...

02 20 75 67 a1 ... (32 byte di dati)
esponente1:0x7567...(il byte zero iniziale non è richiesto perché l'esponente è < 2^255)

02 20 0a f6 3f ... (32 byte di dati)
esponente2:0x0af6...

02 21 00 c7 13 ... (33 byte di dati)
coefficiente:0xc713...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top