SSH密钥究竟是如何生成的?

在Twitter上看到一个关于在新安装后将当前的SSH密钥移动到同一台机器上的问题。

这提高了我的好奇心,我问自己是如何制造的。 我理解私钥与公钥之间的区别。

从逻辑上讲,我认为密钥是随机生成的,与硬件/操作系统(除了用户/计算机的最后一行之外)无关。

感谢您的任何见解。 我总是喜欢学习如何“打勾”。

SSH使用预先生成的公钥和私钥。 一旦生成这些密钥将被存储以供将来使用。 密钥的内容不应与硬件或操作系统有关,而要依靠它们提供的随机数。

有各种格式用于传输密钥。 如果您从一个平台移动到另一个平台,则可能需要更改密钥格式。 Putty使用与OpenSSH不同的格式,但是有两种工具可以转换格式。

私钥应该很less需要运输。 如果是的话,他们必须保持安全。 公钥并可自由分发,并在连接期间自动交换。 通常存储已知密钥,以便后续连接不需要validation对话框。

我通常会为新设备生成新密钥,因为这样更安全。 它确实需要重build信任关系。 复制旧密钥可能允许信任转移。 有时信任包括其他信息,例如阻止信任转移的主机名和/或IP地址。

现有的已知主机列表可以被传输。 这使您可以传输您信任的设备列表。 这并不能保证他们会信任你。

确保你确切地知道你在做什么 – 有很多math。 非对称密钥密码学通过从两个非常大的素数产生模数来工作,这两个非常大的素数是使用密码安全的伪随机数发生器随机select的。 使用这个模数和模算术,生成两个密钥,使得公钥可以从私钥得到,但反之亦然。

第一个维基百科链接是公钥密码学的一般介绍。 第二个是关于如何在RSA中生成密钥的具体描述。

有多种algorithm来生成公钥/私钥对。 如果你有兴趣,你可以看看RSA和DSA 。

ssh密钥的生成取决于主机操作系统提供的随机数生成器的质量。 如果随机数发生器是可预测的,则远程攻击者可能产生相同的密钥。 这个问题确实发生了:

没有任何东西依赖于底层的主机/操作系统/硬件。 您可以安全地在系统之间传输密钥。

尽pipe除非有特定需求,否则我会提醒您不要重复使用密钥。 如果你不确定,你可能不需要它。 但是如果你确定你不需要进一步的解释就可以知道为什么。

puttygen窗口的ssh密钥生成器工具实际上可以让用户在窗口内随机移动鼠标光标以播放随机数生成器。 这比任何纯粹的基于程序的发生器都要好。

基于terminal的密钥生成器可以让用户在键盘上键入随机密钥以便为随机数生成器播种。