Come viene calcolata l'impronta digitale di chiave pubblica SSH?

1

Ho una chiave pubblica come la seguente stringa codificata 64 byte

AAAAB3NzaC1yc2EAAAADAQABAAABAQDapfZSmaVBZimVC7YAsISc+fKzuhbVmmbJNYELWov4ZVbdbFxf790xC0sKQTmbe1iDt25DdsandggApKZh6yvWD0Li5RV+h5wV6chTNwOUe6A7Q4Y4nbMozxTzT0vpMOzZv8+RffzbSnS9GVin/4BACnih10tYzwgCe6y3ei3E5hytSGMkviYIcRQ5x4W2KgSa+BXRSGnpYU69u/b/uF7KDaIhcMqenZBy5YKt4nBYnbKFAgUk/yZRrPq9knVqXO+cQ3ZZlF1KNnrx+o3oR9OqtgjqFyXMyFIiT4oqtXXiVNmoc5C+kg7pDxR4Fcr15xTJpZl8kc8qt+WS5QpLgJjT

quando eseguo un digest sha256 in python e stampo il risultato in base64 come questo:

sha256 = hashlib.sha256()
sha256.update(plaintext.encode())
hash_sha256 = sha256.digest()
print(base64.b64encode(hash_sha256))

Ho un'impronta digitale diversa rispetto a quando faccio

ssh-keygen -lf key.pub

Pensavo che l'impronta digitale sha256 fosse solo la sha256 della chiave pubblica ... Ho provato anche ad aggiungere esattamente cosa c'è nel file key.pub , cioè:

ssh-rsa ... user@host

ma ho anche un risultato diverso

Quindi, come viene calcolata esattamente l'impronta digitale? Lo stesso vale per MD5?

    
posta Guerlando 26.02.2017 - 19:44
fonte

1 risposta

3

Purtroppo non hai mostrato il codice completo, cioè non hai chiarito da dove proviene plaintext nel tuo codice. La mia ipotesi è che non hai decodificato prima la chiave pubblica codificata Base64, ma hai appena inserito la chiave codificata direttamente nel digest. Il seguente funziona per me:

b64pubkey='AAAAB3Nz....'  # base64 encoded public key
sha256 = hashlib.sha256()
sha256.update(base64.b64decode(b64pubkey))
hash_sha256 = sha256.digest()
print(base64.b64encode(hash_sha256))
    
risposta data 26.02.2017 - 20:13
fonte

Leggi altre domande sui tag