zoukankan      html  css  js  c++  java
  • 序列密码

    基本概念

    序列密码的加密用一个随机序列(密钥流)与明文序列按位叠加产生密文,用同一随机序列与密文序列叠加来恢复明文。

    v由种子密钥通过密钥流发生器得到的密钥流为:(K=k_1k_2...k_n),则加密变换为:(C=c_1c_2...c_n)

    其中(c_i=m_i⊕k_i;i=1,2...n),那么解密变换就是(m_i=c_i⊕k_i;i=1,2...n)

    image-20201221210015537

    密码强度主要依赖于密钥流的安全性

    同步序列密码

    密钥序列的产生独立于明文消息和密文消息。

    特点:

    • 无错误传播:各符号之间真正独立。一个传播错误只影响一个符号,不会影响到后继的符号
    • 同步:发送方和接收方必须保持精确的、用同样的密钥并作用在同样的位置上,才能正确的解密

    自同步序列密码

    密钥序列是密钥及固定大小的以往密文的函数,依赖于密文。

    特点:

    • 有限错误传播:设密钥序列产生器具有n位存储,则一个符号的传输错误只影响到后面n符号的解密
    • 自同步:只要接收方连续收到n个正确的密文符号,密钥序列产生器便会自动地恢复同步
    • 消除明文统计特性

    密钥流生成器和密钥流

    密钥流的要求

    • 极大的周期:随机序列是非周期的,而按任何算法产生的序列都是周期的,因此应要求密钥流具有尽可能大的周期
    • 良好的统计特性:随机序列有均匀的游程分布

    游程:指序列中相同符号的连续段,其前后均为异种符号。

    例如:……0 111 0000 10……

    注意:计算游程的时候要首尾相连计算,头和尾的两个0合在一起构成长度为2的0游程。

    有长为3的1游程、长为4的0游程、长为1的1游程,长为2的0游程。一般要求其在周期内满足:同样长度的0游程和1游程的个数相等,或近似相等。

    • 很高的线性复杂度:不能用级数较小的线性移位寄存器LFSR近似代替
    • 用统计方法由密钥序列(k_0k_1k_2…ki…)提取密钥生成器结构或种子密钥在计算上不可行

    密钥流生成器

    密钥流生成器可以分为:

    1. 驱动部分
    2. 非线性组合部分

    驱动部分:控制生成器的状态序列,为非线性组合部分提供统计性能良好的序列

    • 周期很大

    • 分布较随机

    非线性部分:将驱动部分提供的序列组合成密码特性好的序列

    • 可隐蔽驱动序列与密钥k之间明显的依赖关系

    目前密钥流生成器大都基于移位寄存器FSR

    通常由线性移位寄存器(LFSR)和一个非线性组合函数即布尔函数组合,构成一个密钥流生成器

    (a)由一个线性移位寄存器和一个滤波器构成

    (b)由多个线性移位寄存器和一个组合器构成

    image-20201221215738451

    LSFR的优点:

    1. 非常适合硬件实现
    2. 能产生大的周期序列
    3. 能产生统计特性好的序列
    4. 能够应用代数方法进行很好的分析

    反馈移位寄存器

    image-20201221221349679

    GF(2)上一个n级反馈移位寄存器由n个二元存储器与一个反馈函数(f(a_1a_2 ... a_n))组成

    • 每个存储器称为移位寄存器的一级

    • 在任一时刻,这些级的内容构成该FSR的状态;对应于一个GF(2)上的n维向量,共有(2^n)种可能的状态

    • 状态可用n长序列(a_1, a_2, a_3, …, a_n)或n维行向量((a_1, a_2, a_3, …, a_n))表示

    • 每一级存储器(a_i)将其内容向下一级(a_{i-1})传递,并根据存储器当前状态计算(f(a_1, a_2, a_3, …, a_n))作为(a_n)下一时间的内容

    example:

    image-20201221222458573

    初始状态为((a_1,a_2,a_3)=(1,0,1)),输出可由上表求出,其输出序列为(10111011101…),周期为4

    如果反馈函数(f(a_1, a_2, …, a_n))(a_1, a_2, …, a_n)的线性函数,则称为线性反馈移位寄存器(LFSR)

    image-20201221222951367

    image-20201221223018332

    n级LFSR最多有(2^n)个不同的状态

    初始状态为零,则其状态恒为零

    若其初始状态非0,则其后继状态不会为0

    因此n级LFSR的状态周期(≤2^n-1)

    输出序列的周期与状态周期相等,所以$≤2^n-1 $

    选择合适反馈函数可使序列周期达到最大值(2^n -1),周期达到最大值的序列称为m序列

    特征多项式表示:

    image-20201221223353105

    1是必须写的,(c_i)的取值和上面一一对应

    定理:n级LFSR产生的序列有最大周期(2^n-1)的必要条件是其特征多项式为不可约的

    定义:若n次不可约多项式(p(x))的阶为(2^n-1),则称(p(x))是n次本原多项式,使得(p(x)|(x^p-1))的最小p称为(p(x))

    定理:({a_i}∈G(p(x)))({a_i})为m序列的充要条件(p(x))为本原多项式

    Java实现LSFR

    public class LSFR {
        public static void newLsfr(List<Integer> lst, int k, List<Integer> key){
            int temp=0;
            List<Integer> temp1 = new ArrayList<>(lst);
            List<Integer> temp2 = new ArrayList<>(key);
            for(int i = 0;i < k; ++i){
                boolean flag = false;
                Integer kOut=0;
                for (int j = 0;j < 20;++j){
                    if(temp2.get(j).equals(1))
                        kOut = (Integer) ((kOut + temp1.get(j) ^ temp2.get(j)) % 2);
                }
                temp1.remove(0);
                temp1.add(kOut);
                for(int q = 0;q < 20;q++){
                    if (!temp1.get(q).equals(lst.get(q))) {
                        flag = true;
                        break;
                    }
                }
                System.out.println(temp1.toString()+"第"+(i+1)+"次");
                if(!flag)
                    temp = i+1;
            }
            if(temp!=0)
                System.out.println("周期是:"+temp);
        }
    

    对于m-序列(周期为(2^n-1)),如果攻击者知道了(2n)位明密文对,则可确定反馈多项式的系数,从而确定该LFSR接下来的状态,也就能得到余下的密钥序列,具体过程如下:

    image-20201230141140051

    image-20201230141229012

    image-20201230141248038

    三个随机性公设:

    在一个周期内,0与1的个数相差至多为1—({a_i})中0与1出现的概率基本上相同

    在一个周期内,长为1的游程占游程总数的(1/2),长为2的游程占游程总数的(1/2^2),……,长为(i)的游程占游程总数的(1/2^i),……,且等长的游程中0游程个数和1游程个数相等——0与1在序列中每一位置上出现的概率相同

    异相自相关函数是一个常数——通过对序列与其平移后的序列做比较,不能给出其它任何信息

    非线性部分

    • Geffe发生器
    • 钟控发生器
    • 交错停走式发生器
    • 门限发生器

    常用流密码算法

    • RC4

    基于非线性数组变换

    优点:易于软件实现,加密解密速度快,比DES快10倍

    • A5

    基于LFSR

  • 相关阅读:
    数据结构排序算法之堆排序
    整数划分
    二叉树的递归与非递归
    螺旋数组
    【图的DFS】图的DFS非递归算法
    Docker实战部署应用——Tomcat
    Docker实战部署应用——Redis
    Docker实战部署应用——MySQL5.7
    Docker其他操作:查看内部细节、IP、删除容器
    Docker数据目录相关操作
  • 原文地址:https://www.cnblogs.com/fuao2000/p/14213584.html
Copyright © 2011-2022 走看看