分组密码(三)DES 算法— 密码学复习(六)

  在介绍完Feistel结构之后,接下来进入到著名的DES算法。

  6.1 DES算法的意义

  在正式介绍DES之前,首先介绍几个重要的历史时间节点。

  ① 1973年,美国国家标准局(NBS)向社会公开征集加密算法,一直盯加密算法标准。

  ② 1974年,第二次征集。

  ③ 1975年,选中IBM的算法,公布征求意见。

  ④ 1977年1月15日正式颁布。

  ⑤ 1998年底以后停用。

  ⑥ 1999年颁布3DES为新标准。

  标准加密算法的目标:

  ① 用于保护*机构和商业部门的非机密的敏感数据。

  ② 用于加密保护静态存储和传输信道中的数据。

  ③ 安全使用10~15年。

  DES算法是单射的分组密码算法,是密码学发展的一个重要的阶段(现代密码学诞生的标志之一),对算法的标准化研究和分组密码的发展有重大意义。

  目前攻击DES的最有效的办法是密钥穷举攻击。

 

  6.2 DES算法概述

  密码的整体特点:

  ① 分组密码:明文、密文和密钥的分组长度都是64位。

  ② 面向二进制数据的密码算法:因而能够加解密任何形式的计算机数据。

  ③ 对合运算:加解密使用同一个算法,使工程量减半。

  ④ 综合运用了置换、代替、代数等基本密码技术。

  ⑤ 基本结构属于Feistel结构

  首先,简单看一下DES算法的整体结构,其主要由初始置换IP、轮函数、逆初始置换IP-1以及密钥扩展算法组成。这里直接放上书上的图。

分组密码(三)DES 算法— 密码学复习(六)

 

 

  DES算法时迭代型分组密码算法,16轮的Feistel型密码基本参数

  ·分组长度:64比特

  ·密钥长度:64比特

  ·有效密钥长度:56比特(8比特校验位)

  ·迭代圈数:16圈

  ·圈密钥长度:48比特

分组密码(三)DES 算法— 密码学复习(六)

  DES加密标准的核心是采用Fesitel结构。明文分组长度是64比特,初始密钥长度也是64比特(实际上采用的是56比特,8比特校验位),循环轮数为16轮。

分组密码(三)DES 算法— 密码学复习(六)

 

 

  6.3 Fesitel型密码

  分组密码(三)DES 算法— 密码学复习(六)

 

分组密码(三)DES 算法— 密码学复习(六)

  Fesitel模型的优缺点

  优点:设计容易,f函数不要求可逆。

  缺点:轮变换有一半的输入没有改变,左右块的处理不能并行实施。

 

  6.4 DES中的轮函数 f(A,J)

分组密码(三)DES 算法— 密码学复习(六)

 

 

  A为32比特串,J为48比特串,输出为f(A,J)为32比特串。

  ① A根据一个固定扩展函数E扩展成一个长为48比特串E(A).

  ② 计算E(A)J,并将所得结果分成8个长为6的比特串,记为B=B1B2B3B4B5B6B7B8.

  ③ 使用8个S盒S1,S2,...,S8,每个S盒为6进4出。用4×16矩阵描述。

    对 Bj = b1b2b3b4b5b6 计算 Sj(Bj)

    b1b6对应Sj的行

    b2b3b4b5对应Sj的列

    对应二进制表示 Cj=Sj(Bj)

  例:有 B1 = 100110

    此时有 b1b6=10,b2b3b4b5=0011.则对应第2行第3列(序号从0开始)。

    查找S盒找到对应的数字——8.故S1(B1)=1000.

  ④ 将长为32比特的 C=C1C2...C8通过固定置换P(P盒):

    P(C) = f(A,J)

  •   扩展变换 —— E盒扩展

  作用: 将输入的32比特扩展48比特

  扩展方式: 分别将第i-1块最右比特 和 第i+1块最左比特 添加到 第i块的左边 和 右边。形成输出的第i个6比特块。

  •   S盒

  S盒代替是DES算法中唯一的非线性变换。在DES算法中起核心作用。

  S盒的设计标准对于实现DES算法的安全性,对于实现混乱和扩散原则,对于保障DES算法的密码强度,具有十分重要的作用。

  S盒只要稍微改变,其密码强度就会大大改变。

  •   P盒

  P盒的设计特点

  ① P盒的各输入块的4比特都分配到不同的输出块中。

  ② P盒的各输出块的4比特都来自不同的输入块。

 

  6.5 轮密钥产生

  轮密钥的产生主要包含三个部分:

  ① 置换选择1 (64比特 -> 56比特,去掉8比特奇偶校验位)

  ② 循环移位 (分左28比特,右28比特)

  ③ 置换选择2 (56比特 -> 48比特)

  最终得到 16 个 48比特 的 轮密钥。

  ① 置换选择1 

  作用:去掉密钥中8比特奇偶校验位;打乱重排,形成C0(左28比特)、D0(右28比特)。

  ② 循环移位

  作用:对Ci、Di分别循环左移位。

  ③ 置换选择2

  作用:从Ci和Di(56比特)中选择出一个48比特的子密钥Ki.

  说明:从Ci中取24比特,Di中取24比特。

