Le lunghezze delle chiavi per le cifre sono generalmente espresse in bit, non in byte. 8 bit = 1 byte. Quindi quello che ti aspetteresti di vedere è una chiave di 512 bit = 64 byte, quindi perché non l'hai fatto?
Primo: il formato. Il file di output del tuo comando è un file PEM, il che significa che è un Base64 -encoded DER struttura dati codificata in cui i dati Base64 sono racchiusi tra queste righe -----BEGIN … -----
e -----END … -----
. Base64 è una codifica che emette 4 caratteri per ogni 3 byte di input. Quindi i tuoi 424 caratteri dopo la codifica Base64 erano 318 byte (= 2544 bit) prima della codifica. Ma questo non è ancora 64 byte, vero?
Secondo: dati aggiuntivi. Quando richiedi una chiave con una dimensione di 512 bit, ciò che stai richiedendo è una chiave il cui modulo pubblico ha una dimensione di 512 bit. Ma una chiave RSA chiave pubblica consiste in questo modulo pubblico e esponente pubblico. Quest'ultimo di solito è piuttosto piccolo, nel tuo esempio era di 17 bit (memorizzati come 3 byte). Cos'altro?
Terzo: la chiave privata. Quindi il comando genrsa
genera effettivamente una coppia di chiavi RSA composta da chiave privata e pubblica. Non esiste un comando per generare semplicemente una chiave pubblica, poiché ciò sarebbe inutile. Invece, per convenzione, quando si memorizza la chiave privata, si memorizza anche la chiave pubblica, poiché è comunque solo un valore aggiuntivo. Normalmente la chiave privata dovrebbe avere all'incirca le stesse dimensioni dell'esponente pubblico, quindi non abbiamo ancora spiegato le dimensioni del file. Questo perché openssl
utilizza un ottimizzazione basata sul teorema del remainder cinese e per questo ha bisogno per memorizzare tre valori aggiuntivi con la chiave privata.
Come puoi vedere tutto questo per te?
-
openssl base64 -d -in testKey -out testKey.raw
decodificherà la codifica base64 e produrrà i dati grezzi. Questo ha una dimensione di 318 byte.
-
openssl asn1parse -in testKey
(o in alternativa: openssl asn1parse -in testKey.raw -inform der
per indicare che non si aspetta PEM ma DER grezzo) analizzerà genericamente la codifica ASN.1 DER e mostrerà i singoli campi.
-
openssl rsa -in testKey -text -noout
analizzerà il file come una chiave RSA e ti darà un'interpretazione di tutti i campi, cioè i loro valori.