2012-05-08 14:22:34 +0000 2012-05-08 14:22:34 +0000
147
147

Cos'è un'impronta digitale di una chiave SSH e come viene generata?

Trovo sempre che questo messaggio mi viene trasmesso quando inserisco il ssh in una nuova macchina:

12:f8:7e:78:61:b4:bf:e2:de:24:15:96:4e:d4:72:53

Cosa significa? Ogni macchina avrà ogni volta la stessa impronta digitale?

Come vengono generate queste impronte digitali? Da quali parametri dipendono?

Risposte (5)

128
128
128
2012-07-24 16:26:09 +0000

È possibile generare un'impronta digitale per una chiave pubblica utilizzando ssh-keygen in questo modo:

ssh-keygen -lf /path/to/key.pub
``` ```
$ ssh-keygen -lf ~/.ssh/id_rsa.pub
2048 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff /Users/username/.ssh/id_rsa.pub (RSA)

Esempio concreto (se si utilizza una chiave pubblica RSA):

$ ssh-keygen -l -E md5 -f ~/.ssh/id_rsa.pub
``` &001 


La prima parte `(2048)` è la lunghezza della chiave in bit, la seconda parte `(00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff)` è l'impronta digitale della chiave pubblica e la terza parte è la posizione del file della chiave pubblica stessa. 


Nelle versioni più recenti di OpenSSH, la base64 codificata SHA-256 viene mostrata al posto dell'esadecimale MD5. Per mostrare l'hash in stile legacy, usare 


&001
74
74
74
2014-02-08 20:40:35 +0000

L'impronta digitale è l'MD5 sopra i dati binari all'interno della chiave pubblica codificata Base64.

$ ssh-keygen -f foo
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in foo.
Your public key has been saved in foo.pub.
The key fingerprint is:
65:30:38:96:35:56:4f:64:64:e8:e3:a4:7d:59:3e:19 andrew@localhost
The key's randomart image is:
+--[RSA 2048]----+
| +*..+* |
| =. +.= |
| . . .o . |
| o+ E |
| S= . + o |
| . o o + |
| . . |
| |
| |
+-----------------+
$ cat foo.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEbKq5U57fhzQ3SBbs3NVmgY2ouYZfPhc6cXBNEFpRT3T100fnbkYw+EHi76nwsp+uGxk08kh4GG881DrgotptrJj2dJxXpWp/SFdVu5S9fFU6l6dCTC9IBYYCCV8PvXbBZ3oDZyyyJT7/vXSaUdbk3x9MeNlYrgItm2KY6MdHYEg8R994Sspn1sE4Ydey5DfG/WNWVrzFCI0sWI3yj4zuCcUXFz9sEG8fIYikD9rNuohiMenWjkj6oLTwZGVW2q4wRL0051XBkmfnPD/H6gqOML9MbZQ8D6/+az0yF9oD61SkifhBNBRRNaIab/Np7XD61siR8zNMG/vCKjFGICnp andrew@localhost
$ echo 'AAAAB3NzaC1yc2EAAAADAQABAAABAQDEbKq5U57fhzQ3SBbs3NVmgY2ouYZfPhc6cXBNEFpRT3T100fnbkYw+EHi76nwsp+uGxk08kh4GG881DrgotptrJj2dJxXpWp/SFdVu5S9fFU6l6dCTC9IBYYCCV8PvXbBZ3oDZyyyJT7/vXSaUdbk3x9MeNlYrgItm2KY6MdHYEg8R994Sspn1sE4Ydey5DfG/WNWVrzFCI0sWI3yj4zuCcUXFz9sEG8fIYikD9rNuohiMenWjkj6oLTwZGVW2q4wRL0051XBkmfnPD/H6gqOML9MbZQ8D6/+az0yF9oD61SkifhBNBRRNaIab/Np7XD61siR8zNMG/vCKjFGICnp' \
    | base64 -D | md5
6530389635564f6464e8e3a47d593e19

L'md5sum 6530389635564f6464e8e3a47d593e19 è l'impronta digitale visualizzata quando la chiave viene generata, solo senza i due punti di separazione.


Tuttavia, se si ha a che fare con le impronte digitali che Amazon mostra nella console EC2 Key Pairs sfortunatamente potrebbe essere una bestia diversa . Se si tratta di una stringa di 32 cifre esadecimali, si tratta dell'impronta digitale standard MD5 SSH della chiave pubblica sopra indicata. Ma se è una stringa di 40 cifre esadecimali, è in realtà un'impronta digitale calcolata prendendo l'SHA1 della chiave privata in formato PKCS#8:

$ openssl pkcs8 -in foo -nocrypt -topk8 -outform DER | openssl sha1 -c
e2:77:39:d3:53:a7:62:68:5f:da:82:0e:99:61:30:64:a2:88:c4:58
69
69
69
2012-05-08 14:41:50 +0000

L'impronta digitale è basata sulla chiave pubblica dell'Host, di solito basata su “/etc/ssh/ssh_host_rsa_key.pub” Generalmente è per una facile identificazione/verifica dell'host a cui ci si connette.

Se l'impronta digitale cambia, la macchina a cui ci si connette ha cambiato la sua chiave pubblica. Questo potrebbe non essere un male (succede quando si reinstalla ssh), ma potrebbe anche indicare che vi state connettendo a una macchina diversa nello stesso dominio/IP (succede quando vi state connettendo attraverso qualcosa come load balancer) o che siete presi di mira con un attacco man-in-the-middle, dove l'aggressore sta in qualche modo intercettando / reinstradando la vostra connessione ssh per connettersi a un host diverso che potrebbe ficcare il naso al vostro utente/pw.

Bottom line: se vieni avvertito di un'impronta digitale modificata, sii prudente e controlla di nuovo che ti stai effettivamente connettendo all'host corretto attraverso una connessione sicura. Anche se il più delle volte questo è innocuo, può essere un'indicazione di un potenziale problema

Vedi: http://www.lysium.de/blog/index.php?/archives/186-How-to-get-ssh-server-fingerprint-information.html e: http://en.wikipedia.org/wiki/Public &003

23
23
23
2019-03-29 21:52:44 +0000

Se volete controllare un file di chiavi SSH per vedere se è lo stesso di quello che viene riportato come “Deploy key” da github, questo è per voi…

Dall'URL privato: https://github.com/\/<repo_name>/settings/keys vedrete

Al terminale:

$ ls -l id*
-rw------- 1 bruno staff 1675 Mar 29 17:03 id_rsa
-rw-r--r-- 1 bruno staff 416 Mar 29 17:03 id_rsa.pub

$ ssh-keygen -E md5 -lf id_rsa
2048 MD5:07:b4:00:a4:65:ef:44:89:05:84:60:0c:c9:b2:36:5e ec2-user@ip-10-2-1-16.ec2.internal (RSA)

$ ssh-keygen -E md5 -lf id_rsa.pub
2048 MD5:07:b4:00:a4:65:ef:44:89:05:84:60:0c:c9:b2:36:5e ec2-user@ip-10-2-1-16.ec2.internal (RSA)

Noterete che otterrete la stessa impronta digitale sia per le chiavi private che per quelle pubbliche.

Lo stesso comando può essere combinato con una caratteristica di GitHub, ovvero il fatto di servire pubblicamente le chiavi pubbliche SSH degli utenti all'indirizzo https://github.com/\.keys

Ecco una riga che potete usare per trarne vantaggio.

$ curl -sL https://github.com/RichardBronosky.keys | while read; do echo -e "\nkey #$((++i)):"; ssh-keygen -E md5 -lf - <<<"$REPLY"; echo $REPLY; done

key #1:
2048 MD5:07:b4:00:a4:65:ef:44:89:05:84:60:0c:c9:b2:36:5e no comment (RSA)
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJGT35gvsFveu+80qgurrLHId0h55E9jliM7Fo0mV9b7eg3EfyagkAcJUSMFkoov3HY4CW0yzOc7WlN57ABwvpRz1ioFDex0n0FkjoSEs5ROeT1OneRK6Bf6XnplgPuQ/LSSkv3kmK6I29R+YWi6TjDvLLoA5BrXJjOMfUv36jxWCDtk/5ZdhMZqhsMuDm06Jg5JBu6n5jQaZkmaIaunz7vOfwVG9LoCI+MYyIdo2S4VTva7Ee7jfAvgSUUgHTjhzsPO0/Ww5a/Kz2ehXW27aJxj/QPLfYR2LmTMbQKm3WpB8P1LjoiU7zjPoVoZ43a4P2JLUDidGKCd3eY5b5xewz

key #2:
2048 MD5:f7:98:f1:0b:73:c6:2a:21:00:7a:70:1d:0f:cf:d8:cc no comment (RSA)
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCQsZrjwKjB4WnE4SwVdDX5eEMxKzPHFBVKKpo9vvWUXRQwdTZy6iVOkyF26IPR+xDPzslzXOClKXUrWEh6La/EMpRwuMrWAbMIJFeDHOb56q4azgopoJmMJHo0yxGu0Ts4XszMACYRhlG6uK2AP5SYiOTp1zKPFjazXAdwLXyOvJurzy6KKuGJdSs/sj9+4uehgyRNOhehCSfg71tJJYwRvO2DDfLgaVEKOgZx58gEnJfhhz9D7rbvdZNhw/hCgtVNJaQF9Mdke2OPwWSo8i0/XNb9Bu/GRXqwMZrxDBhyzieocW40cwuzxWfzoi03aISdtQ1HtawH8+/sswviM1+B
1
1
1
2017-11-26 04:32:06 +0000
ssh-keygen -r host.name.com

Emetteranno le impronte digitali per tutte le chiavi pubbliche configurate su un'istanza sshd.

Queste possono poi essere inserite nei record DNS SSHFP .