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?
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.
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:
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.
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 .
Leggi altre domande sui tag ssh public-key-infrastructure passphrase