第七讲 流密码的基本概念
一次一密密码(one-time pad)
一次一密密码又称一次性板子,是一种绝对安全的密码,但是非常不实用。
如下图所示,明文和密钥都是字符串,经过异或之后生成密文。
其绝对安全性来自密钥完全随机,而且只使用一次。
具体加密流程如下图所示:
一次一密密码缺点和优点一样明显:
优点:
- 密钥完全随机,一次只使用一次
- 绝对安全
- 加解密都是加法运算,便于用硬件实现,所以效率非常高
缺点:
- 密钥共享困难
- 非常不实用
流密码
流密码,又称序列密码,stream cipher
主要特点:
- 明文按比特或字符逐位加密
- 主要基于硬件实现
- 用移位寄存器电路来产生,促进了线性和非线性移位寄存器的发展
主要思想:
用密钥k产生一个密钥流z=z0z1z2z3....,并按照规则E对明文进行逐位进行加密,即
密钥流的产生:
- 由密钥流发生器f产生,zi=f(k,σi)
- σi是加密器中记忆元件在i时刻的状态
- 即每个密钥的产生,依赖于k和上个时刻的密钥的状态
- f是由k,σi产生密钥的函数
流密码和分组密码最大的不同在于有无记忆元件,即流密码是串行的,分组密码是并行的
记忆元件内部是一组移位寄存器
同步流密码
这里的同步考察的是 记忆元件状态σ 和 明文字符 之间是否同步,
如果相互独立,则称为同步流密码。(如果相互独立,为什么不干脆叫异步流密码?)
否则,如果 记忆元件状态σ 和 明文字符 同步,则成叫做自同步流密码
在同步流密码中,由于zi=f(k,σi)和明文字符无关,
因而此时密文字符yi=Ezi(xi)也不依赖于此前的明文字符。
因此,密钥的产生和加密就可以分开了。
可将同步流密码的加密器分成滚动密钥生成器器和加密变换器两个部分。
注意到,如果滚动密钥生成器生成的密钥是完全随机的,那么流密码就退化成一次一密密码。
密码设计者最大的愿望是设计出一个滚动密钥生成器,使得密钥经其扩展成的密钥流具有如下性质:
- 极大的周期
- 良好的统计特性
- 抗线性分析
第八讲 有限状态自动机
有限状态自动机模型
有限自动机,我们可以顾名思义——状态是有限的。
那么这些有限的状态是如何状态的呢?当然是通过状态转移函数!
既然是函数,那么就需要输入和输出。
于是乎有限状态自动机的定义就呼之欲出了:
定义看起来复杂,只要抓住输入和输出,以及状态转移前后的两个状态即可。
有限状态自动机也可以用有向图来表示,也称转移图:
顶点对应于自动机 的状态,
若状态si在输入A(1)i 时转为状态sj,且输出一字符 A(2)j,
则在转移图中,从状态 si到状态sj有一条标有(A(1)i, A(2)j)的弧线。
举个栗子:
状态s1在输入A(1)1 时转为状态s2,且输出一字符 A(2)1,对应于红箭头
状态s2在输入A(1)2 时转为状态s2,且输出一字符 A(2)1,对应于蓝色箭头
除了转移图,也可以用矩阵表示:
有限状态自动机实例
对于刚刚给定的自动机,输入序列为:
A (1)1 -> A (1)2 -> A (1)1 -> A (1)3 -> A (1)3 ->A (1)1
对初始状态s1,
请问状态序列是?
请问输出字符序列?
解析:
从s1开始,输入为A(1)1,转移到s2,输出为A(2)1,对应于图中红线;
此时转移到s2,输入为A(2)1,转移到s2,输出为A(2)1,对应于图中蓝线。
所以得到转移序列:s 1-> s 2-> s 2 -> s 3 -> s 2-> s 1-> s 2
所以得到输出序列:A(2)1 -> A(2)1 -> A(2)2 -> A(2)1 -> A(2)3 -> A (2)1