-
分组密码概述
-
加密:Vn*K→Vm,输出的每一位密文不仅与相应的明文有关,还和一组长为n的明文有关。通常,n=m。
-
要求
-
分组长度n要足够大
-
防止明文穷举攻击法奏效
-
-
密钥量要足够大
-
即置换子集中的元素足够多
-
尽可能消除弱密钥
-
防止密钥穷举攻击奏效
-
-
密钥不能过长
-
方便密钥管理
-
-
由密钥确定置换的算法足够复杂
-
充分实现明文和密文的扩散和混淆
-
抗击各种已知的攻击
-
使对手除了穷举法外,无其他捷径可循
-
-
加密解密运算简单
-
易于软件和硬件高速实现
-
加密和解密在同一器件实现
-
设计的算法采用规则的模块结构
-
差错传播,数据扩展尽可能小
-
-
-
-
代换和置换
-
代换
-
n位明文密文有2的n次方个取值。
-
明文的每一个分组产生唯一对应的密文分组,且变化可逆。
-
不同的可逆代换个数有!个。
-
使用代换表来定义明文和密文之间任何可逆映射
-
问题
-
如果分组长度太小,容易因统计分析而被攻破
-
-
解决
-
如果n足够大,那么明文的统计特性将被隐藏。
-
-
-
n比特的代换结构,密钥的大小是n* 比特。
-
实际中将n分成小段,设计较小的子代换(S盒)
-
-
置换
-
进行数据位置的交换。
-
-
-
扩散和混淆
-
实现了分组密码的本质属性
-
目的
-
抗击敌手的统计分析,以使敌手无法得到密钥。
-
-
扩散
-
将明文的统计特性散布到密文
-
使明文和密文之间的统计关系变得复杂
-
实现方式是让密文的每一位由多位明文产生
-
实现:重复执行某个置换,再对置换作用以一个函数
-
-
混淆
-
使密文和密钥之间的统计关系变得复杂
-
使用复杂的代换算法可得预期的混淆效果
-
-
理想密码:密文的统计特性与使用的密钥独立
-
-
Feistel密码结构
-
利用乘积密码得到简单的代换密码。
-
乘积密码:顺序地执行多个基本密码系统,使得最后的密码强度高于基本密码系统的结果
-
-
Feistel加密结构
-
输入长度为2ω的明文和一个密钥K。
-
进行相同结构的n轮迭代(代换)后,左右两半再合并到一起(置换)
-
代换过程
-
Li=Ri-1
-
Ri=Li-1⊕F(Ri-1,Ki)
-
-
置换过程
-
交换左右两半数据
-
-
-
参数和特性
-
分组大小
-
分组越大,安全性越高,加密速度越慢(常见64bit)
-
-
密钥大小
-
密钥越长,安全性越高,加密速度越慢(通常128bit)
-
-
轮数
-
多轮结构可提供足够多安全性(典型16轮)
-
-
子密钥产生算法
-
复杂度越高,分析难度越大
-
-
轮函数
-
复杂性越高,分析难度越大
-
-
-
考虑的问题
-
快速的软件实现
-
大多数算法被嵌套在应用程序中
-
-
算法容易分析
-
为容易地分析算法抵抗攻击的能力
-
-
-
Feistel解密结构
-
和加密采用同一算法
-
-
-
DES
-
最广泛使用和流行的分组密码算法
-
构成
-
分组长度64比特
-
密钥长度56比特
-
初始置换IP
-
重排明文分组的64比特数据
-
第IP[i][j]个数放在第i行第j列的位置
-
-
相同功能的16轮变换(每轮均有代换和置换)
-
函数F(R,K)
-
Ri-1通过扩展/置换(E表)得到48比特
-
输出与48比特的轮密钥Ki异或
-
通过8个代换/选择(S盒)得到32比特(输入6比特,输出4比特)
-
每个S盒给出了4个可逆代换
-
第一个和第六个比特选择4个代换中的一个
-
-
通过置换(P)得到32比特
-
-
输出与Li-1异或,得到Ri
-
Li=Ri-1
-
-
轮末置换
-
16轮的输出被交换次序
-
-
逆初始置换IP-
-
-
密钥的产生
-
置换选择1
-
16次变换
-
将密钥分成两部分Ci和Di,分别进行左移位
-
通过置换选择2(每轮都相同),得到48位比特Ki,送入F函数
-
-
将Ci和Di传给下一轮
-
-
-
二重DES
-
中途相遇攻击
-
可以攻击任何分组密码
-
如果有C=Ek2[Ek1[P]],则X=Ek1[P]=Dk2[C],穷举k1,k2,找到相等项
-
-
产生的映射不会等价于单DES加密。
-
使用的密钥长度为112比特
-
P=Dk1[Dk2[C]]
-
C=Ek2[Ek1[P]]
-
-
三重DES
-
三个密钥
-
C=Ek3[Dk2[Ek1[P]]]
-
过于笨重
-
加密-解密-加密
-
-
两个密钥
-
C=Ek1[Dk2[Ek1[P]]]
-
加密-解密-加密:EDE
-
-
-
-
差分密码分析
-
攻击迭代密码最有效的方法之一
-
通过分析明文对的差值对密文对的差值的影响来恢复某些密钥比特
-
详见P45
-
-
线性密码分析
-
对迭代密码的已知明文攻击
-
利用密码算法中的不平衡的线性逼近
-
详见P46
-
-
分组密码的运行模式
-
电码本模式ECB(分组密码)
-
加密
-
一次对一64比特的分组加密,每个分组独立地以同一密钥加密
-
-
作用
-
传送短数据
-
-
问题
-
同一明文分组对应同一密文分组
-
如果消息有固定的结构,密码分析者能找到这种关系
-
如果消息有重复的元素且重复的周期是64的倍数,则密码分析者能识别这些元素
-
-
-
密码分组链接模式CBC(分组密码)
-
重复的明文分组产生不同的密文分组
-
加密
-
加密算法的输入是明文组与上一个密文组的异或
-
在产生第一个密文分组时,使用一个初始向量IV
-
IV应像密钥一样保护(可使用ECB来发送)
-
-
作用
-
对加密长于64比特的消息非常合适
-
能够用于传送数据分组,用于认证
-
-
-
密码反馈模式CFB(流密码)
-
不需要消息填充,且运行是实时的。
-
明文和密文一样长,否则造成浪费。
-
加密
-
每次只处理j比特
-
将加密算法的输出,反馈到移位寄存器,以产生伪随机输出
-
输出的最左j比特与明文异或
-
-
解密
-
解密时采用加密的加密算法。
-
-
作用
-
用于传送数据流,用于认证
-
-
-
输出反馈模式OFB(流密码)
-
与CFB类似,不过将密文单元,反馈到移位寄存器
-
传输过程中的比特错误不会被传播
-
作用
-
用于在有扰信道上传送数据流
-
-
问题
-
更易受到对消息流的篡改攻击
-
-
-
-
AES算法
-
非Feistel结构
-
有限域GF(2的8次方)
-
将一个字节的每位,构成一个多项式,最高次为7次。
-
对于多项式加法,为多项式每个系数的比特异或。
-
对于多项式乘法,选择的8次不可约式系数为100011011(即11B)。
-
满足分配律、交换律,有单位元01
-
-
x乘法
-
实际上是将系数左移一位,即乘以0x02,简称“x”。
-
如果最高次为8次,则减去一次8次不可约多项式。即求乘积结果与m(x)的异或
-
实际上,可以通过先左移一位系数,如果b7=1,则再与1B做异或实现。
-
记作b=xtime(a)。
-
在专用芯片中,xtime只需要4个异或
-
x的幂乘运算可以重复用xtime实现
-
-
-
-
设计思想
-
抵抗所有已知的攻击
-
速度快,编码紧凑
-
设计简单
-
其轮函数由三个不同的可逆均匀变换组成:线性混合层,非线性层,密钥加层。
-
线性混合层:确保高度扩散
-
非线性层:将S盒并行使用
-
密钥加层:子密钥简单地异或到中间状态上,实施一次掩盖
-
均匀:每个比特用类似的方法处理
-
-
-
算法说明
-
迭代型分组密码,分组长度Nb和密钥长度Nk可变,可分别为16,24,32字节。
-
状态:算法的中间结果可表示为一个矩阵阵列(分组),矩阵为4行Nb列,一个元素代表一个字节。第n个元素,和元素坐标的关系为:n=i+4j(0≤n≤4Nb-1)。
-
种子密钥:矩阵为4行Nk列,一个元素代表一个字节。
-
若把分组当做一维数组,每个数组由一列组成,则数组长度可为4,6,8。
-
迭代轮数Nr,和Nb与Nk有关
-
-
初始轮
-
仅有一个密钥加过程。
-
目的:在不知道密钥的情况下,对最后一个密钥加后的任一层可简单地剥去
-
对安全性无意义
-
-
轮函数
-
字节代换
-
非线性变换,使用Nb个相同的可逆的S盒实现。
-
首先将字节映射到乘法逆元
-
对字节做GF(2)上的可逆放射变换
-
-
行移位
-
对状态阵列的各行进行循环移位。
-
为进一步扩散,本身没有扩散作用。
-
-
列混合
-
扩散作用。
-
每列与一个固定的多项式c(x)进行模+1乘法
-
c(x)为可逆多项式(与+1互素),否则列混合不可逆
-
通过两轮迭代,能实现完全扩散。
-
-
密钥加
-
轮密钥简单地和状态进行异或
-
轮密钥长度等于分组长度Nb
-
-
-
结尾轮
-
没有列混淆过程。
-
-
密钥产生
-
种子密钥被扩展成扩展密钥
-
轮密钥依次取扩展密钥的前Nb个字,也即4*Nb个字节
-
扩展密钥是4字节字为元素的一维阵列,表示为W[Nb*(Nr+1)],前Nk个字取种子密钥
-
-
选取轮密钥
-
轮密钥i由轮密钥缓冲字W[Nb*i]到W[Nb*(i+1)-1]给出
-
末轮轮密钥起始为Nb*Nr
-
-
密钥扩展
-
扩展算法(P66)
-
i/k为整数时,有和轮常数有关的特殊处理。
-
k≤6时
-
k>6时
-
-
-
-
结尾轮
-
没有列混淆过程。
-
-
解密算法
-
引理3.1
-
字节代换和行移位的逆变换,顺序不变
-
-
引理3.2
-
列混合和密钥加的逆变换,顺序不变
-
-
解密算法初始密钥加和结尾轮密钥分别是k(Nr),k(0),而中间轮的密钥为InMixColumn(k(Nr-i))
-
说明:如果把加密过程简称为ABCD则解密过程为D逆C逆B逆A逆。但是这样需要另一种计算网络,如何使用和加密相同的计算网络?实际分析ABCD的特征,发现解密过程可以调换为C'逆D'逆A'逆B'逆,但是这样依旧是从C过程开始,而非从A过程开始。那解密过程的CD/ABCD/ABCD/AB....CD/ABD,如果把第一轮的C去掉,把第一轮的D作为初始轮另外计算,则就成为了和加密过程一样的计算网络。其中最后一个D并非是这Nr轮存在的操作,而是加密过程的初始轮进行的D操作。(注意,第一个D,和最后一个D,未通过列混淆操作)实际上,加密过程为D/ABCD/ABCD/AB...ABCD/ABCD,把最后一轮的C去掉,把第一轮的D作为初始轮另外算,就和解密过程一致。那为什么要对一个C,和一个D进行单独处理?这是因为解密过程的首次操作中,C,D必然在A之前。我们需要首先进行A来保证过程的一致性。
-
-
-
IDEA算法
-
明文和密文为64比特,密钥为128比特。
-
密码强度
-
有效的混淆和扩散特性
-
混淆使用三种运算获得(16比特输入输出)
-
比特异或
-
模65536整数加法,输入输出为无符号整数
-
为保证和乘法的分配律,结合律不成立
-
-
模65537整数乘法,全0的做全1处理
-
为保证构成一个群,故模数为素数
-
-
三个运算任意两个不满足交换律,结合律
-
-
扩散是由乘加结构MA实现(重复使用8次)
-
输入两个16比特的子段,两个16比特的子密钥
-
输出为两个16比特的子段
-
-
-
实现
-
软件:软件实现16比特子段的处理,实现3个运算
-
硬件:加解密用同一器件实现
-
-
加密
-
将64比特分为4个16比特的子分组
-
连续的8轮迭代
-
每轮开始时有一个变换(4个子段和4个子密钥)
-
使用两个乘法和两个加法
-
输出的4个子段,经过异或形成2个16比特的子段
-
-
MA结构(2个子段和2个子密钥)
-
变换的4个子段,和MA结构的输出经过异或,得到4个输出子段
-
交换中间的两个子段,目的在于进一步混淆
-
-
输出变换
-
输入的四个子段中间的两个子段,交换位置,目的在于撤销交换
-
需要4个子密钥
-
-
-
子密钥的产生
-
前8个子密钥从加密密钥中获得
-
加密密钥循环左移25位,再取8个子密钥
-
-
解密
-
解密密钥
-
用于变换的第一个和第四个子密钥
-
取加密密钥的mod 65536乘法逆元
-
-
用于变换的第二个和第三个子密钥
-
取第3个和第2个子密钥的mod 65535加法逆元
-
首尾轮取第2个和第3个子密钥的mod 65535加法逆元
-
-
用于MA结构的子密钥
-
不变
-
解释:将MA及其上半的两个异或,和其下半的四个异或看作一个区块。加密时,设输入分别是A,B,C,D,输出分别是D,E,F,G。则D,E,F,G由A,B,C,D与f(A异或C,B异或D,Zi,Zj)的部分结果异或得到。而解密时,输入是D,E,F,G,而f(D异或F,E异或G,Zi,Zj),因为D和F由A和C异或同一个数得来,故D异或F=A异或C。这样,解密时,MA就有和加密时相同的输出,而这相同的输出再部分异或上D,E,F,G,便能得到A,B,C,D。总的来说,密钥不发生变化,是为了保证,解密和加密时候,都异或上同一组数。也即A异或M=Y时,Y异或M也=A。如果密钥发生变化,则该区块不可逆。
-
-
正确性证明
-
P57
-
-
-
-
-
中国商用密码算法SM4
-
结构
-
数据分组长度128比特
-
密钥分组长度128比特
-
32轮迭代结构,每轮一个32位密钥
-
-
基本运算
-
模2加
-
循环移位
-
-
基本密码部件
-
S盒
-
以字节为单位的非线性替换
-
作用为混淆
-
-
合成变换T
-
以字为单位的变换
-
T(X)=L(τ(X))
-
非线性变换τ
-
以字为单位的非线性替换
-
由4个S盒并置构成,一个S盒处理一个32位的字,作用是混淆
-
τ(A)=(S(a0),S(a1),S(a2),S(a3))
-
-
线性变换L
-
以字为单位的线性变换
-
作用是扩散
-
C=L(B)
-
-
-
-
加密/解密算法
-
32轮迭代
-
X4=X0⊕T(X1⊕X2⊕X3⊕rk)
-
-
一个反序处理R
-
(Y0,Y1,Y2,Y3)=R(Y3,Y2,Y1,Y0)
-
-
-
密钥扩展算法
-
4个常数FK
-
固定参数CK(32个32比特)
-
产生方法:ck(i,j)=(4i+j)*7(mod 256)
-
-
密钥扩展算法
-
32轮迭代
-
rk0=K4=Ki⊕T'(K1⊕K2⊕K3⊕CK0),其中K1,K2,K3由MKi和FKi异或得到
-
-
-
现代密码学:分组密码-期末复习大纲
本文详细介绍了分组密码的工作原理,包括代换、置换、Feistel结构、AES和SM4算法等,强调了安全性要素如密钥长度、分组大小、轮数和复杂性。同时讨论了不同加密模式如ECB、CBC、CFB、OFB和它们的应用场景。
摘要由CSDN通过智能技术生成