You are on page 1of 85

MÃ HÓA ĐỐI XỨNG HIỆN ĐẠI

• Một số khái niệm


• Mã dòng (stream Cipher)
• Mã khối (block Cipher)

1
MỘT SỐ KHÁI NIỆM

• Mã hóa cổ điển xem mỗi bản tin là một chuỗi các từ


được kết hợp bởi các ký tự
• Mã hóa hiện đại xem mỗi bản tin là một chuỗi các bits
nhị phân

2
MỘT SỐ KHÁI NIỆM

• Các kỹ thuật mã hóa hiện đại dựa trên các phép toán
của các bits nhị phân, theo dòng hoặc theo khối bits
• Mã hóa hiện đại là khái quát và khắc phục các nhược
điểm của mã hóa cổ điển

3
MỘT SỐ KHÁI NIỆM

Sơ đồ mã dòng

4
MỘT SỐ KHÁI NIỆM

Sơ đồ mã khối

5
MÃ DÒNG

• Nguyên tắc chung


• Mã TinyA5/1
• Mã A5/1
• Phá mã A5/1
• Mã RC4 (tham khảo tài liệu)

6
NGUYÊN TẮC CHUNG

• Kích thước mỗi đơn vị mã hóa là k bits (k1)


• Bản rõ P=p0 p1 … pn-1 là một chuỗi n số nhị phân k bits
(pi là số k bits)

7
NGUYÊN TẮC CHUNG

• Có một bộ sinh ngẫu nhiên, với khóa K ban đầu, sinh


các số ngẫu nhiên có kích thước bằng kích thước đơn vị
mã hóa
StreamCipher(K)S=s0 s1 … sn-1

8
NGUYÊN TẮC CHUNG

• Bản mã C= c0 c1 … cn-1 được tính bằng phép XOR các


bít như sau
c0=p0  s0, c1=p1  s1, …, cn-1=pn-1  sn-1

9
NGUYÊN TẮC CHUNG

• Mã dòng là tương tự như mã Vigenere và mã One-Time


Pad nhưng cho phép chọn chiều dài khóa thích hợp để
khắc phục được các điểm yếu của chúng

10
MÃ TINYA5/1

• Bộ sinh số gồm 3 thanh ghi X, Y, Z tương ứng 6, 8 và 9


bits
 X= (x0, x1, …,x5)
 Y = (y0, y1, …, y7)
 Z =(z0, z1, …, z8)
• Đơn vị mã hóa là 1 bit
• Khóa K ban đầu có chiều dài 23 bít và lần lượt được
phân bố vào các thanh ghi: K XYZ

11
MÃ TINYA5/1

• Để sinh các số ngẫu nhiên s0 s1 … sn-1, các thanh ghi X,


Y, Z được biến đổi bằng phép XOR kết hợp dịch phải
các bits, gọi là phép quay

12
MÃ TINYA5/1

• Phép quay X gồm các thao tác:


 t = x2 x4  x5
 xj = xj-1 với j = 5, 4, 3, 2, 1
 x0 = t 0 1 2 3 4 5
X 1 0 0 1 0 1

• Ví dụ 
X=100101, thì t = 0  0  1 = 1, sau khi quay X=110010

13
MÃ TINYA5/1

• Phép quay Y gồm các thao tác:


 t = y6  y7
 yj = yj-1 với j = 7, 6, 5, 4, 3, 2, 1
 y0 = t 0 1 2 3 4 5 6 7
X 0 1 0 0 1 1 1 0

• Ví dụ 
Y=01001110, thì t = 1  0 = 1, sau khi quay Y=10100111

14
MÃ TINYA5/1

• Phép quay Z gồm các thao tác:


 t = z2  z7  z8
 zj = zj-1 với j =8, 7, 6, 5, 4, 3, 2, 1
 y0 = t 0 1 2 3 4 5 6 7 8
X 1 0 0 1 1 0 0 0 0

• Ví dụ 
Z=100110000, thì t=0  0  0=0, sau khi quay Z=010011000

