存储 SSH 私钥的默认格式对于暴力攻击非常不安全。这个问题提供了一个非常好的解决方案,通过使用 1m 轮 PBKDF2 加密 PKCS#8 格式的 SSH 私钥,使计算密码非常昂贵,从计算上讲。
PGP/GPG 私钥如何存储?它们在计算上是暴力破解还是比 OpenSSH 使用的默认格式好一点?如果它们对蛮力来说很便宜,有没有办法提高它们的安全性?
存储 SSH 私钥的默认格式对于暴力攻击非常不安全。这个问题提供了一个非常好的解决方案,通过使用 1m 轮 PBKDF2 加密 PKCS#8 格式的 SSH 私钥,使计算密码非常昂贵,从计算上讲。
PGP/GPG 私钥如何存储?它们在计算上是暴力破解还是比 OpenSSH 使用的默认格式好一点?如果它们对蛮力来说很便宜,有没有办法提高它们的安全性?
OpenPGP 标准包括将私钥编码为字节序列的格式,以及使用密码派生密钥对称加密字节序列的格式。虽然任何 PGP 实现都可以以它认为合适的任何方式自由存储私钥,但大多数(如果不是全部)将使用 OpenPGP 格式。
基于密码的加密的关键点是如何将密码导出为密钥。这就是密码散列理论的全部内容:推导过程应该变慢(例如,使用可配置的迭代次数)并且应该使用称为salt的变化参数。OpenPGP 包括一个“体面的”基于密码的密钥派生,称为Iterated and Salted S2K。如果您注意指定足够高的计数(即,在您的机器上可以容忍的最高值),那么您可以获得良好的安全性。使用 OpenPGP 的GnuPG实现,迭代计数是使用--s2k-count命令行选项指定的。
当然,对密码进行暴力破解的主要防御措施是选择一个强密码,即一个具有很多随机性的密码。迭代和加盐只是处理在人类神经元错综复杂的混乱中爆发的不那么强的密码的方法。