当d是k位指数时,使用square-and-multiply算法计算m ^ d mod n所需的最大乘法数是多少?

时间:2017-03-17 21:24:29

标签: algorithm math binary

哪个指数d 需要这么多?

非常感谢有关如何解决此问题的任何建议。

2 个答案:

答案 0 :(得分:1)

通过平方算法假设无符号整数和简单的幂,如:

DWORD powuu(DWORD a,DWORD b)
    {   
    int i,bits=32;
    DWORD d=1;
    for (i=0;i<bits;i++)
        {
        d*=d;
        if (DWORD(b&0x80000000)) d*=a;
        b<<=1;
        }
    return d;
    }

您需要将a*b替换为modmul(a,b,n)(a*b)%n,以便答案是:

  1. 如果指数位k位且l位,则需要k+l次乘法
  2. 最糟糕的情况是指数为2k 的<{1}}倍增
  3. 有关详细信息,请参阅相关的质量检查

答案 1 :(得分:1)

对于一个天真的实现,它显然是具有最大汉明权重(设置位数)的指数。在这种情况下,(2^k - 1)需要最多的乘法步骤:(k)

对于k-ary window方法,可以使乘法的数量与指数无关。例如,对于固定窗口大小:w = 3,我们可以计算{m^0, m^1, m^2, m^3, .., m^7}组系数(在这种情况下全部为mod n,并且可能在蒙哥马利表示中进行有效缩减)。结果是ceil(k/w)次乘法。这在密码实现中通常是首选,因为简单定时攻击不会显示指数。任何k位指数都具有相同的时序。 (如果假设攻击者具有对高速缓存性能等等的细粒度访问权限,那么事实就会复杂一些。)

滑动窗口技术通常比固定窗口方法更有效,并且实现起来稍微困难一些。然而,它们也会泄漏侧通道数据,因为时间将取决于指数。此外,最好的&#39;已知序列是hard问题。