web-dev-qa-db-fra.com

Quelle est la différence entre le format PEM et DSA / RSA / ECC? (Puis-je confondre PEM avec ceux-ci)?

Quand on crée une clé ECC SSH par exemple, cette commande peut être utilisée:

ssh-keygen -o -a 100 -t ed25519

Si je comprends bien, l'argument -o Est utilisé pour générer:

Les clés privées utilisant un format plus récent opposé au PEM le plus communément accepté

Ces "nouveaux formats" sont-ils DSA/RSA/ECC ou s'agit-il de PPK vs PEM? Désolé si je confond SSH formats de clés avec les clés SSH privées 'extensions de fichiers; Je souhaite demander la principale différence entre PEM et les "nouveaux formats" mentionnés dans le devis.

19
user123574

Tout d'abord, voici le man page entrée pour ssh-keygen -o depuis ma machine (ssh-keygen ne semble pas avoir d'indicateur de version, mais le man page date du 17 février 2016)

-o Force ssh-keygen à enregistrer les clés privées en utilisant le nouveau format OpenSSH plutôt que le format PEM plus compatible . Le nouveau format a augmenté la résistance à la fissuration par mot de passe par force brute, mais n'est pas pris en charge par les versions d'OpenSSH antérieures à 6.5. Les clés Ed25519 utilisent toujours le nouveau format de clé privée.

Il semble assez clair qu'il s'agit simplement du format du fichier en cours de production. Notez également que ssh-keygen ne stockera que les clés Ed25519 dans le nouveau format, quels que soient les indicateurs que vous transmettez.


Puisque vos deux questions aujourd'hui ont eu la même question sous-jacente, traitons-la.

... ces "nouveaux formats" DSA/RSA/ECC ...

Ok, donc DSA, RSA et ECC ne sont pas des formats différents, ce sont des algorithmes complètement différents et totalement indépendants les uns des autres.

J'aimerais pouvoir trouver une meilleure façon d'expliquer cela, mais je ne suis pas sûr de pouvoir le faire sans être trop technique. Essayons ceci: c'est un peu comme dire que http et ftp sont juste des formats différents pour transférer des fichiers, ou .docx et .pptx sont différents formats de documents Office. Appeler ces "différences de format justes" est fondamentalement faux, le logiciel fait une chose très différente dans les deux cas (bien que pour produire le même résultat final; transférer un fichier ou faire un joli document).


Parlons maintenant des formats.

Vous souhaitez donc enregistrer une clé privée dans un fichier? PEM est un format de fichier pour stocker des informations cryptographiques générales, mais il existe d'autres formats de fichier. PEM peut être utilisé pour de nombreuses choses: clés privées ou certificats, ou le texte d'un e-mail que vous souhaitez crypter ou signer. C'est juste un conteneur "truc cryptographique".

Temps d'analogie: enregistrer un document Word. Vous pouvez l'enregistrer dans l'ancien .doc format qui est universellement accepté par toutes les versions d'Office et également les programmes open source (PEM est également plus ancien et universellement accepté), ou vous pouvez utiliser le plus récent .docx format (le -o Format OpenSSH). Parfois, les nouvelles fonctionnalités ne sont pas rétrocompatibles et ne peuvent être enregistrées que dans le nouveau format (comme ed25519).

(Un grand merci à @GordonDavisson pour cette analogie)

À l'exception de la compatibilité descendante, le format que vous choisissez n'a vraiment rien à voir avec le contenu du fichier.

Exemples:

Format PEM avec une clé RSA.

Notez que le message commence par -----BEGIN RSA PRIVATE KEY-----, il s'agit du format PEM standard de l'industrie - tout logiciel capable de lire PEM pourra lire ceci:

$ 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-----

Format OpenSSH avec une clé ed25519:

En plus d'être plus court (car les clés ECC sont juste sont beaucoup plus courtes), notez que le message commence par ----BEGIN OPENSSH PRIVATE KEY-----, il s'agit d'un format spécifique à OpenSSH que d'autres logiciels peuvent ou non lire:

$ 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-----
32
Mike Ounsworth

Ce qui suit est extrait des notes de version d'OpenSSH 7.8, 2018-08-24. ( http://www.openssh.com/txt/release-7.8 )


Cette version comprend un certain nombre de modifications susceptibles d'affecter les configurations existantes:

ssh-keygen (1): écrit les clés privées au format OpenSSH par défaut au lieu d'utiliser le format PEM d'OpenSSL. Le format OpenSSH, pris en charge dans les versions d'OpenSSH depuis 2014 et décrit dans le fichier PROTOCOL.key dans la distribution source, offre une meilleure protection contre la devinette des mots de passe hors ligne et prend en charge les commentaires clés dans les clés privées . Si nécessaire, il est possible d'écrire d'anciennes clés de style PEM en ajoutant "-m PEM" aux arguments de ssh-keygen lors de la génération ou de la mise à jour d'une clé.

3
ColdCold

Ces "nouveaux formats" sont-ils DSA/RSA/ECC ou s'agit-il de PPK vs PEM?

DSA/RSA/ECC sont des algorithmes utilisés avec la cryptographie à clé publique et non avec des formats. Les clés utilisées pour ces algorithmes peuvent être stockées dans différents formats, c'est-à-dire différents wrappers et encodages pour les données binaires de la clé réelle.

Le -o switch est utilisé pour appliquer un nouveau format pour les clés privées différent du PEM précédemment utilisé. Ce nouveau format est décrit dans nouveau format de clé openssh et bcrypt pbkdf . Mais pour résumer: il offre une meilleure protection si un attaquant accède à une clé privée protégée par mot de passe, car il utilise maintenant une fonction de dérivation de clé appropriée sur la phrase de passe au lieu de MD5.

1
Steffen Ullrich

Une réponse plus simple est que PEM est un méta-wrapper des informations cryptographiques pour aider l'application à les analyser.

Et ces acronymes de trois lettres mentionnés dans la question d'origine sont utilisés pour créer les informations cryptographiques.

0
John Greene