¿Cuál es la diferencia entre el formato PEM y DSA / RSA / ECC? (¿Podría confundir PEM con estos)?

12

Cuando uno crea una clave SSH ECC, por ejemplo, este comando se puede utilizar:

ssh-keygen -o -a 100 -t ed25519

Según tengo entendido, el argumento -o se utiliza para generar:

  

Las claves privadas que usan un formato más nuevo en oposición a las más comunes   PEM aceptado

¿Son estos "formatos más nuevos" DSA / RSA / ECC o podría ser PPK vs PEM? Lo siento si confundo SSH formatos de clave con las claves de SSH privadas extensiones de archivo ; Deseo preguntar por la diferencia principal entre PEM y los "formatos más nuevos" mencionados en la cita.

    
pregunta JohnDoea 20.11.2016 - 14:34
fuente

4 respuestas

23

Primero que nada, aquí está la entrada completa de man page para ssh-keygen -o desde mi máquina ( ssh-keygen no parece tener una marca de versión, pero el man page es del 17 de febrero de 2016)

  

-o Hace que ssh-keygen guarde las claves privadas utilizando el nuevo formato OpenSSH en lugar del formato PEM más compatible . El nuevo formato ha aumentado la resistencia al descifrado de contraseñas de fuerza bruta, pero no es compatible con las versiones de OpenSSH anteriores a 6.5. Las claves Ed25519 siempre usan el nuevo formato de clave privada.

Parece bastante claro que se trata solo del formato del archivo que se está produciendo. También tenga en cuenta que ssh-keygen solo almacenará las claves Ed25519 en el nuevo formato, independientemente de las banderas que pase.

Dado que ambas preguntas de hoy han tenido la misma pregunta subyacente, tratemos con esto.

  

... estos "formatos más nuevos" DSA / RSA / ECC ...

Ok, entonces DSA, RSA y ECC no son formatos diferentes, son algoritmos completamente diferentes y no están relacionados entre sí.

Desearía poder encontrar una mejor manera de explicar esto, pero no estoy seguro de poder hacerlo sin ser demasiado técnico. Intentemos esto: es como decir que http y ftp son solo formatos diferentes para transferir archivos, o .docx y .pptx son formatos diferentes de documentos de Office. Llamar a estos "solo diferencias de formato" es fundamentalmente incorrecto, el software está haciendo algo muy diferente en los dos casos (aunque para producir el mismo resultado final; transferir un archivo o hacer un documento bonito).

Ahora hablemos de formatos.

¿Así que quieres guardar una clave privada en un archivo? PEM es un formato de archivo para almacenar información criptográfica general, pero existen otros formatos de archivo . PEM se puede usar para muchas cosas: claves privadas, certificados o el texto de un correo electrónico que desea cifrar o firmar. Es solo un contenedor "cosas criptográficas".

Tiempo de analogía: guardando un documento de Word. Puede guardarlo en el antiguo formato .doc que es aceptado universalmente por todas las versiones de Office y también en los programas de código abierto (PEM también es más antiguo y aceptado universalmente), o puede usar el nuevo formato .docx (el -o Formato OpenSSH). A veces, las nuevas funciones no son compatibles con versiones anteriores y solo se pueden guardar en el nuevo formato (como ed25519).

(Muchas gracias a @GordonDavisson por esta analogía)

Con la excepción de la compatibilidad con versiones anteriores, el formato que elija realmente no tiene nada que ver con el contenido del archivo.

Ejemplos:

Formato PEM con una clave RSA.

Tenga en cuenta que el mensaje comienza con -----BEGIN RSA PRIVATE KEY----- , este es un formato PEM estándar en toda la industria. Cualquier software que pueda leer PEM podrá leer esto:

$ 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 clave ed25519:

Además de ser más corto (porque las claves ECC simplemente son mucho más cortas) note que el mensaje comienza con ----BEGIN OPENSSH PRIVATE KEY----- , esto está en un formato específico de OpenSSH que otro software puede o no ser capaz de leer:

$ 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-----
    
respondido por el Mike Ounsworth 20.11.2016 - 17:45
fuente
2
  

¿Son estos "formatos más nuevos" DSA / RSA / ECC o podría ser PPK vs PEM?

DSA / RSA / ECC son algoritmos utilizados con criptografía de clave pública y no con formatos. Las claves utilizadas para estos algoritmos se pueden almacenar en diferentes formatos, es decir, diferentes envoltorios y codificaciones para los datos binarios de la clave real.

El conmutador -o se usa para imponer un nuevo formato para las claves privadas diferente del PEM utilizado anteriormente. Este nuevo formato se describe en nuevo formato de clave openssh y bcrypt pbkdf . Pero para resumir: ofrece una mejor protección si un atacante obtiene acceso a una clave privada protegida por frase de contraseña, ya que ahora está utilizando una función de derivación de clave adecuada en la frase de contraseña en lugar de MD5.

    
respondido por el Steffen Ullrich 20.11.2016 - 17:36
fuente
1

Lo siguiente es de las notas de lanzamiento de OpenSSH 7.8, 2018-08-24. ( enlace )

  

Esta versión incluye una serie de cambios que pueden afectar las configuraciones existentes:

     

ssh-keygen (1): escriba las claves privadas del formato OpenSSH de manera predeterminada en lugar de usar el formato PEM de OpenSSL. El formato OpenSSH, admitido en las versiones OpenSSH desde 2014 y descrito en el archivo PROTOCOL.key en la distribución de origen, ofrece una protección sustancialmente mejor contra la adivinación de contraseñas sin conexión y admite comentarios clave en claves privadas . Si es necesario, es posible escribir claves antiguas de estilo PEM agregando "-m PEM" a los argumentos de ssh-keygen al generar o actualizar una clave.

    
respondido por el ColdCold 07.10.2018 - 22:06
fuente
0

Una respuesta más simple es que PEM es un meta-envoltorio de la información criptográfica para ayudar a que la aplicación lo analice.

Y esos acrónimos de tres letras que figuran en la pregunta original se utilizan para crear la información criptográfica.

    
respondido por el Egbert S 08.10.2018 - 14:19
fuente

Lea otras preguntas en las etiquetas