15
MÃ TINYA5/1

• TinyA5/1 sử dụng một hàm maj(x, y, z) trả về 0 hoặc 1


phụ thuộc vào việc có nhiều hơn một trong ba biến x, y,
z có giá trị 0 hay 1 (gọi là hàm “chiếm đa số”) để quyết
định quay X, Y hay Z

16
MÃ TINYA5/1

• Giá trị si được sinh tại bước thứ i, bằng cách kiểm tra
hàm maj(x1, y3, z3) như sau
 Tính m = maj(x1, y3, z3)
 Nếu x1 = m, quay X
 Nếu y3 = m, quay Y
 Nếu z3 = m, quay Z
• Khi đó si = x5  y7  z8

17
MÃ TINYA5/1

• Bản mã C= c0 c1 … cn-1 được tính bằng phép XOR các


bít (theo qui tắc mã dòng)
c0=p0  s0, c1=p1  s1, …, cn-1=pn-1  sn-1

18
MÃ TINYA5/1

• Mã hóa bản rõ P=111 (chữ h)


• Với khóa K là 100101.01001110.100110000

19
MÃ TINYA5/1

• Giá trị của các thanh ghi X, Y, Z


 X = 100101
 Y = 01001110
 Z = 100110000

20
MÃ TINYA5/1

• Bước 0: x1= 0, y3=0, z3= 1 nên m = 0, quay X và Y


 X = 110010
 Y = 10100111
 Z = 100110000
• Suy ra s0 = x5  y7  z8 =01 0 = 1

21
MÃ TINYA5/1

• Bước 1: x1= 1, y3=0, z3= 1 nên m = 1, quay X và Z


 X = 111001
 Y = 10100111
 Z = 010011000
• Suy ra s1 = x5  y7  z8 =11 0 = 0

22
MÃ TINYA5/1

• Bước 2: x1= 1, y3=0, z3= 0 nên m = 0, quay Y và Z


 X = 111001
 Y = 01010011
 Z = 001001100
• Suy ra s2 = x5  y7  z8 =11 0 = 0

23
MÃ TINYA5/1

• Bản rõ P=p0 p1 p1 = 111 (chữ h)


• s0 = 1, s1 = 0, s2 = 0
• Bản mã C= c0 c1 c2= 011 (chữ D), trong đó c0=p0  s0
=1 1 =0, c1=p1  s1=1  0=1, c2=p2  s2=1  0=1

24
MÃ A5/1
• A5/1 được dùng trong mạng điện thoại GSM (Global
System for Mobile Communications), để bảo mật dữ
liệu trong quá trình liên lạc giữa máy điện thoại và
trạm thu phát sóng vô tuyến
• Nguyên lý mã A5/1 tương tự như TinyA5/1
• Đơn vị mã hóa là 1 bit

25
MÃ A5/1

• A5/1 sử dụng 3 thanh ghi


 X: 19 bits (x0,x1,x2, …,x18)
 Y: 22 bits (y0,y1,y2, …,y21)
 Z: 23 bits (z0,z1,z2, …,z22)

26
MÃ A5/1
• Hàm m = maj(x8, y10, z10)
 Nếu x8 = m, quay X
 t = x13  x16  x17  x18
 xj = xj1 với j = 18, 17,…,1 và x0 = t
 Nếu y10 = m, quay Y
 t = y20  y21
 yj = yj1 với j = 21, 20,…,1 và y0 = t
 Nếu z10 = m, quay Z
 t = z7  z20  z21  z22
 zj = zj1 với j = 22, 21,…,1 và z0 = t
• Và si= x18  y21  z22

27
MÃ A5/1

X x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18

Y y0 y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 y11 y12 y13 y14 y15 y16 y17 y18 y19 y20 y21 

Z z0 z1 z2 z3 z4 z5 z6 z7 z8 z9 z10 z11 z12 z13 z14 z15 z16 z17 z18 z19 z20 z21 z22

