Il più popolare formato di chiave RSA

4

Stiamo cercando di decidere quale formato di chiave RSA deve essere utilizzato dalla nostra applicazione. Il formato ideale sarebbe ampiamente utilizzato e supportato nella maggior parte delle piattaforme / framework popolari. Ciò renderebbe facile l'integrazione di terze parti con il nostro sistema. Quindi quale dei due formati di chiave RSA è più vicino a questo?

    
posta SoftwareFactor 01.05.2014 - 10:54
fonte

1 risposta

5

Per archiviazione della chiave privata , troverai principalmente:

  • Cosa fa OpenSSL . Questo in realtà è il formato ASN.1 specificato alla fine di PKCS # 1 (digita RSAPrivateKey ) . Quando quell'oggetto è codificato Base64 in formato PEM, l'intestazione sarà: -----BEGIN RSA PRIVATE KEY----- . Il formato raw (binario) è "così com'è", ma PEM include opzioni per la crittografia simmetrica (con una chiave o una password). Questo formato PEM non è realmente standardizzato o documentato; è "cosa fa OpenSSL".

  • PKCS # 8 . Per una chiave RSA, sarà un wrapper attorno al formato ASN.1 di PKCS # 1, con una specifica esplicita del tipo di chiave (ad esempio "questa è RSA"). PKCS # 8 include anche opzioni per la crittografia simmetrica. OpenSSL supporta anche PKCS # 8 e può codificarlo in PEM, questa volta con l'intestazione: -----BEGIN PRIVATE KEY----- (notare la differenza con il caso precedente: il tipo di chiave non è più specificato nell'intestazione PEM, poiché la struttura ASN.1 contiene tali informazioni). Mentre un file PKCS # 8 che è codificato PEM potrebbe contenere la crittografia a livello PEM, questo è raramente eseguito poiché PKCS # 8 può anche farlo internamente. PKCS # 8 beneficia del supporto in molti framework, ad es. Java sa che il formato è nativo.

  • PKCS # 12 , noto anche come "PFX". Si tratta in effetti di un formato di archivio generico che offre funzionalità di crittografia e controlli di integrità opzionali e può essere utilizzato per mettere insieme una (o più) chiavi private e i certificati X.509 corrispondenti. Se si memorizzano le chiavi pubbliche nei certificati, si vorrà utilizzare tale formato poiché è nativamente conosciuto da molti sistemi (Windows e MacOS X possono leggerlo direttamente, ad esempio).

  • Il formato OpenPGP . Questo è ciò che verrà utilizzato nella maggior parte dei "portachiavi" come gestito da GnuPG . Non è basato su ASN.1. Se devi reimplementarlo da solo, allora è più semplice da gestire rispetto a PKCS # 8. Questo formato è raramente noto in modo nativo dai framework di programmazione esistenti, ma sono disponibili librerie opensource pronte per l'uso (ad es. GnuPG o Bouncy Castle ).

  • Supporta OpenSSH . SSH utilizza da tempo i propri formati, ma per le chiavi private, OpenSSH può alimentare i formati OpenSSL (sia OpenSSL-specifici che PKCS # 8).

Per chiavi pubbliche , ci sono alcuni colpi di scena:

  • Nei mondi OpenSSL e X.509, le chiavi pubbliche non esistono "come se stessi" ma solo come parte dei certificati X.509. Si consiglia di archiviare la chiave pubblica in una struttura di certificato, che potrebbe essere (per tradizione) autofirmata, poiché esiste un campo "firma" nel formato del certificato X.509. La parte di un certificato che contiene la chiave pubblica è chiamata SubjectPublicKeyInfo (cercala in lo standard ) ed è un wrapper su un formato specifico per l'algoritmo, che ci riporta a PKCS # 1. Le strutture% cod_de% DER codificate vengono occasionalmente individuate in applicazioni reali, ma sono piuttosto rare.

  • OpenPGP ha i propri formati per le chiavi pubbliche.

  • OpenSSH ha i propri formati per le chiavi pubbliche. Attenzione al plurale: ce ne sono diversi. Inizia qui per le descrizioni.

Per interoperabilità e integrazione , direi che è un legame tra X.509 + PKCS # 8 (con possibile utilizzo di PKCS # 12) e OpenPGP. Personalmente, userei il primo, ma per lo più per abitudine.

    
risposta data 01.05.2014 - 15:36
fonte

Leggi altre domande sui tag