RSA 的任何短或长公共指数都没有已知的弱点,只要公共指数是“正确的”(即,对于除模的所有素数p ,与p-1相对素数)。
如果您使用一个小指数并且您不使用任何填充进行加密并且您使用几个不同的公钥加密完全相同的消息,那么您的消息就有风险:如果e = 3 ,并且您使用公钥n 1加密消息m , n 2和n 3,那么你有c i = m 3 mod n i for i = 1 to 3。根据中国剩余定理,你可以重建m 3 mod n 1n 2 n 3,结果是m 3(没有任何模数),因为
n 1 n 2 n 3是一个更大的整数。(非模块化)立方根提取然后足以提取m。
这里的弱点不是小指数。相反,它是使用不适当的填充(即根本没有填充)进行加密。填充对于 RSA 的安全性非常重要,无论是加密还是签名;如果您不使用适当的填充(例如PKCS#1中描述的那些),那么您有很多弱点,并且到目前为止,上一段中概述的那个并不是最大的。然而,每当有人提到与指数大小相关的弱点时,他或多或少直接提到了这种情况。这有点陈旧且不正确的传说,有时会被倒置为禁止大指数(因为它是一个神话,反向神话也是一个神话,没有更多——也没有更少——被证实);我相信这就是你在这里观察到的。
但是,我们可以找到一些为什么要避免使用大的公共指数的原因:
小公共指数提高效率(用于公钥操作)。
有一个小的私有指数存在安全问题;当私有指数长度不超过公共指数长度的 29% 时,已经描述了密钥恢复攻击。当你想强制私有指数变短(例如加快私有密钥操作)时,你或多或少必须使用一个大的公共指数(与模一样大);要求公共指数做短可以被视为一种间接对策。
一些广泛部署的 RSA 实现在大型 RSA 公共指数上窒息。例如,Windows 中的 RSA 代码(CryptoAPI,Internet Explorer 用于 HTTPS)坚持将公共指数编码在单个 32 位字中;它无法处理具有更大公共指数的公钥。
尽管如此,“风险可能很大”看起来像一般的理由(“这是一个安全问题”是说“我们没有实施它但我们不想承认任何懒惰”的常用方式)。