In che modo, se mai, le chiavi SSH differiscono dalle chiavi asimmetriche utilizzate per altri scopi?


13

In che modo, se mai, le chiavi SSH differiscono dalle chiavi asimmetriche utilizzate per altri scopi, ad esempio la firma e-mail?

Mi viene richiesto di chiedere questo, in parte, perché su OS X ci sono app disponibili per gestire le chiavi SSH (ssh-agent, SSHKeychain, ecc.) Così come le app progettate per gestire le chiavi GPG (GPG Keychain Access, ecc.), e apparentemente mai i due si incontrano. Tuttavia, non credo che si tratti di un problema specifico di OS X.

Questa separazione delle preoccupazioni è dovuta al fatto che le chiavi sono di tipo piuttosto diverso o perché sono memorizzate in luoghi diversi o è per qualche altra ragione o combinazione di ragioni, ad esempio ragioni storiche?

Risposte:


14
  • Le chiavi SSH sono semplicemente coppie di chiavi asimmetriche RSA, DSA o ECDSA. Una tale coppia di chiavi generata da OpenSSH può già essere utilizzata da OpenSSL e dalla maggior parte degli altri programmi.

    (Il .pubfile di output ssh-keygenè in un formato specifico di OpenSSH, ma ciò è irrilevante poiché il file "privato" contiene già sia chiavi private che pubbliche.)

    Altri software SSH può avere i propri formati di memorizzazione, come RFC 4716 o di PuTTY PPK , ma memorizzare lo stesso RSA / DSA informazioni / ECDSA.

  • X.509 (utilizzato da SSL, S / MIME) è leggermente più complicato: la chiave "privata" è sempre la stessa, ma invece di un file di chiave pubblica non visibile si ha un "certificato" - una struttura ASN.1 contenente chiave pubblica, nomi di soggetto ed emittente, date di validità. Nei certificati X.509 v3, saranno presenti estensioni come "utilizzo chiave" e "nome soggetto alternativo". L'intero certificato è firmato dalla chiave dell'emittente (o autofirmato se non esiste un emittente separato).

    Puoi facilmente usare un file "chiave privata" X.509 per SSH - OpenSSH usa anche lo stesso formato.

    È possibile creare un certificato X.509 da una semplice coppia di chiavi e quindi autofirmarlo, oppure è possibile creare una "richiesta di certificato" e inviarlo per essere firmato da un'autorità di certificazione.

    Per visualizzare le informazioni in un certificato X.509, utilizzare:

    certtool -i < foo.pem
    certtool -i --inder < foo.crt
    
    openssl x509 -noout -text < foo.pem
    openssl x509 -noout -text -inform der < foo.crt
    

    ( certtoolfa parte di GnuTLS.)

  • Le chiavi OpenPGP (utilizzate da GPG) sono le più complicate. Quella che chiami "chiave PGP" o "coppia di chiavi PGP" è una struttura complessa chiamata "certificato OpenPGP", contenente:

    • una "chiave primaria": una coppia di chiavi asimmetriche, generalmente utilizzata per la firma
    • uno o più "ID utente" - etichette testuali, generalmente sotto forma di "Nome <indirizzo email @>>
      • almeno uno di questi è contrassegnato come "ID utente primario"
      • per ogni ID utente, una "firma automatica" - firma con la tua chiave primaria
      • per ogni ID utente, zero o più "firme" di altri utenti
      • i pacchetti di auto-firma contengono anche i tuoi algoritmi preferiti (SHA-1, AES, ecc.)
    • una o più "sottochiavi": coppie di chiavi aggiuntive, la prima è generalmente per la crittografia
      • per ogni sottochiave, una firma della chiave primaria
    • zero o più "ID foto": allegati JPEG o PNG contenenti il ​​tuo viso
      • firmato allo stesso modo degli ID utente
    • zero o più certificati X.509

    Tutte le coppie di chiavi hanno date di scadenza e bit di utilizzo: firma i dati, certifica (firma) le chiavi, crittografa, autentica i servizi. La chiave primaria per impostazione predefinita ha i bit "sign" e "certifica" e la prima sottochiave è "crittografare". Se si aggiunge una sottochiave "autenticazione", è possibile utilizzarla gpg-agentper l'autenticazione SSH.

    Per vedere cosa contiene il tuo certificato:

    gpg --export joe@example.com | gpg -vv
    
    gpg --export joe@example.com | certtool --pgp-certificate-info
    

    ( certtoolfa parte di GnuTLS.)


I certificati X.509 e le loro chiavi private associate sono disponibili in diversi formati:

  • DER è una codifica binaria di una struttura ASN.1 del certificato. Tali file di solito hanno .crto .cerestensioni di file ( .derè meno comune ma non invisibile).

  • I file di formato "PEM" contengono gli stessi dati codificati DER, ma codificati ulteriormente utilizzando Base64 e tra le intestazioni "INIZIA QUESTA" e "FINE". Un'estensione del nome file comune è .pem, sebbene entrambi .crte .certalvolta vengono utilizzati anche qui (ma mai .der).

  • Per le chiavi private appartenenti ai certificati, viene solitamente utilizzato il formato "PEM" - Base64 circondato dalle intestazioni "BEGIN PRIVATE KEY" (chiave in una struttura PKCS # 7) o "BEGIN RSA (o DSA) PRIVATE KEY" (chiave nuda, OpenSSL formato). A volte la chiave si trova in un .keyfile separato , a volte è inclusa nel certificato.

  • PKCS # 12 e il PFX leggermente più vecchio sono contenitori crittografati che memorizzano sia il certificato che la chiave privata (spesso anche il certificato dell'emittente). Questo formato viene utilizzato dalla maggior parte dei software durante l'esportazione o il "backup" di certificati con chiavi private.

Una situazione meno confusa è in OpenPGP: tutti i dati seguono lo stesso formato binario ed è facoltativamente "corazzato" (codificato con Radix64 e tra intestazioni simili a PEM).


2

Archiviati in luoghi diversi e in diversi formati (i formati utilizzati da PGP, GnuPG sshe diversi formati X.509, tra gli altri, sono piuttosto diversi). E 'possibile transcodifica tra di loro in una certa misura dalla miscelazione e la congruenza le giuste opzioni per ssh-keygen, pgp, gpg/ gpg2, openssl, ecc .; ma in generale non vale la pena. Inoltre, diversi formati chiave supportano diverse quantità di informazioni, consshportando le informazioni extra in meno e i formati X.509 PEM e DER che portano il massimo. Inoltre, il portachiavi OSX è semplicemente un archivio crittografato di chiavi / valori, quindi è generalmente necessario un meccanismo diverso da ciascuna applicazione per convertire tra la chiave nativa del programma + il formato dei metadati e qualcosa che può essere archiviato nel portachiavi. (Problemi simili si applicano al portafoglio KDE e al portachiavi GNOME.)


È importante notare che anche lo standard di crittografia sottostante è diverso. gpg utilizza principalmente DSA, mentre SSH utilizza principalmente RSA. Esiste un numero limitato di standard asimmetrici standard e la maggior parte delle applicazioni supporta più standard, ma gli standard che sono "normali" per le diverse applicazioni variano.
jcrawfordor,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.