分组密码的设计原则
Feistel网络将输入(2w位)分成相同长 度的两部分Li和Ri,按如下方式进行变换。
i
Li-1(w位) f
Ri-1(w位)
Li(w位)
Ri(w位)
k
Feistel网络的圈函数可表示为:
g ( Li 1 , Ri 1 , Kn ) ( Li , Ri )
其中:
Li Ri 1
Ri Li 1 f ( Ri 1 , ki )
• 通常使用的技术是将代替密码和置换密 码做乘积。 • 在DES算法中用到的S盒(6进4出)和P 盒(1)即是用简单的代替和移位做乘积
二、迭代密码
迭代密码:以一个简单函数,进行多次迭代, 称为迭代密码。每次迭代,称为一轮,相应 的迭代函数称为轮函数或圈函数。。 • 乘积密码通常伴随一系列置换与代换操 作,常见的乘积密码是迭代密码。 • 迭代密码明确定义了一个圈函数和一个 密钥编排方案,一个明文的加密经过了t 轮类似的过程。设k是一个确定长度的随 机二元密钥,用k通过密钥编排方案来生 成t个圈密钥(也叫子密钥)。
• 迭代密码:对于一个给定的密钥编排方案,圈 函数g的输入为圈密钥kr和当前状态wr-1,下一 个状态定义为:wr=g(wr-1,kr)。初态w0定义为 明文x,密文y定义为经过t轮后的状态。整个加 密操作过程如下: • w0←x • w1←g(w0,k1) • w2←g(w1,k2) • ………… • wt-1←g(wt-2,kt-1) • wt←g(wt-1,kt) • y←wt
若密码体制不是幂等的,那么多次 迭代就有可能提高安全性。 但是这种途径显然要求以非幂等的密 码体制开始。一种构造简单的非幂等的 密码体制的方法,是对两个不同的简单 密码体制做乘积。
若密码体制S1、S2都是幂等的且可交 换,则S1×S2也是幂等的。 (S1×S2)×(S1×S2)=S1×(S2×S1)×S2= S1×(S1×S2)×S2= S1×S2 当S1、S2都是幂等的,要想使S1×S2 不是幂等的,S1、S2必须是不可交换的。
明文x0,x1,…,xi,… 明文分组 x=(x0, x1,…, xn-1), 密钥 k=(k0, k1,…, kt-1) 密文分组 y=(y0,y1,…,ym-1 加密函数 E:Vn×K→Vm
通常取m=n。 若m>n,则为有数据扩展的分组密码; 若m<n,则为有数据压缩的分组密码。
对二进制明文,其分组长度称为该分组密码的 分组规模。
2、右循环移位代换
f : ( x0 , x1,, xn1 ) ( xn1, x0 ,, xn2 , x0 )
3、模2n+1代换
4、线性变换 y=xT
5、仿射变换 y=xT+b
(一)代换-置换网络(SP网络)
一个SP网络就是一类特殊的迭代密码。设l和m 都是正整数,明密文都是长为lm的二元向量,一个 SP包含两个变换,分别记为πs和πp。
加密和解密规则定义如下: 加密: E ( x) E K ( K , K ) ( x) EK [ EK ( x)] y
1 2 2 1
解密:DK ( y) D( K , K ) ( y) DK [DK ( y)] x
1 2 1 2
注意:解密次序与加密次序相反
乘积密码特点 乘积运算是可结合的,即: (S1×S2)×S3=S1×(S2×S3) 如果将内包含密码体制S和自己做 乘积,我们得到密码体制S×S,记为 S2。如果做n重乘积,得到的密码体制 记为Sn。 如果S2=S,称该密码体制是幂 等的。许多古典密码体制如移位、代 替等都是幂等的。
分组密码重要性:
单钥分组密码是许多密码系统的重要组成部分。
分组密码的应用需求:
除了安全性外,还有运行速度、存储量、实现 平台、运行模式等限制条件。
一、 分组密码的基本概念
分组密码是将明文数据按固定长度进行分组, 然后在同一密钥控制下逐组进行加密,从而将各个 明文分组变换成一个固定长度的密文分组的密码。 主要特点:使用相同算法、相同密钥逐组加密。
E[ x, k ] f ( f ( f ( f ( x, k ), k ), , k
(1) (2)
( r 1)
), k )
(1)
( r)
D[ y, k ] f ( f ( f ( f ( y, k ), k
(r )
( r 1)
) , k ), k )
(2)
• 对合置换 另P是对x的置换,即 P : F2n F2n 若对所有的x,均有P[P(x)]=x,则称P为对合置换 I型迭代分组密码 以对合密码函数构造的多轮迭代分组密码 II型迭代分组密码 采用对合密码函数和对合置换的级连。 ( x, k ) P[ f ( x, k )] F
分组密码中二进制密钥的长度称为分组密码的 密钥长度或密钥规模。 对有t个分组的明文,其加密方式为:
M1
k
M2
k
M3
k
Mt
k
C1
C2
C3
Ct
举 例
分组密码的缺点和优点
优点:容易实现同步。 缺点:分组加密不能隐蔽数据模式(相同 明文,语言统计规律等);
二、 分组密码设计原则 一个好的分组密码应集安全、效率、可实现 性及灵活性于一身。
Feistel 密码结构的设计动机
四、Feistel网络(FN)
对合密码: 一种加密函数f(x,k),实现
F2n F2t F2n
的映射。其中,n是分组长度,t是密钥长度。
若对每个密钥取值都有f(f(x,k)k)=x,则称之为对合变换。
对合加密函数在自密钥控制下对明文进行r轮迭代,后得到 密文,密文在其逆序子密钥作用下,进行r轮迭代,就可恢 复出明文。
三、分组密码的设计方法
如何设计分组密码算法才能保证其 实现足够的混乱和扩散?
Shannon提出乘积密码:
通过将一个弱的密码函数迭代若干次,
产生一个强的密码函数。 乘积密码指顺序地执行两个或多个基本密码系 统,使得最后结果的密码强度高于每个基本密 码系统产生的结果.
一、乘积密码
F
k1
F
k2
F
kr
第3章 分组密码体制
3.1 分组密码概述及设计原则 3.2 数据加密标准DES 3.3 分组密码的运行模式 3.4 AES算法
3.1 分组密码概述及设计原则
主要内容:混乱原则、扩散原则,乘 积密码, S-P网络,Feistel模型 重点:乘积密码,迭代密码, SP网络, Feistel网络。 难点:混乱和扩散。
也就是说,让明文和密钥中的每一位影响 密文中的尽可能多的位,或者说让密文中的每 一位都受到明文和密钥中的尽可能多位的影响。
扩散原则一方面要求具有一定结 构和统计规律的明文(即明文有冗余) 经过变换后,这种结构和统计规律在密 文中应得到充分破坏,使得密文不再显 示出任何形式的规律性,另一方面要求 密钥的每一比特要影响尽可能多的密文 比特,使得密钥的每一比特在密文中都 得到充分扩散。 显然,按照扩散原则的要求,每个 明文比特和密钥比特均应影响密文的所 有比特。
s : {0,1}l {0,1}l
实现l比特的代换,即S盒
实现lm比特的置换
p : {1,2,, lm} {1,2,, lm}
在软件方面,S盒通常以查表的形式来实现。 硬件实现必须使用相对小的S盒。 SP网络的框图结构如下:
k1
S S
k2
S
P
…… ……
kt
S
S
P
S
S
f
k n 1
第 n 1
Rn 1 Ln 2 f ( Rn 2 , kn 1 )
Ln 1 Rn 2
圈
Rn Ln 1 f ( Rn 1 , kn )
f
Ln Rn 1
kn
第 n 圈
2、实现原则:
分组密码应符合简单、快速和成本低廉的原 则,做到以较少的资源、低廉的成本实现对 明文信息的快速加密。
硬件实现原则 (1)加脱密的相似性 (2)结构的规则性
(3)设计成迭代型
(4)选择易于硬件实现的编码环节比特置换、小S盒
软件实现原则
(1)加脱密相似性 (2)使用子块 (3)设计成迭代型 (4)使用易于软件实现的运算加法、乘法、移位
注意:函数f并不要求是可逆的,因为只要密 钥给定,圈函数g一定是可逆的。
Li 1 Ri f ( Li , ki )
Ri 1 Li
2比特数据
L0
R0
f
k1
第 一
R1 L0 f ( R0 , k1 )
L1 R0
圈
Ln 2 Rn 3
Rn2 Ln3 f ( Rn3 , kn2 )
算法实现: ④ 加密和解密运算简单,易于软件和硬件高 速实现。 ⑤ 数据扩展尽可能地小。一般无数据扩展。 ⑥ 差错传播尽可能地小。
1、安全性设计原则
混乱原则(又称混淆原则)(Confusion) 非线性变换 混乱原则就是将密文、明文、密钥三者之间的统计 关系和代数关系变得尽可能复杂,使得敌手即使获得了 密文和明文,也无法求出密钥的任何信息;即使获得了 密文和明文的统计规律,也无法求出明文的新的信息。 可进一步理解为: (1)当前明文不能由已知的明文、密文及少许 密钥比特代数地或统计地表示出来。 (2)当前密钥不能由已知的明文、密文及少许 密钥比特代数地或统计地表示出来。
乘积密码的结构框图
• 这里,我们只考虑明文空间和密文空间 相同的密码体制,即C=M,这种类型的 密码体制称为内包的密码体制 (endomorphic cryptosystem)。 S S • 设: 1 (M , C, K1 , E1 , D1 ) ; 2 (M , C, K 2 , E2 , D2 ) ,且M=C • 那么S1和S2的乘积密码体制S1×S2定义 为: • 乘积密码的密钥形式为:K=(K1,K2),。