Qual è la differenza tra il formato PEM in DSA / RSA / ECC? (Posso confondere PEM con questi)?

12

Ad esempio, quando si crea una chiave SSH ECC, è possibile utilizzare questo comando:

ssh-keygen -o -a 100 -t ed25519

Come ho capito, l'argomento -o è usato per generare:

The private keys using a newer format opposed to the more commonly accepted PEM

Questi "formati più recenti" sono DSA / RSA / ECC o potrebbe essere PPK vs PEM? Scusa se confondo SSH formati principali con chiavi SSH private ' estensioni file ; Vorrei chiedere la principale differenza tra PEM per i "nuovi formati" menzionati nella citazione.

    
posta JohnDoea 20.11.2016 - 14:34
fonte

4 risposte

24

Prima di tutto, ecco la voce man page completa per ssh-keygen -o dalla mia macchina ( ssh-keygen non sembra avere un flag di versione, ma man page è del 17 febbraio 2016)

-o Causes ssh-keygen to save private keys using the new OpenSSH format rather than the more compatible PEM format. The new format has increased resistance to brute-force password cracking but is not supported by versions of OpenSSH prior to 6.5. Ed25519 keys always use the new private key format.

Sembra abbastanza chiaro che questo è solo il formato del file che viene prodotto. Tieni inoltre presente che ssh-keygen memorizzerà solo le chiavi Ed25519 nel nuovo formato, indipendentemente dai flag in cui sei passato.

Poiché entrambe le tue domande oggi hanno avuto la stessa domanda di fondo, affrontiamola.

... these "newer formats" DSA/RSA/ECC ...

Ok, quindi DSA, RSA ed ECC non sono formati diversi, sono algoritmi completamente diversi e sono completamente indipendenti l'uno dall'altro.

Vorrei poter trovare un modo migliore per spiegarlo, ma non sono sicuro di poterlo fare senza essere troppo tecnico. Proviamo questo: è un po 'come dire che http e ftp sono solo formati diversi per il trasferimento dei file, oppure .docx e .pptx sono formati diversi dei documenti di Office. Definire queste "sole differenze di formato" è fondamentalmente sbagliato, il software sta facendo una cosa molto diversa nei due casi (anche se per produrre lo stesso risultato finale, trasferire un file o creare un bel documento).

Ora parliamo di formati.

Quindi vuoi salvare una chiave privata in un file? PEM è un formato di file per la memorizzazione di informazioni crittografiche generali, ma esistono altri formati di file . PEM può essere utilizzato per molte cose: chiavi private, o certificati, o il testo di una e-mail che si desidera crittografare o firmare. È solo un contenitore "roba crittografica".

Tempo di analogia: salvataggio di un documento di Word. Potresti salvarlo nel vecchio formato .doc che è universalmente accettato da tutte le versioni di Office e anche dai programmi open source (PEM è anche vecchio e universalmente accettato), oppure potresti utilizzare il formato più recente .docx (il -o Formato OpenSSH). A volte le nuove funzionalità non sono retrocompatibili e possono essere salvate solo nel nuovo formato (come ed25519).

(Mille grazie a @GordonDavisson per questa analogia)

Ad eccezione della retrocompatibilità, il formato scelto non ha nulla a che fare con il contenuto del file.

Esempi:

Formato PEM con una chiave RSA.

Nota che il messaggio inizia con -----BEGIN RSA PRIVATE KEY----- , questo è il formato PEM standard del settore - qualsiasi software in grado di leggere PEM sarà in grado di leggere questo:

