LFSR
lfsr(线性反馈位移器)小结
lfsr拥有m个触发器和m个可能的反馈位置,系数pi即反馈系数,si与pi异或后(此处为一一对应异或),得到的一串新的序列,这一串序列再一一异或过去得到新的值也就是sm,同时s0会被输出,sm会接替sm-1的位置,整个序列相当于向前移了一个位置。
(感觉这样说不是很清楚,还是上公式吧)
sm ≡ sm-1pm-1 + … + s1p1 + s0p0 mod 2(sm = sm-1pm-1 ⊕ … ⊕ s1p1 ⊕ s0p0)
第m个元素会由此计算得出,第m+1个元素也很容易就可以推导出来:
sm+1 ≡ smpm-1 + … + s2p1 + s1p0 mod 2
m个触发器中的值会随着时间不断变化,但反馈系数不变,且新的值往往由之前的值决定。通过初始序列计算后来的序列自然是完全可以的,而通过后来的序列推算之前的序列也是可以的(如果知道反馈系数)
但即便不知道反馈系数,在特定条件下也可以进行攻击。
针对单个lfsr的已知明文攻击:
假设有明文x0,x1,…,x2m-1,及其对应密文y0,y1,…,y2m-1。我们便可以构造出初试的2m个序列:
si ≡ xi + yi mod 2 ; i=0,1,…,2m-1。
当我们拥有了2m个序列时,便可以很轻松地推出密钥k(即pi),sm由前m-1序列与k分别异或后再逐个异或而来,sm+1同理,由此我们可以得到m个方程,未知数也是m个:
i=0, sm ≡ sm-1pm-1 + … + s1p1 + s0p0 mod 2
i=1, sm+1 ≡ smpm-1 + … + s2p1 + s1p0 mod 2
… , …… …
i=m-1, s2m-1 ≡ s2m-2pm-1 + … + p1sm + p0sm-1 mod2
就可以解出pi 了。
这样看来lfsr是极易受到攻击的,所以我们往往组合使用。
Trivium
将三个位移寄存器结合使用,并借助AND操作提高了安全性。
A位移反馈器长度为93,除去正常的位移器运行,69位会作为反馈为影响输入,66位则作为前馈位影响输出,同时91,92位进行AND操作与前馈位一起影响输出,而A的输出会作为B的输入的一部分,B的输出又会作为C的输入,而C的输出又将作为影响A的输入的一部分,而我们得到的密钥序列是A,B,C三个位移器的输出的异或值。
使用Trivium进行加密:
1.初始化阶段:将80位的iv加载至A,B最左边,C最右边3位为1,剩余都设置为0.
2.热身阶段:计时 4*288 = 1152次,并不输出。
3.加密阶段:至此开始产生的位构成密钥序列。
(热身阶段是为了充分随机化密码,确保密钥序列同时取决于密钥k和iv)
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!