在介绍完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算法时迭代型分组密码算法,16轮的Feistel型密码基本参数

·分组长度:64比特

·密钥长度:64比特

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

·迭代圈数:16圈

·圈密钥长度:48比特

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

6.3 Fesitel型密码

Fesitel模型的优缺点

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

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

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

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比特。

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存在中间相遇攻击。使它的强度跟一个56位DES的强度差不多。

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

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

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

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

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

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

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

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

3DES的优点和缺点:

优点:

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

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

缺点:

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

优势:

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

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

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

兼容性好。

弱势:

速度慢。

6.12 DES的历史回顾

DES的贡献:

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

DES给我们的启示:

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

参考文献:

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

分组密码(三)DES 算法— 密码学复习(六)的更多相关文章

  1. 分组密码(四)AES算法① — 密码学复习(七)

    介绍完S-PN型结构之后,下面介绍AES算法.由于内容比较多所以将其分为两篇来介绍,本篇主要讲AES的历史时间节点.产生背景.与DES的对比.算法框图(粗略)以及一些数学基础. 7.1 AES的历史时 ...

  2. 分组密码(五)AES算法② — 密码学复习(八)

    在上一篇简单复习了AES的历史时间节点.产生背景.与DES的对比.算法框图(粗略)以及一些数学基础,如果不记得的话点击这里回顾.下面将介绍AES算法的细节. 下面给出AES算法的流程,图片来源:密码算 ...

  3. 聊聊密码学中的DES算法

    用心分享,共同成长 没有什么比你每天进步一点点更实在了 本文已经收录至我的github,欢迎大家踊跃star 和 issues. https://github.com/midou-tech/artic ...

  4. Java利用DES/3DES/AES这三种算法分别实现对称加密

    转载地址:http://blog.csdn.net/smartbetter/article/details/54017759 有两句话是这么说的: 1)算法和数据结构就是编程的一个重要部分,你若失掉了 ...

  5. IDAPython实战项目——DES算法识别

    在CTF的逆向中我们需要的是找到加密的主函数,结合了yara的识别原理,通过对常量数组的引用的查找,一步步递归构建调用树.调用树根部就是可能的密码算法主函数. 由于这种办法需要常量分布于算法的各个步骤 ...

  6. AES算法,DES算法,RSA算法JAVA实现

    1     AES算法 1.1    算法描述 1.1.1      设计思想 Rijndael密码的设计力求满足以下3条标准: ① 抵抗所有已知的攻击. ② 在多个平台上速度快,编码紧凑. ③ 设计 ...

  7. DES算法原理完整版

    1.所需参数 key:8个字节共64位的工作密钥 data:8个字节共64位的需要被加密或被解密的数据 mode:DES工作方式,加密或者解密 2.初始置换 DES算法使用64位的密钥key将64位的 ...

  8. 基于DES算法加密的防撞库密码系统项目总结

    项目内容:基于DES算法加密的防撞库密码系统 小组名:zqhzkzkj 目标:1.对用户输入的8位字符进行DES加密,要求用户输入8位密钥 2.对于不同的网站,不同的用户名生成不同的密码 小组成员:周 ...

  9. MFC 简单实现 DES 算法

    前言 徐旭东老师说过学者就应该对知识抱有敬畏之心,所以我的博客的标题总喜欢加上"简单"二字,就是为了提醒自己,自己所学知识只是皮毛,离真理还远矣. DES 算法 DES算法是密码体 ...

随机推荐

  1. let 及const

    ES5中的块级作用域 ES5中只有全局作用域和函数作用域,这样带来了很多的不便利,会出现内层变量被外层变量覆盖,循环体中的变量会暴露在全局,很多情况下需要自执行函数来私有化变量. ES6块级的作用域 ...

  2. 去除Windows-XP系统下的关机功能

    by han 去除Windows-XP系统下的关机功能 一.去除"开始菜单"中"关机"功能 1.点击左下角"开始",然后"运行&q ...

  3. Android系统编程入门系列之服务Service齐头并进多线程任务

    在上篇文章中初步了解了Android系统的四大组件之一的服务Service,在服务内可以执行无用户交互的耗时操作任务,但是包括之前关于界面系列文章在内,生命周期方法都是在主线程内被系统回调的.如果直接 ...

  4. 十进制转十六进制 BASIC-10

    十进制转十六进制 import java.util.Scanner; public class 十进制转十六进制 { /* 十六进制数是在程序设计时经常要使用到的一种整数的表示方式. * 它有0,1, ...

  5. MySQL慢查询及开启慢查询

    一.简介 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. 二.参数说明 slow_query_log 慢查询开启状态 slow_ ...

  6. 超硬核 Web 前端学霸笔记,学完就去找工作!

    文章和教程 Vue 学习笔记 Node 学习笔记 React 学习笔记 Angular 学习笔记 RequireJS 学习笔记 Webpack 学习笔记 Gulp 学习笔记 Python 学习笔记 E ...

  7. kvm虚拟化的qcow2磁盘格式的扩容方法

    第一种:增加一块磁盘而另磁盘空间增大 1).先进入kvm环境,创建一块硬盘:qemu-img create -f qcow2 /home/tianke/test.qcow2 40G 2).再给增加的硬 ...

  8. SpringBoot启动异常 Process finished with exit code 1

    记录一下一个报错 : < Springboot项目启动之后直接 Process finished with exit code 1 1. 是否有spring-boot-starter-web依赖 ...

  9. 接入华为应用内支付,验证购买Token接口,返回“rights invalid”

    有海外开发者向我们提问:我在应用中集成了华为应用内支付SDK(测试购买订阅型商品),按照文档说明,在服务器去请求验证购买Token接口的时候返回了{"responseCode":& ...

  10. NOIP 模拟 6 辣鸡

    题解 难得啊,本来能 \(AC\) 的一道题,注释没删,挂了五分,难受 此题暴力很好想,就是直接 \(n^2\) 枚举不同的矩阵组合,记录块内答案和跨块的答案 出题人不会告诉你,这题只要输出块内答案就 ...