• 对称密码-流密码


    回顾前面讲过的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达到最大周期。

  • 相关阅读:
    java堆
    本地方法栈
    java虚拟机栈
    Java 程序计数器
    面向对象 基本概念 复习
    if __name__=='__main__'
    偏函数与模块
    可变参数与关键字参数(复习材料)
    匿名函数
    闭包
  • 原文地址:https://www.cnblogs.com/13jhzeng/p/5523780.html
Copyright © 2020-2023  润新知