Un utente malintenzionato non può sfruttare un'impronta digitale pubblicamente nota di una chiave pubblica, poiché la verifica non si limita al confronto dell'impronta digitale con un valore fisso.
Server presenta due informazioni su un client:
- una chiave pubblica
- un messaggio crittografato con la sua chiave privata (che esiste solo sul server legittimo)
Sul lato client il messaggio viene decifrato utilizzando la chiave pubblica e il suo contenuto è verificato.
All'utente viene data un'opzione per confrontare manualmente l'impronta digitale della chiave pubblica con un valore noto.
Confrontando l'impronta digitale della chiave pubblica, l'utente assicura che appartenga al server che desidera collegare. Decifrando il messaggio, l'applicazione client garantisce che il server "trattieni" la chiave privata corrispondente.
La conoscenza della chiave pubblica o delle sue impronte digitali non fornisce a un utente malintenzionato alcuna informazione sulla chiave privata del server (questo è il principio base della crittografia a chiave pubblica).
Se l'attaccante piantava un server malevolo, avrebbe comunque bisogno di usare una chiave privata per crittografare la comunicazione con il client. La comunicazione crittografata con questa chiave privata richiederebbe la decrittazione con una chiave pubblica corrispondente (diversa da quella legittima).
L'utente può quindi confrontare l'impronta digitale della chiave pubblica utilizzata con quella del server legittimo come pubblicato.
Naturalmente se un utente malintenzionato ha modificato le informazioni sulla chiave pubblica del server e lo ha sostituito con il proprio, quell'attacco avrebbe funzionato. Pertanto, l'utente deve valutare il livello di affidabilità del supporto da cui ha appreso l'impronta digitale. In parole semplici: se le informazioni relative alle impronte digitali vengono fornite su un sito HTTP non crittografato o tramite un canale compromesso, non è possibile attendersi.
Storicamente l'impronta digitale predefinita è stata presentata come hash MD5 a 128 bit sotto forma di valori esadecimali separati da due punti:
43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8
L'impostazione predefinita è stata successivamente modificata in SHA-256, scritta come:
xrcV3g7R6sp8DVZGDEAhCL9s4TD9GFyrCbLCzHXi5iA
Un client OpenSSH consente di chiedere un hash specifico utilizzando l'opzione FingerprintHash
specificata in .ssh/config
o direttamente nel comando:
ssh -o FingerprintHash=md5 example.com