我们正在使用基于 beaglebone 的定制板。
在其中一个 init 脚本中,我们正在生成 ssh 密钥,但生成 ssh 密钥大约需要 7 秒。我们如何加快生成 ssh 密钥的过程?
从 ssh 教程中我们了解到 ssh-keygen 等待足够的熵来生成 ssh 密钥。
我们如何在生成 ssh 密钥之前创建足够的熵?
任何建议/指示都会有帮助
答案1
我不确定这是否适用于 Beaglebone,但它可以在没有适当随机源的虚拟机上运行,因此您的里程可能会有所不同
在 Linux 上,/dev/random
使用内核维护的熵池来生成随机性。有两种方法可以加速熵的生成:
- 生成大量 IO,你可以使用
dd if=/dev/hda1 of=/dev/null
(hda1
用你的磁盘替换) - 将额外数据写入
/dev/random
,例如dd if=/dev/hda1 of=/dev/random
。但是,这会降低池中的随机性。最好使用音频源来写入/dev/random
。
答案2
从你的评论来看,
当我生成密钥时,我得到“+--[RSA1 2048]----+”,所以我想它是 2048 对吗?
听起来你的启动过程除了生成 SSHv2 密钥外,还生成了 SSHv1 密钥。所以你最终至少生成了二RSA 密钥(可能还有 DSA 密钥和 ECDSA 密钥)。
如果关闭 SSHv1 密钥生成,时间可能会缩短一半。(SSH 协议第 1 版存在一些严重问题,无论如何都不应该使用。)
答案3
我曾经有过转帖的经历(嗨,Google/DDG/Bing(?!) 用户!),但我会避免使用 dd 技巧。当你可以使用专门为此设计的东西时,熵产生源就不那么热了!
有几个因素会导致密钥、DH 参数等生成速度变慢。
首先是硬件。在撰写本文时,Beaglebone Black 上的 CPU 是(根据他们的网站) 一个 ”Arm Cortex-A8、3D 图形、PRU-ICSS“。现在,我知道你说你正在使用定制的 Beaglebone-基于主板,但我离题了——可能是相同的 CPU(或更早的运行,因为我正在回答一个 4.5 年前的问题)。对于重度加密来说不是最好的,但你可以用你拥有的东西来凑合。你可以看看是否有一个使用 HRNG 的主板外围设备(硬件随机数生成器)。 HNRG 将极大地加快速度。
第二个,正如其他答案所暗示的那样,是可用的熵。密钥生成使用/dev/随机代替/dev/u(无阻塞)随机的。这是一件好事。/dev/random 可以产生更好的随机性(代价是阻塞)。这意味着系统将等待以获得更多的熵,然后从中产生随机性那。如果你使用的是无头服务器,而且是硬件有限的无头服务器,而且是硬件有限且没有 HNRG 的无头服务器,是的。这将需要长的时间。空闲的服务器不会产生足够的“数字噪音”能够快速的产生熵!
那么有安全意识的男孩或女孩该做什么呢?
为什么,有g好埃熵, 当然!哈格德是一个运行的守护进程HAVEGE 算法它使用一些巧妙的数学运算来创建数字噪音,并且被广泛推荐用于此类事情。它应该非常容易安装;我不知道任何现代发行版的存储库中没有它。