对称密码-流密码

回顾前面讲过的Vernam密码,它的特点是密钥与明文一样长,且没有统计关系,采用二进制数据。

加密:Ci=Pi⊕Ki

解密:Pi=Ci⊕Ki

(⊕表示模2加法)

Ki每次不同时,成为一次一密。

设明文为101,密钥是110

则加密101⊕110=011

   解密011⊕110=101

然而在实际中,我们希望密钥应该是容易记住的,要记住一个与明文长度一样的密钥有些强人所难。

所以我们就改造一下结构图,变成:

多加了一个密钥流生成器,密钥K长度短,容易记住,那么问题就到了密钥流生成器那里,因为要实现Vernam密码,密钥流必须是随机的。实际中,我们无法做到完全随机,只能是伪随机,那么如何判断随机性的好坏程度呢?有一系列的标准,只要达到标准要求之上,那么就认为随机性较好,可以应用。

随机位测试:FIPS140-1标准

1.单个位测试:校验1和0的个数是否大致相等。

 方法:测试20,000个二进制位; 计算流中1和0的个数; 如果1的个数在9654在10346之间,则通过单个位测试。

2.扑克牌测试:测试0至15的分布的随机随机性

 方法:测试20,000个二进制位; 将20,000个位分成多个段,每段4位; 每段的数值表示0至15中的一个数; 对于随机流,0至15的分布应该是随机的。

设Ni是数字i的个数 x=16/5000* ∑ Ni2 -5000 (i=0..15) 如果1.03<X<57.4, 则测试通过。

3.连续串测试:测试连续串长度分布的随机性

 方法:测试20,000个二进制位; 计算出所有各种长度的连续串的个数; 如果每种长度连续串的个数符合以下要求,则通过测试。

长度 个数
1 2267-2733
2 1079-1421
3 502-748
4 223-402
5 90-223
6 90-223

密钥流生成器使用线性反馈移位寄存器(LFSR)

我们希望LFSR能达到最大周期,这样随机性才会更好。

如上面的特征多项式是P(x)=x3+x+1。

有这样一个定理,当LSFR的特征多项式是不可约分多项式时,LSFR达到最大周期。

原文地址:https://www.cnblogs.com/13jhzeng/p/5523780.html