Chapter 1 古典密码学
一、概念
- 密码学是提供安全服务的关键理论和技术,包含:数据机密性、数据完整性、鉴别、不可否认等。
- 密码学与隐写术的区别:隐写术通过隐藏消息的存在来保护消息,常用手段有:隐形墨水、字符格式变化、图形图像等,而密码学是将消息本身加密成为密文后发送,可以隐藏,也可以不隐藏,关键不在于隐藏,而在于解密。
- 发送者将消息通过不安全信道发送给接受者,想要确保除了接受者之外没有其他人能够阅读发送的消息。
- 明文:要传输的消息;密文:加密后的消息;加密:用某种方法伪装消息以隐藏其内容的过程;解密:将密文还原为明文的过程;秘钥:预先确定的用于加解密过程的参数。
- 加密算法:对明文加密操作采用的一组规则;解密算法:对密文解密采用的一组规则;密码算法:用于加密和解密的数学函数。
- 按明文处理方式可将密码分为分组密码和流密码。分组密码事先将明文分成若干组,对每组采用同样的加密方式加密,再将每组加密的密文相接形成密文。流密码分组后对每一组使用不同加密方式加密,然后将密文相接形成总的密文。按明文保密条件可分为受限制算法和基于秘钥算法。
(1) 受限制的算法:安全性基于算法的保密性(这种密码实际上并不安全)
(2) 基于密钥的算法:安全性基于密钥的安全性,算法本身可以公开。基于密钥的算法通常分为对称密码算法和公开密钥算法(Kerckhoffs假设)。其中对称加密算法是指加密密钥和解密密钥相同或可以互相推导的密码算法,公开密钥算法的加密密钥和解密密钥实质不同,已知信息下无法相互推导(非对称密钥算法)。
- 加密通信模型:Alice和Bob双方通过加密机和解密机进行密文解密和明文加密,将密文通过不安全信道传输,不安全信道中有攻击者Oscar截获明文。对称密钥系统存在一个密钥源为Alice和Bob双方分配密钥,分配密钥的过程完全安全,Oscar无法窃听;非对称密钥系统中的密钥源是公开的,任何人都能够互获取,但Alice和Bob都有自己不公开的私钥用于解密。
- 密码体制数学描述:
一个五元组$$(P, C, K, E, D)$$满足条件:
(1) P为可能明文的有限集(明文空间)
(2) C为可能密文的有限集(密文空间)
(3) K为一切可能密钥构成的有限集(密钥空间)
(4) E是加密算法的有限集
(5) D是解密算法的有限集
(6) 对 ∀k∈K,∃ek∈E,∃dk∈D⇒ek:P→C,dk:C→P,dk(ek(x))=x(x∈P) (加密函数必须为单射函数,否则一个明文可能解密出多个密文)
- 古典密码实现技术:
(1) 代换:加密将明文字符按对应关系代换为对应的密文字符,解密则反过来操作。密钥为明密文字符之间的对照关系。包含:单表代换、多表代换(维吉尼亚密码)、多字符代换等。
(2) 置换:将明文字符按照一定规则移动位置得到密文,字符本身不变。解密则反过来进行。密钥为移位规则。
二、几种古典密码
- 移位密码
将字母表中每个字母向后移动若干位作为密文字符。可通过密文字符频率分析破解或暴力破解(唯密文攻击)ab
数学描述:
P=C=K=Z26
对k,x,y∈Z26,定义有
ek(x)=(x+k)mod26
dk(y)=(y−k)mod26
k=3时称为凯撒密码
- 代换密码
建立一个明文字符与密文字符的一一对应关系,将明文对应字符替换为密文字符。也可以通过密文字符频率破解(唯密文攻击)
数学描述:
P=C=Z26
K是由26个数字0, 1, … 25所有可能的置换组成
对任意置换π∈K,定义有
eπ(x)=π(x),dπ(y)=π−1(y)
- 仿射密码
其机制与移位密码类似,将明文字符通过模线性变换ax+b成为密文字符。可通过密文字符频率破解(唯密文攻击)
数学描述:
P=C=Z26
K={(a,b)∈Z26×Z26:gcd(a,26)=1}
对∀k=(a,b)∈K,x,y∈Z26,定义
ek(x)=(ax+b)mod26,dk(y)=a−1(y−b)mod26
其中gcd(a,26)=1是为了满足单射的条件。
当a=1时即为移位密码
- 维吉尼亚密码
维吉尼亚密码选择一个字符串作为密钥,并将明文按照字符串长度分为长度相等的若干组,对于每一组中的明文字符,按照对应位置密文的字母确定移位数量。破解方式较上述三种复杂,但仍能进行唯密文攻击。
数学表述:
P=C=K=(Z26)m,m为正整数
对∀k=(k1,k2,...,km)∈K,x=(x1,x2,...,xm)∈P,y=(y1,y2,...,ym),定义有
ek(x)=(x1+k1,x2+k2,...,xm+km)
dk(y)=(y1−k1,y2−k2,...ym−km)
(以上运算均在模26下进行)
- 希尔密码
希尔密码的加密方式可以说是仿射密码、移位密码、代换密码的超集。将明文字符串分为长度相等的若干组,对每一组进行相同的矩阵乘法(也就是一种较仿射密码更加复杂的线性变换),获取结果即为密文。
数学描述:
P=C=(Z26)m,m为不小于2的正整数
K是定义在Z26上的m×m可逆矩阵的集合
取密钥k∈K,k为一个m×m矩阵,记为(kij),对于x=(x1,x2,...,xm)∈P,y=(y1,y2,...,ym)∈C,定义有
ek(x)=xk,dk(y)=yk−1
(以上运算均在模26下进行)
- 置换密码
将明文打乱顺序变为密文。
数学描述:
P=C=(Z26)m,m为正整数
K是由所有定义在集合{1, 2, …, m}上的置换组成
对于任意密钥π,定义
eπ(x1,x2,...xm)=(xπ(1),xπ(2),...,xπ(m))
dπ(y1,y2,..,ym)=(yπ−1(1),xπ−1(2),...,xπ−1(m))
置换密码实际上是希尔密码的特殊形式,其置换矩阵与排列有关。置换矩阵的行数和列数等于一组字符数量,如果这一组中明文第i个位置被换成了第j个位置的元素,则第i列的第j个数为1。
三. 古典密码分析
- 概念
密码分析:分析者在已知密码体制(密码算法及实现的全部详细资料)的前提下破译使用的密钥。
常用密码分析攻击有4类:
唯密文攻击(COA):攻击者仅掌握密文的攻击
已知明文攻击(KPA):攻击者知道不由他控制的明文以及对应的密文
选择明文攻击(CPA):攻击者可以在一定程度上选择明文获取密文
选择密文攻击(CCA):攻击者可以在一定程度上选择密文获取明文
这4种攻击方式依次增强,如果一种加密算法能够抵抗后面的攻击,那么也一定能够抵抗前面的攻击。
- 古典密码攻击要点
只有当密文长度足够长时,才能够分析大多数古典密码。
只能分析由有具体语义明文加密而来的密文,否则即使解密完成也不知道解密出来的是不是密文。
通常需要使用英文字母频率分析与反复猜测。
- 英文字母频率规律
第1档:E出现次数远多于其他字母
第2档:TAOINSHR
第3档:CUMWFGYPB
第4档:VKJXQZ
常见双字母固定序列:TH HE IN ER AN RE ED ON ES ST EN AT TO NT HA ND OU EA NG AS OR TI IS ET IT AR TE SE HI OF
常见三字母固定序列:THE ING AND HER ERE ENT THA NTH WAS ETH FOR DTH
根据经验,有些字母不可能组合出现与同一个单词之中,如j和所有辅音字母相邻的概率都极低。
根据密文字母出现频率高低进行猜测和验证,得到密文越长,越符合统计规律
1. 仿射密码分析
分析仿射密码需要得到a与b的值,通过密文中字母的出现频率猜测出现频率最高的是什么字母,只需猜测两个字母便可以列方程组求解。注意解a须与26互素,否则猜测错误。
2. 代换密码分析
分析代换密码采用与仿射密码类似的方法,使用字频分析,逐一猜测,根据经验,最早被破译的通常是’the’,要查找文本看看有没有多次存在的3字符序列。
3. 维吉尼亚密码分析
维吉尼亚密码分析较为复杂。由于其是多表代换,因此需要首先确认每一组字符的长度,这里应该使用Kasiski测试法:在密文中找到相同的3字符或以上序列,找出它们所在的起始位置,对这些位置的差求公因数,这些公因数之一就很可能是密钥的长度。
确认密钥字长度m也可以使用重合指数法。
- 重合指数法
- 在一个字符串X中随机取出两个字母,这两个字母恰好相同的概率记为Ic(X)
- 对于完全随机字符串,Ic(X)=1/26,约为0.038
- 对于英文文本,Ic(X)=∑i=025pi2≈0.065
- 在单表代换密码中,密文的重合指数应该与明文相同。
将密文按照密钥字长度分为m段,每一段的重合指数应该接近于0.065,通过尝试不同的m可以获取重合指数最为接近0.065的那一个m就是密钥字长度。
- 对于一段确定的英文文本,计算重合指数的公式为:Ic(X)=n(n−1)∑i=025fi(fi−1),其中fi为每个密文字母的出现次数(频数)
- 确认密钥的长度之后,对于分出来的每一段密文,其中每一个密文字符相对于明文字符的偏移都是相同的。这里仍然可以使用重合指数法计算偏移量。计算方法:密文转换成明文之后,其明文的重合指数应该近似于0.065,因此对于每一个偏移量,均计算一次其与明文的重合指数,最接近于0.065的即为正确偏移量。计算公式:Mg=∑i=025pi×n′fi+g,其中pi为每个字母在英文中出现的概率,fi是每个字母在密文中出现的次数,n′是这一段密文的长度。
4. 希尔密码分析
破译希尔密码的关键是找到转换矩阵,其难以通过唯密文攻击破解,但可以很容易通过已知明文攻击破译。知道明文和密文之后,就可以直接计算出矩阵的值:Y=XK→K=X−1Y,前提是需要知道密钥矩阵的阶数。
四. 流密码
1. 概念
之前的古典密码中对于连续明文元素使用相同密钥K加密,与分组密码的区别是:需要设计复杂的加密函数提高安全性,而且经常需要对明文进行填充以确保分组长度完整。
流密码将明文看做字符串或者比特串,逐字符或逐位进行加密。为防止密钥穷举,使用与明文长度相等的密钥(无限)流进行加密。关键在于如何生成密钥流。
2. Vernam 密码
密钥与明文一样长且没有统计规律的加密。
加密:Ci=Pi+Kimod26,Ci=Pi⊕Ki
解密:Pi=Ci−Kimod26,Pi=Ci⊕Ki
需要构造与明文一样长的随机密钥。(这样的密钥不能重复,否则无法对抗已知明文攻击)
3. 流密码特点
运算简单,实时性强,安全性依赖于密钥流产生方法
4. 流密码分类
按照密钥周期性分类分为周期流密码和非周期流密码
周期流密码:存在某一个固定正整数r使得密钥流每隔r个字符以后重复
非周期流密码:对于任何正整数密钥都不重复,如一次一密乱码本
按照密钥产生方式分为同步流密码和异步流密码
同步流密码:密钥流的产生独立于消息流,如分组密码中的OFB(输出反馈)模式
异步流密码:每一个密钥字符都是由前面n个明文或密文字符推导出来的,其中n为定值。如分组密码中的CFB(密码反馈)模式
5. 同步流密码
使用某种算法,由一个初始密钥变换出于明文串相互独立的密钥流。数学定义如下:
同步流密码是一个六元组(P,C,K,L,E,D)和一个函数g,且满足以下条件:
- P,C,K分别为明文、密文、密钥的有限集
- L是密钥流字母表有限集
- g是密钥流生成器,g使用密钥k∈K作为输入,产生无限长的密钥流Z=z1z2...,其中z1∈L
- 对于任意z∈L,都有一个加密规则(函数)ez:P→C∈E和相应的解密规则(函数)dz:C→P∈D,并且对于每个明文x∈P满足dz(ez(x))=x
6. 流密码与分组密码的关系
分组密码可以用于生成密钥序列
维吉尼亚密码可以看做流密码的一种特殊情况(一种短周期同步流密码,密钥流是周期为m的密钥序列)
7. 密钥流生成
多使用线性递推关系产生伪随机序列(与多种高级语言的随机函数类似),这一类随机函数需要一个种子,被称为初始向量,线性递推算法可以使用硬件实现,此硬件称为线性反馈移位寄存器(LFSR)
8. 异步流密码
同步流密码存在有周期问题,异步流密码的密钥流由于与明文元素或密文元素有关,因此不存在周期问题。
9. 自动密钥密码体制:异步流密码示例
一个六元组(P,C,K,L,E,D),满足:
- P=C=K=L=Z26
- 密钥流定义:z1=k∈K,zi=xi−1,i≥2
- 对于∀z∈K,x,y∈Z26,定义
ez(x)=(x+z)mod26,dz(y)=(y−z)mod26
10.线性移位反馈寄存器(LFSR)
对于流密码,需要通过随机序列进行加密,但真正随机的序列难以应用,一般使用一个种子生成出一个伪随机的流密钥。
这种方式可以通过硬件方式实现,即LFSR,第n+1位由前面n位中某些位的异或得到。
an+1=cna1⊕cn−1a2⊕...⊕c1an
上式中的ci是固定值。
定义1 周期序列:存在正整数t,满足对于任意的k≥0,ak+t=ak,其中最小的正整数t称为序列的周期,序列称为周期序列。
定义2 特征多项式:设q元n级线性反馈移位寄存器的递推公式为:
an=cna0⊕cn−1a1⊕...⊕c1an−1,ci∈Fq,cn=1
其变换矩阵T定义为
T=⎝⎜⎜⎜⎜⎜⎛010...0001...0000..................1cncn−1cn−2...c1⎠⎟⎟⎟⎟⎟⎞
(a0,a1,...,an−1)T=(a1,a2,...,an)
矩阵T的特征多项式f(x)=∣xI−T∣=xn−c1xn−1−...−cn−1x−cn称为n级线性反馈移位寄存器L的特征多项式
定义3 设T为Fq上n级LFSR的变换矩阵,I是n×n单位矩阵,使得Tk=I成立的最小的正整数k称为变换矩阵T的周期,记为ρ(T)。
定义4 可满足多项式:设f(x)∈Fq[x],f(0)=0,如果f(T)=0,则称f(x)为T可满足的多项式。所有T可满足的多项式中,次数最低的首1多项式称为T的极小多项式(与信数的极小多项式定义不太相同,这里的多项式不一定不可约),满足f(x)∣xk−1的最小正整数称为f(x)的周期,记为ρ(f)
引理1 设f(x)∈Fq[x]是首1不可约多项式,f(0)=0,则ρ(f)等于有限域Fq[x]f(x)中元素x的阶。
引理2 设f(x)∈Fq[x]是首1多项式,f(0)=0,f(x)=g(x)b,其中g(x)为Fq[x]中的不可约多项式,char(Fq)=p,t是使得pt≥b的最小正整数,则有ρ(f)=ρ(g)pt
证明:
g(x)∣xρ(g)−1(拉格朗日定理)⇒g(x)pt∣(xρ(g)−1)pt
char(Fq)=p,pt≥b,g(x)pt∣(xρ(g)−1)pt⇒f(x)∣xρ(g)pt−1
另一方面,f(x)∣xρ(f)−1,∴f(x)∣(xρ(f)−1,xρ(g)pt−1)=x(ρ(f),ρ(g)pt)−1
∴ρ(f)=(ρ(f),ρ(g)pt),ρ(f)∣ρ(g)pt(信数定理,ρ(f)应该是满足f(x)∣xm−1的最小次数)
同样,g(x)∣f(x)⇒g(x)∣xρ(f)−1⇒ρ(g)∣ρ(f)
这说明ρ(f)是形如ρ(g)ps(0≤s≤t)的整数
设ρ(f)=ρ(g)ps,s<t,ps<b,f(x)∣xρ(g)ps−1,g(x)b∣xρ(g)ps−1=(xρ(g)−1)ps
g(x)b−ps∣(g(x)xρ(g)−1)ps⇒g(x)∣(g(x)xρ(g)−1)ps⇒g(x)∣(g(x)xρ(g)−1)⇒g(x)2∣xρ(g)−1(说明xρ(g)−1应该有重因式)
(ρ(g),p)=1,(xρ(g)−1,(xρ(g)−1)′)=1
∴xρ(g)−1无重因式,矛盾(信数定理)。故原命题成立
引理3 设f(x)∈Fq[x]是首1多项式,f(0)=0,且f(x)=∏i=1sfi(x),其中fi(x)是Fq[x]中两两互素的多项式,则ρ(f)=[ρ(f1),ρ(f2),...,ρ(fs)]
证明:
fi(x)∣xρ(fi)−1,ρ(fi)∣[ρ(f1),ρ(f2),...,ρ(fs)]
⇒fi(x)∣x[ρ(f1),ρ(f2),...,ρ(fs)]−1
⇒ρ(f)∣[ρ(f1),ρ(f2),...,ρ(fs)](fi(x)两两互素!)
又fi(x)∣f(x),f(x)∣xρ(f)−1
⇒fi(x)∣xρ(f)−1⇒ρ(fi)∣ρ(f)
⇒[ρ(f1),ρ(f2),...,ρ(fs)]∣ρ(f)
∴ρ(f)=[ρ(f1),ρ(f2),...,ρ(fs)]
定理1 设T的极小多项式为h(x)∈Fq[x],若f(x)∈Fq[x]满足f(T)=0,那么h(x)∣f(x)
定理2 设T是Fq上n级线性反馈移位寄存器L的变换矩阵,T的特征多项式为f(x),那么f(x)是T的极小多项式
定理3 设T是Fq上n级线性反馈移位寄存器L的变换矩阵,T的特征多项式为f(x),那么ρ(T)=ρ(f)
定理4 给定Fq上任意一个非零周期序列a,可以找到一个能产生序列a的线性反馈移位寄存器L,它的特征多项式f(x)满足:对于可产生a的任意线性反馈移位寄存器,若其特征多项式为g(x),都有f(x)∣g(x)。满足上述条件的f(x)唯一
定义5 定理4描述的首1特征多项式f(x)为序列a的极小多项式
定理5 非零周期序列a的周期等于其极小多项式f(x)的周期
m序列的伪随机性:
(1) 若t为奇数,则0-1序列的一个周期内0的个数比1的个数多1个或少1个,若t为偶数则其个数相等
(2) 在长度为t的周期内,1游程的个数为游程总数的1/2,2游程的个数为总数的1/22,以此类推。(n游程:连续的n个0或1序列,且前后为1或0。如00110001中第2~3为是一个1的2游程)
(3) 异相自相关函数为常数(自相关函数:定义在Z2上的周期序列a0a1…则ca(τ)=∑i=0t−1η(ai)η(ai+τ),τ∈Z,其中η是Z2上的加法群到{1,-1}的乘法群的同构η(0)=1,η(1)=−1,有η(a+b)=η(a)η(b))
平衡特性:m序列1个数比0个数多1
游程特性:1的最大游程为n游程,有且仅有1个;1个0的n-1游程。n>2时,设r为不超过n-2的任一整数,则任何1的r游程数目为1+∑r=1n−22n−r−2=2n−2;出现0游程的个数为2n−2,游程总数为2n−i
自相关特性:ca(τ)=∑i=02n−2η(ai)η(ai+τ)=2n−1,τ≡0(mod2n−1);=−1,τ=0(mod2n−1)
异步流密码的加密和解密是一个对称的加解密过程。
LFSR流密码分析:
分析目标为:获取LFSR的结构(即密钥——LFSR的初态z0,z1,…和递推公式[抽头序列c1,c2,…]),使用唯密文攻击较为困难,使用一直明文攻击。
zk=∑j=1ncjzk−j
如果能够得到长度不小于2n的明文-密文对,就容易求出其初态和抽头序列(假设n已知)
密钥比特流可以直接将明密文求和得到,其中前面的一组作为初态
(zn,zn+1,...,z2n−1)=(cn,cn−1,...,c1)⎝⎜⎜⎜⎛z0z1...zn−1z1z2...zn............zn−1zn...z2n−2⎠⎟⎟⎟⎞
根据上式可计算(cn,cn−1,...,c1)的值