第四章 对称密码体制
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
硬件实现的要求:加密和解密应具有相似性;尽 量采用标准的组件结构,以便能适应于在超大规 模集成电路中实现。
(3)两个基本设计方法
混淆(confusion):使得密文的统计特性与密钥的 取值之间的关系尽量复杂,必须让明文的每个比特 影响到密文的许多比特的取值。
扩散(Diffusion):明文的统计结构被扩散消失到密 文的长程统计特性,使得明文和密文之间的统计关 系尽量复杂。
如将64比特数据表示为M=(m1,m2,…,m64),则在初 始置换IP的作用下变为M=(m58,m50,…,m7) 。如果将 IP(M)用初始逆置换IP-1作用,将会得到M。例如M 中
的第60个比特m60,在IP(M)中位于第9个比特位 , IP(M)在初始逆置换IP-1作用下, 第9个比特移到第60
图4.3 Feistel网络
L0
第1轮
⊕
明文(2w位) F
…
Li-1
第i轮
⊕
F
…
R0 K1
Ri-1 Ki
…
…
第n轮
Ln-1
⊕
Ln Ln+1
F 密文(2w位)
Rn-1 Kn
Rn Rn+1
单轮加密运算:
网络中每轮的运算基本相同:每轮中都对数据的左 半部分进行代换,方法是先对右边一半数据应用轮函 数,然后将输出的数据与左半部分进行异或。轮函数 的结构一直不变 ,但作为控制参数的每轮子密钥一般 不同。代换完成后,再做一次置换操作交换左右两半 数据。运算过程如图4.4。
表4.3 置换表P
P 16 7 20 21 29 12 28 17 1 15 23 26 5 18 31 10 2 8 24 14 32 27 3 9 19 13 30 6 22 11 4 25
子密钥的产生
用密钥K来产生16个48比特的子密钥 Ki,1≤i≤16。通过相同16次基本相同移位和置 换操作,在16次迭代运算中每次产生一个不 同的子密钥。
6比特 S3 S4 S5 S6 S7 S8 选择函数组
4比特
32比特寄存器
图4.9 选择压缩运算S
对每个盒Si,6比特输入中的第1和第6比特组成 的二进制数确定Si 的行,中间 4 位二进制数用来确 定Si的列。Si中相应行、列位置的十进制数的 4 位 二进制数表示作为输出。图4.10表示DES的S1-盒的
分组密码系统对不同的组采用同样的密 钥来进行加/解密。流密码的基本思想是利用 动态的密钥流进行加密/解密。
k
x1
y1
┇
┇
无记忆元件
xm
ym
分组密码(y=ek(x))
k
xi
…
······
yi
Leabharlann Baidu
内部记忆元件
流密码(yi=
e
z
)( x
i
i
)
图4.1 分组密码和流密码的加密
1、 分组密码设计原理
(1)原理
一轮SP网络加密过程:
X i1
S——替换
P——置换
Xi
图4.6 一轮SP网络加密过程
4.2 数据加密标准 DES
数据加密标准 (Data Encryption Standard) 是至今为止使用最为广泛的加密算法。IBM 提交 了他们研制的一种密码算法,在经过大量的公开 讨论之后于1977年1月15日被正式批准为美国联邦 信息处理标准,即FIPS-46,同年7月15日开始生 效。1999年颁发新标准, DES只能用于(历史)遗 留系统和3DES的使用。
我们在第二章介绍经典密码算法中使用的加密 技术能不能达到混淆和扩散的作用?
迭代密码是实现混淆和扩散原则的一 种有效的方法。合理选择的轮函数经 过若干次迭代后能够提供必要的混淆
和扩散。
2、分组密码的一般结构
分组密码的结构一般可以分为两种:
(1)Feistel网络结构
(2)SP网络结构
我们将DES作为对称密码的研究对象, DES算法是基于Feistel网络结构,所以本 次授课内容重点在于该网络结构工作原理 的研究。
初始逆置换IP-1
40 8 48 16 56 24 64 32 39 7 47 15 55 23 63 31 38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29 36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27 34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25
输出64比特密文数据
图4.7 DES加密算法框图
4.2.1.1初始置换IP和初始逆置换IP-1
将64比特明文数据用初始置换IP进行置换操 作,得到一个乱序的64比特明文分组,进行16轮 完全类似的迭代运算后,用初始逆置换IP-1进行置 换操作,产生密文数据组。置换表中数字表示将 64比特数据组中在该数字所在位置的比特置换为 该数字表示的位置的比特。初始置换IP和初始逆 置换IP-1如表4.1所示:
1
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
2
4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
3
15 12 8 2 4 9 1 7 5 11 2 14 10 0 6 13
图4.10 DES的S1-盒的输入和输出关系及示例
置换运算P:类似初始置换IP,将S盒的输出32比 特根据置换表P进行置换运算。
(1)Feistel网络结构
工作过程:一个分组长度为n(偶数)比特 的L轮Feistel网络的加密过程如下。给定明文P,
将P分成左边和右边长度相等的两半并分别记为L0
和R0,进行L轮完全类似的迭代运算后,再将左边 和右边长度相等的两半合并产生密文分组,第i轮
迭代输入的是Li-1和Ri-1来自于上一轮的输出,而 输入的子密钥Ki不同于K,也互不相同。如图3.3 所示:
个比特位。这说明IP和IP-1互逆。
4.2.1.2 一轮迭代变换
迭代变换是DES算法的核心部分,如图4.8所示。 在每轮开始将输入的64比特数据分成左、右长度相等 的两半,将右半部分原封不动地作为本轮输出的64比 特数据的左半部分,同时对右半部分进行一系列的变 换,即用轮函数作用右半部分,然后将所得结果(32 比特数据)与输入数据的左半部分进行逐位异或,将 所得数据作为本轮输出的64比特数据的右半部分。
用 算法简洁:容易通过分析算法而知道算法抗各种攻
击的能力,也有助于设计高强度的算法。
Feistel的解密算法:
以密文分组作为算法的输入,但以相反的次序使用子 密钥,即第一轮使用 ,K第l 二轮使用 ,K直l1 至L轮使用 。 单K轮1 解密过程如图4.5所示:
K1
RDi-
LDi-
1
1
⊕
第i
F
轮
表4.2 DES中的扩展变换表
E
32 1 2 3 4 5 45 6 7 89 8 9 10 11 12 13
12 13 14 15 16 17 16 17 18 19 20 21 20 21 22 23 24 25 24 25 26 27 28 29 28 29 30 31 32 1
如果将输入32比特数 据按图中所标位置顺序 读出,可得48比特的输 出数据。可以看出1,4, 5,8,9,12,13,16, 17, 20,21,24,25, 28,29,32 这16个位置 上的数据都被重复读了 一次。
LDi
K’i RD
i
图4.5 一轮Feistel网络解密过程
解密: RDi-1 = LDi ; RDi = LDi-1⊕F(RDi-1,Ki)
(2)SP网络结构
每一轮的输入首选被一个由子密钥控制的可逆函 数S作用,然后再对所得结果用置换P作用。S和P被分 别称为混淆层和扩散层,起混淆和扩散的作用。
与子密钥的异或运算
将选择扩展运算的48 比特输出数据与子 密钥(48比特)进行异或。
与子密钥的异或运算实质上是对明文的 代换操作。
选择压缩运算:
将输入的48比特数据自左至右分成8组,每组为6 比特。然后输入8个S盒,每个S盒为一非线性代换, 有4比特输出,如图3.9所示。
S1 S2
48比特寄存器
输入和输出关系及输入为(101100)的示例,输出
为0010。
x5 x0 10
x5 x4 x3 x2 x1 x0 10 11 0 0
(y3 , y2, y1 , y0)=(0,0,1,0)
列号 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
行号
0
14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
将明文消息划分成长度为n的组(x0,x1,…,xn-1),每
组分别在密钥K=(k0,k1,…,km-1) 的控制下变换成等
长的输出数字序列 (y0,y1,…,yn-1) ,加密函数是
E:Vn×K→Vn ,其中Vn 是n维矢量空间,K为密钥空
间。
密 k (k0 , , km1 )
密钥 k= (k0 , , km1 )
表4.1 初始置换IP和初始逆置换IP-1 表
初始置换IP
58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4 62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8 57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3 61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7
密钥空间足够大,尽可能消除弱密钥,从而使所有密钥 同等概率,以防穷举密钥攻击。今后一段时间内,128 比特密钥应该是足够安全的。
算法要足够复杂,充分实现明文与密钥的扩散和混淆, 没有简单关系可循,要能抵抗各种已知的攻击,如差分 攻击和线性攻击等;另外,还要求有较高的非线性阶数。
软硬件实现性
软件实现的要求:尽量使用适合编程的子块和简 单的运算。子块的长度能自然地适应软件编程, 如8、16、32比特等;最好是用处理器的基本运 算,如加法、乘法、移位等。
4.2.1 DES加密过程
DES是分组长度为64比特 的分组密码算法,密钥长度 也是64比特,其中每8比特 有一位奇偶校验位,因此有 效密钥长度为56比特。DES 算法是公开的,其安全性依 赖于密钥的保密程度。DES 结构框图如图4.7。
输入64比特明文数据 初始置换IP
在密钥控制下16轮迭代 交换左右32比特 初始逆置换IP-1
钥 明文
( x0 , , xn1 )
加密算法
密 y ( y0 , , yn1 )
文
解密算法
明文
( x0 , , xn1 )
图4.2 分组密码模型
明文分组和密文分组长度都为n,共用2n个明 文分组和密文分组,加密过程实质上是对字长为n
的数字序列的置换,为了使加密运算可逆,从而解
密运算可行,每个明文分组对应惟一的一个密文分 组,即置换是可逆的。这样的置换共有2n!个。实
LEi-1
第i轮 ⊕
REi-1
F
Ki
LEi
REi
图4.4 一轮Feistel网络加密过程
加密: LEi = REi-1;REi = LEi-1⊕F(REi-1,Ki)
安全性以及软、硬件实现速度: 分组长度 密钥长度 循环次数 子密钥算法:子密钥算法越复杂则安全性越高 轮函数:轮函数越复杂则安全性越高。 快速的软件实现:算法经常被镶嵌在应用程序中使
第四章 对称密码体制
本章内容:
分组密码的一般原理
工作方式 一般结构
DES算法的描述 分组密码的工作模式
4.1 分组密码原理
对称密码体制根据对明文的加密方式的不同 而分为分组密码和流密码。分组密码先按一定 长度(如64字节、128字节等)对明文进行分组, 以组为单位加/解密;流密码则不进行分组,而 是按位加密。
际使用中的许多分组密码,如DES、IDEA等,所 用的置换只不过是上述置换集的一个很小的子集。
分组密码的算法实质:是在密钥的控 制下,能从一个足够大和足够好的置换 子集中简单而迅速地选出一个置换,用 来对当前输入的明文数字组进行加密变 换。
(2)设计的算法应满足的要求
安全性:
分组长度足够大,使不同明文分组的个数足够多,防止 明文穷举攻击法。新算法标准一般要求 n=128bit。
Li-1(32比特)
Ri-1(32比特) 选择扩展运算E 48比特寄存器
48比特寄存器 选择压缩运算S 32比特寄存器
置换运算P
子密钥Ki(48比特)
轮函数F
Li(32比特)
Li=Ri-1
Ri(32比特)
Ri=Li-1⊕F(Ri-1,Ki)
图4.8 DES的一轮迭代
选择扩展运算
将输入的32比特数据,根据变换表扩展为48 比特的输出数据,变换表如下:
(3)两个基本设计方法
混淆(confusion):使得密文的统计特性与密钥的 取值之间的关系尽量复杂,必须让明文的每个比特 影响到密文的许多比特的取值。
扩散(Diffusion):明文的统计结构被扩散消失到密 文的长程统计特性,使得明文和密文之间的统计关 系尽量复杂。
如将64比特数据表示为M=(m1,m2,…,m64),则在初 始置换IP的作用下变为M=(m58,m50,…,m7) 。如果将 IP(M)用初始逆置换IP-1作用,将会得到M。例如M 中
的第60个比特m60,在IP(M)中位于第9个比特位 , IP(M)在初始逆置换IP-1作用下, 第9个比特移到第60
图4.3 Feistel网络
L0
第1轮
⊕
明文(2w位) F
…
Li-1
第i轮
⊕
F
…
R0 K1
Ri-1 Ki
…
…
第n轮
Ln-1
⊕
Ln Ln+1
F 密文(2w位)
Rn-1 Kn
Rn Rn+1
单轮加密运算:
网络中每轮的运算基本相同:每轮中都对数据的左 半部分进行代换,方法是先对右边一半数据应用轮函 数,然后将输出的数据与左半部分进行异或。轮函数 的结构一直不变 ,但作为控制参数的每轮子密钥一般 不同。代换完成后,再做一次置换操作交换左右两半 数据。运算过程如图4.4。
表4.3 置换表P
P 16 7 20 21 29 12 28 17 1 15 23 26 5 18 31 10 2 8 24 14 32 27 3 9 19 13 30 6 22 11 4 25
子密钥的产生
用密钥K来产生16个48比特的子密钥 Ki,1≤i≤16。通过相同16次基本相同移位和置 换操作,在16次迭代运算中每次产生一个不 同的子密钥。
6比特 S3 S4 S5 S6 S7 S8 选择函数组
4比特
32比特寄存器
图4.9 选择压缩运算S
对每个盒Si,6比特输入中的第1和第6比特组成 的二进制数确定Si 的行,中间 4 位二进制数用来确 定Si的列。Si中相应行、列位置的十进制数的 4 位 二进制数表示作为输出。图4.10表示DES的S1-盒的
分组密码系统对不同的组采用同样的密 钥来进行加/解密。流密码的基本思想是利用 动态的密钥流进行加密/解密。
k
x1
y1
┇
┇
无记忆元件
xm
ym
分组密码(y=ek(x))
k
xi
…
······
yi
Leabharlann Baidu
内部记忆元件
流密码(yi=
e
z
)( x
i
i
)
图4.1 分组密码和流密码的加密
1、 分组密码设计原理
(1)原理
一轮SP网络加密过程:
X i1
S——替换
P——置换
Xi
图4.6 一轮SP网络加密过程
4.2 数据加密标准 DES
数据加密标准 (Data Encryption Standard) 是至今为止使用最为广泛的加密算法。IBM 提交 了他们研制的一种密码算法,在经过大量的公开 讨论之后于1977年1月15日被正式批准为美国联邦 信息处理标准,即FIPS-46,同年7月15日开始生 效。1999年颁发新标准, DES只能用于(历史)遗 留系统和3DES的使用。
我们在第二章介绍经典密码算法中使用的加密 技术能不能达到混淆和扩散的作用?
迭代密码是实现混淆和扩散原则的一 种有效的方法。合理选择的轮函数经 过若干次迭代后能够提供必要的混淆
和扩散。
2、分组密码的一般结构
分组密码的结构一般可以分为两种:
(1)Feistel网络结构
(2)SP网络结构
我们将DES作为对称密码的研究对象, DES算法是基于Feistel网络结构,所以本 次授课内容重点在于该网络结构工作原理 的研究。
初始逆置换IP-1
40 8 48 16 56 24 64 32 39 7 47 15 55 23 63 31 38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29 36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27 34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25
输出64比特密文数据
图4.7 DES加密算法框图
4.2.1.1初始置换IP和初始逆置换IP-1
将64比特明文数据用初始置换IP进行置换操 作,得到一个乱序的64比特明文分组,进行16轮 完全类似的迭代运算后,用初始逆置换IP-1进行置 换操作,产生密文数据组。置换表中数字表示将 64比特数据组中在该数字所在位置的比特置换为 该数字表示的位置的比特。初始置换IP和初始逆 置换IP-1如表4.1所示:
1
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
2
4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
3
15 12 8 2 4 9 1 7 5 11 2 14 10 0 6 13
图4.10 DES的S1-盒的输入和输出关系及示例
置换运算P:类似初始置换IP,将S盒的输出32比 特根据置换表P进行置换运算。
(1)Feistel网络结构
工作过程:一个分组长度为n(偶数)比特 的L轮Feistel网络的加密过程如下。给定明文P,
将P分成左边和右边长度相等的两半并分别记为L0
和R0,进行L轮完全类似的迭代运算后,再将左边 和右边长度相等的两半合并产生密文分组,第i轮
迭代输入的是Li-1和Ri-1来自于上一轮的输出,而 输入的子密钥Ki不同于K,也互不相同。如图3.3 所示:
个比特位。这说明IP和IP-1互逆。
4.2.1.2 一轮迭代变换
迭代变换是DES算法的核心部分,如图4.8所示。 在每轮开始将输入的64比特数据分成左、右长度相等 的两半,将右半部分原封不动地作为本轮输出的64比 特数据的左半部分,同时对右半部分进行一系列的变 换,即用轮函数作用右半部分,然后将所得结果(32 比特数据)与输入数据的左半部分进行逐位异或,将 所得数据作为本轮输出的64比特数据的右半部分。
用 算法简洁:容易通过分析算法而知道算法抗各种攻
击的能力,也有助于设计高强度的算法。
Feistel的解密算法:
以密文分组作为算法的输入,但以相反的次序使用子 密钥,即第一轮使用 ,K第l 二轮使用 ,K直l1 至L轮使用 。 单K轮1 解密过程如图4.5所示:
K1
RDi-
LDi-
1
1
⊕
第i
F
轮
表4.2 DES中的扩展变换表
E
32 1 2 3 4 5 45 6 7 89 8 9 10 11 12 13
12 13 14 15 16 17 16 17 18 19 20 21 20 21 22 23 24 25 24 25 26 27 28 29 28 29 30 31 32 1
如果将输入32比特数 据按图中所标位置顺序 读出,可得48比特的输 出数据。可以看出1,4, 5,8,9,12,13,16, 17, 20,21,24,25, 28,29,32 这16个位置 上的数据都被重复读了 一次。
LDi
K’i RD
i
图4.5 一轮Feistel网络解密过程
解密: RDi-1 = LDi ; RDi = LDi-1⊕F(RDi-1,Ki)
(2)SP网络结构
每一轮的输入首选被一个由子密钥控制的可逆函 数S作用,然后再对所得结果用置换P作用。S和P被分 别称为混淆层和扩散层,起混淆和扩散的作用。
与子密钥的异或运算
将选择扩展运算的48 比特输出数据与子 密钥(48比特)进行异或。
与子密钥的异或运算实质上是对明文的 代换操作。
选择压缩运算:
将输入的48比特数据自左至右分成8组,每组为6 比特。然后输入8个S盒,每个S盒为一非线性代换, 有4比特输出,如图3.9所示。
S1 S2
48比特寄存器
输入和输出关系及输入为(101100)的示例,输出
为0010。
x5 x0 10
x5 x4 x3 x2 x1 x0 10 11 0 0
(y3 , y2, y1 , y0)=(0,0,1,0)
列号 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
行号
0
14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
将明文消息划分成长度为n的组(x0,x1,…,xn-1),每
组分别在密钥K=(k0,k1,…,km-1) 的控制下变换成等
长的输出数字序列 (y0,y1,…,yn-1) ,加密函数是
E:Vn×K→Vn ,其中Vn 是n维矢量空间,K为密钥空
间。
密 k (k0 , , km1 )
密钥 k= (k0 , , km1 )
表4.1 初始置换IP和初始逆置换IP-1 表
初始置换IP
58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4 62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8 57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3 61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7
密钥空间足够大,尽可能消除弱密钥,从而使所有密钥 同等概率,以防穷举密钥攻击。今后一段时间内,128 比特密钥应该是足够安全的。
算法要足够复杂,充分实现明文与密钥的扩散和混淆, 没有简单关系可循,要能抵抗各种已知的攻击,如差分 攻击和线性攻击等;另外,还要求有较高的非线性阶数。
软硬件实现性
软件实现的要求:尽量使用适合编程的子块和简 单的运算。子块的长度能自然地适应软件编程, 如8、16、32比特等;最好是用处理器的基本运 算,如加法、乘法、移位等。
4.2.1 DES加密过程
DES是分组长度为64比特 的分组密码算法,密钥长度 也是64比特,其中每8比特 有一位奇偶校验位,因此有 效密钥长度为56比特。DES 算法是公开的,其安全性依 赖于密钥的保密程度。DES 结构框图如图4.7。
输入64比特明文数据 初始置换IP
在密钥控制下16轮迭代 交换左右32比特 初始逆置换IP-1
钥 明文
( x0 , , xn1 )
加密算法
密 y ( y0 , , yn1 )
文
解密算法
明文
( x0 , , xn1 )
图4.2 分组密码模型
明文分组和密文分组长度都为n,共用2n个明 文分组和密文分组,加密过程实质上是对字长为n
的数字序列的置换,为了使加密运算可逆,从而解
密运算可行,每个明文分组对应惟一的一个密文分 组,即置换是可逆的。这样的置换共有2n!个。实
LEi-1
第i轮 ⊕
REi-1
F
Ki
LEi
REi
图4.4 一轮Feistel网络加密过程
加密: LEi = REi-1;REi = LEi-1⊕F(REi-1,Ki)
安全性以及软、硬件实现速度: 分组长度 密钥长度 循环次数 子密钥算法:子密钥算法越复杂则安全性越高 轮函数:轮函数越复杂则安全性越高。 快速的软件实现:算法经常被镶嵌在应用程序中使
第四章 对称密码体制
本章内容:
分组密码的一般原理
工作方式 一般结构
DES算法的描述 分组密码的工作模式
4.1 分组密码原理
对称密码体制根据对明文的加密方式的不同 而分为分组密码和流密码。分组密码先按一定 长度(如64字节、128字节等)对明文进行分组, 以组为单位加/解密;流密码则不进行分组,而 是按位加密。
际使用中的许多分组密码,如DES、IDEA等,所 用的置换只不过是上述置换集的一个很小的子集。
分组密码的算法实质:是在密钥的控 制下,能从一个足够大和足够好的置换 子集中简单而迅速地选出一个置换,用 来对当前输入的明文数字组进行加密变 换。
(2)设计的算法应满足的要求
安全性:
分组长度足够大,使不同明文分组的个数足够多,防止 明文穷举攻击法。新算法标准一般要求 n=128bit。
Li-1(32比特)
Ri-1(32比特) 选择扩展运算E 48比特寄存器
48比特寄存器 选择压缩运算S 32比特寄存器
置换运算P
子密钥Ki(48比特)
轮函数F
Li(32比特)
Li=Ri-1
Ri(32比特)
Ri=Li-1⊕F(Ri-1,Ki)
图4.8 DES的一轮迭代
选择扩展运算
将输入的32比特数据,根据变换表扩展为48 比特的输出数据,变换表如下: