什么是 ssh-keygen 产生的 randomart?

dla*_*lin 410 ssh cryptography

生成密钥时,您会从较新版本的 OpenSSH 中获得“randomart”。我无法找到原因的解释,以及我应该用它做什么。

Generating public/private rsa key pair.
The key fingerprint is:
05:1e:1e:c1:ac:b9:d1:1c:6a:60:ce:0f:77:6c:78:47 you@i
The key's randomart image is:
+--[ RSA 2048]----+
|       o=.       |
|    o  o++E      |
|   + . Ooo.      |
|    + O B..      |
|     = *S.       |
|      o          |
|                 |
|                 |
|                 |
+-----------------+

Generating public/private dsa key pair.
The key fingerprint is:
b6:dd:b7:1f:bc:25:31:d3:12:f4:92:1c:0b:93:5f:4b you@i
The key's randomart image is:
+--[ DSA 1024]----+
|            o.o  |
|            .= E.|
|             .B.o|
|              .= |
|        S     = .|
|       . o .  .= |
|        . . . oo.|
|             . o+|
|              .o.|
+-----------------+
Run Code Online (Sandbox Code Playgroud)

mar*_*ark 299

randomart 旨在成为人类验证密钥的一种更简单的方法。

验证通常是通过比较无意义的字符串(即密钥指纹的十六进制表示)来完成的,人类在比较时非常缓慢且不准确。Randomart 用更快、更容易比较的结构化图像代替了这一点。

这篇论文“哈希可视化:提高现实世界安全性的新技术”,Perrig A. 和 Song D.,1999 年,密码技术和电子商务国际研讨会 (CrypTEC '99)”解释了一些技术和优势。

  • 如果你能解释为什么人类验证密钥,那会有所帮助,因为坦率地说,我倾向于将我的公钥放在我的 authorized_keys 文件中并完成它。 (81认同)
  • @dlamblin:你通常不会用这个来验证你自己的密钥。但是,它对于验证远程机器的主机密钥很有用。一个想法是,如果您从不同位置登录到特定机器(或者您没有将其密钥保存到您的 known_hosts 文件中),您将能够识别主机密钥的“艺术”。如果该技术突然发生变化,您应该警惕输入密码,因为这可能意味着您的连接正在进行中间人攻击(或者可能意味着主机刚刚为其他人更改了密钥)原因)。 (50认同)
  • 嗯,我什么时候可以看到主持人的艺术作品?(我想我从来没有这样做过。)我只在生成我的密钥对后看到了这样的图像。我必须将它与什么进行比较才能识别“突然”的变化。 (41认同)
  • 我敢打赌 randomart 遵循与完整性检查哈希类似的原则,即:输入的微小差异会产生截然不同的输出。这意味着你只需要记住预期随机艺术的粗略形状,就能注意到有些不对劲。当然,当 SSH 等人不向您显示您正在连接的主机的 randomart 时,这在实践中不起作用(即使主机已知,它们也应该这样做)。 (14认同)
  • 9 年后(我老了)我连接了太多不同的主机。认识到变化是不可能的。 (4认同)
  • 我想这些在复制完成后当面交换公钥以进行完整性检查时最有用。 (2认同)
  • 我完全支持宽松的定义,但这无论如何都不是“艺术”! (2认同)

小智 235

添加

-o VisualHostKey=yes 
Run Code Online (Sandbox Code Playgroud)

到你的命令行,或者把

VisualHostKey=yes 
Run Code Online (Sandbox Code Playgroud)

在您的~/.ssh/config.

你会看到你登录的盒子的随机图。如果你有一天登录并且随机艺术是不同的(你的大脑应该去嘿!我不认识这一点!),那么也许有人在进行黑客攻击或其他什么。

这个想法是你没有意识地需要这样做。我们其中一台机器的其中一把钥匙看起来像一只蝴蝶。另一个有点像鸡巴(是的,我们的大脑是原始的)。如果您每天登录,您甚至无需尝试就习惯了图像。

  • 这个答案已经晚了,但值得指出的是,如果您从没有所有 known_hosts 的另一台机器登录,这将非常有用。在这种情况下,计算机将无法验证它是否已知,但用户应该能够看到“这看起来与正常情况不同!” 并中止。 (64认同)
  • 让您的计算机进行识别很容易受到您自己计算机的已知主机被黑客入侵的影响。就像您不应该让您的计算机为您输入密码一样,您最好自己验证主机的密钥。 (11认同)
  • 不是很好。如果您以前登录过,最好让计算机使用存储的指纹为您进行识别。该功能仅用于登录新机器。 (9认同)
  • @MarkoTopolnik:如果您不能信任自己连接的本地计算机,则不应使用该计算机执行任何操作,更不用说使用 SSH。据您所知,ssh 可执行文件本身可能已被替换为险恶的版本。 (2认同)

Nic*_*ick 40

官方公告:OpenSSH 5.1 发布

将实验性 SSH 指纹 ASCII 可视化引入 ssh(1) 和 ssh-keygen(1)。视觉指纹显示由新的 ssh_config(5) 选项“VisualHostKey”控制。目的是以可视形式呈现 SSH 主机密钥,以便于轻松调用和拒绝更改的主机密钥。这种技术的灵感来自被称为“随机艺术[*]”的图形哈希可视化方案,以及丹·卡明斯基在柏林 23C3 的思考。

当前默认禁用指纹可视化,因为用于生成随机艺术的算法仍会发生变化。

  • 最后一句话确实值得了解。[OpenBSD Journal @ Undeadly.org 关于 OpenSSH 6.8 版本的信息](http://undeadly.org/cgi?action=article&sid=20150320130957&mode=expanded) 指出,“请注意,可视主机密钥也会有所不同。” 较新的软件显示的图像与旧软件显示的图像不同。 (11认同)

小智 25

ssh-keygen 生成后显示的 Randomart 是您刚刚生成的密钥的图形表示。然后:

  • 该Randomart是不是真的有用生成的SSH密钥的用户谁

  • 对于使用 SSH连接经常连接同一服务器的用户来说,Randomart 非常有用:如果他在他的 SSH 命令中添加了“-o VisualHostKey=yes”选项:

    ssh user@domainname.com -o VisualHostKey=yes

将显示与服务器公钥对应的 Randomart。

要查看示例,您可以尝试:

ssh git@github.com -o VisualHostKey=yes

在用户经常连接同一台服务器的情况下,可以方便快捷的查看自己是否识别出该服务器公钥对应的Randomart。这比检查公钥本身的字符串更容易和更快!