¿Puedo verificar que una clave privada SSL simple se corresponda con una clave privada SSL cifrada sin descifrarla?

2

Tengo un archivo cifrado AES256 ssl.key y la secuencia de comandos que configura algún software requiere que se descifre a texto sin formato como ssl.plain.key como en

openssl rsa -in ssl.private.key -out ssl.plain.key

Esto pedirá interactivamente la contraseña.

Sin embargo, si el software se reconfigura, no hay necesidad de regenerar ssl.plain.key a menos que el ssl.key de origen haya cambiado. (Por razones de conveniencia, me gustaría no tener que volver a ingresar la contraseña cada vez que se borren las configuraciones durante el desarrollo).

¿Puedo verificar que ssl.plain.key se derivó de ssl.private.key sin descifrar la clave privada nuevamente?

    
pregunta spraff 22.09.2016 - 21:54
fuente

2 respuestas

2

Dado que usa el comando openssl rsa , asumiré que hace referencia a los archivos de clave privada RSA en el formato PEM, cifrados con AES256. Estos se ven como:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-256-CBC,87FD3191BA64A020594BD81962FB092A

pqS/qSsKxhodfAafiqFyx4opaMo4HsQ9c97gT1YgI3DmZBN1w/8mlAPn8YAe98j6
...
/IlNA3RyQdHY1JIcHsnZ0HWW13kGQ1pzofhNbHQkOWimrKupKMmhPKSSMx6Q+lCm
-----END RSA PRIVATE KEY-----

Desafortunadamente para usted, todos los datos codificados en base64 aquí son cifrado (énfasis mío):

  

La línea que comienza con Proc-Type contiene la versión y la   Protección de los datos encapsulados. La línea a partir de DEK-Info   contiene dos valores separados por comas: el nombre del algoritmo de cifrado como   utilizado por EVP_get_cipherbyname () y un vector de inicialización utilizado por   El cifrado codificado como un conjunto de dígitos hexadecimales. Despues de esos dos   Las líneas son los datos cifrados codificados en base64 .

Por lo tanto, es imposible obtener la clave RSA privada original sin descifrarla.

Su secuencia de comandos de configuración debe encontrar otras formas de detectar que un archivo de clave privada RSA se ha actualizado (por ejemplo, comparando marcas de tiempo, leyendo algunos marcadores, etc.).

Como mencionó SSL, tenga en cuenta que los certificados están vinculados a una clave privada RSA. En ese caso, puede extraer la clave pública de la clave privada RSA y el certificado usando:

openssl rsa -in server.key -noout -modulus
openssl x509 -in server.crt -noout -modulus
    
respondido por el Lekensteyn 23.09.2016 - 01:06
fuente
1

En general, la capacidad de determinar si el contenido cifrado se derivó del contenido de texto simple no es una buena seguridad, por lo que sin entrar en los detalles de la implementación solo diré que probablemente no sea posible.

Si desea comprobar si un archivo de clave privada cifrada ha cambiado, sugeriría algo como lo siguiente:

Al inicio, compare ssl.private.key con ssl.private.key.last. Si son iguales, proceda. Si son diferentes, calcule un nuevo ssl.plain.key y sobrescriba ssl.private.key.last con ssl.private.key.

    
respondido por el juhraffe 14.04.2017 - 22:38
fuente

Lea otras preguntas en las etiquetas