Data Encryption Standard (DES)
Data Encryption Standard (DES)
DES
Khối 64 bit
Khóa 56 bít
16 vòng lặp mã hóa
Mỗi vòng lặp kết hợp Hoán vị + Đơn thế
Mã hóa DES
Khóa 56 bít
Mã
Tin
…
Tin 64- bit Khóa 64 bit
Vòng 1
Vòng 2
FP
Vòng 16
Mã 64- bit
IP KS
K1 48-bit
K2 48- bit
K16 48 -bit
Hoán vị đầu
Hoán vị cuối
Mã hóa DES
•
Bảng hoán vị đầu IP và hoán vị cuối FP
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
40 8 48 16 56 24 32
39 7 47 15 55 23 31
38 6 46 14 54 22 30
37 5 45 13 53 21 29
36 4 44 12 52 20 28
35 3 43 11 51 19 27
34 2 42 10 50 18 26
33 1 41 9 49 17 25
Bảng FP (IP
-1
) Bảng IP
IP(b1b2 b64) = b58b50 b7 FP(b1b2 b64) = b40b8 b25
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
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
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
Bảng KS1
KS1 chuyển khối 64 bit thành 2 khối 28 bit
KS1(b1b2 b64) = b57b49 b36b63 b4
KS2 chuyển 2 khối 28 bit thành khối 48 bit
KS2(b1b2 b56) = b14b17 32
Bảng KS2
Khóa ban đầu K
(C
0
,D
0
) =KS1(K)
K
i
= KS2(C
i
,D
i
)
Ci
•
Dịch chuyển vòng tròn sang trái 1bit Ci-1
nếu i = 1,2,9,16
•
Dịch chuyển vòng tròn sang trái 2 bit Ci-1
trong các trường hợp khác
Tương tự cho Di
32 bit trái 32 bít phải
S-box
p
Xor
E
Xor
32 bit trái 32 bit phải
Khóa 48 bit
•
Vòng lặp DES
•
E(b1b2 b32) = b32b1 b1
•
P(b1b2 b32) = b16b7 b25
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
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
Bảng E
Bảng P
S-Box
Chyển khối 48 bit thành khối 32 bit
8 khối 6 bit: s1,s2 s8 (b
1
b
2
b
3
b
4
b
5
b
6
)
Chyển S1 thành khối 4 bit
b
1
b
6
cho giá trị thập phân i
b
2
b
3
b
4
b
5
cho giá trị thập phân j
kết quả tại dòng i cột j của bảng S1
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 14 4 23 1 2 15 11 8 3 10 6 12 5 9 0 7
1 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
2 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
3 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
Hộp S thứ 1
Vi du : chuyển S1 (110001) thành khối 4 bit
b
1
b
6
(11) cho giá trị thập phân i = 3
b
2
b
3
b
4
b
5
b
6
(1000) cho giá trị thập phân j = 8
Kết quả tại dòng 3 cột 8 của bảng S1 là 5(thập phân) = 0101(nhị phân)
Tương tự với các bảng S2,S3 S8(có bảng riêng)
15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
Hộp S thứ 2
Hộp S thứ 3
7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
14 11 12 12 4 7 13 1 5 0 15 10 3 9 8 6
4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
Hộp S thứ 4
Hộp S thứ 5
12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
Hộp S thứ 6
Hộp S thứ 7
13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11
Hộp S thứ 8
Giải Mã DES
•
Sử dụng cùng 1 dãy khóa
•
Thứ tự các khóa được đảo ngược
•
Thực hiện cùng số vòng lặp
Điểm yếu của DES
Tìm khóa bằng vét cạn:
Có 2^56 khả năng.
Sử dụng tính bù để loại trừ số khả năng khóa
C = DES(k,m) => C = DES(k , m)
ví dụ: 1011 = 0100
Khóa yếu
C = DES(k,m) và m = DES(k,c)
C = DES(k
1
,m) và m = DES(k
2
,c)
Mã thám
•
Visai
•
Tuyến tính
•
Davies
Bài tập
Bài tập
Cho một bản rõ có nội dung như sau:
“0123456789ABCDEF”
Sử dụng khóa:
“133457799BBCDEF1”
Mã hóa DES ?
Bước 1: viết tin đầu
vào dạng nhị phân:
0000 0001 0010 0011
0100 0101 0110 0111
1000 1001 1010 1011
1100 1101 1110 1111
•
Cho qua bảng IP ta thu
được L0 và R 0:
L0 = 1100 1100 0000 0000
1100 1100 1111 1111
R0 = 1111 0000 1010 1010
1111 0000 1010 1010
•
Mở rộng R0 qua bảngE:
E(R0) = 0111 1010 0001 0101
0101 0101 0111 1010
0001 0101 0101 0101
1 1 0 0 1 1 0 0
0 0 0 0 0 0 0 0
1 1 0 0 1 1 0 0
1 1 1 1 1 1 1 1
1 1 1 1 0 0 0 0
1 0 1 0 1 0 1 0
1 1 1 1 0 0 0 0
1 0 1 0 1 0 1 0
0 1 1 1 1 0
1 0 0 0 0 1
0 1 0 1 0 1
0 1 0 1 0 1
0 1 1 1 1 0
1 0 0 0 0 1
0 1 0 1 0 1
0 1 0 1 0 1
IP
E
L0
R0
Bước 2 : Tạo khóa
•
Khóa dạng nhị phân:
0001 0011 0011 0100
0101 0111 0111 1001
1001 1011 1011 1100
1101 1111 1111 0001
•
Cho khóa qua bảng
KS1 & KS2 :
Ta được K1(48bit)
0001 1011 0000 0010
1110 1111 1111 1100
0111 0000 0111 0010
1 1 1 1 0 0 0
0 1 1 0 0 1 1
0 0 1 0 1 0 1
0 1 0 1 1 1 1
0 1 0 1 0 1 0
1 0 1 1 0 0 1
1 0 0 1 1 1 1
0 0 0 1 1 1 1
0 0 0 1 1 0
1 1 0 0 0 0
0 0 1 0 1 1
1 0 1 1 1 1
1 1 1 1 1 1
0 0 0 1 1 1
0 0 0 0 0 1
1 1 0 0 1 0
C0
D0
KS1
KS2
Tiến hành phép xor giữa E(R
0
) và K1
E(R
0
)= 011110 100001 010101 010101 011110 100001 010101 01 0101
k1 = 000110 110000 001011 10 1111 111111 000111 000001 110010
E(R
0
) Xor k1 =011000 010001 011110 111010 100001 100110 010100 10 0111
S1 S2 S3 S4 S5 S6 S7 S8
Kết quả sau phép Xor ta chia thành 8 khối 6 bit sau
đó đưa các khối vào các hộp S-box tương ứng
Chuyển S1 ( 011000 ) thành khối 4 bit: b
1
b
6
= 00
tức là cột i =0 và b
2
b
3
b
4
b
5
b
6
= 1100 hàng j = 12 tra
hộp S-Box1 => giá trị tương ứng là :5(0101)
vậy dãy bít 011000 qua S-box1 thành 0101
•
Tương tự với :
•
S2(010001 1100)
•
S3(0111101000)
•
S4(1110100010)
•
S5(1000011011)
•
S6(1001101101)
•
S7(0101001001)
•
S8(1001110111)
Dãy bit thay thế:
0101 1100 1000 0010 1011 0101 1001 0111
0010 0011 0100 1110 1010 1001 1011 1011
Sau khi qua hộp P ta đem kết quả XOR với L0 ->R1:
1110 1111 0100 1010 0110 0101 0100 0100
P
L1 = R0 = 1111 0000 1010 1010 1111 0000 1010 1010
Tiến hành dịch bit với C0 và D0
dịch trái 1 bit với C
0
và D
0
C1 : 1110 0001 1001 1001 0101 0101 1111
D1 : 1010 1010 1100 1100 1111 0001 1110
Với L1 , R1, (C
1
,D
1
) làm đầu vào của vòng 2
Vòng 2:
E(R1) = 0111 0101 1110 1010 0101 0100 0011 0000 1010 1010 0000 1001
k2 = 0111 1001 1010 1110 1101 1001 1101 1011 1100 1001 1110 0101
E(R1) xor k 2 : = 0000 1100 0100 0100 1000 1101 1110 1011 0110 0011 1110 1100
Đầu ra S-box : = 1111 1000 1101 0000 0011 1010 1010 1110
f(R1,k2) = 0011 1100 1010 1011 1000 0111 1010 0011
L3 = R2 = 1100 1100 0000 0001 0111 0111 0000 1001
Vòng 3:
E(R2) = 11100101 10000000 00000010 10111010 11101000 01010011
k3 = 01010101 11111100 10001010 01000010 11001111 10011001
E(R2) xor k 3 := 10110000 01111100 10001000 11111000 00100111 11001010
Đầu ra S-box : = 00100111 00010000 11100001 01101111
f(R2,k3) = 01001101 00010110 01101110 10110000
L4 = R3 = 10100010 01011100 00001011 11110100
Vòng 4:
E(R3) = 01010000 01000010 11111000 00000101 01111111 10101001
k4 = 01110010 10101101 11010110 11011011 00110101 00011101
E(R3) xor k 4 : = 00100010 11101111 00101110 11011110 01001010 10110100
Đầu ra S-box : = 00100001 11101101 10011111 00111010
f(R3,k4)= 10111011 00100011 01110111 01001100
L5 = R4 = 01110111 00100010 00000000 01000101
Vòng 5:
E(R4) = 10111010 11101001 00000100 00000000 00000010 00001010
k5 = 01111100 11101100 00000111 11101011 01010011 10101000
E(R4) xor k 5 : = 11000110 00000101 00000011 11101011 01010001 10100010
Đầu ra S-box : = 01010000 11001000 00110001 11101011
f(R4,k5)= 00101000 00010011 10101101 11000011
L6 = R5 = 10001010 01001111 10100110 00110111
Vòng 6:
E(R5) = 11000101 01000010 01011111 11010000 11000001 10101111
k6 = 01100011 10100101 00111110 01010000 01111011 00101111
E(R5) xor k 6 : =10100110 11100111 01100001 10000000 10111010 10000000
Đầu ra S-box : = 01000001 11110011 01001100 00111101
f(R5,k6) = 10011110 01000101 11001101 00101100
L7 = R6 = 11101001 01100111 11001101 01101001
Vòng 7
E(R6) = 11110101 00101011 00001111 11100101 10101011 01010011
K7 = 11101100 10000100 10110111 11110110 00011000 10111100
E(R6) xor k 7 : = 00011001 10101111 10111000 00010011 10110011 11101111
Đầu ra S-box : = 00010000 01110101 01000000 10101101
f(R6,k7) = 10001100 00000101 00011100 00100111
L8 = R7 = 00000110 01001010 10111010 00010000
Vòng 8:
E(R7) = 00000000 11000010 01010101 01011111 01000000 10100000
k8 = 11110111 10001010 00111010 11000001 00111011 11111011
E(R7) xor k 7 : = 11110111 01001000 01101111 10011110 01111011 01011011
Đầu ra S-box : = 01101100 00011000 01111100 10101110
f(R7,k8) = 00111100 00001110 10000110 11111001
L9 = R8 = 11010101 01101001 01001011 10010000
Vòng 9:
E(R8) = 01101010 10101011 01010010 10100101 01111100 10100001
k9 = 11100000 11011011 11101011 11101101 11100111 10000001
E(R8) xor k 9 : = 10001010 01110000 10111001 01001000 10011011 00100000
Đầu ra S-box : = 00010001 00001100 01010111 01110111
f(R8,k9) = 00100010 00110110 01111100 01101010
L10 = R9 = 00100100 01111100 11000110 01111010
Vòng 10:
E(R9) = 00010000 10000011 11111001 01100000 11000011 11110100
k10 = 10110001 11110011 01000111 10111010 01000110 01001111
E(R9) xor k 10 : = 10100001 01110000 10111110 11011010 10000101 10111011
Đầu ra S-box : = 11011010 00000100 01010010 01110101
f(R9,k10) = 01100010 10111100 10011100 00100010
L11 = R10 = 10110111 11010101 11010111 10110010
Vòng 11:
E(R10) = 01011010 11111110 10101011 11101010 11111101 10100101
k11 = 00100001 01011111 11010011 11011110 11010011 10000110
E(R10) xor k 11:= 01111011 10100001 01111000 00110100 00101110 00100011
Đầu ra S-box : = 01110011 00000101 10100010 0000001
f(R10,k11) = 11100001 00000100 11111010 00000010
L12 = R11 = 11000101 01111000 00111100 01111000
Vòng 12:
E(R11) = 01100000 10101011 11110000 00011111 10000011 11110001
k12 = 01110101 01110001 11110101 10010100 01100111 11101001
E(R11) xor k 12 : = 00010101 11011010 00000101 10001011 11100100 00011000
Đầu ra S-box : = 01111011 10001011 00100110 00110101
f(R11,k12) = 110000100 11010001 10011111 1101010
L13= R12 = 01110101 10111101 00011000 01011000
Vòng 13:
E(R12) = 00111010 10111101 11111010 10001111 00000010 11110000
k13 = 10010111 11000101 11010001 11111010 10111010 01000001
E(R12) xor k 13 := 10101101 01111000 00101011 01110101 10111000 10110001
Đầu ra S-box : = 10011010 11010001 10001011 01001111
f(R12,k13) = 11011101 10111011 00101001 00100010
L14 = R13 = 00011000 11000011 00010101 01011010
Vòng 14:
E(R13) = 00001111 00010110 00000110 10001010 10101010 11110100
k14 = 01011111 01000011 10110111 11110010 11100111 00111010
E(R13) xor k 14:= 01010000 01010101 10110001 01111000 01001101 11001110
Đầu ra S-box : = 01100100 01111001 10011010 11110001
f(R13,k14) = 10110111 00110001 10001110 01010101
L15 = R14 = 11000010 10001100 10010110 00001101