序列密码
OPT(一次一密)密码特点
- 密码随机产生,仅使用一次
- 具有无条件安全性
- 加解密算法简单,计算效率高
- 密钥长度与明文长度相同,密钥共享困难
概述
序列密码又称流密码(stream cipher),一种对称密码体制
特点
- 便于硬件电路实现
- 实现简单,加解密处理速度快
- 没有或只有有限的错误传播
- 多用于军事和外交等特殊通信领域
和分组密码相比
- 明文消息按字符或比特逐位进行加密
- 使用一个随时间变化的简单加密变换
基本思想
利用种子密钥k产生一个密钥流$z_0z_1z_2…$,对明文串$m_0m_1m_2…$加密:
加密:$C=c_0c_1c_2…=E_{z_0}(m_0)E_{z_1}(m_1)E_{z_2}(m_2)…$
解密:$M=m_0m_1m_2…=E^{-1}_{z_0}(c_0)E^{-1}_{z_1}(c_1)E^{-1}_{z_2}(c_2)…$
密钥流生成:$z_i=f(k,\sigma_i)$,$\sigma_{i}$是加密器中记忆原件在时刻i的状态
同步流密码:系统内部记忆元件的状态独立于明文或密文(分组密码的OFB模式)
同步序列密码特点:
- 无错误传播:一个错误只影响一个符号
- 有同步要求:只要有错误就一直错误,知道重新同步为止,可以检测出插入、删除、重播等主动攻击
自同步序列密码:密钥流的产生与已经产生的一定数量的密文有关(分组密码的CFB模式)
自同步序列密码的特点:
- 密钥流的产生与密文有关
- 有限错误传播
- 自同步
设计密钥流发生器准则:
- 密钥量足够大
- 加密序列的周期足够长
- 密钥流应该尽可能接近一个真正的随机数流的特征
线性反馈移位寄存器(LFSR)
产生密钥序列的一个重要部件:LFSR
- 适合硬件实现
- 能产生大的周期序列
- 能产生好的统计特性的序列
- 它们的结构能够应用代数方法进行很好的分析
工作原理:当一个时钟脉冲到来时,第i级寄存器的内容传送给第i-1级寄存器,i=2、3、……n,第一级寄存器的内容为反馈移位寄存器的输出
反馈函数f(x1,x2,…,xn-1,xn)的值传给第n级寄存器。
eg:三阶反馈移位寄存器:$f(x_1,x_2,x_3)=x_1x_2\oplus x_3$,初始状态S0=(1,0,1)
x3 | x2 | x1 | 输出 |
---|---|---|---|
1 | 0 | 1 | 1 |
1 | 1 | 0 | 0 |
1 | 1 | 1 | 1 |
0 | 1 | 1 | 1 |
可以看出周期为4
n级线性反馈移位寄存器周期不会大于2^n-1,达到最大值的序列称为n级m序列
基于LFSR的序列密码
在序列密码中,直接使用线性移位寄存器序列作为密钥序列,则在已知明文攻击的情况下,相应的序列密码体制很不安全,因此不能直接使用
可以对一个或多个线性移位寄存器序列进行非线性组合来获得在序列密码中安全性良好的非线性序列
Geffe生成器
钟控生成器
交错停走式生成器
RC4
以随机置换为基础,可变密钥长度、面向字节操作的序列密码
核心部分的S-box长度任意,一般为256字节——称为 簇
密钥调度算法KSA
将一个随机密钥变换成一个初始置换
伪随机数生成算法PRGA
完成密钥流的生成
RC4的加密和解密
加密:将K的值与下一个明文字节异或
解密:将K的值与下一个密文字节异或
保证安全强度:RC4至少使用128位的密钥