Mã hòa c0=p0  s0, c1=p1  s1, …, cn-1=pn-1  sn-1

28
PHÁ MÃ A5/1

• Khó phá hơn mã Vigenere (do tính ngẫu nhiên của


khóa)
• Tuy nhiên mức độ chống tấn công (chosen-plaintext) là
không thực sự cao, vì nếu biết một số cặp bản rõ - bản
mã thì có thể suy ra được khóa

29
MÃ KHỐI

• Nguyên tắc chung


• Mô hình Mạng SPN
• Mô hình Feistel

30
NGUYÊN TẮC CHUNG
• Mỗi lần mã một khối (block) thông tin
• Mỗi khối được mã thông qua nhiều giai đoạn (vòng)

31
NGUYÊN TẮC CHUNG
• Khắc phục điểm yếu của mã dòng (chỉ cần biết một cặp
bản mã bản rõ thì tìm được khóa)
• Nếu khối 4 bits thì có 24! (bảng khóa, mỗi bảng có 16
cặp 4 bits), nếu khối 64 bits thì có 264! (bảng khóa) nên
tấn công vét cạn không thể xẩy ra

32
NGUYÊN TẮC CHUNG

33
NGUYÊN TẮC CHUNG

Mã hóa và giải mã
34
NGUYÊN TẮC CHUNG
• Mã khối được sử dụng rộng rãi trong các giải thuật mã
hóa
• Hỗ trợ các dịch vụ bảo mật và chứng thực

35
MÔ HÌNH MẠNG SPN
• Kết hợp hai hay nhiều mã hóa đơn giản với nhau tạo
thành một mã hóa tổng (product cipher), để nâng cao
mức độ an toàn
• Các mã hóa đơn giản thường là phép thay thế
(substitution, S-box) và hoán vị (permutation, P-box)
• Mã hóa tổng được coi như một mạng hoán vị -thay thế
Substitution-Permutation Network - SPN)

36
MÔ HÌNH MẠNG SPN

37
MÔ HÌNH FEISTEL
• Các đặc điểm cơ bản
• Mã TinyDES
• Mã DES
• Phá mã DES

38
CÁC ĐẶC ĐIỂM CƠ BẢN
• Mô hình Feistel cũng kết hợp các phép thay thế và hoán
vị
• Bản rõ sẽ được biến đổi qua một số vòng để cho ra bản
mã cuối cùng

39
CÁC ĐẶC ĐIỂM CƠ BẢN
• Mã hóa Feistel biến đổi bản rõ P thành bản mã C theo
sơ đồ
K1 K2 K3 … Kn
P  C1  C2  …  Cn = C
• Bản rõ P và các bản mã Ci được chia thành nửa trái và
nửa phải
P = (L0, R0)
Ci = (Li, Ri), i = 1, 2, …n

40
CÁC ĐẶC ĐIỂM CƠ BẢN
• Quy tắc biến đổi các nửa trái, phải qua các vòng
Li = Ri-1
Ri = Li-1 F(Ri-1, Ki)
• Ki là một khóa con cho vòng thứ i
• Khóa con được sinh ra từ khóa K ban đầu theo một
thuật toán sinh khóa
K K1  K2  …  Kn

41
CÁC ĐẶC ĐIỂM CƠ BẢN
• F là một hàm mã hóa (của mô hinh Feistel) đóng vai trò
như là phép thay thế
• Phép hoán vị được thực hiện bằng cách hoán đổi các
nửa trái, phải của Ci
• Bản mã C được tính từ kết xuất của vòng cuối cùng
C = Cn = (Ln, Rn)

42
CÁC ĐẶC ĐIỂM CƠ BẢN

43
CÁC ĐẶC ĐIỂM CƠ BẢN
• Giải mã được thực hiện qua các vòng theo thứ tự ngược
lại
C  (Ln, Rn)
Ri-1= Li (theo mã hóa Li = Ri-1 )
Li-1 = Ri F(Ri-1, Ki) (mã hóa Ri = Li-1  F(Ri-1, Ki))
• Bản rõ là P = (L0, R0)

