密钥指纹的几种表示方法

密钥指纹的几种表示方法

ssh服务器和客户端身份验证中,密钥指纹以不同的方式呈现,甚至使用相同的命令ssh-keygen -lf(在不同的主机中或关于不同的密钥)。

代表1:

$ ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
256 SHA256:3RE3UrGaTAec8H4YnZG7JTlfXpKvl89iexdqzLCyffY root@hostname1 (ED25519)

代表2:

$ ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
d0:21:3e:ec:52:ff:19:a9:e7:71:b5:7f:63:23:57:f7

(示例来自这一页

代表3:

AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHVo5+sYnRQxerJjG/DmUzQFso+CGzcnGT/SDa457qQqh6WIquvWOIXIY5gNPZoOByAoriK+WRxgTT39hYFmpXE=

$ ssh-keygen -H -F hostname2
|1|/DmY6Hm8TdZogykndJOUacp2NaM=|uM+t3vLw3KRySPUeXNqBLCxaGtY= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHVo5+sYnRQxerJjG/DmUzQFso+CGzcnGT/SDa457qQqh6WIquvWOIXIY5gNPZoOByAoriK+WRxgTT39hYFmpXE=

.ssh/known_hosts这是文件中对应于 的行hostname2

它们之间有什么区别?并且,如果它们是等价的,如何从其他表示中获得每个表示?


OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017表示 1 和 3 是在 Ubuntu 18.04 上使用获得的。

答案1

旧版本的ssh-keygenOpenSSH 的实用程序仅显示 MD5 哈希值;实用程序现在默认显示 SHA256 哈希值,尽管您仍然可以使用以下选项选择 MD5 哈希值-E

user@host:~/.ssh$ ssh-keygen -E md5 -l -f samplekey
2048 MD5:e6:1f:73:0f:14:cb:9a:71:2f:3b:31:b7:3f:58:1c:52 user@host (RSA)
user@host:~/.ssh$ ssh-keygen -E sha256 -l -f samplekey
2048 SHA256:Oyt9H15ZBmITbhljpSiE/BLreo/+j+6lsC3gClGI97U user@host (RSA)
user@host:~/.ssh$ ssh-keygen -B -l -f samplekey
2048 xomiz-lozad-ruzin-lasuz-vibic-fydar-hecoh-mapuv-vytus-futah-maxox user@host (RSA)

此外,您可以-v在 MD5 或 SHA256 哈希值上添加(视觉)标志,以获取除了字母数字哈希值之外的 ascii-art 比较图像:

user@host:~/.ssh$ ssh-keygen -E sha256 -l -v -f samplekey
2048 SHA256:Oyt9H15ZBmITbhljpSiE/BLreo/+j+6lsC3gClGI97U user@host (RSA)
+---[RSA 2048]----+
|     . ..   =..  |
|..    +.   + *   |
|o o   .+. . O .  |
| o . .o... o o . |
|.   ..E.S       o|
| .  . .  .     + |
|.  . o..o . . o  |
| .  o +=.*.. o   |
|  .. o+BXo..o    |
+----[SHA256]-----+
user@host:~/.ssh$

您的第三种表示形式不是指纹,而是采用 base-64 编码的公钥,因为它将存储在文件中samplekey.pub或存储known_hosts在接受该密钥的系统上的文件中。

无法从哈希值中确定密钥;要从密钥获取哈希值,请使用该ssh-keygen实用程序及其默认选项,或使用-E-B和/或-v选项来获取您喜欢的输出样式。

要获取文件中密钥的指纹known_hosts(而不是原始公钥文件中的指纹,如上面的示例所示),您可以将包含密钥类型和密钥的字符串直接通过管道传输到ssh-keygen

$ echo "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHVo5+sYnRQxerJjG/DmUzQFso+CGzcnGT/SDa457qQqh6WIquvWOIXIY5gNPZoOByAoriK+WRxgTT39hYFmpXE=" | ssh-keygen -l -f -
256 SHA256:wOxOBgRQp1qQcnTIjgmE/GB8+3fm8ahyDXuL/2GzgIo no comment (ECDSA)

相关内容