我正在创建一个应用程序,我必须使用RSA使用公钥加密某些内容。我希望这种加密速度非常快。最初,我尝试使用F48(= 65537)作为指数的2048位密钥,但速度不够快。所以现在我正在考虑以下两个选项:
两者都满足我的性能要求,但哪一个提供更好的安全性?我还应该注意,我使用的是PKCS#1填充方案。
答案 0 :(得分:9)
如果在PKCS#1中使用OAEP等随机填充,则使用低指数的大多数(全部?)已知弱点不再相关。
您是否尝试过使用e = 17?没有规则说你必须选择3或65537。
答案 1 :(得分:5)
如果你使用一个好的填充方案,那么没有已知的原因,为什么e = 3应该比任何其他公共指数具有更差的安全性。如果你也没有使用一个好的填充方案,那么使用短指数会有问题,但问题更多在于填充方案而不是指数。
许多研究人员的“直觉”是e = 3并不比其他任何公共指数更好,并且e = 3可能会在某个未指明的未来日期略微变弱,尽管现在没有任何迹象表明这样的弱点。
密钥长度对安全性的实际影响要大得多。最近破解了一个768位的RSA密钥(这并不容易!大型计算机和大脑的四年工作)。 1024位密钥在短期内被认为是足够的,但是长期使用(例如,加密数据具有高价值并且在2030年仍然必须保密)将要求更大的密钥,例如, 2048位。有关如何估算加密强度以及各种研究人员和组织对其进行估算的详细信息,请参阅this site。
如果您使用非常快速的非对称加密,您可能需要调查比RSA更快的Rabin-Williams encryption scheme,同时为相同的输出长度提供至少相同的安全级别(但是没有简单的 - 使用该方案的详细标准,与使用PKCS#1的RSA相反,所以你在这里有点自己。)
答案 2 :(得分:3)
在他们的书“Practical Cryptography”中,Bruce Schneier和Niels Ferguson建议使用公共指数3表示签名,5表示加密。您应该仔细检查他们建议的其他标准,以避免灾难。第13.4节涵盖了这一点(p229ff),并讨论了给定n = pq(其中p和q是随机素数)的非常复杂的要求,(p-1)和(q-1)都不能是3或5的倍数。但是还要仔细查看这本书的细节。
(我相信这本书的new edition将在2010年发布。)
答案 3 :(得分:3)
虽然目前没有针对是否使用正确填充的已知攻击,但是在实现错误的情况下,小指数更有可能导致漏洞利用。遗憾的是,实施错误仍然是一个威胁。例如。 this是一个非常“受欢迎”的漏洞。 (注意,这是签名。我只是想证明即使是商业软件也会有严重的错误。)
如果你不得不偷工减料,那么你必须考虑你行为的潜在影响。即选择小模数或小指数都有其自身的缺点。
如果您选择较小的(1024位)模数,那么您不能假设您的数据可以保密数十年。
如果选择小指数,则可能更容易出现实施错误。
在第一种情况下,你几乎知道你的秘密何时处于危险之中,因为很容易跟上因子分解的进展。 (这当然假设不发布例如NSA的代理商不是你的敌人)。 在第二种情况下(实现错误),您不知道何时出错。使用e = 3可能是安全的,或者你可能犯了一个大错误。即在一种情况下,你有一个很好的方法来估计你的风险,而在另一种情况下,你没有。
因此,我建议不要使用e = 3。 对于那些难以预测的威胁,我会比那些被广泛宣传的威胁使用更多的安全边际。
答案 4 :(得分:1)
如果你的指数很低并且m * e的值<模数,你可以把密文的eth根解密。
这是我两年前关于加密的说明。但是,在回答你的问题时,似乎选项2更好。
更渴望做数学的人可能会给你一个更好的解释原因。
答案 5 :(得分:1)
仅供参考,请看一下这段历史: http://chargen.matasano.com/chargen/2006/9/18/rsa-signature-forgery-explained-with-nate-lawson-part-iv.html
答案 6 :(得分:1)
引用Don Coppersmith的1997年论文&#34;多项式方程的小解和低指数RSA漏洞&#34;:
如果对手知道该消息的三分之二,则指数3的RSA加密很容易受到攻击。
虽然如果使用RSA-OAEP填充方案这可能不是问题,但如果使用公共指数3,则PKCS#1填充方案(操作正在使用)是易受攻击的。