44
CÁC ĐẶC ĐIỂM CƠ BẢN
• Hàm F và thuật toán sinh khóa con càng phức tạp thì
càng khó phá mã
• Ứng với các hàm F và thuật toán sinh khóa con khác
nhau thì ta sẽ có các phương pháp mã hóa khác nhau

45
MÃ TINYDES
• Mã DES (Data Encryption Standard) sử dụng các
nguyên lý của mô hình Feistel
• DES đã chứng tỏ độ an toàn cao và được sử dụng rộng
rãi
• Mã TinyDES là một trường hợp thu nhỏ của DES

46
MÃ TINYDES
• Các đặc điểm cơ bản
 Là mã thuộc hệ mã Feistel gồm 3 vòng
 Kích thước của khối là 8 bít
 Kích thước khóa là 8 bít
 Mỗi vòng của TinyDES dùng khóa con có kích thước 6 bít
được trích ra từ khóa chính

47
MÃ TINYDES

Sơ đồ sinh khóa và các vòng mã hóa TinyDES

48
MÃ TINYDES

Cấu trúc một vòng mã hóa TinyDES


49
MÃ TINYDES

• Hàm mã hóa F của TinyDES có dạng


 F(Ri-1, Ki) = P-box(S-box(Expand(Ri-1)Ki))
 Hàm Expand vừa mở rộng vừa hoán vị Ri-1 từ 4 bít lên 6
bít
 Hàm S-boxes biến đổi (thay thế) một số 6 bít đầu vào
thành một số 4 bít đầu ra
 Hàm P-box(b0b1b2b3) = b2b0b3b1 (hoán vị 4 bit)

50
MÃ TINYDES

• Hàm Expand(Ri-1) hoán vị và mở rộng Ri-1 từ 4 bít thành


6 bít
 Expand(Ri-1)= Expand(b0b1b2b3) = b2b3b1b2b1b0
 Với R0 = 0110, thì Expand(R0) = 101110

51
MÃ TINYDES

• Hàm S-box(b0b1b2b3b4b5) thay thế 6 bít đầu vào thành 4


bít đầu ra
• Các bits đầu ra của S-box được tính toán thông qua một
bảng 4 dòng 16 cột

52
MÃ TINYDES

Giá trị của S-box(b0b1b2b3b4b5)

53
MÃ TINYDES

Ví dụ X = 101010, S-box(X) = 0110

54
MÃ TINYDES

• Khóa K với 8 bít ban đầu được chia thành 2 nửa trái
phải KL0 và KR0, mỗi nửa có kích thước 4 bít
 Vòng thứ nhất KL0 và KR0 được dịch vòng trái 1 bít để có
được KL1 và KR1
 Vòng thứ hai KL1 và KR1 được dịch vòng trái 2 bít để có
được KL2 và KR2
 Vòng thứ 3 KL2 và KR2 được dịch vòng trái 1 bít để có KL3
và KR3

55
MÃ TINYDES

• Khóa Ki của mỗi vòng được tạo bằng cách hoán vị và


nén (compress) 8 bít k0k1k2k3k4k5k6k7 của KLi và KRi
thành kết quả gồm 6 bít k5k1k3k2k7k0

56
VÍ DỤ MÃ TINYDES

• Mã hóa bản rõ P = 0101.1100 (5C) với khóa K =


1001.1010
• Khởi đầu L0 = 0101, R0 = 1100, KL0 = 1001, KR0 = 1010

57
VÍ DỤ MÃ TINYDES
• Vòng 1
 L1 = R0 = 1100, Expand(R0) = 001011 (Expand(b0b1b2b3) =
b2b3b1b2b1b0)

 KL1 = KL0 <<1 = 0011, KR1 =KR0 << 1 = 0101


 K1 = Compress(KL1KR1) = 101110 (k0k1k2k3k4k5k6k7k5k1k3k2k7k0)
 Expand(R0) K1 = 100101
 S-box(100101) = 1000 (hàng 11 cột 0010)
 F1 = P-box(1000) = 0100 (b0b1b2b3  b2b0b3b1)
 R1 = L0  F1 = 0001

