网站首页 > 技术文章 正文
数据加密标准概述
DES (Data Encryption Standard)是数据加密标准的简称,由IBM公司研制,1977年1月15日,正式发布,也是第一个被公布出来的加密标准算法
DES算法:
- 数据加密标准,美国1977发布,属于对合运算。
- 综合使用了置换( P )、代替(S)和代数(异或)等多种密码技术。
- 典型的Feistel结构,一共进行1 6轮迭代。
- 安全使用10-15年,用于非机密的敏感数据进行加密。
分组密码原理
扩散
就是将每一位明文的影响尽可能迅速地作用到较多的输出密文位中去,以便隐藏明文的统计特性。
混乱
是指密文和明文之间的统计特性关系尽可能地复杂化。
乘积密码
指依次使用两个或两个以上的基本密码,所得结果的密码强度将强于所有单个密码的强度
Feistel密码结构
DES分组密码原理及加密过程
- 生成6个48位的子密钥
- 对64位的明文进行初始化置换,打乱重排,分成左右两半
- 对Ri-1进行扩展置换E ,即E ( Ri-1 ),由32位扩展到48位
- 进行S合代换,即对Ki⊕E( Ri-1 )进行非线性变换,利用8个S合,产生32位的混淆数据。
- 进行置换P,即扩散
- 进行逆初始置换IP-1
DES算法的数学表示形式
DES子秘钥的产生过程
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |
49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 |
57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 |
如上表:
- 分组密钥长度64位
- 去掉蓝色部分的8个奇偶校验位
- 有效密钥长度56位
PC-1(置换规则表1) | |||||||
C0 | 57 | 49 | 41 | 33 | 25 | 17 | 9 |
1 | 58 | 50 | 42 | 34 | 26 | 18 | |
10 | 2 | 59 | 51 | 43 | 35 | 27 | |
19 | 11 | 3 | 60 | 52 | 44 | 36 | |
D0 | 63 | 55 | 47 | 39 | 31 | 23 | 15 |
7 | 62 | 54 | 46 | 38 | 30 | 22 | |
14 | 6 | 61 | 53 | 45 | 37 | 29 | |
21 | 13 | 5 | 28 | 20 | 12 | 4 |
子密钥产生流程:
置换选择PC1
1.分组密钥去掉8个奇偶校验位
2.打乱重排,形成2个各28位的C0和D0
假设 十六进制密钥 K = 133457799BBCDFF1
其二进制为
K = 0001 0011 0011 0100 0101 0111 0111 1001 1001 1011 1011 1100 1101 1111 1111 000 (每10一个颜色,方便快速定位)
经过PC-1置换为:
具体置换方式举例:C0表第一位57 代表取密钥K的第57位1放置这里,之后用相同的方法
C0 =1111000 0110011 0010101 0101111
D0 =0101010 1011001 1001111 0001111
循环左移
循环位移表 | |
迭代次数 | 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 |
移位次数 | 01 01 02 02 02 02 02 02 01 02 02 02 02 02 02 01 |
C0 =1111000 0110011 0010101 0101111
D0 =0101010 1011001 1001111 0001111
左移方式举例: C1 迭代次数位1,故移位次数位1,所以C1就是C0所有位数左移1位,第1位移动至最后一位。之后在上一轮的基础上循环左移
C1 =111000 0110011 0010101 0101111 1
D1 =101010 1011001 1001111 0001111 0
C2 =11000 0110011 0010101 0101111 11
D2=01010 1011001 1001111 0001111 01
C3=000 0110011 0010101 0101111 1111
D4=010 1011001 1001111 0001111 0101
。。。
Cn = xxxx
Dn = xxxx
对Cn、Dn进行置换选择2操作
置换规则表 PC-2 | ||||||||||||
Ci | 14 | 17 | 11 | 24 | 1 | 5 | 3 | 28 | 15 | 6 | 21 | 10 |
23 | 19 | 12 | 4 | 26 | 8 | 16 | 7 | 27 | 20 | 13 | 2 | |
Di | 41 | 52 | 31 | 37 | 47 | 55 | 30 | 40 | 51 | 45 | 33 | 48 |
44 | 49 | 39 | 56 | 34 | 53 | 46 | 42 | 50 | 36 | 29 | 32 |
置换方式,按PC-2表进行将C1 第11位0放置在子密钥K1 的第1位,D1放在C24后,直至最后得出子密钥K1
C1 =11100 00110 01100 10101 01011 111 D1 =10 10101 01100 11001 11100 01111 0 | K1= 000110 110000 001011 101111 111111 000111 000001 110010 |
C2 =11000 01100 11001 01010 10111 111 D2 =01010 10110 01100 11110 00111 101 | K2= 011110 011010 111011 011001 110110 111100 100111 100101 |
C3 =00001 10011 00101 01010 11111 111 D4 =01010 11001 10011 11000 11110 101 | K3= 010101 011111 110010 001010 010000 101100 111110 011001 |
DES加密过程
对64位的明文进行初始化置换IP
初始化置换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 |
假设:十六进制明文M=0123456789ABCDEF
则可以用二进制表示为:
M:0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
置换方式
- 明文M分组长度为64,从第1位到第64位,按照IP表格的顺序进行置换,如,M的第58位,置换到第1位; M的第50位置换到第2位,依次类推,完成64位的置换
M置换后IP值:
IP=1100 1100 0000 0000 1100 1100 1111 1111 1111 0000 1010 1010 1111 0000 1010 1010
把IP分成左右各32位的L0和R0
L0 = 1100 1100 0000 0000 1100 1100 1111 1111
R0 =1111 0000 1010 1010 1111 0000 1010 1010
DES加密函数f
加密函数 f(Ri-1,Ki)是DES中的核心算法
该函数包含
- 选择运算E
- 异或运算: 0⊕0=0,0⊕1=1 1⊕0=1,1⊕1=0 口诀1:相同取0,相异取1
- 代替函数组S(S盒变换)
- 置换运算P
第一步:对Ri-1进行扩展E操作,由32位扩展到48位
选择运算E(扩展置换E) | |||||
扩展位 | 固定位 | 扩展位 | |||
32 | 1 | 2 | 3 | 4 | 5 |
4 | 5 | 6 | 7 | 8 | 9 |
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 |
R0 =1111 0000 1010 1010 1111 0000 1010 1010
R0进过E运算得出
E(R0) =011110 100001 010101 010101 011110 100001 010101 010101
第二步:对E(R0)和K1进行异或运算
E(R0) =011110 100001 010101 010101 011110 100001 010101 010101
K1= 000110 110000 001011 101111111111 000111 000001 110010
E(R0)⊕ K1 =011000 010001 011110 111010 100001 100110 010100 100111
第三步:对E(R0)⊕ K1进行S盒变换
- S盒变换是一种压缩替换,通过S盒将48为输入变为32位输出,共有8S盒,并行作用
- S盒是DES唯一的非线性变换,是DES安全的关键
- 每个S盒有6个输入, 4个输出,是一种非线性的压缩变换。
设输入为b1 b2 b3 b4 b5 b6 ,则以b1 b6组成的二进制为行号,以b2 b3 b4 b5组成的二进制为列号,行列相交点的数(二进制)为输出
E(R0)⊕ K1 =011000 010001 011110 111010 100001 100110 010100 100111
S1盒的输入是011000,00是行,1100是列
S1盒的输出:即行为0,列为12的交叉处的值为5,二进制为0101
其他S2-S8也同样上述方法进行S盒变换
第四步: 对8个S盒的值进行置换运算P操作
- 置换运算P是f函数的最后一个操作
- 把数据打乱重排
置换运算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 |
经过前面的S盒代换,得到32位的数值:
S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8)
= 0101 1100 1000 0010 1011 0101 1001 0111
则P ( S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) )
= 0010 0011 0100 1010 1010 1001 1011 1011
产生DES的下一个L和R
R1=L0⊕f(R0,K1)
=1100 1100 0000 0000 1100 1100 1111 1111
⊕0010 0011 0100 1010 1010 1001 1011 1011
= 1110 1111 0100 1010 0110 0101 0100 0100
同时:
L1=R0,重复迭代执行16次轮函数f ,
得到L16与R16
L16= 0100 0011 0100 0010 0011 0010 0011 0100
R16= 0000 1010 0100 1100 1101 1001 1001 0101
L16R16
= 0000 1010 0100 1100 1101 1001 1001 0101 0100 0011 0100 0010 0011 0010 0011 0100
*最后一步直接拼接起来没有轮函数
DES加密的最后一步
对R16L16进行逆初始置换IP-1
R16L16
= 0000 1010 0100 1100 1101 1001 1001 0101 0100 0011 0100 0010 0011 0010 0011 0100
则
C= IP-1( R16L16 )
= 10000101 11101000 00010011 01010100 00001111 00001010 10110100 00000101
十六进制的密文C = 85E813540F0AB405
关于IP与IP-1
第20位的值经过IP置换 到了置换后 第14位
原来第14位的值 在IP-1置换后到了第20位
案例分析
如果有简化的DES版本,其明文输入为8比特,初始置换表IP如下:
IP: 2631 4857
请给出其逆初始置换表。
假设原文为: abcd efgh
经IP后M,变为: bfca dheg
逆初始置换与初始置换是互逆,即把M1重新变为M
IP逆初始置换表:4135 7286
12345678 | P1---> | 26314857 |
12345678 | P-1---> | 41357286 |
DES解密过程
- DES的运算是对合运算,解密和加密算法相同
- 不同点就是子密钥使用的顺序不同。
- 第一次解密迭代使用自密钥K16 ,第二次解密迭代使用子密钥K15, .. ,第1 6次解密使用子密钥K1
DES安全性
- 如果DES密钥太短经不起穷尽攻击
- DES存在弱密钥和半弱密钥
- 初始密钥被分成两部分,每部分都单独做移位。如果每一部分的每一位都是0或都是1,则每一圈的子密钥都相同。这样的密钥被称为弱密钥。
- DES存在4个弱密钥
- Ek°Ek=1
- 弱密钥特性:明文加密两次能得到明文 加密和解密的结果是一致的
4个弱密钥
0101010101010101
FEFEFEFEFEFEFEFE
E0E0E0E0F1F1F1F1
1F1F1F1F0E0E0E0E
如果不考虑校验位的密钥,下面几个也是属于弱密钥的:
0000000000000000
FFFFFFFFFFFFFFFF
E1E1E1E1F0F0F0F0
1E1E1E1E0F0F0F0F
如果使用弱密钥,PC1 计算的结果会导致轮密钥全部为 0,全部为 1 或全部 01 交替。
因为所有的轮密钥都是一样的,并且 DES 是 Feistel 网络的结构,这就导致加密函数是自反相 (self-inverting) 的,结果就是加密一次看起来没什么问题,但是如果再加密一次就得到了明文。
半弱密钥
有些成对的密钥会将明文加密成相同的密文,即一对密钥中的一-个能用来解密由另一个密钥
加密的消息,这种密钥称作半弱密钥。
半弱密钥: E1=E2,至少有12个半弱密钥
6 个常见的部分弱密钥对
- 011F 011F 010E 010E and 1F01 1F01 0E01 0E01
- 01E0 01E0 01F1 01F1 and E001 E001 F101 F101
- 01FE 01FE 01FE 01FE and FE01 FE01 FE01 FE01
- 1FE0 1FE0 0EF1 0EF1 and E01F E01F F10E F10E
- 1FFE 1FFE 0EFE 0EFE and FE1F FE1F FE0E FE0E
- E0FE E0FE F1FE F1FE and FEE0 FEE0 FEF1 FEF1
学习参考资料:信息安全工程师教程(第二版)
建群网培信息安全工程师系列视频教程
猜你喜欢
- 2025-01-20 如何给U盘加密?不用装任何工具
- 2025-01-20 软考网络工程师备考-13:网络安全与应用1
- 2025-01-20 等保2.0数据库测评 - Oracle 11g数据库
- 2025-01-20 securecrt中文版
- 2025-01-20 加密算法的分类和简析
- 2025-01-20 VPN协议大揭秘 PPTP与L2TP退场 SSTP与IKEv2成为安全新宠
- 2025-01-20 MiFare RFID的四个系列卡片
- 2025-01-20 C#常用的加密算法:MD5、Base64、SHA1、DES、AES、RSA
- 2025-01-20 常用的加解密技术有哪些?利用Java、Python实现AES、DES、3DES
- 2025-01-20 AES和DES算法的区别,分别有哪些优缺点
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)