分组密码(三)DES 算法— 密码学复习(六)

 

  6.6 加密过程

  加密过程可以简单分为三个部分:①初始置换IP ②16轮Feistel结构 ③逆初始置换IP-1

  ① 初始置换 IP

  作用:把64位明文打乱重排。

  注意:IP中的置换是有规律的,则对保密是不利的。

  ② 逆初始置换 IP-1

  作用:把64位中间密文打乱重排,形成最终64位密文。

  相逆性:IP 与 IP-1 互逆

  如:在IP中把输入的第1位置换到第40位,而在IP-1中把输入的第40位置换到第1位。

  但保密作用不大。由于没有密钥参与,在IP与IP-1公开的条件下,其保密意义不大。

  ③ 16轮Feistel结构

  (a)扩展置换E

  作用:把32位输入扩充为48位中间数据,通过重复使用数据,实现数据扩充。

  (b)代替函数组S(S盒)

  S盒的一般性质:

  S盒是DES中唯一非线性变换,是DES安全的关键。

  在保密性方面,起混淆作用。

  共有8个S盒,并行作用。

  每个S盒有6个输入,4个输出,是非线性压缩变换

  改变S和任一输入比特,其输出至少2比特发生改变。

  其他准则:

  非线性准则:S盒必须有足够的非线性度,否则不能抵抗线性攻击。

  差分均匀性准则:S盒的差分性应均匀,否则不能抵抗差分攻击。

  代数次数及项数分布准则:S盒必须有足够的代数次数和项数,否则不能抵抗插值攻击和高阶差分攻击。

  S盒的密码学特性保证了DES的安全。

  (c)置换运算P

  把数据打乱重排。

  在保密性方面,其扩散作用。因为S盒是6位输入,4位输出,其非线性作用是局部的,因此需要把S盒的混淆作用扩散开来。

  S盒和P盒相互配合,共同确保DES安全。

 

 6.7 解密过程

 

  DES的加密算法是对合运算,因此解密和加密可以共用同一个算法

  不同点:子密钥的使用顺序不同

  第一次解密迭代使用子密钥K16,第二次解密迭代使用子密钥K15,...,第十六次解密迭代使用子密钥K1

  数学描述:

Ri-1=Li         i=16,15,...,1.

Li-1=Ri-1⊕f(Li,Ki)  i=16,15,...,1.

 

  6.8 DES的对合性和可逆性

  ① 可逆性证明

  (1)定义:变换T是把64位数据的左右两半交换位置。

T(L,R)=(R,L)

  因为TT(L,R)=T(R,L)=(L,R)=I,其中I为恒等变换。

  又显然TT-1=I,于是TT-1=TT,所以有

T=T-1

  所以T变换是对合运算。

  (2)记DES第i轮中的主要运算为Fi,即

  Fi(Li-1,Ri-1)=(Li-1⊕f(Ri-1,Ki),Ri-1)

  Fi2(Li-1,Ri-1)=Fi(Li-1⊕f(Ri-1,Ki),Ri-1)=(Li-1⊕f(Ri-1,Ki)⊕f(Ri-1,Ki),Ri-1)=(Li-1,Ri-1)=I

  所以,Fi=Fi-1.

  所以,Fi变换是对合运算。

  (3)结合(1)(2),便构成了DES的轮运算:

