Come verificare se una chiave privata SSH ha passphrase o no?

46

Diciamo che ho accesso alla porzione privata di una coppia di chiavi RSA. Come posso verificare se questa chiave ha associato la passphrase o no?

    
posta kung 11.07.2016 - 13:18
fonte

4 risposte

75

Il keyfile avrà un'intestazione diversa se è protetta da password. Ecco la parte superiore di una chiave senza passphrase:

-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEA3qKD/4PAc6PMb1yCckTduFl5fA1OpURLR5Z+T4xY1JQt3eTM

Ed ecco la parte superiore di una chiave protetta da passphrase:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,556C1115CDA822F5

AHi/3++6PEIBv4kfpM57McyoSAAaT2ECxNOA5DRKxJQ9pr2D3aUeMBaBfWGrxd/Q

Sfortunatamente, questo funziona solo guardando i file. Non so in alcun modo che un server sia in grado di dire se le chiavi che sono state presentate sono state protette con una passphrase, che è il posto più utile per poter sfruttare quel tipo di informazioni.

    
risposta data 11.07.2016 - 14:21
fonte
31

Non è sempre così facile come descritto nelle altre risposte. Funziona solo con le vecchie chiavi PEM. Il nuovo formato openssh delle chiavi (generato con l'opzione -o , più sicuro, dal momento che openssh-6.5) ha lo stesso aspetto se controlli le intestazioni:

$ head rsa_enc
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jYmMAAAAGYmNyeXB0AAAAGAAAABCYdi7MhY
$ head rsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn

Il modo più semplice in questo caso è di eseguire qualche operazione su di essi usando ssh-keygen . Se richiede una passphrase, ne ha una ( o non è una chiave ssh ), se non ha una passphrase:

$ ssh-keygen -yf rsa_enc
ssh-rsa AAAAB3NzaC1y...
$ ssh-keygen -yf rsa
Enter passphrase: 
    
risposta data 11.07.2016 - 14:51
fonte
13

La "chiave RSA" è in realtà un insieme di valori memorizzati come una struttura ASN.1 nel formato binario DER standardizzato, quindi codificati in base-64 per ottenere il file PEM finale.

Un modo molto semplice per determinare se una chiave è codificata o meno è semplicemente controllare se l'intestazione ASN.1 è presente, e di solito è così semplice come controllare se la "chiave" inizia con le lettere MII come nell'esempio seguente:

-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQCWxk9djtgA/t7n6M8g1d2fk3exyCSu1uubpxUkoFLJBKjLYiaa
[...]
eCrpRFHxhPICHI4db+I8GZ9QDmlbCN/bl3BBNNTn3w==
-----END RSA PRIVATE KEY-----

Nei file protetti da password, l'intera struttura ASN.1 viene crittografata, tutto appare come caratteri casuali.

    
risposta data 11.07.2016 - 14:51
fonte
3

Le chiavi private devono essere protette, provare a impostare la password dichiara solo se è ancora protetta da password. Con ssh-keygen sulla chiave protetta:

~/.ssh$ ssh-keygen -p -f id_rsa_password_protected
Enter old passphrase:

E con non protetto:

~/.ssh$ ssh-keygen -p -f id_rsa_not_protected
Enter new passphrase (empty for no passphrase):

Quindi, se non è protetto da password, basta imposta la password .

    
risposta data 04.03.2018 - 13:52
fonte

Leggi altre domande sui tag