5
• Sơ đồ khối thực hiện giải thuật DES
- Input: Bản rõ M
- Output: Bản mã hóa C
* Các bước (lời giải thô):
B1: Khối bản rõ 64 bít được hoán vị
(hoán vị khởi đầu) để thay đổi thứ tự
của các bít.
B2: Chia bản rõ vừa hoán vị bít làm
hai nửa trái L
0
và phải R
0
, mỗi nửa
32 bít.
B3: Dùng 16 vòng lặp, tính LnRn
(n=1 16) theo quy tắc:
L
n
= R
n-1
R
n
=L
n-1
+ f(R
n-1
,K
n
)
B4: Tại vòng lặp cuối cùng n=16, ta
đươc L
16
R
16
, đổi vị trí 2 nửa này cho
nhau thành R
16
L
16
B5: Hoán vị thứ tự bít cho R
16
L
16
, ta
được đầu ra là bản mã hóa cần tìm.
6
• Chi tiết các bước thực hiện của giải thuật DES
Để chi tiết hóa thuật toán DES, cần
phải tìm hiểu một số vấn đề :
1. Cách hoán vị bít.
2. Cách tạo 16 khóa con K
i
(Subkeys) từ K.
3. Cách tính hàm f.
4. Cách thức mã hóa khối dữ liệu 64 bít.
7
Sơ đồ tạo các khóa con (Subkeys)
Vòng
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Dịch trái
1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1
K+ (56bits)
K (64bits)
PC-1
Bảng PC-1
D0 (28bits)C0 (28bits)
D1 (28bits)C1 (28bits)
<< <<
D16 (28bits)C16 (28bits)
<< <<
… …
<< <<
Bảng dịch trái các bít
K1 (48bits)
PC-2
K16 (48bits)
PC-2
…
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
Bảng PC-2
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
8
Ví dụ tạo các khóa con
• Giả sử khóa K ban đầu, áp dụng bảng PC-1 tính K+:
K = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001
K+ = 1111000 0110011 0010101 0101111 0101010 1011001 1001111 0001111
• Từ K+, chia 2 nửa C
0
D
0
, mỗi nửa 28 bít
C0 = 1111000 0110011 0010101 0101111
D0 = 0101010 1011001 1001111 0001111
Bảng PC-1 (56 bít)
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
1
1
9
Ví dụ tạo các khóa con (tiếp)
• Ví dụ: Từ C
0
D
0
đã có ở trên
C0 = 1111000011001100101010101111
D0 = 0101010101100110011110001111
Vòng lặp 1: dịch trái C
0
D
0
1 bít ta được cặp C
1
D
1
C1 = 1110000110011001010101011111
D1 = 1010101011001100111100011110
Vòng lặp 2: dịch trái C
1
D
1
1 bít ta được.C
2
D
2
C2 = 1100001100110010101010111111
D2 = 0101010110011001111000111101
Vòng
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Dịch trái
1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1
Bảng dịch trái các bít
10
Ví dụ tạo các khóa con (tiếp)
•Vậy, qua 16 vòng lặp ta sẽ có các cặp từ C
1
D
1
đến C
16
D
16
• Để hình thành các khóa K
n
, 1≤n≤16, ta phải dựa vào các
cặp C
n
D
n
đã tính ở trên và tra vào bảng hoán vị bít PC-2
• Ví dụ: Giả sử ta đang có
C
1
D
1
= 1110000110 0110010101 0101111110 1010101100 1100111100 011110
K
1
= 000110 110000 001011 101111 111111 000111 000001 110010
•Tương tự, các khóa K
2
, K
3
,…, K
16
tương ứng tính được
dựa vào C
2
D
2
, C
3
D
3
,…, C
16
D
16
và bảng PC-2
Bảng PC-2 (48 bít)
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
11
Mã hóa khối dữ liệu 64 bits
IP (64 bít)
M (64 bít)
Bảng IP
Bảng IP (64 bít)
R0 (32bits)L0 (32bits)
R1=L0 ⊕ F(R0, K1)
L1=R0
R16=L15 ⊕ F(R15, K16)
L16=R15
… …
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
Xử lý qua 16 lần lặp, 1≤n≤16, tính
L
n
R
n
theo quy tắc:
L
n
= R
n-1
R
n
= L
n-1
⊕ f(R
n-1
,K
n
)
R16 L16
IP
-1
C (đã mã hóa)
Bảng IP
-1
12
IP (64 bít)
M (64 bít)
Bảng IP
Bảng IP (64 bít)
R0 (32bits)L0 (32bits)
R1=L0 ⊕ F(R0, K1)
L1=R0
R16=L15 ⊕ F(R15, K16)
L16=R15
… …
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
R16 L16
IP
-1
C (đã mã hóa)
Bảng IP
-1
Ví dụ:
M = 00000001 00100011 01000101 01100111
10001001 10101011 11001101 11101111
IP = 11001100 00000000 11001100 11111111
11110000 10101010 11110000 10101010
• Chia IP thành 2 nửa L0, R0
L0 = 1100 1100 0000 0000 1100 1100 1111 1111
R0 = 1111 0000 1010 1010 1111 0000 1010 1010
Mã hóa khối dữ liệu 64 bits
13
Mã hóa khối dữ liệu 64 bits
IP (64 bít)
M (64 bít)
Bảng IP
R0 (32bits)L0 (32bits)
R1=L0 ⊕ f(R0, K1)
L1=R0
R16=L15 ⊕ f(R15, K16)
L16=R15
… …
R16 L16
IP
-1
C (đã mã hóa)
Bảng IP
-1
Ví dụ: Cho n=1, với L0, R0, K1
đã có, tính được:
L1 = R0 = 1111 0000 1010 1010
1111 0000 1010 1010
R1 = L0 ⊕ f(R0,K1)
16 vòng lặp
tính L
n
R
n
?
?
?
f(R,K)
14
Các bước tính toán hàm f(R
n-1
, K
n
)
Bước 1: Giá trị R
n-1
có 32 bít được
mở rộng thành 48 bít bằng hàm
mở rộng E. Dựa vào Bảng E
bên dưới, chúng ta tính được
E(R).
Bảng E (48 bít)
32 1 2 3 4 5 4
9 10
16
20
26
32
15
21
25
31
5
6 7 8 9 8 11
12 13 12 13 14 17
16 17 18 19 20 21
22 23 24 25 24 27
28 29 28 29 30 1
R
n-1
(32 bít)
K
n
(48 bít)
E
E(R
n-1
) (48 bít)
+
S
1
S
2
S
3
S
4
S
5
S
6
S
7
S
8
P
f(R
n-1
,K
n
) (32 bits)
B
1
B
2
B
3
B
4
B
5
B
6
B
7
B
8
C
1
C
2
C
3
C
4
C
5
C
6
C
7
C
8
Ví dụ: Chúng ta tính E(R0) với R0 được cho như
sau:
R0 = 1111 0000 1010 1010 1111 0000 1010 1010
E(R0) = 011110 100001 010101 010101 011110
100001 010101 010101
Không có nhận xét nào:
Đăng nhận xét