$ ssh-keygen -a 100 -t rsa
$ cat .ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAwTLkTDZUisg0M/3BDBOjrmBvJXb8cdfveGG1KQhAhFDLMp5w
XKgGFMy339m3TGB1+ekKoXnX3dcRQtpQbuFeDB59cmKpDGZz7BzfetpjeIOGCzG+
Vt2BnDf2OlKb6EE7tC3PSmFgL0nQPSyz8x7rE7CMOQEnz1tKkK9Gpttcku8ifwmd
LAHlVaTV3BIiFJN23fwe7l0czFaV98iy8YRgk/Av3gRlsBABGT5qD8wPiI4Ygpxv
UuT2kq53lhBTWO9hIth5tUU0N7x7QN6/rRSi2uHcmJYXFkpsLie697G17TN5ln3E
X5frsrjVyu0JhjvC5mlRBudSJWcWm/KrcTQxdQIDAQABAoIBAFR6nWtZ4nPhATqu
veg6+jq4vkEim1ZodrUr/FxZ2GRDM+cJctaBPk+ACPMgL099ankB1v0u2x6M+WZD
MiKZ91bTSkVnMMZUUmIvaeU9c3tx/34LnVA8gX0+1zM/hh7zz1iFI3xBwh5LZ3wo
fPNVVLOCYn5WrAK2x48mpX02tG8m0OY5kdCdFW1f6UbCGk3K9ov82yQ+JbjWydOS
ZaS7bnJCRsjDhPm/Ooe2DZ8CKHRO3DOiZAAFYqsosxM2C12+alC+hdKHoJ0pWZWe
eckZiALTENi+PzgSq4ykdBaoreeI84lpIzYQO06rrjM2/fw1x/SQsDYhCsQnNRib
sipl2mECgYEA74rBQDIEWaIVVZ72foeZYOMmAUKCLQtNxVuGl/XoMZO3evN2vbOv
Nw/nn5lVt6PRykVUUl6yb5gHvRSGtGJSB1q6pBVN1EF2sfvUep6mmpEwbSbENiAX
IftE0ap7PKT1aLKbLllwdsJlLCRMJIk07AvsulbkhSC+UmJVkfjblgkCgYEAznkE
fzmWS358MLxb0JM+4v1DO/1ne8z29ddHNppxSNj2Xjf+MMvOY4KaRQa8dMwc3Eqa
1EvPqnK6ila4L08Ai4CyWoGkkkIQBO9jO3mLp24xk6TRo002DbfJRnu4qW4zeryp
gYeFfBzwhc/IQKjXhv8AAfEUFCSYiFaWBsENuw0CgYEAwmyDyCAQqdPFrzYT6cUT
t7EGYtVhpT/cgshz6Rk9uiekL9Y2VWjnWTC+liq1iRUdLSiydRzJhYwHE+/6GaUH
4VJB1PY5soLj3TiCUHg+z4vym1VwwmGvhPRV+jt+RU26ppz5GVic0LeduINJjgoT
e1d+cAwg9PELqQCJZa5wREkCgYBPEuPZAaoAsalIVOro32uHLS1xrSPTsvSlxFO+
orleB9Ga1eDguT0KuTrx0pmcNYucBmpzgbE/ev7b+khBvgTcaGZl6R6o8OoHqdKc
NXl5nucXv1iWLPzVlhxchQd8w/qtN9HHDKrflIm9BY2Qzdj1F3XeSIDDEhzkohyE
66yhhQKBgGh9knh8SxnVxaPk0Rk/bQope9AwIDuIpfsf4KC/EPSZmMNHP8xBh8al
eymUot7Pj6dck31V4C3q74NKobY3p6fZ5t7tP9K6Br+J/FQFhvAdFAwpTD2Bks5H
fhZO5cniPpydb0YvOnoaVnb0nzXVsf1jIgPKfsCsZxoyE0jLb9oV
-----END RSA PRIVATE KEY-----

Formato OpenSSH con una chiave ed25519:

Oltre ad essere più breve (poiché le chiavi ECC solo sono molto più corte) notano che il messaggio inizia con ----BEGIN OPENSSH PRIVATE KEY----- , questo è nel formato specifico di OpenSSH che altri software potrebbero o no essere in grado di leggere:

$ ssh-keygen -o -a 100 -t ed25519
$ cat .ssh/id_ed25519.o
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACC7gIlwBMp+H6VVNZSHI0in2iCU/yi67WfeFPfuyAdkBAAAAJh7nk7je55O
4wAAAAtzc2gtZWQyNTUxOQAAACC7gIlwBMp+H6VVNZSHI0in2iCU/yi67WfeFPfuyAdkBA
AAAEBHl+qBAosBAUIGuvdDR8gJN/PEhempLe4NtyKiO7hCPLuAiXAEyn4fpVU1lIcjSKfa
IJT/KLrtZ94U9+7IB2QEAAAAEm1pa2VATWlrZS1zYW1zdW5nMQECAw==
-----END OPENSSH PRIVATE KEY-----
    
risposta data 20.11.2016 - 17:45
fonte
2

Are these "newer formats" DSA/RSA/ECC or might it be PPK vs PEM?

DSA / RSA / ECC sono algoritmi utilizzati con crittografia a chiave pubblica e non formati. Le chiavi utilizzate per questi algoritmi possono essere archiviate in diversi formati, cioè diversi wrapper e codifiche per i dati binari della chiave effettiva.

L'opzione -o viene utilizzata per applicare un nuovo formato per le chiavi private diverso dal PEM utilizzato in precedenza. Questo nuovo formato è descritto in nuovo formato della chiave openssh e bcrypt pbkdf . Ma per riassumere: offre una protezione migliore se un utente malintenzionato accede a una chiave privata protetta da passphrase poiché ora utilizza una funzione di derivazione della chiave corretta sulla passphrase anziché su MD5.

    
risposta data 20.11.2016 - 17:36
fonte
1

Quanto segue è tratto dalle note sulla versione di OpenSSH 7.8, 2018-08-24. ( link )

This release includes a number of changes that may affect existing configurations:

ssh-keygen(1): write OpenSSH format private keys by default instead of using OpenSSL's PEM format. The OpenSSH format, supported in OpenSSH releases since 2014 and described in the PROTOCOL.key file in the source distribution, offers substantially better protection against offline password guessing and supports key comments in private keys. If necessary, it is possible to write old PEM-style keys by adding "-m PEM" to ssh-keygen's arguments when generating or updating a key.

    
risposta data 07.10.2018 - 22:06
fonte
0

Una risposta più semplice è che PEM è un meta-wrapper delle informazioni crittografiche per aiutare l'applicazione a analizzarlo.

E quegli acronimi di tre lettere indicati nella domanda originale sono usati per creare le informazioni crittografiche.

    
risposta data 08.10.2018 - 14:19
fonte

Leggi altre domande sui tag