该RFC表示RSA指数应为65537。为什么建议使用该数字,以及将该数字提高或降低的理论和实际影响及风险是什么?

使该值成为非Fermat数或仅是非质数有什么影响?

#1 楼

使用$ e \ ne65537 $会降低与现有硬件或软件的兼容性,并破坏对某些标准或安全机构规定的遵守。更高的$ e $会使公共RSA操作(用于加密或签名验证)的速度变慢。较低的$ e $,尤其是$ e = 3 $,将使该操作明显更快(最高8.5倍)。如果使用适当的填充方案,则未知$ e $的选择会带来安全性差异;但是对于已经(或仍在)使用的不够完美的填充方案而言,较高的$ e $值(与公共模数$ n $的位数相比)通常更安全。


$ e = 65537 $是介于较高与提高筹集到$ e $幂的成本之间的常见折衷:任何更高的奇数$ e $至少要花费一个乘法(或平方),对于形式为$ 2 ^ k + 1 $的奇指数,这是正确的。同样,$ e = 65537 $是素数,这略微简化了生成适合作为RSA模数的素数$ p $的隐含含义,意味着$ \ gcd(p-1,e)= 1 $,减少为$ p \ not \ equiv 1 \ pmod e $表示素数$ e $。只有Fermat质数$ 3,5,17,257,65537 $具有这两个属性,并且都是$ e $的常见选择。据推测,没有其他的费马素数。

在RSA中使用$ e = 65537 $(或更高版本)是一种额外的预防措施,可以防止使用错误消息填充时可能发生的各种攻击;这些攻击更可能以较小的$ e $发生或具有毁灭性。使用$ e = 3 $可能会很有吸引力,因为提高到幂$ e = 3 $会花费1平方和1乘积,而提高到幂$ e = 65537 = 2 ^ {要与16平方和1乘积比较16} + 1 $。

例如,在以下情况下,具有$ e = 65537 $的RSA具有优于$ e = 3 $的安全性优势:


发送天真加密为$ \ mathtt {ciphertext} = \ mathtt {plaintext} ^ e \ bmod n $的消息; $ e $越大,则$ \ log_2(\ mathtt {plaintext})\ gg \ log_2(n)/ e $(对于安全性而言是必需的)的可能性就越大。使用相同填充(包括独立于$ n $的任何确定性填充)的$个收件人; $ e $越大,则$ k \ ge e $的可能性就越小(允许中断)。例如,使用(撤消的)ISO / IEC 9796标准的方案(在HAC第11.3.5节中进行了描述),如果$ e = 3 $,则对手只能从1个合法签名中获取伪造签名,但需要3个合法签名为$ e = 65537 $;相信我对于针对(当前)ISO / IEC 9796-2方案1的攻击,$ e = 65537 $的安全性优势更为广泛。

有关可疑消息合并风险的更多解释和示例,填充和较低的$ e $,请参阅Dan Boneh的RSA加密系统二十年攻击中的第4节。


没有已知的技术要求在使用时不要使用$ e = 3 $声音消息填充方案,例如PKCS#1中的RSAES-OAEP或RSASSA-PSS,或ISO / IEC 9976-2中的方案2或3。但是,使用$ e = 65537 $仍然有意义:


唯一已知的缺点是性能损失(大约8倍),以及存在错误的风险。当击中素数$ p \ equiv 1 \ pmod {65537} $时的密钥生成器;并且当性能很重要时,还有一个比$ e = 3 $更好的选择,它具有可证明的安全性(但更为复杂和不常见)。
针对(或曾经)广泛存在的,不够完美的RSA方案进行的某些攻击使用比$ e = 3 $困难得多(如上所述)。

$ e = 65537 $已成为行业标准(我尚未找到不允许使用的任何RSA硬件软件它),并由某些认证机构规定。


评论


$ \ begingroup $
相关文章:Fermat Primes在Wikipedia上
$ \ endgroup $
–半音
2012年7月1日于13:07

