Quale tipo di codifica utilizza i file .pem per memorizzare la chiave?

3

Quale codifica è il modulo nella crittografia RSA memorizzato come in un file .pem? È qualcosa di simile a base64 del modulo?

Posso recuperare il modulo usando quanto segue:

openssl rsa -in pubkey.pem -pubin -modulus

Ma cosa fa in realtà? Se ho il prodotto di due numeri primi (n) in forma decimale, come dovrei codificarlo in modo che l'utility rsa possa decodificarlo?

    
posta Juan John Mathews 08.02.2015 - 10:07
fonte

2 risposte

6

Ci sono due formati comunemente usati:

  • DER - binario; i dati sono memorizzati nella struttura ASN.1
  • PEM - testo; fondamentalmente è DER codificato in base64

Puoi esaminarli entrambi, ad esempio con comando openssl asn1parse o decoder online .

    
risposta data 08.02.2015 - 14:53
fonte
3

Questa domanda (e risposta) è un sottoinsieme di link . Per comprimere e adattare quello:

Per una chiave pubblica RSA è necessario il modulo e l'esponente . È molto comune usare 3 o 65537 (ovvero F4, il quarto primo Fermat) come esponente, ma non obbligatorio o universale.

La libreria OpenSSL può supportare sia il formato chiave PKCS # 1 / rfc3447 specifico per RSA, sia il formato generico e più utile e comune X.509 "SPKI", con uno memorizzato in DER o PEM . L'utilità della riga di comando rsa di default fa SPKI PEM, ma puoi selezionare gli altri formati con le opzioni, vedi la manpage (online su link ).

(come dice @zakjan) DER è una codifica di ASN.1, e PEM è DER (ulteriormente) codificato come base64 (il tutto, non i singoli campi come il modulo), più le linee BEGIN e END, che indicano il formato, in questo caso RSA PUBLIC KEY per PKCS # 1 rispetto a PUBLIC KEY per SPKI. Per codificare PKCS # 1 in DER, codificare il modulo e l'esponente come INTEGER ASN.1, ricordando che i moduli RSA sono quasi sempre dimensionati come multipli di 8 (es. 1024, 2048) e quindi richiedono un ottetto iniziale, quindi codificano in un SEQUENZA. Per SPKI, incorporare ulteriormente in SEQUENCE con un AlgorithmIdentifier che identifica RSA, per rfc3279 .

In alternativa, puoi usare la libreria OpenSSL per codificarti. Metti i due numeri in oggetti "bignum" (BN), punta a quelli da un oggetto RSA (lasciando gli altri campi inizializzati a vuoto), e scrivilo con le routine RSAPublicKey (non), o meglio impostalo in un (vuoto ) Oggetto EVP_PKEY con EVP_PKEY_set1_RSA e scrivi con d2i_PublicKey{_fp,bio} per DER o PEM_write[_bio]_PublicKey per PEM.

    
risposta data 08.02.2015 - 22:41
fonte

Leggi altre domande sui tag