Posso verificare che una semplice chiave privata SSL corrisponda a una chiave privata SSL crittografata senza decifrarla?

2

Ho un file crittografato con AES256 ssl.key e lo script che imposta alcuni software richiede che questo sia decodificato in testo normale come ssl.plain.key come in

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

Questo richiederà in modo interattivo la password.

Tuttavia, se il software è riconfigurato non è necessario rigenerare ssl.plain.key a meno che il% originario di co_de non sia cambiato. (Per motivi di comodità, mi piacerebbe non dover reinserire la password ogni volta che le impostazioni vengono scaricate durante lo sviluppo.)

Posso verificare che ssl.key sia stato ricavato da ssl.plain.key senza decrittografare di nuovo la chiave privata?

    
posta spraff 22.09.2016 - 21:54
fonte

2 risposte

2

Dato che usi il comando openssl rsa , assumerò che tu faccia riferimento ai file di chiavi private RSA nel formato PEM, crittografati usando AES256. Sembrano:

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

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

Sfortunatamente per te, tutti i dati con codifica Base64 qui sono crittografati (sottolineatura mia):

The line beginning with Proc-Type contains the version and the protection on the encapsulated data. The line beginning DEK-Info contains two comma separated values: the encryption algorithm name as used by EVP_get_cipherbyname() and an initialization vector used by the cipher encoded as a set of hexadecimal digits. After those two lines is the base64-encoded encrypted data.

Quindi è impossibile ottenere la chiave RSA privata originale senza decrittografarla.

Lo script di configurazione deve trovare altri modi per rilevare che un file di chiave privata RSA è stato aggiornato (ad esempio, confrontando i timestamp, leggendo alcuni indicatori, ecc. ecc.).

Dato che hai citato SSL, nota che i certificati sono associati a una chiave privata RSA. In tal caso è possibile estrarre la chiave pubblica dalla chiave privata e dal certificato RSA utilizzando:

openssl rsa -in server.key -noout -modulus
openssl x509 -in server.crt -noout -modulus
    
risposta data 23.09.2016 - 01:06
fonte
1

In generale, la capacità di determinare se il contenuto crittografato è derivato dal contenuto in testo non è una buona sicurezza, quindi senza entrare nei dettagli di implementazione, dirò semplicemente che probabilmente non è possibile.

Se si desidera verificare se un file di chiave privata crittografato è stato modificato, suggerirei qualcosa di simile al seguente:

All'avvio confronta ssl.private.key con ssl.private.key.last. Se sono uguali, procedi. Se sono diversi, calcola un nuovo ssl.plain.key e sovrascrivi ssl.private.key.last con ssl.private.key.

    
risposta data 14.04.2017 - 22:38
fonte

Leggi altre domande sui tag