$ \ begingroup $
@fgrieu,能否请您详细说明使用低e(如e = 3)进行签名的缺点?例如,如果相同的明文用不同的私钥签名,那么为相应的公钥选择e = 3会使系统的安全性降低吗?签名不使用随机填充。 (但是然后它也不直接使用e,但是它当然仍然是密码系统的一部分,因此,提出一个“愚蠢”的问题比错过非显而易见的连接要好。)谢谢。
$ \ endgroup $
– pfalcon
16-10-15在4:28

$ \ begingroup $
一个简单的建议(在添加之前请先回顾一下我所说的内容)是,较大的e也表示较小的d,反之亦然。因此,如果我选择使用e = 3,对于要解密的人,我的工作会更加困难。另一方面,如果我使用较大的e,则意味着解密方将使用较小的d。考虑到lcm(p-1,q-1)有多大,e〜= 65k似乎是一个不错的折衷方案。请参阅:crypto.stackexchange.com/questions/777/…
$ \ endgroup $
– mmdts
19-10-9在0:20



$ \ begingroup $
@mmdts“较大的e也表示较小的d”-这是不正确的。大$ e $导致小$ d $的可能性很小。相反,这是正确的:较小的$ d $会导致较大的$ e $,而较小的$ d $可能是出于性能方面的考虑而引诱(一个愚蠢的设计师,他不愿意去查阅文献)。这么大的$ e $是在愚蠢的人设计的未知系统中的小$ d $的证据,但是选择大$ e $然后从中得出$ d $的系统不会导致小的$ d,除非可能性很小。
$ \ endgroup $
–吱吱作响的s骨
19年11月14日15:11



#2 楼

65537通常用作RSA密码系统中的公共指数。该值被视为明智的折衷方案,因为众所周知它是质数,其大小足以避免小指数使RSA易受攻击的攻击,并且可以在通常支持移位和增量指令的二进制计算机上快速计算。任何基数的指数都可以表示为基数位置表示法中向左的移位,因此在二进制形式中,结果是加倍的-65537是将1左移16位的结果,而16本身可以在不加载值的情况下获得到寄存器中(当寄存器内容接近64位时可能会很昂贵),但是零和一可以更“便宜”地导出。 -wikipedia('twas lazy)

-因此,较低的值易受快速分解的影响,较高的值并非不安全,但计算上更昂贵。

评论


$ \ begingroup $
Lower不会因适当的填充而脆弱。但是,确实很难采用更高的指数。
$ \ endgroup $
–托马斯
2012年7月1日在6:40



$ \ begingroup $
不,较低的价格不易受到快速分解的影响;任何(奇数)e都不会增加或减少分解公共模数的风险。
$ \ endgroup $
–fgrieu♦
2012年7月1日在10:26

$ \ begingroup $
以前的维基百科内容被误导了。例如,选择指数所涉及的计算成本主要不是计算指数本身的成本,而是计算许多巨大整数的相应幂的成本。
$ \ endgroup $
–Jirka Hanika
19年5月5日在14:34

#3 楼

e = 2 ^ 16 + 1是安全性和性能之间的良好折衷。它足够小,而且汉明重量很轻,可以提供良好的性能,但又不能太小,足以保证安全。说明:通常,较小的指数和较低的汉明权重(较少的“ 1”位)可为模幂计算提供更好的性能。但是,e = 3过小,存在安全隐患。 e = 2 ^ 16 + 1仅具有两个“ 1”位,因此汉明加权很低,并且其值足够大以保证足够的安全性。由于此属性,无论是硬件还是软件,很多工业IP都将此常数作为指数。使用较大的指数不会降低安全性,但是会消耗更多的时间/功率。

评论


$ \ begingroup $
我想知道能耗是否是CPU可以承载的位数(32、64)的因素,还是取决于系统的另一部分(L2,内存总线,外部附件...)
$ \ endgroup $
–半音
20 May 22 '13:46