¿Las claves privadas de SSH siempre contienen suficiente información para obtener una clave pública?

7

Estoy trabajando en un modelo de persistencia para claves privadas SSH. La tecnología utilizada es Java. Dado que la estructura de persistencia de las claves públicas y privadas es bastante similar y al usar algunas de las API de Java como java.security.interfaces.RSAPrivateCrtKey , puedo derivar las claves públicas.

Entonces, ¿esto me hace preguntarme si solo persistir las claves privadas es suficiente y luego derivar la clave pública de ellas?

Creo que esto se reduce a algunas preguntas importantes para las que me gusta obtener una respuesta:

  1. Es siempre el caso de que pueda obtener la información / metadatos necesarios para crear una clave pública a partir de la clave privada. p.ej. en el caso de RSA, parece que la API de Java proporciona módulo y exponente público.
  2. ¿La información recreada siempre será la misma?
  3. Si obtengo una clave privada SSH como archivo, existe la posibilidad de que no contenga la información relacionada con la clave pública.
pregunta Gaurav Abbi 19.08.2014 - 12:48
fuente

1 respuesta

9

Hay tres lados en esta pregunta, RSA en general, RSA con SSH y SSH con otros criptosistemas.

En RSA, la clave pública y la clave privada están compuestas de dos valores.

  1. El módulo, esto es común tanto para las claves públicas como para las privadas.
  2. El exponente, hay un exponente público separado para la clave pública y un exponente privado para la clave privada.

En teoría, una clave privada RSA no tiene que contener la clave pública. En la práctica, sin embargo.

  1. Los formatos de clave privada más prácticos contienen información adicional. Por lo general, incluyen el exponente público porque en realidad es útil poder crear un archivo de clave pública desde el archivo de clave privada. Normalmente, también incluyen los valores brutos de p y q y un puñado de valores derivados adicionales para acelerar las operaciones de clave privada.
  2. El exponente de la clave pública suele ser uno de los pocos valores conocidos. En la mayoría de las claves RSA, incluso si tiene el módulo y el exponente privado, no sería difícil descifrar el exponente público por prueba y error.

Según enlace openssh usa el formato de clave privada pkcs # 1 . De acuerdo con enlace este formato contiene el módulo, los exponentes públicos y privados, ambos primos y un número de otros valores que son útiles para optimizar las operaciones de clave privada. Incluir la información de la clave pública no parece ser opcional.

Por lo tanto, para RSA usted está bien, ya que descubrió que puede extraer fácilmente los parámetros de la clave pública fuera de la estructura de la clave privada.

Para SSH con ECDSA, parece que los parámetros de la clave pública normalmente no se almacenan como parte de la clave privada, pero se pueden derivar fácilmente de ella. enlace

YMMV con otros criptosistemas.

    
respondido por el Peter Green 18.11.2015 - 12:38
fuente

Lea otras preguntas en las etiquetas