与公钥和 SSH 相关的安全问题

信息安全 SSH 密钥生成
2021-09-03 10:44:11

使用公钥和 SSH 时,我是否需要注意一些特定的事情?当然,我必须对我的私钥保密(因此我应该选择一个强密码)。但是还有别的吗?运行ssh-keygen时使用默认选项是个好主意吗?2048bits是个不错的选择吗?我在某处读到 4096 现在值得推荐。我可以使用更好的随机生成器(例如用户输入)吗?我是否必须定期更新我的密钥对以防其他人在我不知情的情况下窃取了它?在什么情况下应该使用有效区间?

这些问题很多,但我认为将它们分成几个问题会很有用。我对在处理 SSH/公钥时要寻找什么问题感兴趣(如果还有我还没有提到的方面)。

相关问题:

1个回答

您应该信任的默认选项,ssh-keygen而不是试图摆弄随机来源等。这些都是微妙的事情。您可以依靠 OpenSSH 开发人员正确地完成事情——您可以依靠他们,因为您已经依靠他们正确、无泄漏地实现 OpenSSH 协议,这远非易事。

对于 RSA、DSA、ElGamal、Diffie-Hellman 和类似算法,2048 位密钥就足够了。以有意义的方式估计此类算法的强度并不容易,因为最著名的攻击算法依赖于大量的原始 CPU 能力,还依赖于内存、存储、数据带宽以及线性代数在巨大备用矩阵上的并行计算的适用性. 因此,这样的估计必须猜测未来的计算架构和设想的专用电路将如何应对许多或多或少的正交尺度,而整个事情更多的是关于占卜而不是科学预测。尽管如此,有些人已经尝试建立指南,请参阅此站点以获取已发布的现有规则集的概要。例如,NIST声明 2048 位 RSA 或 DSA 密钥至少在 2030 年之前都可以使用;请注意,同一个 NIST 说 1024 位 RSA 密钥不应在 2010 年以后使用,但我们现在是 2012 年,仍然没有人知道如何实际破解 1024 位 RSA 密钥(当前记录是针对 768 位 RSA钥匙)。

您在保护您的私钥存储方面是正确的。但是,这并不一定需要密码:在某些情况下,私钥可能驻留在受到物理保护的桌面系统中,这可能被认为足够安全。然而,强大的密码短语是一种很好的反射,我只能鼓励它们。

至于密钥更新,我宁愿反对它。密钥更新是一项相对复杂的操作,因为您必须将公钥传输到所有相关位置(.ssh/authorized_keys您要连接的服务器上);如果您忘记了一个,那么您稍后将不得不进行恢复程序,而恢复程序根据定义是对安全性的破坏。受控的违规行为,但仍然是违规行为。因此,您应该仅在有助于您晚上入睡的情况下更新您的密钥,但密钥更新很可能是过度的。请记住,如果攻击者可以一次获得您的私钥,那么他可以自己将自己的公钥植入所有服务器:更改您的密钥不会阻止他。所以密钥更新无论如何对安全性的影响相对较小。