现代密码学_流密码

2013_12_30

————————————————————线性反馈移位寄存器————————————————————————

 

 

 

·线性反馈移位寄存器

概念:GF(2)上一个n级反馈移位寄存器由n个二元存储器与一个反馈函数f(a1,a2,...an)组成

   利用反馈函数产生一个值M,将M插入寄存器的首位,后面的都向后移动,出去的那一位就是本次运算的输出。

 

看到了书上的一个例子:

假设有一个3级反馈移位寄存器,其初始状态为(a1,a2,a3)=(1,0,1),反馈函数为(a1&a2+a3) mod 2输出如下:

状态(a1,a2,a3)  输出

101    1
110 0
111 1
011 1
101 1
110 0

                   .                  .                  .                                              .

问前20位输出的输出序列为几,周期为几?

我写了一个C程序用来把握这个过程:

#include<stdio.h>

int main()
{
    int a[5] = {1,0,1};
    int temp;
    int count = 0; 
    for(int i = 0; i < 20; i++){
    count++;
    temp = (a[0]&a[1])^a[2];
    printf("%d",a[2]);
    if(count % 4 == 0) printf("\n");
    a[2] = a[1];
    a[1] = a[0];
    a[0] = temp;
    }
} 
/*    &的优先级小于+    */ 
/*  mod 2加法就是异或*/ 
View Code

可以很明显的得出结果: 

这里的线性反馈移位寄存器听起来很专业,那么这个玩意儿有什么功能呢?

我想了一下。在某个固定的状态下,其下一个状态是恒定的。

N位的寄存器共有2^N个状态。要是全为0的状态,无论反馈函数是什么,其后的状态均恒为0。

假设有一个非零状态,那么至多经历2^N-2次变换,肯定就形成了一个周期(N位寄存器的最长周期数为2^N-1.说的是一回事)

利用这玩意儿我们不就掌握了一种产生固定周期序列的方法了吗~

 

·线性反馈移位寄存器

概念:如果移位寄存器的反馈函数f(a1,a2,...,an)是a1,a2,...,an的线性函数,则称之为线性反馈移位寄存器LFSR(linear feedback shift register)

此时f可写为f(a1,a2,...an) = cna1^cn-1a2^...^c1an

an中的n表示什么呢?某个数在第几个输出,就是a几~[常数ci=0或1,可用开关的断开和闭合来实现]

 

有一个公式可以用来表示第n+k个输出的数儿:

an+t = cnat^cn-1at+1^...^c1an+t-1

"线性反馈移位寄存器因其实现简单,速度快,有较为成熟的理论等优点而成为构造密钥流生成器的最重要的部件之一。"

 

"若只有一个系数不为0,设仅有Cj不为0,实际上是一种延迟装置"

[我就设5元寄存器吧,C4为1,初态为(01011)]->先给个结论吧,输出为dcba为循环的周期[设初态为abcde]"

#include<stdio.h>

int main()
{
    int a[5] = {0,1,0,1,1};
    int temp;
    int count = 0; 
    for(int i = 0; i < 121; i++){
    count++;
    temp = a[3];
    printf("%d",a[4]);
    if(count == 1) printf("\n");
    if((count-1) % 4 == 0) printf("\n");
    a[4] = a[3];
    a[3] = a[2];
    a[2] = a[1];
    a[1] = a[0];
    a[0] = temp;
    }
} 

 

结果:

产生周期的原因:

寄存器有一个属性需要拿来应用:寄存器中的数据会向右流通,既然只有C4为1,那么函数就退化为把C4对应为的系数复制到首部,移动,再复制...如此往复,自然就成了固定的周期。

 

"一般对于n级线性反馈移位寄存器,总是假定Cn = 1"

这话不难理解,Cn = 1就是保证即使产生上文中的周期,也可以迫使这个周期最大~

 

 ————————————————————线性反馈移位寄存器的一元多项式表示————————————————————————

 

 

 

·LFSR的特征多项式(特征多项式)

"设n级线性移位寄存器的输出序列{ai}满足递推关系:   an+k = c1an+k-1^c2an+k-2^...^cnak 对任何k>=1成立。

[//人家给你了一个式子,你看到了需要知道的是什么?干什么用的,怎么用,以后一定要记得把握这两点,

//用处:求第N+K个输出是什么;

//怎么用?抽象的东西带入具体值就会用了:a6 = c1a5 + c2a4 +... + c5a1

//                   a7 = c1a6 + c2a5 +... + c5a2  ]

这种递推关系可以用一个一元高次多项式 p(x) = 1+c1x+...+cn-1x^n-1+cnx^n表示,[Cn默认为1]

称这个多项式为LFSR的特征多项式或特征多项式

(GF(2)上多项式

与n-LFSR[c1,c2,...,cn-1,1]一一对应,称为LFSR的特征多项式

 

·G(p(x))

记n级线性移位寄存器的2^n-1个非零序列的全体为G(p(x))

 

·序列的生成序列

“给定序列{ai},幂级数A(X) = ∑(i从1至无穷)aix^i-1称为该序列的生成函数”

 

·p(x)的周期或阶

设p(x)是GF(2)上的多项式,使p(x)|(x^p - 1)的最小p称为p(x)的周期或阶

 

"n级LFSR输出序列的周期r不依赖于初始条件,而依赖于特征多项式p(x)"

 

·即约多项式[不可约多项式]

仅能被非0常数或自身的常数倍除尽,但不能被其他多项式除尽的多项式称为即约多项式或不可约多项式

 

定理2-4 设p(x)是n次不可约多项式,周期为m,序列{ai}∈G(p(x)),则{ai}的周期为m

 

·n次本原多项式
若n次不可约多项式p(x)的阶为2^n - 1,则称p(x)是n次本原多项式 

 

 ——————————————————————————————————m序列的伪随机性——————————————————————————————————————————

 

 

·伪随机序列

密钥流序列不可能做到随机,只能要求截获比周期短的一段时不会泄露更多信息,这样的序列称为伪随机序列。

 

·异相自相关函数

GF(2)上周期为T的序列{ai}的自相关函数定义为

image

image

转载于:https://www.cnblogs.com/JonnyZhou/p/3497537.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值