密码体制:
- 算法E和D不包含任意秘密的成分
- E将有意义的消息相当均匀地分布在密文空间内;
- 当密钥正确时,E和D有效加密解密;当密钥不正确时,获取密文对应的明文仅和密钥参数相关,是唯一依赖于密钥参数的困难问题,求解复杂度为p(s),其中s为密钥长度,p为任意多项式。
现代密码学分析标准:攻击者可知加密方法、密钥长度、密文
古典密码安全性分析:古典密码工作模式主要有代换和换位。代换方法在密钥固定的情况下,将明文空间内的字符映射至密文空间的固定字符,可依赖自然语言字符出现的稳定频率进一步攻破;表密码和换位密码比简单置换安全,但当密钥短而消息长时,依然会被各种分析方法攻破。
一、流密码
将明文划分成以字符或字母或编码的基本单元。
加密:字符分别与密钥流操作进行加密操作,密钥的产生为初始密钥与随机流运算。
解密:使用与加密时相同的密钥流与密文进行作用解密得到明文。
其中,是初始密钥,是密钥流生成器第 i 时刻的内部状态
流密码强度完全依赖于密钥流产生器产生的序列的随机性和不可预测性,核心是密钥流生成器的设计。实现可靠解密的关键是实现加密解密密钥流的精确同步。流密码可根据密钥流生成器的状态是否受明文影响划分为:
- 同步流密码:不受明文影响,独立于明文。发送和接收端密钥流生成器只需 、初始状态相同即可生成相同密钥流。缺点:发送和接收端生成器必须精确同步,一旦失步无法正确解密。优点:利用敏感特性,有利于检测窜扰者注入,重放,删除等主动攻击;传播出现错误只会影响相应位的密文恢复,不造成差错传播。
- 自同步流密码:受到影响,即 ,自同步流密码在传输过程中如果有一位错误,在移位寄存器中会存活 n 个节拍,影响之后 n 位密钥的正确性,恢复的明文连续 n 位会受影响。缺点:差错传播。优点:具有自同步性,对主动攻击不那么敏感,将明文字符扩散在密文多个字符中,增强了抗统计分析能力。
1.1 RC4
OFB模式,可变密钥长度,面向字节操作 的流加密算法。
有两个计数器i、j,初始值为0;可变长度初始密钥K;S0,S1,S2...S255 S盒
S盒初始化:
- 重复利用可变长度初始密钥K填入T1,T2...T255;S0=0,S1=1...S255=255
- for i = 0 to 255 { j = (j+Si+Ti)mod256; interchange Si, Sj }
密钥流生成:
- i = i+1; j = (j+Si)mod256
- interchange Si, Sj
- t = (Si + Sj)mod 256; k = St
加密解密:K与明文异或得到密文;与密文异或得到明文。
特点:RC4对差分攻击和线性分析具有免疫力,没有短循环,具有高度非线性。
1.2 ZUC
ZUC本质是密钥序列产生算法;输入:密钥长度128bit,初始向量128bit;输出:32bit密钥序列
逻辑构成:16级线性反馈移位寄存器(LFSR)、比特重组(BR)、非线性函数F
(1) LFSR
由16个31bit寄存器构成
工作状态
LFSRWithWorkMode(){
- S16 = 2^15S15 + 2^17S13 + 2^21S10 + 2^20S4 + (1+2^8)S0 mod(2^31-1)
- if(S16==0,) set S16 = 2^31 - 1
- (S1, S2.......S16) —>(S0,S1.......S15)
}
初始化状态
LFSRWithInitializationModel(u){
- v = 2^15S15 + 2^17S13 + 2^21S10 + 2^20S4 + (1+2^8)S0 mod(2^31-1)
- S16 = (v + u)mod(2^31-1)
- if(S16==0,) set S16 = 2^31 - 1
- (S1, S2.......S16) —>(S0,S1.......S15)
}
(2) BR
从LFSR的输出中抽出8个寄存器中的128位组成4个32位的字 x0, x1, x2, x3 作为输出
(3)非线性函数F
输入: x0, x1, x2 ,输出: 32位字W
其中的S盒由4个8进8出的S盒构成 S = {S0, S1, S0, S1}
(4)密钥封装
将128bit初始密钥K, 128bit初始向量IV,16*15bit常量D,封装成16个31bit字作为LSFR寄存器单元变量S0,S1..S15的初始状态。
(5) 算法运行
初始化阶段:装入初始化si;令32bit记忆单元变量R0,R1为0;重复执行下述步骤32次
- BR()
- W = F(X0,X1,X2)
- 输出W
- LFSRWithInitializationModel(u = w>>1) //参数u是31bit
工作阶段:
执行一次下述步骤:
- BR()
- W = F(X0,X1,X2)
- LFSRWithInitializationModel()
进入密钥输出阶段,运行一次操作即可生成32bit密钥Z
- BR()
- Z = F(X0,X1,X2)异或 X3
- LFSRWithInitializationModel()
安全性分析
- LSFR层采用GF(2^31 - 1)上的16次本原多项式,随机性好,周期大;
- BR重组数据有较好随机性,且出现重复概率足够小;
- F有两个随机存储器R,两个线性部件L, 两个非线性S盒,使得输出具有较好的混淆特型、扩散特性、非线性。
二、分组密码
明文消息编码表示后的数字序列(X1,X2..Xi)划分为长为m的组(x0,x1,...xm-1),分别在分组密钥K =(K1,K2...Ki)的控制下进行变换,得到等长的长度为n的输出序列(y0,y1,...yn-1)。加密函数:,K为密钥空间。
与流密码对比,分组密码的密文不仅仅与相应时刻输入的明文相关,而与长为m的明文组有关。设计算法需要满足:
- 分组长度足够大,防止穷举攻击
- 密钥空间足够大
- 由密钥确定的置换算法足够复杂,使明文和密钥充分扩散和混淆
- 加解密运算简单,易于硬件实现
- 数据扩散
- 差错传播尽可能小
香农提出扩散和混淆抗统计分析破译法。扩散:将每位明文及密钥数字的影响尽可能快速散布到多个输出明文之中,以隐藏明文数字的统计特性。混淆:使作用于明文的密钥和密文之间的关系复杂化,使明文和密文、密文和密钥之间的统计关系极小化,使统计分析攻击方法不能奏效。
2.1 DES
输入明文或密文:64bit;密钥:56bit
n个64bit明文块经过DES加密后串联在一起形成密文序列
DES加密过程
(1)IP置换 对输入分组进行初始置换,其中IP是公开的固定函数(因此无密码学意义),L0,R0均为32bit。
(L0, R0) = IP(Input block)
(2)16轮迭代 (换位密码、代换密码)
每次迭代交换运算相当于换位密码,来获得信息扩散,本质上获得香浓提出模型中的混合特性。其中,ki是轮密钥,来源于56bit初始密钥的字串。f函数称为“S盒函数”,是代换密码,是非线性函数,提供消息分布的非线性。[代换密码具有非线性,而置换密码、仿射密码是线性密码的子集,线性密码减小密钥空间,且容易被差分攻击攻破,如DC]
代替置换网络要求S盒(f)可逆;Feistel网络可逆,但并不要求S盒可逆;DES算法中S盒不可逆,因为S盒中48bit->32bit。
密钥生成:每个子密钥ki都是由主密钥算出的48bit子集。
f函数:S盒6bit输入,前后2bit为行,中间4bit列。
(3)IP逆置换 将16轮迭代结果放入IP逆置换,消除初始置换的影响,最终输出DES算法的输出。
Output Block = IP^(-1)(L0, R0)
DES解密过程与加密过程相同,但轮密钥K' = (k15, k14,....k0)
DE安全性
主要缺点:密钥长度短。
克服密钥长度短:三重DES 加密-解密-加密
当k1==k2,与单钥DES兼容。
2.2 AES
Rijnael算法密钥、分组均可为128bit\192bit\256bit。AES分组长度只能为128bit,密钥可为128bit\192bit\256bit,以128bit做说明。将明文分组划分为8*16,组成4*4矩阵,将这些分组复制到state数组,128bit密钥做10轮运算;192bit密钥做12轮;256bit密钥14轮。
AES加密
(1)初始变换(轮密钥加)
(2)九轮运算
字节代换(SubBytes):根据S盒替换表,状态数组中每个字节都由S盒中的字节替换(保证非线性)。
行移位(ShiftRows):状态数组第一行不动;第二行左移一位;第三行左移两位;第四行左移三位。
列混合(MixColumns):对状态数组每一列进行线性转换。状态矩阵左乘一个固定的4*4矩阵C,但注意不是普通的矩阵乘法,普通的相加需替换为异或运算。
轮密钥加(AddRoundKey):state与轮密钥逐比特加,即异或。
(3)最后一轮运算
字节代换;行移位;列混合
AES解密
每轮运算中四个函数均可逆,因此解密时做逆运算即可。加密解密算法不同需要使用不同的电路和固件模块。但是对密钥扩展进行改进,使解密顺序为逆向行移位、逆向字节代换;逆向轮密钥加、逆向列混淆,可使得加密解密算法一致。
AES密钥扩展
由4字(16B)扩展至44字。其中,若i不是4的倍数,wi = w[i-4]异或w[i-1];若i是4的倍数,由g函数运算,其中依次进行字循环([b0,b1,b2,b3]->[b1,b2,b3,b0])、字节代换(S盒)、前两个结果与Rcon[j] (j是轮数)进行轮常量异或,最终完成密钥扩展。
AES安全性
- 字节代换提供非线性变换,非线性是重要的抗差分分析特性;
- 行移位和列混合将明文分组在不同位置的字节混合,满足香浓提出的混合特性;
- 轮密钥加提供消息分布所需的随机性。
2.3 SM4
分组和密钥均为128bit,通过32轮变换得到128bit输出,过程中以字节和字为单位进行处理。初始分组被划分为4个字x0,x1,x2,x3, 每经过一轮运算,产生新的xi,通过32轮变换,依次计算出x4....x35,最终输出 [x32,x33,x34,x35],然后再进行反序变换R,得到[y0,y1,y2,y3] =[x35,x34,x33,x32]。
SM4加密
(1)加密
- 每轮输出,其中rki 为轮密钥;
- 合成变换T由线性和非线性变换构成,
- 线性变换L是以字为单位的线性变换
- 非线性变换由4个并行的8进8出的S盒构成
最终可得
(2)反序变换R
[y0,y1,y2,y3] =[x35,x34,x33,x32]
SM4解密
解密过程与加密过程相同,但轮密钥顺序与加密相反(rk32,rk31....rk1)。也需经过解密以及反序变换R。
SM4密钥扩展
32轮运算一共需要32个32bir轮密钥。具体的密钥扩展算法如下:
输入的密钥划分为(MK0,MK1,MK2,MK3)需要4个系统参数FK0,FK1,FK2,FK3 ,32个固定参数CK1...CK32。
(K0,K1,K2,K3)= (MK0FK0,MK1FK1,MK2FK2,MK3FK3)
其中T'与T基本相同,只是L略有变化
SM4安全性
T由非线性和线性变换构成,满足了混淆扩散的作用。S盒引入使SM4算法在非线性度、运算速度、差分均匀性、自相关性等密码学指标方面都具有优势。