Tải bản đầy đủ (.pdf) (5 trang)

giới thiệu về mật mã hóa

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (209.76 KB, 5 trang )

Lý thuyết Thông tin

BÀI 14 GIỚI THIỆU VỀ MẬT MÃ HOÁ
14.1 Giới thiệu
14.2 Một số phép mật mã đơn giản
14.3 Bẻ gãy (breaking) một hệ thống mật mã
14.4 Kết hợp các phương pháp mật mã hoá

14.1 Giới thiệu
Mã hoá bảo mật đã có một lịch sử lâu đời, ở đây chúng ta không trình bày về lịch sử
của nó mà chỉ trình bày các vấn đề cơ bản của nó. Trước hết chúng ta trình bày ý tưởng cơ
bản của mật mã hoá
Mật mã hoá
Mật mã hoá là việc biến đổi một thông báo sao cho nó không thể hiểu nổi đối với
bất kỳ ai ngoại trừ người nhận được mong muốn.
Để thuận tiện trình bày, chúng ta sẽ định nghĩa và kí hiệu cho các khái niệm cơ bản.
Thông báo (message, plaintext)
Thông báo là một chuỗi hữu hạn kí hiệu lấy từ một bảng chữ cái ∑ và thường
được kí hiệu là m.
Ở đây ∑ thường là bảng chữ cái tiếng Anh gồm 26 kí tự, thỉnh thoảng có thêm cả kí tự
khoảng trắng.
Phép mật mã hoá e(m)
e(m) là kí hiệu biểu diễn việc mật mã hoá m.
Trong thực tế, mật mã hoá được xem như là một hàm, ánh xạ hay một giải thuật với một tập
các thông số (ngoài thông số cần có là thông báo cần mã hoá). Từ đây chúng ta có khái niệm
khoá.
Khoá (key)
Khoá là một thông số đầu vào của phép mã hoá mà không phải là thông báo và
thường được kí hiệu là k.
Một phép mật mã hoá có thể có nhiều khoá.
Chuỗi mật mã (cipher, ciphertext, cryptogram)


c = e(m, k) được gọi là chuỗi mật mã.
Phép giải mật mã d(c, k)
d(c, k) là kí hiệu biểu diễn việc giải mật mã hoá.
Dĩ nhiên d(c, k) = m.
Hệ thống mật mã (cryptosystem)
Một cách hình thức, một hệ thống mật mã được định nghĩa là một bộ ba (M, K,
C). Trong đó M là tập các thông báo m trên các bảng chữ cái ∑1, K là tập hữu hạn các
khoá k, C là tập các chuỗi mật mã c, ngoài ra còn có thêm giả thiết rằng tồn tại các
hàm hay giải thuật e và d sao cho
e: M × K → C
d: C × K → M
và đối với mỗi cặp (m, k) ∈ M × K,
d(e(m, k) , k) = m

14.2 Một số phép mật mã đơn giản
Phép thay thế đơn giản
Người soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM

96


Lý thuyết Thông tin
Trong phép này, khoá là một hoán vị π của bảng chữ cái ∑ và mỗi kí hiệu của
thông báo được thay bằng ảnh của nó qua hoán vị π.
Thường thường, khoá được biểu diễn như một chuỗi 26 kí tự, chẳng hạn nếu khoá là
UXEOS…, thì nó biểu thị rằng bất kỳ một sự xuất hiên của A trong thông báo thì được thay
bằng U, B được thay bằng X, C được thay bằng E, D được thay bằng O, E được thay bằng
S, … Các khoảng trắng thường được giữ nguyên không bị thay thế.
Phép thay thế n-gram
Thay vì thay thế đối với các kí tự, người ta có thể thay thế cho từng cụm 2 kí tự (gọi là

digram) hoặc cho từng cụm 3 kí tự (gọi là trigram) và tổng quát cho từng cụm n kí tự (gọi là
n-gram). Nếu bảng chữ cái ∑ gồm 26 kí tự tiếng Anh thì phép thay thế n-gram sẽ có khoá là
một hoán vị của 26n n-gram khác nhau. Trong trường hợp digram thì hoán vị gồm 262
digram và có thể biểu diễn tốt nhất bằng một dãy 2 chiều 26 × 26 trong đó các hàng biểu
diễn kí hiệu đầu tiên, các cột biểu diễn kí hiệu thứ hai, nội dung của các ô biểu diễn chuỗi
thay thế. Ví dụ bảng 2 chiều sau biểu thị AA được thay bằng EG, AB được thay bằng RS,
BA được thay bằng BO, BB được thay bằng SC, …