58
VÍ DỤ MÃ TINYDES
• Vòng 2
 L2 = R1 = 0001, Expand(R1) = 010000 (Expand(b0b1b2b3) =
b2b3b1b2b1b0)

 KL2 = KL1 <<2 = 1100, KR2 =KR1 << 2 = 0101


 K2 = Compress(KL2KR2) = 110011 (k0k1k2k3k4k5k6k7k5k1k3k2k7k0)
 Expand(R1)K2 = 100011
 S-box(100011) = 1100 (hàng 11 cột 0001)

 F2=P-box(1100) = 0101 (b0b1b2b3  b2b0b3b1)


 R2 = L1  F2 = 1001

59
VÍ DỤ MÃ TINYDES
• Vòng 3
 L3 = R2 = 1001, Expand(R2) = 010001 (Expand(b0b1b2b3) =
b2b3b1b2b1b0)
 KL3 = KL2 <<1 = 1001, KR3 =KR2 << 1 = 1010
 K3 = Compress(KL3KR3) = 001001 (k0k1k2k3k4k5k6k7k5k1k3k2k7k0)
 Expand(R2)  K3 = 011000
 S-box(011000) = 0101 (Hàng 00 cột 1100)
 F3 = P-box(0101) = 0011 (b0b1b2b3  b2b0b3b1)
 R3 = L2  F3 = 0010
• Kết quả C= L3R3 = 1001.0010 (hệ thập lục phân: 92)

