OpenSSL密码库算法笔记——第4.1.3章 滑动窗口算法

滑动窗口算法是在修改过的窗口算法的基础上演进而来的。在修改过的窗口算法中每次处理的e的长度都是固定的——k比特,但是在滑动窗口算法中,每次处理的e的长度是不尽相同的——处理长度会小于k比特。

现在来看看滑动窗口算法是怎么回事。同样记窗口大小为k,指数e的二进制展开为e=(e_l,e_{l-1},...,e_0)_2

预计算这部分和修改过的窗口算法一模一样,就不再多说了。重点来看看后面的迭代。在滑动窗口算法中,对二进制展开的指数e从左到右进行处理,但在窗口算法中是做2k进制展开。

滑动窗口算法从当前ei开始,寻找一个长度不超过k的比特串(而窗口算法每次都是处理k位长的比特串),保证该比特串一前一后的比特都是1,然后按照(未做修改的)窗口算法的思想来处理。如果当前ei=0,则转成做一次平方。

由于每次处理的窗口大小都是在变化的,所以这个算法叫滑动窗口算法,以区别于前面的(固定)窗口算法。

下面给出该算法的描述。

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

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

为了便于理解,还是以前面计算过的,k=3为例看看滑动窗口算法。

Step1:预计算g1、g2、g3、g5、g7;

Step2:初始化A: A ← 1;i ← 7;

Step3:迭代过程如下:

表4.5

i

比特串

A的迭代

7

(1,0,1)

A←A8×g5 =g5

4

0

A←A2    =g10

3

0

A←A2    =g20

0

(1,0,1)

A←A8×g5 =g165

 

后面给出的C程序都是以这个滑动窗口算法来实现的。

猜你喜欢

转载自blog.csdn.net/samsho2/article/details/87902741