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

  • 相关阅读:
    HDU 5642 King's Order 动态规划
    HDU 5640 King's Cake GCD
    HDU 5641 King's Phone 模拟
    HDU 5299 Circles Game 博弈论 暴力
    HDU 5294 Tricks Device 网络流 最短路
    HDU 5289 Assignment rmq
    HDU 5288 OO’s Sequence 水题
    星际争霸 虚空之遗 人族5BB 操作流程
    Codeforces Beta Round #3 D. Least Cost Bracket Sequence 优先队列
    Codeforces Beta Round #3 C. Tic-tac-toe 模拟题
  • 原文地址:https://www.cnblogs.com/fuao2000/p/14213584.html
Copyright © 2011-2022 走看看