OpenSSL密码库算法笔记——第4.1.2章 窗口算法

如果存储空间足够的话,可以事先将一部分计算结果(比如指数很小时的运算结果)存储起来,到后面需要时再直接调用。窗口算法就用到了这种思想,它一次可以处理指数e的多个比特(不妨设为k比特,而k称为窗口的大小)。当窗口大小为k时,可以预先将g1,g2,...,g^{2^k-1}计算出来并进行存储(不妨记g_i=g^i),然后对e进行2^k进制展开e=(e_t,e_{t-1},...,e_0)_{2^k},接着按平方和算法的思想进行迭代即可。

下面是窗口算法的简单描述。关于窗口算法的更多情况可参见[10,算法14.82]。

───────────────────────────────────────

OpenSSL密码库算法笔记——第4.1.2章 窗口算法_第1张图片

───────────────────────────────────────

同样以上面那个例子e=165来看看窗口算法。假设取窗口宽度k=3,则e的8进制展开为,那么按照窗口算法思想计算模指数的过程为:

Step1:预计算g1、g2、……、g7;

Step2:初始化A: A ← 1;

Step3:迭代过程如下:

表4.2

i

Step 3.1)

Step 3.2)

2

A←A8=1

ei=2

A←A×g2=g2

1

A←A8=g16

ei=4

A←A×g4=g20

0

A←A8=g160

ei=5

A←A×g5=g165

 

你可能感兴趣的:(openssl,密码技术与应用)