如果攻击者获得了一个没有密码的私钥,他显然可以访问受该密钥保护的所有内容。使用密码设置的私钥有多安全?如果攻击者窃取了受密码保护的密钥,那么破解密钥有多难?换句话说,即使被攻击者访问,具有良好密码短语的私钥是否安全?
受密码保护的私钥的安全性
使用 OpenSSL、OpenSSH 和 GPG/PGP,包装算法将足够强大,您无需担心(如果您确实需要担心,那么您会遇到更大的问题,这是您最不担心的问题) .
与任何密码或密码短语一样,它取决于密码短语的强度。40 个字符的密码短语与 256 位密钥一样难以破解(因为 ASCII 仅使用 7 位)。强密码的相同规则在这里适用:
- 随机比较好
- 越久越强
一旦加密的数据块落入攻击者手中,它就永远不会安全——这是一个问题,即破解它的时间和手段是什么。
以下是需要考虑的事项:
包装算法的强度——我愿意相信关于 OpenSSL、OpenSSH 和 GPG/PGP 的 bahamat——这些都是经过严格审查的组件。
密钥空间的大小- 即 - 密码的大小和复杂性 - 暴力猜测的典型成本适用。值得注意的是,某些形式的密钥存储限制了可以在密码中使用的字符类型——例如,JKS(Java 密钥存储)消除了很多特殊字符,从而减少了密钥空间的潜在大小。还要警惕将密钥大小裁剪为一定数量字符的系统。
尝试的成本尝试解开密钥的计算成本是多少?这将减慢蛮力尝试。
什么算法?- 取决于安全文件的存储方式 - 用于加密的算法是否显而易见?
是否有可用的密文进行比较?攻击者如何知道他成功了——他的测试机制是什么?捕获密钥存储的更强大元素之一是攻击者可能能够测试他的尝试,而无需存储密钥的系统进一步检测。
攻击者可以使用多少资源?- 通常威胁分析涉及分析攻击者的资源是什么。他有一台电脑吗?电脑银行?以及由他支配的整个被盗 CPU 能力的病毒网络?取决于你是在谈论隔壁的 13 岁剧本小子还是流氓国家。
多久才能换钥匙?以及数据必须保护多长时间?- 如果攻击者破解密码存储所花费的时间比存储内部数据的有用性要长,则认为存储足够安全
根据Martin Kleppmann的说法:
[默认 OpenSSH] 私钥保护有两个弱点:
- 摘要算法被硬编码为MD5,这意味着在不改变格式的情况下,不可能升级到另一个散列函数(例如SHA-1)。如果 MD5 不够好,这可能是个问题。
- 散列函数只应用一次——没有拉伸。这是一个问题,因为 MD5 和 AES 的计算速度都很快,因此短密码很容易被蛮力破解。
如果您的私人 SSH 密钥落入坏人之手 [如果它使用默认的 OpenSSH 设置受密码保护,并且如果] 您的密码是字典单词,它可能会在几秒钟内被 [解密]。...但是有一个好消息:您可以升级到更安全的私钥格式,并且一切正常!
然后他继续解释如何根据 RFC 5208 使用“PKCS#8”来获得更安全的加密私钥:
$ mv test_rsa_key test_rsa_key.old
$ openssl pkcs8 -topk8 -v2 des3 \
-in test_rsa_key.old -passin 'pass:super secret passphrase' \
-out test_rsa_key -passout 'pass:super secret passphrase'
OpenSSH 私钥的加密易受攻击?
需要小心地使用密码保护私钥,这在加密事务中通常是这种情况。通常,该方法是使用通过密钥派生函数从密码短语派生的密钥,使用对称算法加密私钥。合适的密钥派生函数的典型示例是RFC 2898 - PKCS #5: Password-Based Cryptography Specification Version 2.0中的 PBKDF2 。
根据 Colin Percival 的scrypt 演示文稿,“OpenSSH 使用 MD5 作为密钥文件上密码短语的密钥派生函数”。从上下文来看,他似乎是在说他们不使用盐或迭代,考虑到如今暴力破解的速度有多快,这很可怕。OpenSSH 有几种不同的格式用于存储私钥,所以我想了解更多细节以及受影响的确切版本,但这听起来与 PBKDF2 或其他已经存在的迭代、加盐技术相去甚远自 1978 年以来。
我看到一个参考声称 PGP 和 GPG 在保护存储在文件中的私钥时确实使用了迭代/拉伸技术,但仍然不知道细节。