A
B
EG
RS
A
B BO SC

Phép hoán vị bậc d
Đối với một số nguyên dương d bất kỳ, chia thông báo m thành từng khối có chiều dài
d. Rồi lấy một hoán vị π của 1, 2, …, d và áp dụng π tới mỗi khối. Chẳng hạn nếu d = 5 và π
= (4 1 3 2 5), thì có nghĩa là hoán vị (1 2 3 4 5) sẽ được thay bằng hoán vị mới (4 1 3 2 5).
Ví dụ nếu chúng ta có thông báo
m = JOHN |IS A |GOOD | ACTOR
thì qua phép mật mã này sẽ trở thành chuỗi mật mã sau
c = NJHO |AI S |DGOO | OATCR
Để giải mã ngược lại ta phải tìm hoán vị ngược π-1. Trong trường hợp này chúng ta có π-1 =
(2 4 3 1 5). Tổng quát nếu π = ( a1i1 a 2i 2 … a ni n ) trong đó a ji j biểu thị ở vị trí thứ j chứa
giá trị ij, thì π-1 = ( a j11 a j 2 2 ... a j n n ) có nghĩa là ở duyệt trong π ở vị trí thứ i có chứa giá
trị j thì trong π-1 ở vị trí thứ j sẽ chứa giá trị i.

Phương pháp Vigenère và Caesar
Trong phương pháp này, khoá bao gồm một chuỗi của d kí tự. Chúng được viết lặp lại

bên dưới thông báo và được cộng modulo 26, với chú ý rằng bảng chữ cái được đánh số từ
A = 0 đến Z = 25. Các kí tự khoảng trắng sẽ được giữ nguyên không cộng.
Chẳng hạn với d = 3, nếu khoá là chuỗi ABC thì thông báo
m=
M A R Y
I S
G O O D
với khoá
k=
A B C A
B C
A B C A
trở thành
c=
M B T Y
J U
G P Q D
Trong trường hợp d = 1, như vậy khoá chỉ là một kí tự đơn, thì được gọi là phương
pháp Caesar vì được cho là được sử dụng lần đầu bởi Julius Caesar.
Phương pháp Playfair

Người soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM

97


Lý thuyết Thông tin
Đây là một sơ đồ dựa trên sự thay thế digram trong đó khoá là một hình vuông kích
thước 5 × 5 chứa một sự sắp xếp nào đó của 25 kí tự của bảng chữ cái (không tính kí tự J vì
sự xuất hiện ít của nó và có thể thay nó bằng I). Giả sử chúng ta có ma trận khoá như sau

B
Y D
G Z
W S F
U P
L
A R
K X
C
O I
V E
Q
N M H T
Sự thay thế sẽ được thực hiện như sau. Chẳng hạn nếu digram cần thay thế là AV thì trong
hình chữ nhật có A, V là hai đỉnh chéo nhau thay A bằng đỉnh kề của nó theo đường thẳng
đứng chính là O và tương tự thay V bằng đỉnh kề của nó theo đường thẳng đứng chính là K.
Tương tự nếu digram cần thay thế là VN thì chuỗi thay thế là HO. Nếu các kí tự của digram
nằm trên hàng ngang thì chuỗi thay thế là các kí tự bên phải của chúng. Chẳng hạn nếu
digram là WU thì chuỗi thay thế là SP, nếu digram là FP thì chuỗi thay thế là UW, nếu
digram là XR thì chuỗi thay thế là LK. Tương tự nếu các kí tự của digram nằm trên hàng
dọc thì chuỗi thay thế là các kí tự bên dưới của chúng. Chẳng hạn nếu digram là SO thì
chuỗi thay thế là AN, nếu digram là MR thì chuỗi thay thế là DI, nếu digram là GH thì
chuỗi thay thế là UG. Trong trường hợp digram là một cặp kí tự giống nhau chẳng hạn OO
hoặc là một kí tự được đi kèm một khoảng trắng chẳng hạn B thì có nhiều cách xử lý, cách
đơn giản nhất là giữ nguyên không biến đổi digram này.
Phương pháp khoá tự động (autokey)
Trong phương pháp này, có một khoá “mồi” (priming key), cái mà thường là ngắn và
được sử dụng để khởi đầu quá trình mật mã hoá. Quá trình mã hoá được tiếp tục bằng cách
sử dụng cả bản thân thông báo lẫn chuỗi mật mã (cryptogram) đang chạy. Xét ví dụ sau: Giả
sử khoá mồi là VENUS và thông báo là SEND SUPPLIES. Đầu tiên sử dụng thông báo như

