当前位置 博文首页 > kbtx的博客:网络与信息安全-第三章-对称秘钥加密算法
密码编码:通过信息编码使信息保密
密码分析:用分析方法(破解)解密信息
密码解码:用(正常手段,如拥有密钥)将密文转换成明文
基本术语
密码学基本模型
各国在密码分析上投入的资源最多
简单加密系统模型
什么是密码?就是一组含有参数K的变换E。设已知消息m,通过变换Ek得密文C,即,这个过程称为加密,E为加密算法,k不同,密文C亦不同。传统的保密通信机制:
理论安全和实际安全
n | n5 | 2n | n! |
---|---|---|---|
10 | 0.1s | 0.001s | 3.6s |
100 | 104 s = 2.8h | 1030 s = 1016 年 | 10186 s = 10176年 |
1000 | 109s=10年 | 10286 s | 102974世纪 |
所以,n=100,2n=1030sec=1016年,W(n)>1030才安全。
演变史
古罗马:Caesar密码(公元前100年)
CAESAR密码:c=(p+3) Mod 26
密码本 | ABCDEFGHIGKLMNOPQRSTUVWXYZ |
---|---|
密文 | DEFGHIGKLMNOPQRSTUVWXYZABC |
明文 | Caesar was a great soldier |
---|---|
密文 | Fdhvdu zdv d juhdw vroglhu |
美国南北战争 1861
C | A | N | Y |
---|---|---|---|
O | U | U | N |
D | E | R | S |
T | A | N | D |
明文:Canyouunderstand
密文:codtaueanurnynsd
在此处明文按照从左到右从下往上的顺序填入,密文按照斜右下向左的层次输出
明文:can you understand
密文:dnsu aru teo dy nn a c
古典密码
古典密码(受限密码)的缺陷
现代密码算法
图灵(计算机之父)
转子加密机(Rotor Machine):转轮密码机ENIGMA,由Arthur Scherbius于1919年发明,4轮ENIGMA在1944年装备德国海军
英国的TYPEX打字密码机,是德国3轮ENIGMA的改进型密码机。它在英国通信中使用广泛,且在破译密钥后帮助破解德国信号
一个简单的加密算法——异或 ⊕
异或运算(不进位加法)
加密 | ???明文 ⊕密钥 ------------ ???密文 | ????0 0 1 1 ⊕ 0 1 0 1 ------------- ????0 1 1 0 |
---|---|---|
解密 | ???密文 ⊕密钥 ------------ ???明文 | ????0 1 1 0 ⊕ 0 1 0 1 ------------- ????0 0 1 1 |
明文P,密文C,密钥K间的转换规则:
C = P ⊕ K
P = C ⊕ K
K = C ⊕ P
首先把明文分成以64bit为单位的块m,对于每个m,执行如下操作
DES(m)=IP-1·T16·T15…T2·T1·IP(m)
重点在于初始置换、其中一轮迭代和末置换
置换表:
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=m1,m2,m3…,m62,m63,m64
置换后序列:
M’=IP(M) = m58,m50,m42,…,m23,m15,m7
子密钥Ki长度48bit,总密钥长度64bit
将Ri从32位扩展到48位
目的:输入的一位影响下一步的两个替换,使得输出对输入的依赖性传播得更快,密文的每一位都依赖于明文的每一位
原位置 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | … | 31 | 32 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
映射到 | 2,48 | 3 | 4 | 5,7 | 6,8 | 9 | 10 | 11,13 | 12,14 | … | 46 | 47,1 |
拆分:56bits 的密钥分成两部分, Ci , Di , 各28bits
循环左移:根据迭代的轮数,分别左移一位或两位
迭代轮数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
左移位数 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 1 |
压缩置换PC(置换选择):按照下表的指导,从56bits中选择48bits
14 | 17 | 11 | 24 | 1 | 5 | 3 | 28 | 15 | 6 | 21 | 10 |
---|---|---|---|---|---|---|---|---|---|---|---|
23 | 19 | 12 | 4 | 26 | 8 | 16 | 7 | 27 | 20 | 13 | 2 |
41 | 52 | 31 | 37 | 47 | 55 | 30 | 40 | 51 | 45 | 33 | 48 |
44 | 49 | 39 | 56 | 34 | 53 | 46 | 42 | 50 | 36 | 29 | 32 |
假定S1盒为:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
S1 | 0 1 2 3 | 14 0 4 15 | 4 15 1 12 | 13 7 14 8 | 1 4 8 2 | 2 14 13 4 | 15 2 6 9 | 11 13 2 1 | 8 1 11 7 | 3 10 15 5 | 10 6 12 11 | 6 12 9 3 | 12 11 7 14 | 5 9 3 10 | 9 5 10 0 | 0 3 5 6 | 7 8 0 13 |
可以求得 S1(100110) = 1000
注意到:b1b6=10(2) = 2(10),b2b3b4b5=0011(2) = 3(10)
在S1盒中查出 (2,3)中的数据为8,转为二进制为1000
32比特输入,32比特输出
P盒的输出:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | … | 30 | 31 | 32 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
16 | 7 | 20 | 21 | 29 | 12 | 28 | 17 | 1 | 15 | … | 11 | 4 | 25 |
置换是为了还原
末置换表(IP):
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 |
对比初始置换表(IP-1):
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 |
IP-1(IP(M)) = M
经过初始置换后,第1位跑到了40位,末置换将第40位还原为第1位
两个置换并不能提升密码强度,却带来大量计算消耗,因此实际使用的时候并不做初始置换和末置换。
Ci是第i组密文,Pi是第i组明文
????Ci = E(Ci-1 ⊕ Pi)
????Pi = Ci-1 ⊕ E-1(Ci)
如上图左边,三块数据链之间的加密有依赖关系,想破解全部信息需要获取所有密钥,特别是破解后面的信息需要拿到前面所有的密钥。
三重DES加密,密钥长度为112比特,k=k1k2
密钥长度2112 = 256+56
硬件实现:商业DES芯片
软件实现:
Rijndael是一个分组密码算法,其分组长度和密钥长度相互独立,都可以改变
字节替换SubBytes
以字节的高四位为行索引,低四位为列索引,从S盒(16*16)中找出对应的字节进行替换
行移位ShiftRows
第一行固定不动,第二三四行根据列数决定按字节循环左移多少位。
当列数为4时,二三四行分别按字节循环左移1,2,3位。
列混合MixColumns
将每一列作为列向量,左乘一个给定的矩阵(四阶方阵),计算结果覆盖原有的列。
注意,这里采用的是有限域GF(28)上的乘法。
算法的原理如下:
例如:计算上图左上角的04的步骤如下
D4·02 ⊕ BF·03 ⊕ 5D·01 ⊕ 30·01
= D4·02 ⊕ BF·02 ⊕ BF·01 ⊕ 5D·01 ⊕ 30·01
= 1101 0100·0000 0010 ⊕ 1011 1111·0000 0010 ⊕ 1011 1111·0000 0001 ⊕ 0101 1101·0000 0001 ⊕ 0011 0000·0000 0001
= (?0001 1010 1000? xor 1 0001 0111) ⊕ (?0001 0111 1110? xor 1 0001 0111)? ⊕ 1011 1111 ⊕ 0101 1101 ⊕ 0011 0000
= ??1011 1111? ⊕ ?0110 1001? ⊕ 1011 1111 ⊕ 0101 1101 ⊕ 0011 0000
= 0000 0100
= 0x 04
轮密钥加
将输入状态和轮次密钥按列求异或,计算结果放回到输入状态。
初始密钥可以是128位 (4×4×16)、192位 (4×6×16)或256位 (4×8×16)
快速演示AES加密过程
cs