我使用了非标准RSA公司密钥大小可能为15年。例如,我的老OpenPGP密钥创建于2002年。对于非标准密钥大小,我的意思是RSA密钥大小不是2048或4096。当我生成OpenPGP/SSH密钥时(使用保密性卫兵具有像这样的智能卡)和PKIX证书(使用GnuTLS公司或开放SSL,例如。用于XMPP或用于HTTPS). 人们有时会问我为什么。我没有看到任何人谈论这件事,也没有提供与我的观点一致的文章。所以我想写下我的动机,这样我就很容易参考,并希望能激励其他人也这样思考。或者挑起讨论和分歧——没关系,希望我能学到一些东西。
![](https://se.mathworks.com/matlabcentral/mlc-downloads/downloads/submissions/38439/versions/1/screenshot.png)
在继续之前,这里有一些上下文:当构建新事物时,通常最好使用椭圆曲线技术算法版本25519而不是RSA。还有ECDSA公司-由于一些原因,它的使用速度相对较慢,这是一种普遍适用的方法,在Ed25519不可用的情况下,它是一种合理的选择。也有后量子算法,但它们更新了,现在采用它们需要仔细的成本效益分析。
首先是一些背景。RSA是一种非对称公钥方案,它依赖于生成不同质数(通常是两个)的乘积的私钥。结果产品的尺寸,称为模量n个
,通常以位长度表示,并形成密钥大小。过去,RSA密钥大小通常为几百位,然后将512位设置为常用大小。随着对RSA安全级别的更好理解,通用密钥大小发展到768、1024和2048以后。今天的建议(请参阅keylength.com网站)这表明2048年的长期关键指标(5年以上)处于弱势,因此有跃升至4096年的趋势。RSA私钥操作的性能在4096开始下降,带宽要求在一些协议中引起了问题。如今,2048和4096是最常见的选择。
我对非2048/4096 RSA密钥大小的偏好是基于一个简单而天真的观察,即如果我要构建一个RSA密钥破解器,我可能需要针对特定的密钥大小优化实现,以获得良好的性能。由于2048和4096在今天占据主导地位,而几年前1024占主导地位,因此为这三种关键尺寸构建优化版本可能是可行的。
我的观察结果是一个基于推测和多个层面的推测的保守决策。首先,我假设RSA遭到了一次我们不知道的攻击。然后,我假设对于某些密钥大小,无论是在理论层面,还是在实现层面(针对某些特征优化库),还是在经济/人力层面(决定关注公共密钥大小),这种攻击都不如其他攻击有效。然后我假设,通过避免有效的密钥大小,我可以将难度增加到足够的水平。
在分析这些假设(即使是远程的)是否有意义之前,了解选择不常见的密钥大小会丢失什么是很有用的。这是为了了解权衡的成本。
如果实现不允许选择不寻常的密钥大小,则会有很大的负担。根据我的经验,足够多的常用应用程序支持不常见的密钥大小,例如GnuPG、OpenSSL、OpenSSH、FireFox和Chrome。一些应用程序限制了允许的选择;这似乎很罕见,但我遇到过一旦。一些环境也限制了允许的选择,例如我经历过的让我们加密已经引入了对RSA密钥大小为8的倍数的要求。我注意到了这一点,因为我为我的博客选择了一个大小为3925的RSA密钥,并于2015年12月收到了LetsEncrypt的证书,但在2016年续订期间,它导致了一条关于RSA密钥大小的错误消息。我以前使用过的一些商业CA将RSA密钥大小限制为1024、2048或4096之一。一些智能卡也限制了密钥大小,遗憾的是YubiKey有这个限制。因此,这并不总是可能的,但可能的频率足以让我有价值。
另一个代价是RSA签名操作速度减慢。这是因为指数函数比乘法更快,并且如果RSA密钥的位模式是1后跟几个0,则计算速度更快。我还没有做过基准测试,但我没有经历过这对我来说是一个实际问题。我没有注意到RSA操作与我日常生活中经常涉及的所有其他操作(网络、IO)都有关联。当然,大规模部署此功能可能会产生影响,因此基准测试将非常有趣。
回到让我做出这个选择的猜测。第一个假设是RSA遭到了一次我们不知道的攻击。在我看来,除非有证据证明当前已知的攻击(基于GNFS的攻击)是可以找到的最好的攻击,或者至少有一些启发性的论点认为我们不能比当前的攻击做得更好,否则未知RSA攻击的概率就是100%,尽管听起来很奇怪。
第二个假设是,对于某些密钥大小,未知攻击不如其他密钥大小有效。这句话也可以这样表达:与其他密钥大小相比,某些密钥大小的攻击成本更高。
在实现级别上,可以合理地假设,与关注特定密钥大小相比,为任意密钥大小实现RSA破解程序可能更困难,成本也更高。关注一些关键的大小可以实现优化和不太复杂的代码。
在数学层面上,对于某些类型的RSA密钥大小,攻击成本更高的假设似乎令人怀疑。这取决于未知攻击的算法类型。对于与GNFS攻击类似的攻击,我认为相同的算法同样适用于大小为2048、2730和4096的RSA密钥,并且运行时间主要取决于密钥大小。其他可能破解RSA的算法,例如一些近似算法,似乎也不太可能因使用非标准RSA密钥大小而受到阻碍。但我不是数学家。
从经济或人力的角度来看,如果你能破解95%的钥匙(大小102420484096),那么这就足够了,破解最后5%的钥匙只会降低投资回报。在这里,我正在计算95%的数字。目前,我猜想互联网上95%以上的RSA密钥大小是1024、2048或4096。因此,只要人们的行为与他们所做的一样,这一方面就会一直存在。
最后的假设是,通过使用非标准的密钥大小,我将门槛提高到足够高,使攻击不可能。老实说,这种情况似乎不太可能发生。然而,这可能会使成本增加一到两倍。这可能会让人把目标对准一个悬挂较低的水果。
综合我的论点,我已经1)发现了使用非标准RSA密钥大小的一些缺点,并讨论了它们的成本和影响,2)提到了使用非标密钥大小的某些推测优势。我不知道有任何论据表明我的猜测可能性为0%。看来我的猜测是真的,可能性很小,高于0%。因此,我个人的保守做法是,通过支付使用非标准RSA密钥大小的适度成本来防范这种不太可能但仍然可能发生的攻击场景。当然,我的QA工程师也喜欢通过不做其他人做的事情来破坏事情,所以我以ObXKCD作为结束。
![](https://imgs.xkcd.com/comics/exploits_of_a_mom.png)