Hi=FiT

  因为(FiT)(TFi)=(Fi(TT)Fi)=FiFi=I,所以(FiT)-1=(TFi),(TFi)-1=(FiT)

 

  (4)初始置换IP和逆初始置换IP-1是互逆的。

  (5)加解密表示
    ① DES(M) = (M)IP(F1T)(F2T)...(F15T)(F16)IP-1 = C

    ② DES-1(C) = (C)IP(F16T)(F15T)...(F2T)(F1)IP-1 = M

  故有DES-1DES(M) = (M)IP(F1T)(F2T)...(F15T)(F16)IP-1IP(F16T)(F15T)...(F2T)(F1)IP-1 

             = (M)IP(F1T)(F2T)...(F15T)(F16)(F16T)(F15T)...(F2T)(F1)IP-1 

             = (M)IP(F1T)(F2T)...(F14T)(F15)(F15T)(F14T)...(F2T)(F1)IP-1 

             = (M)IP(F1T)(F2T)...(F13T)(F14)(F14T)(F13T)...(F2T)(F1)IP-1 

             = ......

             = (M)IP(F1T)(F2)(F2T)(F1)IP-1 

             = (M)IP(F1)(F1)IP-1 

             = (M)IP IP-1 

             =  M

  所以DES是可逆的。

  ② 对合性证明

  DES  = IP(F1T)(F2T)...(F15T)(F16)IP-1 

  DES-1 = IP(F16T)(F15T)...(F2T)(F1)IP-1

  DES和DES-1除了子密钥的使用顺序相反之外是相同的。

  不考虑子密钥的使用顺序,则有:

  DES  = IP(FT)(FT)...(FT)(F)IP-1 

  DES-1 = IP(FT)(FT)...(FT)(F)IP-1

  显然 DES = DES-1

  所以DES的运算是对合运算。

 

  6.9 DES的破译

  1990年,以色列密码学家Eli Biham和Adi Shamir提出了差分密码分析法。可对DES进行选择明文攻击

  线性密码分析(1993)比差分密码攻击更有效。

  • 强力攻击:平均255次尝试(56位有效密钥位,256平均÷2=255
  • 差分密码分析法:使用247对明密文的选择明文攻击
  • 线性密码分析法:使用247对明密文的已知明文攻击

 

  6.10 DES的安全性

  ① 攻击:穷举攻击(目前最有效的方法)、差分攻击、线性攻击。

  ② 安全弱点:

  • 密钥太短 
  • 存在弱密钥
  • 存在互补对称性(设C=DES(M,K),则有~C=DES(~M,~K))

  - DES的弱密钥:

  通过密钥扩展算法产生的16个子密钥出现重复:k1=k2=k3=...=k15=k16.

  由密钥扩展算法,易知C、D两个寄存器如果取值“全0”或“全1”,则通过循环移位和置换选择2得到的子密钥总是重复的。

 

  6.11 三重DES

  在讲三重DES之前首先考虑一下双重DES。

  用DES加密两次,每次使用不同的密钥。

分组密码(三)DES 算法— 密码学复习(六)

  但双重DES并不安全,双重DES存在中间相遇攻击。使它的强度跟一个56位DES的强度差不多。

  若已知明文密文对(M,C),攻击方法如下:

  ① 先用256个可能的K1加密M,得到256个可能的值,将这些值从小到大存入一个表中。

  ② 再对256个可能的K2解密C,每次做完解密,将所得到的值与表中的值比较,如果产生匹配,则它们对应的密钥可能是K1和K2

  ③ 用一个新的明文密文对检测两个密钥,如果产生正确的密文,则它们是正确的密钥。

  为了防止中间相遇攻击,采用三次加密方案。

  (1)下面是使用两个密钥的三重DES(加密-解密-加密 E-D-E)方案

分组密码(三)DES 算法— 密码学复习(六)

  注意:加密与解密在安全性上来说是等价的。这种加密方案穷举攻击代价是2112.

  (2)三把密钥的三重DES的(有效)密钥长度是168位,采用加密-解密-加密(E-D-E)方案

分组密码(三)DES 算法— 密码学复习(六)

  3DES的优点和缺点:

  优点:

  ① 密钥长度是168位,足以抵抗穷举攻击;

  ② 3DES的底层加密算法与DES加密算法相同,该加密算法比任何其它加密算法收到分析的时间要长得多,也没有发现有比穷举攻击更有效的密码分析攻击方法。

  缺点:

  加解密速度慢,分组长度只有64位。

  优势:

  3密钥的3DES:密钥长度是168位。

  2密钥的3DES:密钥长度是112位。

  安全:密钥足够长,经过最充分的分析和实践检验。

  兼容性好。

  弱势:

  速度慢。

 

  6.12 DES的历史回顾

  DES的贡献:

  • DES很好地体现了香农的密码设计理论;
  • DES体现了密码公开设计原则,开创了公开密码算法的先例;
  • DES代表当时商业密码的最高水平,是商用密码的典范;
  • DES对确保国际信息安全和提高国际密码设计水平都发挥了重要作用。

  DES给我们的启示:

  • 商用密码应当坚持公开设计原则;
  • 商业密码标准应当公布算法

 

参考文献:

 [1]张焕国,唐明. 密码学引论(第三版)[M].武汉: 武汉大学出版社, 2015.

分组密码(三)DES 算法— 密码学复习(六)

上一篇:Python包的模块导入


下一篇:C语言 vprintf 函数 - C语言零基础入门教程