một khoá đang chạy, chúng ta mã hoá bằng phép cộng mod 26. (Chú ý các khoảng trắng sẽ
được bỏ qua)
m:
S E N D S U P P L I
E S
k:
V E N U S S E N D S U P
Chuỗi mật mã N I
A X K M T C O A Y H
Sử dụng chuỗi mật mã trên như là một khoá với khoá mồi như cũ chúng ta được kết quả mã
hoá như sau.
m:
k:
Chuỗi mật mã

S
V
N

E
E
I

N
N
A

D
U
X


S
S
K

U
N
H

P
I
X

P
A
P

L
X
I

I
K
S

E
M
Q

S

T
L

Phương pháp biến đổi tuyến tính
Ý tưởng cơ bản là chia thông báo thành những khối có chiều dài d và gắn khối này với
một bộ-d (hay còn gọi là vectơ) x của các số nguyên, và rồi nhân vectơ x này với một ma
trận không suy biến (tức có định thức khác 0) sẽ được chuỗi mật mã y = Ux. Việc giải mã
được thực hiện bằng cách nhân y với ma trận nghịch đảo U-1 của U, x = U-1y.
Để đảm bảo các phép toán được thực hiện trên một trường, các tính toán sẽ được tính trong
modulo của một số nguyên tố. Chẳng hạn lấy bảng chữ cái ∑ gồm 37 kí tự như sau và được
đánh số lần lượt từ 0 đến 36: 10 chữ số từ 0 đến 9, khoảng trắng, và 26 kí tự chữ cái.
Với bảng chữ cái này, nếu chọn d = 2 và ma trận làm khoá là:

Người soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM

98


Lý thuyết Thông tin
3

13

k=U= 

 22 15
Thông báo m = FRIEND được biểu diễn như là
m = FR | IE | ND = 15, 27 | 18, 14 | 23, 13
Thì
 3 13 15 18 23  26 14 16 

 22 15 ×  27 14 13  = 32 14 35

 
 


Vậy chuỗi mật mã là
c = 26, 32 | 14, 14 | 16, 35 = Q, W | E, E | G, Z = QWEEGZ

14.3 Bẻ gãy (breaking) một hệ thống mật mã
Bẻ gãy một hệ thống mật mã có nghĩa là gì? Những chuyên gia mật mã hay những kẻ
tấn công thường được giả thiết biết đầy đủ thông tin về hàm mã hoá e và hàm giải mã d.
Thêm vào đó, họ cũng có thể nhiều thông tin hỗ trợ như các thống kê về ngôn ngữ, kiến
thức về ngữ cảnh, vân vân.
Họ sẽ chắn chắn có một chuỗi mật mã nào đó, và tất cả những gì mà họ thiếu là khoá k
từ đó học có thể sử dụng d để giải mã c một cách chính xác. Điều này có thể được biểu diễn
thành hình ảnh như bên dưới.
Bộ phát sinh khoá k
k
m

Bộ mã hoá e

k
c = e(m, k)

Bộ giải mã d

m


Những kẻ
tấn công
Hình 14.1
Có ba khả năng tấn công cái mà chúng ta dự đoán đối phương tấn công trên hệ thống
chúng ta:
(1) Tấn công chỉ dựa trên chuỗi mật mã (crytogram-only attack): Đây là trường hợp đã
được mô tả ở trên trong đó đối phương chỉ biết một vài mẫu chuỗi mật mã c.
(2) Tấn công dựa trên văn bản đã biết (known-plaintext attack): Trường hợp này thực tế
hơn trường hợp (1). Trong trường hợp này những người tấn công được giả thiết là đã
biết một độ dài đáng kể của văn bản thông báo và chuỗi mật mã tương ứng, và từ đó
cố gắng tìm ra khoá.
Đây là một sự tấn công dữ dội khó chống đỡ hơn nhiều nhưng ngày nay được xem như là
một chuẩn an toàn tối thiểu phải đạt được. Thật vậy vào thời điểm hiện tại, tiêu chuẩn thích
hợp nhất để đánh giá một hệ thống bảo mật là rằng khả năng của nó để chống đỡ sự tấn
công thậm chí còn mạnh hơn như sau
(3) Tấn công dựa trên văn bản được chọn (chosen-plaintext attack): Trong trường hợp
này, những người tấn công có thể đã có được một số lượng tuỳ ý của các cặp thông
báo và chuỗi mật mã tương ứng (m, c).
Không khó để thấy rằng không có hệ thống (hay phương pháp) mật mã nào đã mô tả ở
trên có thể chống đỡ một cuộc tấn công dựa trên văn bản được chọn.
Người soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM

