1.06k likes | 1.67k Views
分组密码: 数据加密标准 DES 算法. 《 现代密码学 》 第 4 章 (2). 本节主要内容. 1 、数据加密标准 DES 的产生 2 、 S-DES 算法 3 、 DES 加密与解密过程 4 、 DES 的安全性分析 5 、 DES 的改进与实现 6 、作业. 美国国家标准局 1973 年开始研究除国防部外的其它部门的计算机系统的数据加密标准,于 1973 年 5 月 15 日和 1974 年 8 月 27 日先后两次向公众发出了征求加密算法的公告。加密算法要达到的目的(通常称为 DES 密码算法要求)主要为以下四点:
E N D
分组密码:数据加密标准DES算法 《现代密码学》第4章(2)
本节主要内容 • 1、数据加密标准DES的产生 • 2、S-DES算法 • 3、DES加密与解密过程 • 4、DES的安全性分析 • 5、DES的改进与实现 • 6、作业
美国国家标准局1973年开始研究除国防部外的其它部门的计算机系统的数据加密标准,于1973年5月15日和1974年8月27日先后两次向公众发出了征求加密算法的公告。加密算法要达到的目的(通常称为DES 密码算法要求)主要为以下四点: (1)提供高质量的数据保护,防止数据未经授权的泄露和未被察觉的修改; (2)具有相当高的复杂性,使得破译的开销超过可能获得的利益,同时又要便于理解和掌握; (3)DES密码体制的安全性应该不依赖于算法的保密,其安全性仅以加密密钥的保密为基础; (4)实现经济,运行有效,并且适用于多种完全不同的应用。 1.数据加密标准DES的产生
1.数据加密标准DES的产生 • 1977年1月,美国政府颁布:采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES Data Encryption Standard)。
1.数据加密标准DES的产生 数据加密标准(data encryption standard, DES)是迄今为止世界上最为广泛使用和流行的一种分组密码算法,它的分组长度为64比特,密钥长度为56比特,它是由美国IBM公司研制的,是早期的称作Lucifer密码的一种发展和修改。 DES在1975年3月17日首次被公布在联邦记录中,经过大量的公开讨论后,DES于1977年1月15日被正式批准并作为美国联邦信息处理标准,即FIPS-46,同年7月15日开始生效。
1.数据加密标准DES的产生 规定每隔5年由美国国家保密局(national security agency, NSA)作出评估,并重新批准它是否继续作为联邦加密标准。最近的一次评估是在1994年1月,美国已决定1998年12月以后将不再使用DES。 1997年DESCHALL小组经过近4个月的努力,通过Internet搜索了3×1016个密钥,找出了DES的密钥,恢复出了明文。
1.数据加密标准DES的产生 • 1998年5月美国EFF(electronics frontier foundation)宣布,他们以一台价值20万美元的计算机改装成的专用解密机,用56小时破译了56 比特密钥的DES。美国国家标准和技术协会已征集并进行了几轮评估、筛选,产生了称之为 AES(advanced encryption standard) 的新加密标准。尽管如此,DES对于推动密码理论的发展和应用毕竟起了重大作用,对于掌握分组密码的基本理论、设计思想和实际应用仍然有着重要的参考价值,下面首先来描述这一算法。
2.简化的DES Simplified DES方案,简称S-DES方案。它是一个供教学而非安全的加密算法,它与DES的特性和结构类似,但参数小。注:1.* 加密算法涉及五个函数:(1)初始置换IP(initial permutation)(2)复合函数fk1,它是由密钥K确定的,具有置换和代换的运算。 (3)置换函数SW(4)复合函数fk2(5)初始置换IP的逆置换IP-1
10bit密钥 解密 P10 8bit明文 8bit明文 IP 移位 IP-1 P8 fk fk K1 K1 SW 移位 SW P8 fk fk K2 K2 IP IP-1 8bit密文 8bit密文 S-DES方案示意图 加密
S-DES加密算法的数学表示 • IP-1*fk2*SW*fk1*IP也可写为密文=IP-1(fk2(SW(fk1(IP(明文)))))其中 K1=P8(移位(P10(密钥K)))K2=P8(移位(移位(P10(密钥K)))) • 解密算法的数学表示:明文=IP-1(fk1(SW(fk2(IP(密文)))))
对S-DES的深入描述 (1) S-DES的密钥生成:设10bit的密钥为( k1,k2,…,k10 )置换P10是这样定义的 P10(k1,k2,…,k10)=(k3,k5,k2,k7,k4,k10,k1,k9,k8,k6) P8= (k1,k2,…,k10)=(k6,k3,k7,k4,k8,k5,k10,k9 ) LS-1为循环左移1位, LS-2为循环左移2位 按照上述条件,若K选为(1010000010), 产生的两个子密钥分别为K1=(1 0 1 0 0 1 0 0),K2=(0 1 0 0 0 0 1 1)
(2) S-DES的加密运算: 初始置换用IP函数: IP= 1 2 3 4 5 6 7 8 2 6 3 1 4 8 5 7末端算法的置换为IP的逆置换:IP-1= 1 2 3 4 5 6 7 8 4 1 3 5 7 2 8 6 易见IP-1(IP(X))=X
S-DES加密图 8-bit 明文 IP fk L R 4 E/P 4 8 + K1 F 4 4 S0 S1 P4 +
S-DES加密图(续) SW 4 4 fk E/P 8 8 K2 F + 4 4 S0 S1 2 2 P4 + 4 IP-1 8 8-bit 密文
函数fk,是加密方案中的最重要部分,它可表示为:函数fk,是加密方案中的最重要部分,它可表示为: fk(L,R)=(LF(R,SK),R),其中L,R为8位输入, 左右各为4位, F为从4位集到4位集的一个映射, 并不要求是1-1的。SK为子密钥。 对映射F来说: 首先输入是一个4-位数(n1,n2,n3,n4),第一步运算是扩张/置换(E/P)运算: E/P 4 1 2 3 2 3 4 1 事实上,它的直观表现形式为: n4 n1 n2 n3 n2 n3 n4 n1
8-bit子密钥: K1=(k11,k12,k13,k14,k15,k16,k17,k18),然后与E/P的结果作异或运算得: n4+k11 n1+k12 n2+k13 n3+k14 n2+k15 n3+k16 n4+k17 n1+k18 把它们重记为8位: P0,0 P0,1 P0,2 P0,3 P1,0 P1,1 P1,2 P1,3 上述第一行输入进S-盒S0,产生2-位的输出;第二行的4位输入进S盒S1,产生2-位的输出。
S盒按下述规则运算: 将第1和第4的输入比特做为2- bit数,指示为S盒的一个行;将第2和第3的输入比特做为S盒的一个列。如此确定为S盒矩阵的(i,j)数。 例如:(P0,0, P0,3)=(00),并且(P0,1,P0,2)=(1 0) 确定了S0中的第0行2列(0,2)的系数为3,记为(1 1)输出。由S0, S1输出4-bit经置换P4 2 4 3 1 它的输出就是F函数的输出。
P10 LS-1 LS-1 5 5 P8 8 K1 LS-2 LS-2 5 5 P8 8 K2 S-DES的密钥生成 10-bit密钥
S-DES的安全性分析 对10 bit密钥的强行攻击是可行的 密钥空间:2^10=1024 密码分析:利用已知明文攻击: 已知: 明文(p1,p2,……,p8), 及对应的密文 (c1,c2,……,c8), 未知:(k1,k2, ……,k10) Ci是pj’s和kj’s的函数 这些加密算法可以表示成8个含10个变量的非线性方程 非线性是由S盒作用的结果
S-DES的安全性分析 S0的非线性表示如下: 设a,b,c,d为输入的4个比特,输出的两个比特分别为q,r. 则 q=abcd+ab+ac+b+d mod2 r=abcd+abd+ab+ac+ad+a+c+1 mod2 线性映射与非线性映射交替产生了复杂的密文比特输出函数,使得密码分析很困难。(可以试图寻找8个密文比特的复杂度)
3.DES描述 图4.5是DES加密算法的框图,其中明文分组长为64比特,密钥长为56比特。图的左边是明文的处理过程,有3个阶段,首先是一个初始置换IP,用于重排明文分组的64比特数据。然后是具有相同功能的16轮变换,每轮中都有置换和代换运算,第16轮变换的输出分为左右两半,并被交换次序。最后再经过一个逆初始置换IP-1(为IP的逆)从而产生64比特的密文。除初始置换和逆初始置换外,DES的结构和图4.3所示的Feistel密码结构完全相同。
DES加密算法框图 图4.5 DES加密算法框图
图4.5的右边是使用56比特密钥的方法。密钥首先通过一个置换函数,然后,对加密过程的每一轮,通过一个左循环移位和一个置换产生一个子密钥。其中每轮的置换都相同,但由于密钥被重复迭代,所以产生的每轮子密钥不相同。图4.5的右边是使用56比特密钥的方法。密钥首先通过一个置换函数,然后,对加密过程的每一轮,通过一个左循环移位和一个置换产生一个子密钥。其中每轮的置换都相同,但由于密钥被重复迭代,所以产生的每轮子密钥不相同。
56比特密钥 64比特明文 置换选择1 初始置换 第1轮 置换选择1 左循环移位 第2轮 置换选择1 左循环移位 第16轮 置换选择1 左循环移位 左右交换 初始逆置换 64比特密文 DES加密算法描述 DES加密算法框图
Li-1 Ri-1 F Ki + Li Ri DES一轮加密的简图
M(64bit) Ri-1(32bit) Ki(48bit) IP (置换) E (重排:有重复) E(Ri-1)(48bit) 第 i 轮 迭 代 Ki(48bit) f S1 S2 S3 S4 S5 S6 S7 S8 IP-1 P f(Ri-1,Ki) C(64bit) DES加密算法描述
IP初始置换 (a)初始置换IP
DES的描述 在前面函数f的图示中,扩展置换 (选择运算)E的定义为: 置换运算P的定义为:
轮结构 28比特 28比特 32比特 32比特 左移位 左移位 扩展/置换 (E表) 48 XOR 置换选择2 48 代换/选择 (S盒) 32 置换(p) 32 XOR Des加密算法的轮结构
首先看图的左半部分。将64比特的轮输入分成各为32比特的左、右两半,分别记为L和R。和Feistel网络一样,每轮变换可由以下公式表示:首先看图的左半部分。将64比特的轮输入分成各为32比特的左、右两半,分别记为L和R。和Feistel网络一样,每轮变换可由以下公式表示:
R(32比特) K(48比特) E R(48比特) S1 S1 S1 S1 S1 S1 S1 S1 P 32比特 函数F(R,K)的计算过程
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 列 行 S1 0 1 2 3 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0 15 12 8 2 4 9 1 7 5 11 3 14 10 0 613 S盒 每个S盒的输入为6比特,输出为4 比特,其变换关系如下: S1盒的变换表
对F函数的说明 • (类比于S-DES),F(Ri-1, Ki)函数F以长度为32的比特串A=R(32bits)作第一个输入,以长度为48的比特串变元J=K(48bits)作为第二个输入。产生的输出为长度为32的位串。(1)对第一个变元A,由给定的扩展函数E,将其扩展成48位串,E(A)(2)计算E(A)+J,并把结果写成连续的8个6位串,B=b1b2b3b4b5b6b7b8
对F函数的说明 • (3)使用8个S盒,每个Sj是一个固定的416矩阵,它的元素取0~15的整数。给定长度为6个比特串,如Bj=b1b2b3b4b5b6,计算Sj(Bj)如下:b1b6两个比特确定了Sj的行数, r(0<=r<=3); 而b2b3b4b5四个比特确定了Sj的列数c(0<=c<=15)。最后Sj(Bj)的值为S-盒矩阵Sj中r行c列的元素(r,c), 得Cj=Sj(Bj)。(4) 最后,P为固定置换。
其中轮密钥Ki为48比特,函数F(R,K)的计算过程如图4.7所示。轮输入的右半部分R为32比特,R首先被扩展成48比特,扩展过程由表3.2(c)定义,其中将R的16个比特各重复一次。扩展后的48比特再与子密钥Ki异或,然后再通过一个S盒,产生32比特的输出。该输出再经过一个由表3.2(d)定义的置换,产生的结果即为函数F(R,K)的输出。其中轮密钥Ki为48比特,函数F(R,K)的计算过程如图4.7所示。轮输入的右半部分R为32比特,R首先被扩展成48比特,扩展过程由表3.2(c)定义,其中将R的16个比特各重复一次。扩展后的48比特再与子密钥Ki异或,然后再通过一个S盒,产生32比特的输出。该输出再经过一个由表3.2(d)定义的置换,产生的结果即为函数F(R,K)的输出。
F中的代换由8个S盒组成,每个S盒的输入长为6比特、输出长为4比特,其变换关系由表3.3定义,每个S盒给出了4个代换(由一个表的4行给出)。(见42页表3.3)
对每个盒Si,其6比特输入中,第1个和第6个比特形成一个2位二进制数,用来选择Si的4个代换中的一个。6比特输入中,中间4位用来选择列。行和列选定后,得到其交叉位置的十进制数,将这个数表示为4位二进制数即得这一S盒的输出。例如,S1的输入为011001,行选为01(即第1行),列选为1100(即第12列),行列交叉位置的数为9,其4位二进制表示为1001,所以S1的输出为1001。S盒的每一行定义了一个可逆代换,图4.2(在3.1.1节)表示S1第0行所定义的代换。对每个盒Si,其6比特输入中,第1个和第6个比特形成一个2位二进制数,用来选择Si的4个代换中的一个。6比特输入中,中间4位用来选择列。行和列选定后,得到其交叉位置的十进制数,将这个数表示为4位二进制数即得这一S盒的输出。例如,S1的输入为011001,行选为01(即第1行),列选为1100(即第12列),行列交叉位置的数为9,其4位二进制表示为1001,所以S1的输出为1001。S盒的每一行定义了一个可逆代换,图4.2(在3.1.1节)表示S1第0行所定义的代换。
A=R(32 bits) J=K(48 bits) E E(A)为48 bits + 写成8个6比特串 B B1 B2 B3 B4 B5 B6 B7 B8 S1 S2 S3 S4 S5 S6 S7 S8 C1 C2 C3 C4 C5 C6 C7 C8 P 32 bits F(A,J) DES 的F函数
DES中使用的特定函数 • 初始置换IP:对明文输入进行次序的打乱。 • 逆置换IP-1: • 扩展函数E;(32到48) • 置换函数P。
DES中使用的其它特定函数 • 初始置换IP:从表3.2中看出X的第58个比特是IP(X)的第一个比特;X的第50个比特是IP(X)的第二个比特… • 逆置换IP-1;扩展函数E;置换函数P。
密钥的产生 再看图4.5和图4.6,输入算法的56比特密钥首先经过一个置换运算,该置换由表3.4(a)给出,然后将置换后的56比特分为各为28比特的左、右两半,分别记为C0和D0。在第i 轮分别对Ci-1和Di-1进行左循环移位,所移位数由表3.4(c)给出。移位后的结果作为求下一轮子密钥的输入,同时也作为置换选择2的输入。通过置换选择2产生的48比特的Ki,即为本轮的子密钥,作为函数F(Ri-1,Ki)的输入。其中置换选择2由表3.4(b)定义。(见44页表3.4)
从密钥K计算子密钥 • 实际上,K是长度为64的位串,其中56位是密钥,8位是奇偶校验位(为了检错),在密钥编排的计算中,这些校验位可略去。(1). 给定64位的密钥K,放弃奇偶校验位(8,16,…,64)并根据固定置换PC-1(见144页图4-4-9)来排列K中剩下的位。我们写 PC-1(K)=C0D0其中C0由PC-1(K)的前28位组成;D0由后28位组成。
(2)对1<=i<=16,计算Ci=LSi(Ci-1);Di=LSi(Di-1)LSi表示循环左移2或1个位置,取决于i的的值。i=1,2,9和16 时移1个位置,否则移2位置。Ki=PC-2(CiDi), PC-2为固定置。 • 注:一共16轮,每一轮使用K中48位组成一个48比特密钥。可算出16个表,第i个表中的元素可对应上第i轮密钥使用K中第几比特!如:第7轮的表7:K7取K中的比特情况:52 57 11 1 26 59 10 34 44 51 25 199 41 3 2 50 35 36 43 42 33 60 1828 7 14 29 47 46 22 5 15 63 61 394 31 13 38 53 62 55 20 23 37 30 6
K(56bit) 其中, PC-1 (置换) LS1 LS1 PC-2 K1(48bit) (选取:有舍弃) LS16 LS16 PC-2 K16(48bit) DES的密钥扩展 各轮迭代一共使用16个加密子密钥K1,K2,,K16, 它们依据所给56bit主密钥K按下述扩展算法产生: