“RSA加密或解密时间大致与指数中的位数成比例”。
我假设它更重要的是位的位置。例如,M ^ e。 e1 = 10001 = 17 e2 = 00111 = 7
如果M = 5,我认为5 ^ 17的计算需要比5 ^ 7更多的时间。
我是对的吗?答案 0 :(得分:2)
最简单的模幂运算算法是“square and multiply”。
假设 t -bit指数:指数值介于 2 t-1 (含)和 2 t (独家);换句话说,它在索引 t-1 时的最高非零位(如果从0开始计数),所有更高(又称“前导”)位为0.例如,17是5-位指数(写为'10001'),而7是3位指数('111')。
然后 e 对 m 的取幂就像这样(我们想要 m e mod n ):
因此取幂将需要 t-1 方形,并且 s-1 通过 m 进行额外乘法,其中 s 是 e 的二进制表示中的非零位数。模块化平方与模块化乘法的成本大致相同。
通过使用基于窗口的优化,可以减少额外乘法的数量。这个想法是按组处理指数位。例如,如果指数中有两个连续的非零位,则上述算法将对这些位执行以下操作:square r ,将 r 乘以 m ,square r ,将 r 乘以 m 。此序列可以替换为:square r ,square r ,将 r 乘以 m 3 < / em>的。因此,如果预先计算 m 3 (需要两次乘法),则每次指数中有两个连续的非零位时,可以保存一次乘法。这可确保不会超过 t / 2 额外的乘法。该过程可以扩展到两位以上的组;如果您使用大小 w 的窗口,那么您必须对 2 w-1 乘法进行预计算,但之后只有at大多数 t / w 额外的乘法。
底线是大指数(几百位或更多),超过80%的计算成本来自 t-1 方形,即“大致与指数中的位数“。额外的乘法(取决于实际的指数比特值)将仅占总成本的不到20%。
现在,以上所有假设都是“大指数”。实现模幂运算的有效方法包括使用Montgomery reduction:这意味着转换步骤,这些步骤在计算的开始和结束时执行。当指数很大时,这些转换的相对成本可以忽略不计。但是,对于短指数(例如7和17),情况就不再如此,转换步骤的成本实际上可能占主导地位。
此外,对于RSA 私有键操作(使用私有指数的那些),习惯使用Chinese Remainder Theorem:CRT使用模数的特殊结构(即< em> n = pq 其中 p 和 q 是大素数),用两个较小值的两个指数代替模幂运算)。基于CRT的实现意味着一些额外的步骤,但允许4倍的加速。我还必须补充一点,设计RSA密钥以使私有指数明显短于模数(加速操作)是一个安全风险:如果指数小于模数长度的29%,那么密钥可以被破解。因此,上面的所有文本,关于取幂速度和指数的长度,实际上仅适用于公共指数,我们可以选择较小,此时基于窗口的优化的讨论不再适用。
要获得更完整的治疗,请阅读the Handbook of Applied Cryptography的第14章(可以免费下载)。