99


Lý thuyết Thông tin
Trường hợp liên quan đến khả năng bị tấn công của nó đối với sự tấn công dựa trên
văn bản đã biết là phức tạp hơn. Chẳng hạn, xét hệ thống đơn giản nhất – hệ thống dùng
phương pháp thay thế đơn giản – sao cho khoá k là một hoán vị của 26 chữ cái trong đó A
→ P, B → F, vân vân. Bây giờ nếu thông báo m được gởi là “silly message” bao gồm chữ A

được lặp lại n lần, thì trong chuỗi mật mã c tương ứng, chữ P sẽ được lặp lại n lần. Không
thành vấn đề n lớn bao nhiêu, cặp thông báo - chuỗi mật mã cụ thể này sẽ không sinh ra
khoá k. Tuy nhiên nó không khó để tin rằng, trung bình, nếu đã cho một chiều dài vừa đủ
của thông báo và chuỗi mật mã, bất kỳ hệ thống hay phương pháp mật mã ở trên đều có thể
bị bẻ gãy (crack). Ở đây chúng ta xem một ví dụ đơn giản về cách bẻ gãy.
Ví dụ 14.1
Giả sử một hệ thống mật mã được biết là dựa trên phương pháp Caesar với bảng chữ
cái gồm 27 kí tự được đánh số như sau
A = 0, B = 1, …, Z = 25, khoảng trắng = 26
và phép cộng thực hiện theo mod 27. Chúng ta chộp được chuỗi mật mã c sau
HWXGOQCCZOXGOXBORCST
Chúng ta đề nghị cách tấn công sau để tìm khoá chưa biết k0. Chọn các khoá dự tuyển cho k0
một cách ngẫu nhiên và đổi ngược chuỗi mật mã, theo từng kí tự, cho đến khi nào thông báo
có ý nghĩa.
Vì vậy, nếu đầu tiên chúng ta chọn k0 = E, chúng ta sẽ đổi ngược c và nhận được
DSTC …
tại ngữ cảnh này chúng ta thấy rằng E không phải là khoá k0. Lại chọn k0 = Z, cái này sẽ đổi
ngược c thành
JYZ …
cái này bác bỏ Z.
Sự lựa chọn kế tiếp (? theo linh cảm) của chúng ta là k0 = P và nhanh chóng thấy rằng
chuỗi mật mã đã được biến đổi thành chuỗi văn bản có nghĩa
THIS BOOK IS IN CODE
Tại ngữ cảnh này chúng ta không đảm bảo rằng không có cặp thông báo-khoá mà sẽ gởi ra
cùng chuỗi mật mã. Tuy nhiên thủ tục kiểm tra của những khoá khác cũng tương tự như
vậy.

14.4 Kết hợp các phương pháp mật mã hoá
Một cách tự nhiên để tăng tính bảo mật là kết hợp nhiều phương pháp mật mã hoá với
nhau. Hai cách như vậy, cái mà được Shannon đề nghị từ năm 1949, vẫn tạo nên cơ sở của

nhiều hệ thống mật mã thực tế. Đó là
(1) Cách dùng tổng trọng số: Nếu S1, S2, …, Sn là các hệ thống (hay phương pháp) mật mã
hoá có cùng không gian thông báo và 0 < pi < 1 và

n

∑ pi = 1

thì tổng của chúng

i =1
n

∑ pi S i là hệ thống mật mã dùng Si với xác suất pi.

i =1

(2)

Cách dùng tích: Áp dụng các hệ thống (hay phương pháp) nối tiếp nhau, đầu ra của hệ
thống này là đầu vào của hệ thống kế tiếp. Dĩ nhiên tập hợp đầu ra của hệ thống đi
trước phải là tập con của tập hợp đầu vào của hệ thống đi sau kế tiếp.

Người soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM

100




×