哪个指数d 需要这么多?
非常感谢有关如何解决此问题的任何建议。
答案 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
,以便答案是:
k
位且l
位,则需要k+l
次乘法 2k
的<{1}}倍增有关详细信息,请参阅相关的质量检查:
答案 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问题。