60
MÃ DES
• Là mã Feistel gồm 16 vòng (có thêm một hoán vị khởi tạo
trước khi vào vòng 1 và một hoán vị kết thúc sau vòng 16)
• Kích thước của khối là 64 bít (“meetmeafterthetogaparty‟ sẽ
được mã hóa làm 3 lần, mỗi lần 8 chữ cái gồm 64 bít
(meetmeaf - tertheto – gaparty)
• Kích thước khóa là 56 bít
• Mỗi vòng của DES dùng khóa con có kích thước 48 bít được
trích ra từ khóa chính

61
MÃ DES

• Sơ đồ mã DES gồm ba phần


 Phần thứ nhất là các hoán vị khởi tạo và hoán vị kết thúc
 Phần thứ hai là các vòng Feistel
 Phần thứ ba là thuật toán sinh khóa con

62
MÃ DES

63
HOÁN VỊ KHỞI TẠO

64
HOÁN VỊ KẾT THÚC

(b0b1...b62b63 b39b7...b56b24)

65
CẤU TRÚC MỘT VÒNG CỦA DES

66
CẤU TRÚC MỘT VÒNG CỦA DES

• Hàm mã hóa F có dạng


• F(Ri-1, Ki) = P-box(S-boxes(Expand(Ri-1) Ki))
• Hàm Expand vừa mở rộng vừa hoán vị Ri-1 từ 32 bít lên
48 bít
• Hàm Sboxes nén 48 bít lại còn 32 bít
• Hàm P-box là một hoán vị 32 bít

67
CẤU TRÚC MỘT VÒNG CỦA DES
Expand(Ri-1)=Expand(b0b1b2…b30b31b32)
=b31b0b1 …b30b31b0

68
CẤU TRÚC MỘT VÒNG CỦA DES

• Hàm S-boxes của DES biến đổi một số 48 bít thành một
số 32 bít
• Chia hàm S-boxes thành 8 hàm S-box con, mỗi hàm
biến đổi số 6 bít thành số 4 bít (như S-boxes của
TinyDES)

69
CẤU TRÚC MỘT VÒNG CỦA DES

70
CẤU TRÚC MỘT VÒNG CỦA DES

71
CẤU TRÚC MỘT VÒNG CỦA DES

72
CẤU TRÚC MỘT VÒNG CỦA DES

73
CẤU TRÚC MỘT VÒNG CỦA DES

74
CẤU TRÚC MỘT VÒNG CỦA DES
Hàm P-box(b0b1b2…b30b31b32)
=b15b6b19 …b10b3b24

75
CẤU TRÚC MỘT VÒNG CỦA DES
Khóa K khởi đầu 64 bít được rút trích và hoán vị
thành một khóa 56 bít theo qui tắc

76
CẤU TRÚC MỘT VÒNG CỦA DES

• Khóa 56 bít được chia thành 2 nửa trái phải KL0 và KR0,
mỗi nửa có kích thước 28 bít
• Tại vòng thứ i (i = 1, 2, 3,…,16), KLi-1 và KRi-1 được dịch
vòng trái ri bít để có được KLi và KRi

1 nếu i{1, 2, 9, 16}


ri=
2 nếu ngược lại

77
CẤU TRÚC MỘT VÒNG CỦA DES
Khóa Ki của mỗi vòng được tạo ra bằng cách hoán vị
và nén 56 bít của KLi và KRi thành 48 bít theo qui tắc

78
PHÁ MÃ DES
• Mã DES an toàn hơn nhiều so với mã A5/1 do mã theo khối, kết
hợp thay thế và giao hoán
• Tấn công vét cạn 256 khóa (máy tính nhanh thực hiện 3 ngày), hiện
nay thường dùng kích thước khóa 128 an toàn hơn
• Năm 1990 Biham và Shamir đã giới thiệu phương pháp phá mã vi
sai, cần 247 cặp bản rõ, bản mã được lựa chọn để phá
• Năm 1997 Matsui đưa ra phương pháp phá mã tuyến tính, cần 243
cặp bản rõ, bản mã biết trước để phá
• Khắc phục dùng mã AES (đọc sách tham khảo)

79
MH TRUNG TÂM PHÂN PHỐI KHÓA
N người trao đổi cần N(N-1)/2 khóa
Mỗi người cần N-1 khóa (tốn kém và không an toàn)

80
MH TRUNG TÂM PHÂN PHỐI KHÓA
Mỗi người chỉ dùng một khóa bí mật, KA, KB,… với KDC

81
MH TRUNG TÂM PHÂN PHỐI KHÓA
KDC tạo khóa bí mật KAB cho A và B trao đổi

82
MH TRUNG TÂM PHÂN PHỐI KHÓA

• Chỉ có KDC, A và B biết KAB và KDC giữ bí mật khóa này


• Khi kết thúc quá trình truyền dữ liệu, KAB được hủy bỏ
• Lần sau, nếu A truyền dữ liệu với B thì KDC sẽ cung cấp
khóa KAB khác
• Chỉ cần A có thiết lập khóa bí mật KA với KDC thì A có
thể truyền dữ liệu không chỉ với B mà còn với những
người khác

83
LƯU Ý
• Mã hóa đối xứng hiện đại được dùng rộng rãi trong an toàn
và bảo mật thông tin
• Mã hóa đối xứng có thể chống được các hình thức tấn công
sửa đổi thông điệp, mạo danh và phát lại thông điệp (đảm
bảo tính chứng thực)
• Mã hóa đối xứng không đảm bảo được tính không thể từ chối
(do khóa bí mật- chỉ 2 người biết)
• Có thể nâng cao tính an ninh và hiệu quả bằng mô hình trung
tâm phân phối khóa (Key Distribution Center– KDC)

84
BÀI TẬP VỀ NHÀ

• Đọc chương 3 sách “Cryptography and Network Security


Principles and Practices” của William stallings (có thể
đọc bản tiếng Việt của ĐHNT)
• Trả lời câu hỏi và làm bài tập lý thuyết (cho trong danh
sách các bài tập chương 3)
• Làm bài tập nhóm (lập trình) đã cho trong danh sách các
bài tập chương 3

85

You might also like