流密码(一次一密、流密码/序列密码、LFSR、RC4)

一次一密

理想的加密方案
优点:密钥随机产生,只使用一次;无条件安全、加密解密为加法运算效率高
缺点:密钥至少与明文一样长,密钥共享困难
流密码(一次一密、流密码/序列密码、LFSR、RC4)_第1张图片

流密码(序列密码)

  • 流密码基本思想:
    密钥流发生器f产生zi=f(k, σ \sigma σi),即种子密钥k产生密钥流z=z0z1z2
    加密y=y0y1y2…=Ez0(x0)Ez1(x1)Ez2(x2)…
  • 有内部记忆原件的为流密码,否则分组密码
  • 内部记忆原件状态 σ \sigma σi独立于明文的称同步流密码,否则自同步流密码
  • 同步流密码加密器=滚动密钥生成器+加密变换器
  • 二元加法流密码,加密变换yi=zi ⨁ \bigoplus xi
  • 一次一密是加法流密码原型,若zi=ki,则加法流密码就退化成一次一密
  • 密钥流序列性质:极大的周期、良好的统计特性、抗线性分析、抗统计分析
  • 一次一密的密钥长度和明文一样长,流密码不是,需要种子密钥通过密钥生成器产生密钥流

整除

a|b读a整除b,例:2|10

公因子

c|a,c|b,c为a,b公因子,最大的公因子d为最大公因子,gcd(a,b)=d.若无公因子则gcd(a,b)=1,即a,b互素.

同余

amodn=bmodn
a和b模n同余,记做a ≡ \equiv bmodn

同余类集合

Zn为模n的同余类集合
Zn={0,1,2,…,n-1}


GF(2)上n级线性反馈移位寄存器

  • 移位寄存器主要功能是产生密钥流
  • GF(2)表示存储器为二元存储器,只能取0或1
  • n级表示n个存储器
  • 线性表示反馈函数f(a1,a2,…,an)为线性函数,运算有与或非,与反馈移位寄存器的状态有关,状态有2n
  • 初始状态由用户决定
    流密码(一次一密、流密码/序列密码、LFSR、RC4)_第2张图片
    流密码(一次一密、流密码/序列密码、LFSR、RC4)_第3张图片
    an+1=c1an ⨁ \bigoplus c2an-1 ⨁ \bigoplus ⋯ \cdots ⨁ \bigoplus cna1
    an+2=c1an+1 ⨁ \bigoplus c2an ⨁ \bigoplus ⋯ \cdots ⨁ \bigoplus cna2
    ⋯ \cdots
    an+t=c1an+t-1 ⨁ \bigoplus c2an+t-2 ⨁ \bigoplus ⋯ \cdots ⨁ \bigoplus cnat,t=1,2 ⋯ \cdots

反馈移位寄存器例子

流密码(一次一密、流密码/序列密码、LFSR、RC4)_第4张图片

a3 a2 a1 输出
1 0 1 1
0 1 0 0
0 0 1 1
1 0 0 0
1 1 0 0
1 1 1 1
0 1 1 1
1 0 1 1
⋮ \vdots ⋮ \vdots ⋮ \vdots ⋮ \vdots

输出序列为10100111010011…,T=7

LFSR性质

  • 输出序列由反馈函数f决定
  • 状态 ≤ \leq 2n
  • 输出序列周期=状态周期 ≤ \leq 2n-1(不能全0)
  • 周期达到最大值的序列称为m序列

RC4

  • RC4产生非线性的密钥流序列,先密钥调度算法初始化S表,再伪随机生成算法修改S表选取随机元素作为k
  • 密钥调度算法
    1. 对S表线性填充,S(0)=0,S(1)=1, ⋯ \cdots ,S(255)=255.
    2. 种子密钥重复填充K表,K(0)=1,K(1)=2,K(3)=3,K(4)=1,K(5)=2, ⋯ \cdots
    3. int j=0
    for(int i=0;i<256;i++){
    j=j+S(i)+K(i)(mod256);
    t=S(i);//交换S(i)、S(j)、swap(S(i),S(j));
    S(i)=S(j);
    S(j)=t;}
  • 伪随机生成算法
    4. i=0,j=0
    5. i=i+1(mod256)
    6. j=j+S(i)(mod256)
    7. 交换S(i)、S(j)
    8. t=S(i)+S(j)(mod256)
    9. 输出密钥字k=S(t)

你可能感兴趣的:(Cryptography,算法,密码学)