目的:
对于线性移位寄存器产生的序列密码其核心是破译出其移位寄存器的数学表达式
移位寄存器产生序列密码原理:
对于对于移位寄存器的每一个储存格提供一个初始值,然后通过g0-加-gn的开关进行控制,哪几位进行模2加处理。每进行一次运算后,值向右移动一位,同时生成的新值作为新的输入数据进行输入。反复迭代,得到一连串的加密字节流。
已知条件:
100位由线性移位寄存器产生的连续连续字节流
破译过程
- 移位寄存器的函数GF(arrange,init):
- 输入:arrange移位寄存器的向量表达式,init移位寄存器的状态
- 输出:移位寄存器产生的值
- 说明:若线性移位寄存器具有实际意义,则其首项与末项均不能为0
代码实现如下:
def GF(arrange,init):
#arrange为移位寄存器的开关状态
#init为移位寄存器的初始状态
#保证g0 和 gn不为0
assert arrange[0] == 1
assert arrange[-1] == 1
# 得出移位寄存器的阶数
n = len(arrange) - 1
#保证初始状态init的长度与阶数相等