Fare attenzione a distinguere tra BLOB e hash. Il BLOB di chiavi pubbliche utilizzato da OpenSSH, e anche PuTTY, è lo stesso per una determinata chiave indipendentemente dagli hash utilizzati. Il BLOB di chiavi è archiviato in base64 da OpenSSH nei suoi xxx_key.pub known_hosts authorized_keys
file, a seconda dei casi, in parte perché semplifica la copia di questi file e valori con tecniche come taglia e incolla e e-mail (soprattutto più vecchie) che potrebbero non gestire "binary" aka " Dati a 8 bit. L '"impronta digitale" visualizzata da OpenSSH (per impostazione predefinita, a meno che non venga richiesto VisualHostKey
) era MD5 (BLOB) visualizzata in esadecimale, e ora è SHA256 (BLOB) visualizzata in base64. PuTTY ha seguito il lead originale di OpenSSH ma (a partire da 0.67) non l'aggiornamento.
Puoi richiedere un miglioramento seguendo le istruzioni nel manuale e duplicato su http://www.chiark.greenend.org.uk/~sgtatham/putty/feedback.html#feedback-features . O è open source; puoi effettuare tu stesso la modifica e inoltrarla a loro (vedi B.5 subito dopo B.4). Il codice 'fingerprint' è attualmente in un posto in sshdsa.c
e due in sshrsa.c
, ma vedo sul sito Web la prossima versione includerà chiavi ecdsa ed ed25519, che presumibilmente significa almeno uno e forse diversi nuovi posti per creare un'impronta digitale. Per essere coerenti, consenti a base64 di un hash (non solo di un BLOB come ora) in validate_manual_key
inmisc.c
. È facile se si cambia in SHA256-b64 incondizionatamente e non si fa mai MD5-hex; per un invio o funzionalità utilizzabile da altre persone, questo deve probabilmente essere configurabile e / o interattivo, uno dei quali sembra un po 'più difficile.
Per Windows, posso vedere una soluzione molto ingombrante. Utilizzare plink
per connettersi all'host e accettare la nuova chiave, inserendola nel registro. (Se esisteva una vecchia chiave, salvarla prima.) Ottenere la nuova chiave dal registro (in pezzi), creare il BLOB, l'hash e la base64 e visualizzarli per conferma. Se non confermato, eliminare la chiave dal registro (e ripristinarne una precedente).
Per Unix, un modo un po 'meno ingombrante è usare ssh
con StrictHostKeyChecking=no
per accettare la nuova chiave e inserire il BLOB Base64 known_hosts
o usare ssh-keyscan
per ottenere direttamente il BLOB Base64. Quindi base64-decode, hash, base64-encode (l'hash) e display; se non valido dopo ssh
accettazione forzata, eliminare la voce non valida da known_hosts
; se buono dopo ssh-keyscan
, aggiungi la buona voce. OpenSSL può comodamente eseguire entrambi i bit del calcolo:
awk <.ssh/known_hosts '$1~/thehostname/{print $3}' |openssl base64 -d |openssl sha256 |openssl base64
ma se non hai OpenSSL dovrebbe essere facile combinare altri strumenti base64 e sha256.