Tải bản đầy đủ

Lý thuyết mã, Mã hóa, bảo mật

MÃ HÓA & BẢO MẬT

Trang 1/111


Lời nói đầu ............................................................................................................................. 4
Chương 1: Hệ thống chung về mã .......................................................................................... 5
1. Lịch sử, một số hệ thống mã hoá kinh điển ................................................................... 5
Mã chuyển dịch (Shift Cipher) ....................................................................................... 6
Hệ mã tuyến tính (Affine Cipher) ................................................................................. 7
Hệ mã Vigenere ............................................................................................................. 9
Hệ mã Hill .................................................................................................................... 10
2. Độ mật của mã ............................................................................................................. 11
Phá khoá hệ mã tuyến tính ........................................................................................... 12
Độ mật hoàn thiện ........................................................................................................ 13
Khái niệm Entropy ....................................................................................................... 15
Khoá giả (Spurious key) và Khoảng cách duy nhất (Unicity distance) ....................... 19
Tích các hệ mã ............................................................................................................. 20
3. Hình thức hoá ............................................................................................................... 22
Các khái niệm mở đầu.................................................................................................. 22
Định nghĩa mã .............................................................................................................. 22

Mã prefix, suffix, biprefix ............................................................................................ 24
Mã và vị nhóm con tự do.............................................................................................. 25
Chuỗi hình thức (formal series) ................................................................................... 29
Chương 2: Một số lớp mã đặc biệt ....................................................................................... 31
1. Định lý cơ bản về mã ................................................................................................... 31
2. Mã prefix ...................................................................................................................... 34
Mã prefix ...................................................................................................................... 35
Otomat của mã prefix ................................................................................................... 39
Mã prefix cực đại ......................................................................................................... 44
Các phép toán trên mã Prefix ....................................................................................... 48
Semaphore code ........................................................................................................... 52
3. Độ trễ giải mã hữu hạn ................................................................................................. 55
Định nghĩa.................................................................................................................... 55
Thuật toán kiểm tra độ trễ hữu hạn .............................................................................. 61
4. Một số lớp mã khác: Mã biprefix, Suffix ..................................................................... 63
Parses ........................................................................................................................... 63
Mã biprefix cực đại ...................................................................................................... 65
Bậc của mã biprefix...................................................................................................... 67
Chương 3: Một số hệ mã ứng dụng ...................................................................................... 71
1. Hệ thống DES............................................................................................................... 71
Giới thiệu ..................................................................................................................... 71
Mô tả ............................................................................................................................ 71
Các nguyên tắc lựa chọn khối Si .................................................................................. 74
Các chế độ hoạt động và áp dụng................................................................................. 75
Phân tích mã vi phân (Differential cryptoanalysis) ...................................................... 76
2. Hệ thống mã khoá công khai, Hệ mã RSA. ................................................................. 81
Giới thiệu hệ mã khoá công khai (Public key system) ................................................. 81
Giới thiệu hệ mã RSA .................................................................................................. 81
Mô tả RSA.................................................................................................................... 83
Cài đặt RSA .................................................................................................................. 83
áp dụng RSA ................................................................................................................ 87
Chương 4: Zigzag code ........................................................................................................ 91
1. Giới thiệu ..................................................................................................................... 91
2. Khái niệm mở đầu ........................................................................................................ 92
3. Phép Z-hợp thành và phép Z-phân tích ........................................................................ 92
Trang 2/111


4. §ång cÊu m· cña Z CODE........................................................................................... 95
5. §Æc tr­ng cña Z-m· ................................................................................................... 100
6. §ång cÊu b¶o toµn tÝnh chÊt Z-m· ............................................................................. 106
Tµi liÖu tham kh¶o.............................................................................................................. 109
ChØ môc .............................................................................................................................. 110

Trang 3/111


Lời nói đầu
Do có vai trò quan trọng trong bảo mật thông tin, các hệ mã hoá đã được sử dụng từ rất
lâu. Có thể coi bản thân chữ viết của con người cũng là một hình thức mã. Một trong những
hệ mã kinh điển gắn với tên tuổi nhà quân sự thiên tài Julius Cesar, đã được áp dụng để trao
đổi tin tức quân sự từ thời La mã. Trong lịch sử đã có rất nhiều hệ mã được áp dụng từ các hệ
mã cổ điển như hệ mã tuyến tính đến các hệ mã khoá công khai. Tuy nhiên trong một thời
gian dài người ta chưa hình thức hoá toán học, để từ đó mô hình hoá và nghiên cứu về mặt lý
thuyết cũng như ứng dụng. Có thể nói rằng lý thuyết mã có liên hệ chặt chẽ với lý thuyết
thông tin do Shanon đưa ra vào những năm 50. Trong bốn mươi năm qua, lý thuyết mã là một
thành phần quan trọng trong lý thuyết thông tin và dành được nhiều sự quan tâm nghiên cứu.
Kể từ khi ra đời, lý thuyết mã phát triển theo một số hướng, trong đó có lý thuyết độ bất
định (entropy) dựa trên lý thuyết xác suất, lý thuyết mã sửa lỗi (error-correcting code), lý
thuyết mã độ dài thay đổi (code of variable length). Có nhiều cách khác nhau để tiếp cận lý
thuyết mã, như phương pháp tổ hợp, phương pháp đại số. Do mục đích và cách giải quyết các
vấn đề, có thể sử dụng nhiều công cụ khác nhau để tiếp cận nghiên cứu, lý thuyết mã có quan
hệ chặt chẽ đến lý thuyết tổ hợp từ, lý thuyết otomat, ngôn ngữ hình thức và lý thuyết nhóm
đại số.

Trang 4/111


Chương 1: Hệ thống chung về mã
Trong chương đầu tiên, ta điểm lại một số hệ mã cổ điển. Từ các hệ mã ứng dụng, ta xem
xét khái niệm về độ mật của hệ mã, dựa trên khái niệm entropy. Phần tiếp theo ta hình thức
hoá về mặt toán học các định nghĩa và khái niệm làm cơ sở trong lý thuyết mã. Tư liệu về các
hệ mã cổ điển có thể tham khảo trong nhiều tài liệu như Beker và Piper [BP82]. ý tưởng về
độ mật hoàn thiện và kỹ thuật dùng entropy trong nghiên cứu hệ mã được Shannon đề xuất
trong [Sh49]. Việc gắn lý thuyết mã với nhóm đại số được Schỹzenberger nêu ra vào năm
1955.
1. Lịch sử, một số hệ thống mã hoá kinh điển
Từ rất lâu, thông tin đã có vai trò quan trọng trong xã hội. Khi có thông tin tất nhiên sẽ có
nhu cầu trao đổi thông tin, truyền tin. Và một cách tự nhiên cần có những cách trao đổi thông
tin an toàn. Ngay từ thời cổ đại, mã hoá đã được Juilus Caesar áp dụng để trao đổi tin tức
quân sự. Một cách ngắn gọn, mục đích của mã hoá là cho phép hai bên A và B có thể giao
tiếp an toàn qua các kênh thông tin không được bảo mật sao cho người thứ ba O không biết
được thông tin gì thực sự được trao đổi. Thông tin ban đầu cần trao đổi gọi là từ hiện (plain
text, trong một số tài liệu gọi là bản hiện). Để trao đổi, A thực hiện mã hoá từ hiện bằng khoá
mã định trước thu được từ mã và gửi từ mã (cipher text, bản mã) cho B qua kênh thông tin. O
có thể thu được từ mã gửi đi nhưng không biết chuỗi từ hiện A muốn gửi. Còn B, với khoá
giải mã, có thể giải mã từ mã nhận được và thu được từ hiện ban đầu.
Một cách hình thức, có thể định nghĩa hệ mã như sau:
Định nghĩa 1.1
kiện sau:

Hệ mã (Cryptosystem) là bộ (P, C, K, E, D) thoả mãn các điều

(1) P là tập hữu hạn các từ hiện có thể có.
(2) C là tập hữư hạn các từ mã có thể có.
(3) K là không gian khoá mã, là tập hữu hạn các khoá mã có thể có.
(4) Với mỗi khoá K K , có một quy tắc mã eK E và quy tắc giải mã dK D. Các hàm
eK : P C và dK : C P thỏa dK(eK(x)) = x với mọi từ hiện x P.
Ta để ý tính chất cơ bản (4), nó thể hiện rằng mỗi từ hiện x được mã hoá bằng khoá eK thu
được từ mã y, và đến lượt từ mã y qua hàm dK giải mã được từ hiện x ban đầu.
Với một hệ mã cụ thể A và B thực hiện giao thức như sau. Đầu tiên họ chọn ngẫu nhiên khoá
mã K K , sự lựa chọn này chỉ có A và B được biết còn O không quan sát được. Bây giờ giả
sử cần trao đổi thông điệp
Trang 5/111


với các từ hiện xi P (1 i n).

x = x1 x2 .. xn ,

Mỗi từ hiện xi được mã hoá bằng quy tắc eK được xác định bởi khoá mã K định trước. Từ đó
A tính được yi = eK (xi ), 1 i n, và thu được thông điệp mã hoá
y= y1 y2 ..yn
được gửi đến B qua kênh thông tin. Khi nhận được từ mã y, B dùng hàm dK giải mã, thu được
thông điệp x ban đầu.
Rõ ràng các hàm mã hoá phải là đơn ánh vì nếu không thì không thể giải mã đúng được. Ví
dụ nếu tồn tại
với x1 x2,

y1 = eK(x1) = eK(x2) ,

thì khi đó B không thể nào xác định được từ mã y1 cần được giải mã là x1 hay x2. Để ý rằng
nếu P = C thì mọi hàm mã hoá đều là một hoán vị.
Người thứ ba
O

y

X
Người gửi A

X

Encoder

K

Decoder

Người nhận B

Kênh an toàn

Key space

Hình 1.1: Sơ đồ áp dụng hệ mã
Ta bắt đầu với việc xem xét một số hệ mã kinh điển.

Mã chuyển dịch (Shift Cipher)
Hệ mã chuyển dịch là hệ mã xuất hiện sớm nhất, đã được Juilus Caesar áp dụng từ thời trung
cổ. Sơ đồ hệ mã chuyển dịch được mô tả như sau:
Cho P = C = K = Z26 . Với 0 K 25, xác định
eK(x) = x + K mod 26 ,



dK(y) = y K mod 26
Ta tương ứng mỗi chữ cái với một số nguyên: A 0, B 1, .. Hệ mã chuyển dịch thực hiện
tính toán trên tập Z26 . Ta có bảng ánh xạ sau
Trang 6/111


A

B

C

D

E

F

G

H

I

J

K

L

M N

O

P

Q

0

1

2

3

4

5

6

7

8

9

10 11 12 13 14 15 16

R S

T

U

V

W X

Y

Z

17 18 19 20 21 22 23 24 25
Bảng 1.1 ánh xạ ký tự

Ví dụ 1.1

Giả sử ta sử dụng khoá K = 11 và chuỗi từ hiện là khoatoan.

Đầu tiên ta biến đổi thành chuỗi các số nguyên dùng bảng ánh xạ ở trên, được
10 , 7 , 14 , 0 , 19 , 14 , 0 , 13
Tiếp theo ta cộng với 11 và giản ước với mod 26 được
21 , 18 , 25 , 11 , 4 , 25 , 11 , 24
Cuối cùng ta chuyển đổi thành ký tự, thu được chuỗi từ mã:
VSZLEZLY
Để giải mã, đầu tiên B chuyển đổi chuỗi từ mã sang chuỗi số tự nhiên, sau đó trừ mỗi số đi 11
(khoá K) và giản ước mod 26 cuối cùng chuyển đổi ngược lại thành ký tự, B thu được dòng từ
hiện ban đầu.
Để có thể áp dụng trong thực tế, hệ mã hoá cần thoả mãn một số tính chất, sau đây là hai
trong số đó:
(1) Các hàm mã hoá eK và giải mã dK phải là hàm dễ dàng tính toán .
(2) Người thứ ba nếu biết từ mã y thì phải không biết được khoá mã K đã dùng hay từ hiện
x ban đầu.

Hệ mã tuyến tính (Affine Cipher)
Trong hệ mã tuyến tính, hàm mã hoá là hàm tuyến tính (affine) có dạng:
e(x) = ax + b mod 26
Để quá trình giải mã là duy nhất, ta cần có hàm mã hoá là đơn ánh tức là với mọi y , phương
trình
ax + b y mod 26
có nghiệm duy nhất. Dễ thấy rằng có nghiệm duy nhất khi và chỉ khi a và 26 là nguyên tố
cùng nhau, nghĩa là gcd(a,26) = 1, với gcd là hàm UCLN.
Một cách tổng quát ta có:

Trang 7/111


Định lý 1.2
Đồng dư ax b (mod n) có nghiệm duy nhất x Zn với mọi b Zn khi
và chỉ khi gcd(a,n) = 1.
Vì 26 = 2 13, ta có các giá trị có thể của a là tập {1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25}.
Với các giá trị của b bất kỳ trong Z26 ta có hệ mã tuyến tính có thể có 2612 = 312 khoá khác
nhau.
Theo lý thuyết số, số các số nguyên Zm nguyên tố cùng nhau với m thường được ký hiệu là
(m) (còn gọi là hàm Euler). Nếu m có phân tích ra thừa số
n

e

m pi i
i 1

n

thì giá trị hàm (m) là (m) ( piei piei 1 )
i 1

Từ đó ta có số lượng khoá có thể có, nghĩa là số cặp (a,b), gcd(a,m)=1, 0a,bm1, của hệ
mã tuyến tính trong Zm là m(m).
Ta chuyển sang thao tác giải mã trong mod 26. Giả sử gcd(a,26) = 1. Để giải mã ta cần giải
phương trình y ax + b (mod 26). Với khái niệm nghịch đảo (multiplicative inverse) ta có thể
tìm được nghiệm phương trình.
Định nghĩa 1.3
(mod m).

Giả sử a Zm , nghịch đảo của a là phần tử a1 Zm thoả aa1a1a 1

Ta có cần và đủ để tồn tại phần tử nghịch đảo a1 là gcd(a, m) = 1, và khi đó nó là duy nhất.
Ngoài ra ta có nếu b=a1 thì cũng có a=b1. Nếu p là nguyên tố thì mọi phần tử khác 0 của Zp
đều có phần tử đảo. Từ hệ thức
ax (y b) mod 26
nhân hai vế với a1 , và để ý a1a 1 mod 26, ta có hàm giải mã là
dK = a1(y b ) (mod 26)
Hệ mã tuyến tính được mô tả như sau
Cho P = C = Z26 , và cho K = {(a,b) Z26 Z26 : gcd(a,16) = 1}. Xác định:
eK(x) = ax + b mod 26,



dK(y) = a1(y b) mod 26, với x, y thuộc Z26 .
Ví dụ 1.2

Giả sử K = (7,3), ta có 71 mod 26 = 15, hàm mã hoá là:

eK(x) = 7x + 3
và hàm giải mã tương ứng là:
dK(y) = 15(y 3) = 15y 19 mod 26
Trang 8/111


Ta có thể kiểm tra lại rằng dK(eK(x)) = x với mọi x Z26 . Thực vậy:
dK(eK(x)) = dK(7x + 3)
= 15(7x + 3) 19 = x (mod 26).

Hệ mã Vigenere
Trong hệ mã chuyển dịch cũng như mã thay thế, khi đã chọn khoá K thì mỗi ký tự ánh xạ đến
chỉ một ký tự khác. Do đó người ta gọi các hệ mã đó là đơn ký tự (monoalphabetic). Ngoài
các hệ mã đơn ký tự, còn có các hệ mã đa ký tự (polyalphabetic) , ta sẽ xem xét một hệ mã cổ
điển là hệ Vigenere, lấy theo tên của Blaise de Vigenere. Vẫn áp dụng các ánh xạ như cũ A
0,.. ta có thể gắn mỗi khoá K với chuỗi ký tự độ dài m gọi là từ khoá. Hệ mã Vigenere mã
hoá theo từng khối m ký tự hiện.
Ví dụ 1.3
Giả sử m = 6 và từ khoá là CIPHER, tương đương với biểu diễn chuỗi số
nguyên K=(2, 8, 15, 7, 4, 17). Giả sử cần mã hoá chuỗi hiện
khoatoanbkhn
Đầu tiên ta biến đổi thành chuỗi các số nguyên tương ứng, nhóm từng bộ 6 số lại được
(10 , 7 , 14 , 0 , 19 , 14) , (0 , 13 , 1 , 10 , 7 , 13),
rồi cộng với từ khoá theo mod 26 như sau:
(12 , 15 , 3 , 7 , 23 , 5) , (12 , 15 , 3 , 7 , 23 , 5)
Cuối cùng ta biến đổi chuỗi các số nguyên thành ký tự, thu được chuỗi từ mã
MPDHXFCVQRLE
Để giải mã, ta dùng cùng từ khoá, nhưng ta thực hiện phép trừ thay vì phép cộng.
Ta có thể thấy rằng số từ khoá với độ dài m có thể có 26m khả năng khác nhau, như thế với
giá trị m không lớn, việc thử và sai toàn bộ các khả năng cũng đòi hỏi nhiều thời gian. Ví dụ
nếu ta lấy m = 6 thì không gian từ khoá vượt quá 28 x 107 , con số này cũng đủ lớn để không
thể thực hiện bằng tính toán thủ công.
Trong hệ mã Vigenere với từ khoá độ dài m, một ký tự có thể được ánh xạ với 1 trong số m
ký tự có thể (giả sử rằng từ khoá có m ký tự khác nhau). Hệ mã có tính chất đó gọi là hệ mã
đa ký tự (polyalphabetic). Nói chung phá khoá hệ mã đa ký tự khó khăn hơn trường hợp hệ
mã đơn ký tự.

Trang 9/111


Hệ mã Hill
Ta xem xét hệ mã đa ký tự khác, đó là hệ mã Hill. Hệ mã này được Lester S. Hill đưa ra năm
1929. Giả sử m là số nguyên dương, đặt P = C = (Z26)m . Tư tưởng của Hill là sử dụng m tổ
hợp tuyến tính của m ký tự trong một phần tử từ hiện, từ đó sinh ra m ký tự trong một phần tử
từ mã.
Ví dụ 1.4
Giả sử m = 2 , ta có thể viết phần tử từ hiện dưới dạng x = (x1, x2) và phần tử từ
mã y=(y1, y2). Trong đó y1 và y2 là tổ hợp tuyến tính của x1 và x2 , ví dụ có thể lấy:
y1 = 11 x1 + 3 x2
y2 = 8 x 1 + 7 x 2
Ta có thể viết dưới dạng ma trận:
11 8

3 7

(y1 , y2) = (x1 , x2)

Tổng quát ta có thể chọn ma trận Km,m như là khoá, K = (ki,j). Với x = (x1 , .. , xm) P và K
K , ta tính được y = eK(x) = (y1 , .. , ym) như sau:
k11k12 ..k1m


(y1 , .. , ym) = (x1 , .. , xm) .........

k k ..k
m1 m 2 mm

hay viết ngắn gọn y = xK
Ta nói rằng từ mã thu được từ từ hiện bằng biến đổi tuyến tính. Ta còn phải mô tả quá trình
giải mã tức là cách tính x từ y. Dễ thấy rằng quá trình giải mã cần đến ma trận đảo của K. Từ
công thức y = xK, nhân hai vế với ma trận nghịch đảo ta được
y K1 = (xK)K1 = x (K K1) = x I = x
Do đó từ hiện x nhận được từ công thức
x = yK1
Ví dụ 1.4(tiếp)

Với ma trận khoá mã như trên ta có ma trận nghịch đảo là

7 18

K 1
23
11



Giả sử ta cần mã hoá từ july. Ta chia thành 2 khối: ju = (9,20) và ly = (11,24). Nhân với ma
trận khoá
11 8
=(3,4) ;
3 7

(9,20)

11 8
=(11,22)
3 7

và (11,24)

Từ đó ta có từ mã là DELW. Để giải mã, ta dùng ma trận nghịch đảo.

Trang 10/111


7 18
=(9,20) ;
23 11

(3,4)

7 18
=(11,24)
23 11

và (11,22)

2. Độ mật của mã
Trong mục trước ta đã xem xét một số hệ mã hoá cổ điển, hiện nay chúng không còn được
áp dụng do độ bảo mật không cao. Tuy nhiên ta chưa có cơ sở nào để nói rằng hệ mã này bảo
mật hơn hệ mã khác. Trong mục này chúng ta xem xét một số khái niệm liên quan đến độ
mật.
Đầu tiên ta phân loại một số phương pháp tấn công hệ mã (phá mã). Nói chung, ta giả sử
rằng người thứ bakẻ phá khoá biết thông tin về hệ mã được sử dụng. Điều đó thường được
biết dưới tên nguyên tắc Kerckhoff. Tất nhiên nếu kẻ phá khoá không biết về hệ mã được áp
dụng thì việc phá mã sẽ khó khăn hơn.
Các dạng tấn công có thể chia thành các hình thức:
Biết từ mã (Ciphertext-Only): trong đó kẻ phá khoá chỉ nắm được chuỗi từ mã.
Biết từ hiện (Known Plaintext): trong đó kẻ phá khoá nắm được chuỗi từ hiện x và chuỗi từ
mã y tương ứng.
Biết từ hiện chọn trước (Choosen plaintext): trong đó kẻ phá khoá có thể truy cập cơ chế mã
trong một khoảng thời gian, do đó có thể nhập chuỗi từ hiện nào đó mà anh ta muốn và thu
được chuỗi từ mã tương ứng.
Biết từ mã chọn trước (Choosen ciphertext): kẻ phá khoá có thể truy cập cơ chế giải mã trong
một khoảng thời gian, do đó có thể nhập chuỗi từ mã nào đó và thu được chuỗi từ hiện tương
ứng.
Trong tất cả các hình thức trên, mục đích của việc phá mã là xác định khoá được dùng.
Trước tiên ta xem xét kiểu tấn công biết từ mã. Ta cũng giả sử rằng chuỗi từ hiện là tiếng
Anh không có khoảng trống (như thế làm cho việc phá mã khó khăn hơn).
Rất nhiều kỹ thuật phá mã sử dụng các đặc điểm của ngôn ngữ (tiếng Anh), nhiều tài liệu đã
đưa ra tần suất tương đối của 26 chữ cái qua thống kê các bài báo, tạp chí, sách. Bảng dưới
đây cho số liệu do Beker và Piper đưa ra.

Ký tự Xác
suất
A
B
C

Ký tự Xác
suất

0.082 F
0.15 G
0.028 H

Ký tự Xác
suất

0.022 K
0.020 L
0.061 M

Ký tự Xác
suất

0.008 P
0.040 Q
0.024 R

Ký tự Xác
suất

0.019 U
0.001 V
0.060 W

0.028
0.010
0.023

Trang 11/111


D

0.043 I

0.070 N

0.067 S

0.063 X

0.001

E

0.127 J

0.002 O

0.075 T

0.091 Y
Z

0.020
0.001

Bảng 2.1: Xác suất xuất hiện ký tự.
Dựa trên thống kê trên, Beker và Piper chia 26 ký tự thành 5 nhóm:
1. E có khả năng 0.120
2. T, A, O, I, N, S, H, R mỗi ký tự có khả năng trong khoảng 0.06 và 0.09
3. D, L mỗi ký tự có khả năng khoảng 0.04
4. C, U, M, W, F, G, Y, P, B mỗi ký tự có khả năng trong khoảng 0.015 và 0.023
5. V, K, J, X, Q, Z có khả năng nhỏ hơn 0.01
Ngoài ra ta còn tính đến tổ hợp chuỗi 2 hoặc 3 ký tự liền nhau gọi là diagram và triagram.
theo đó các diagram hay gặp nhất là
TH, HE, IN, ER, AN, RE, ED, ON, ES, ST, EN, AT, TO, NT, HA, ND, OU, EA, NG,
AS, OR, TI, IS, ET, IT, AR, TE, SE, HI, OF.
và một số triagram: THE, AND, HER, ERE, THA, WAS, FOR,..
Ta giới thiệu một ví dụ dùng số liệu thống kê để phá mã trong mục dưới đây.

Phá khoá hệ mã tuyến tính
Giả sử O thu được chuỗi từ mã sau:
FMXVEDKAPHFERBNDKRXRSREFMORUDSDKDVSHVUFEDKAPRKDLYEV
LRHHRH
Tần suất xuất hiện các ký tự được thể hiện trong bảng sau:
Ký tự

Tần suất

Ký tự

Tần suất

Ký tự

Tần suất

Ký tự

Tần suất

A

2

H

5

O

1

V

4

B

1

K

5

P

3

X

2

D

6

L

2

R

8

Y

1

E

5

M

2

S

3

F

4

N

1

U

2

Bảng 2.2.
Ta thấy các ký tự xuất hiện nhiều nhất là: R(8 lần), D(6 lần), E, H, K (mỗi ký tự 5 lần), F, S,
V (mỗi ký tự 4 lần). ta có thể dự đoán R là ký tự mã của e và D là mã của t vì e và t là hai ký
Trang 12/111


tự nói chung xuất hiện nhiều nhất. Biểu diễn dưới dạng số ta có eK(4)=17 và eK(19)=3. Để ý
rằng eK(x) = ax + b ta được hệ phương trình tuyến tính với a và b là ẩn:
4a + b = 17
19 a + b =3
Giải hệ ta được nghiệm a = 6 và b = 19 (trong Z26 ), nhưng gcd(a=6, 26) = 2 1 do đó đây
không phải là khoá. Thử tiếp giả sử ký tự mã của e vẫn là R, còn ký tự mã của t là E, cũng
thực hiện như trên ta có nghiệm của hệ là a=13 do đó cũng không thể là khoá. Tiếp tục khả
năng ký tự mã của t là H, ta được a=8 cũng không thể là khoá. Tiếp theo giả sử ký tự mã của t
là K, giải hệ phương trình ta thu được a=3 và b=5. Vì gcd(a=3, 26) = 1 nên đây có thể là
khoá. Dùng khoá này giải mã, ta có thể giả sử nếu thu được chuỗi từ hiện có nghĩa thì đây
chính là khoá cần tìm. Với a=3, b=5 ta giải mã được chuỗi từ hiện là:
algorithmsarequitegeneraldefinitionsofarithmeticprocesses
Ta kết luận là đã tìm được khoá mã.

Độ mật hoàn thiện
Như trên ta thấy việc phá mã dễ hay khó tuỳ thuộc vào độ an toàn hệ mã, cho đến đây ta
chưa xét công cụ nào để cho phép so sánh độ an toàn của các hệ mã. Năm 1949, Claude
Shanon công bố bài báo Communication Theory of Secrecy Systems. Bài báo này có ảnh
hưởng lớn đến việc nghiên cứu về các hệ mã. Ta sẽ xem xét một số tư tưởng về entropy (độ
bất định) do Shanon đưa ra và ứng dụng entropy trong ngiên cứu mã.
Trước tiên ta đưa ra khái niệm độ mật hoàn thiện. Nói chung có thể phân biệt 2 cách tiếp
cận về độ mật của hệ mã:
độ mật tính toán và
độ mật vô điều kiện.
Độ mật tính toán: là thước đo chú trọng đến năng lực tính toán cần thiết để phá mã. Ta có thể
định nghĩa hệ mã là bảo mật tính toán nếu thuật toán tốt nhất để phá nó đòi hỏi ít nhất N phép
tính với N là một số rất lớn. Trong thực hành, người ta thường coi hệ mã là bảo mật tính toán
nếu thuật toán tốt nhất hiện có để phá hệ mã đòi hỏi một thời gian tính toán lớn đến mức
không thực tế. Cách tiếp cận khác là đưa ra tính hiển nhiên về độ mật tính toán bằng cách
giảm độ mật của hệ mã xuống tương đương với một bài toán nào đó đã biết về độ phức tạp.
Độ mật vô điều kiện: là thước đo chú trọng đến độ mật của hệ thống trong đó không có giới
hạn về khối lượng tính toán mà người thứ 3 có thể thực hiện. Hệ mã được xác định là bảo mật
vô điều kiện nếu nó không bị phá ngay cả khi dùng đến năng lực tính toán rất lớn (vô hạn).
Khi xem xét độ bảo mật của hệ thống, ta còn phải chú ý đến cách thức tấn công.
Trang 13/111


Ta sẽ xây dựng lý thuyết hệ mã bảo mật vô điều kiện đối lại hình thức tấn công Biết từ
mã. Rõ ràng công cụ độ phức tạp tính toán không thích hợp để nghiên cứu độ mật vô điều
kiện được bởi vì ta cho phép thời gian tính toán là vô hạn. Công cụ phù hợp để nghiên cứu là
lý thuyết xác suất.
Ta giả định rằng mỗi khoá cụ thể chỉ sử dụng cho một lần mã. Giả sử rằng tồn tại phân bố xác
suất trên không gian từ hiện P, Ta biểu thị xác suất tiên nghiệm để từ hiện x xuất hiện bằng
pP(x). Ta cũng giả sử rằng khoá K được chọn theo phân bố xác suất cố định nào đó. Ký hiệu
xác suất để khoá K được chọn là pK(K). Để ý rằng khoá K được chọn trước khi A biết từ hiện
nào sẽ được mã. Do đó ta có thể giả định rằng việc chọn khoá K và từ hiện x là hai sự kiện
độc lập.
Hai phân bố xác suất trên P và K sinh ra phân bố xác suất trên C . Thật vậy, ta có thể tính
được xác suất pC(y) là xác suất để y là từ mã được truyền. Với khoá K K , xác định tập các
từ mã có thể có khi khoá K được chọn
C(K) = { eK(x): x P }
Từ đó với mọi y C, ta có
pC( y)

p

K
{ K : yC ( K )}

( K ) p P (d K ( y ))

Ta cũng nhận thấy rằng với mọi y C và x P , có thể tính được xác suất có điều kiện
pC(y|x) (là xác suất để y là từ mã khi đã biết từ hiện x):
pC( y | x)

p

K
{ K : x dK ( y )}

(K )

Từ các yếu tố trên ta có thể tính xác suất có điều kiện pP(x|y) (là xác suất để x là từ hiện khi
đã có từ mã là y) bằng công thức Bayes

p

p P ( x)

K
{ K :x dK ( y )}

p P ( x | y)

p

K
{ K : yC ( K )}

(K )

( K ) p P (d K ( y ))

Ví dụ 2.1
Giả sử P = {a, b} với pP(a) = 1/4 pP(b)=3/4. Giả sử K = {K1, K2, K3 } với pK(K1)
= 1/2 ; pK(K2)=pK(K3) = 1/4. Giả sử C = {1, 2, 3, 4} và giả sử các hàm mã hoá là eK1(a) = 1 ;
eK1(b) = 2; eK2(a) = 2; eK2(b) = 3; eK3(a) = 3 ; eK3(b) = 4. Hệ mã có thể biểu diễn qua ma trận
mã hoá sau
K1
K2
K3

a
1
2
3

b
2
3
4

Bây giờ ta có thể tính được phân bố xác suất pC :
pC(1) = pK(K1)pP(a) = 1/2 1/4 =1/8, pC(2) = 3/8 + 1/16 = 7/16

Trang 14/111


pC(3) = 3/16 + 1/16 = 1/4 ,

pC(4) = 3/16 .

Từ đó có thể tính được phân phối có điều kiện trên từ hiện khi biết từ mã:
pP(a | 1) = 1

pP(b | 1) = 0

pP(a | 2) = 1/7

pP(b | 2) = 6/7

pP(a | 3) = 1/4

pP(b | 3) = 3/4

pP(a | 4) = 0

pP(b | 4) = 1.

Với các công cụ đã có, ta có thể định nghĩa khái niệm độ mật hoàn thiện. Một cách hình
thức, độ mật hoàn thiện có nghĩa là người thứ ba O không thu được được thông tin gì khi
quan sát từ mã. Bằng công cụ xác suất ta có thể định nghĩa như sau:
Định nghĩa 2.1
Hệ mã có độ mật hoàn thiện nếu pP(x|y) = pP(x) x P , y C. Tức là
xác suất hậu nghiệm để từ hiện là x khi đã biết từ mã là y đúng bằng xác suất tiên nghiệm để
từ hiện là x.
Bây giờ ta đề cập đến khái niệm độ mật hoàn thiện. Đầu tiên để ý rằng áp dụng định lý
Bayes, điều kiện pP(x|y) = pP(y) với mọi x P và y C tương đương với pC(y|x) = pC(x). Một
cách tổng quát ta có thể giả sử pC(y) > 0 với mọi y C (vì nếu pC(y)=0 với y nào đó có nghĩa
là y không được sử dụng và ta có thể loại bỏ nó khỏi tập C ). Cố định phần tử x P, với mọi
y C , ta có pC(y|x) = pC(x) > 0 . Do đó với mọi y C có ít nhất một khoá K sao cho eK(x) = y
. Từ đó | K | | C | . Trong một hệ mã bất kỳ ta phải có | C | | P | bởi vì hàm mã hoá là đơn
ánh. Trong trường hợp biên | K | = | C | = | P | ta có kết quả do Shannon đưa ra như sau.
Định lý 2.2
Cho hệ mã ( P , C , K , E , D ) có tính chất | K | = | C | = | P | . Khi đó hệ
mã đảm bảo độ mật hoàn thiện khi và chỉ khi mọi khoá mã được dùng với xác suất như nhau
và là 1/ | K | , và x P , y C có một khoá K duy nhất thoả eK(x) = y .
Khái niệm Entropy
Trong mục trước ta đã xét khái niệm độ mật hoàn thiện. Ta mới chỉ giới hạn trong trường
hợp mỗi khoá được áp dụng cho chỉ một lần mã hoá. Bây giờ ta xem xét điều gì xảy ra khi
nhiều từ hiện được mã hoá bởi cùng một khoá, và cách mà người phá mã có thể thực hiện tấn
công chỉ biết từ mã, khi có đủ thời gian.
Một công cụ hiệu quả để nghiên cứu vấn đề là dùng entropy. Entropy là một khái niệm cơ
sở trong lý thuyết thông tin, được Shannon đề xuất vào năm 1948. Entropy có thể hiểu như là
độ đo toán học của thông tin hay độ không chắc chắn, và nó được tính toán như là hàm của
phân bố xác suất.

Trang 15/111


Giả sử ta có biến ngẫu nhiên X có thể lấy hữu hạn giá trị khác nhau theo phân phối xác suất
p(X). Ta có thể thu được thông tin gì từ sự kiện theo phân phối p(X) ? một cách khác nếu như
sự kiện chưa xảy ra, độ bất định của hậu quả sẽ như thế nào ? Định lượng đó gọi là entropy
của X và ký hiệu bởi H(X).
Định nghĩa 2.3
Giả sử X là biến ngẫu nhiên có thể nhận hữu hạn giá trị với phân phối
xác suất p(X). Entropy của phân phối xác suất đó là giá trị:
n

H ( X ) p i log 2 pi
i 1

Nếu các giá trị có thể của X là xi , 1 i n ta có:
n

H ( X ) p ( X xi ) log 2 p ( X xi ) .
i 1

Chú ý: nếu pi = 0 thì log2 pi không xác định, do đó đôi khi entropy được định nghĩa như tổng
các xác suất khác 0. Tuy nhiên do lim xlog2x = 0 , không có vấn đề gì đặc biệt khi cho phép
pi = 0 với một vài giá trị i nào đó. Tuy nhiên ta quy ước rằng khi tính toán ta chỉ tính đến các
pi 0. Ngoài ra cơ số của logarit là tuỳ ý.
Để ý rằng nếu pi = 1/n i thì H(X) = log2n , H(X) 0 và H(X) = 0 khi và chỉ khi pi = 1 với i
nào đó và pj = 0 j i.
Ví dụ 2.1(tiếp)

Ta có thể tính entropy cho các cấu thành hệ mã:

H(P) = (1/4)log2(1/4) (3/4)log2(3/4) 0.81
tương tự ta có:

H(C) = 1,5

và H(K) 1,85;

Tính chất của Entropy
Ta nêu một số tính chất của entropy trong lý thuyết thông tin.
Định lý 2.4
Giả sử X là biến ngẫu nhiên với phân phối xác suất là p1, p2, .. pn, pi > 0,
1 i n. Khi đó H(X) log2n , dấu bằng xảy ra khi và chỉ khi pi = 1/n .
Định lý 2.5

Giả sử X và Y là hai sự kiện độc lập, khi đó:

H(X/Y) H(X + H(Y).
Định lý 2.6

H(X,Y) = H(Y) + H(X | Y)

Hệ quả 2.7

H(X | Y) H(X)

Trang 16/111


Quan hệ giữa entropy và mã Huffman
Ta xem xét entropy trong ngữ cảnh của mã của sự kiện ngẫu nhiên xảy ra theo một phân
bố xác suất xác định. Cho X là biến ngẫu nhiên có thể lấy hữu hạn giá trị, p(X) là phân bố
xác suất phụ thuộc.
Gọi sự ghi mã (encoding) là ánh xạ
: X {0, 1}*

trong đó {0, 1}* thể hiện tập tất cả các chuỗi hữu hạn các ký tự 0 và 1. Cho từ x1x2..xn , ta có
thể mở rộng ánh xạ bằng cách định nghĩa
(x1 .. xn) = (x1) .. (xn)

là phép nối các chuỗi ký tự. Theo đó ta có ánh xạ:
: X* { 0, 1}*

Giả sử từ x1x2 .. xn được sinh ra với xi xuất hiện theo luật phân phối trên X. Có nghĩa là xác
suất của chuỗi x1x2 .. xn được tính bằng p(x1) p(x2).. p(xn) .
Để có thể giải mã môt cách không nhập nhằng, ta cần có ánh xạ phải là đơn ánh.
Ví dụ 2.2

Giả sử X = {a, b, c, d} và xem xét các mã hoá sau

(a) = 1

(b) = 10

(c) = 100

(d) = 1000

g(a) = 0

g(b) = 10

g(c) = 110

g(d) = 111

h(a) = 1

h(b) = 01

h(c) = 10

h(d) = 11

Ta có thể thấy rằng ánh xạ và g là mã hoá đơn ánh còn h thì không. Bất cứ mã hoá nào dùng
hàm có thể giải mã được, bằng cách bắt đầu đọc từ cuối chuỗi ngược lên, khi gặp ký tự 1 là
dấu hiệu để biết rằng ta đã đọc được 1 ký tự.
Với hàm g ta có thể đọc từ đầu, khi nhận biết được một ký tự ta cắt chuỗi từ điểm đó và đọc
tiếp. Ví dụ có chuỗi hiện bacda, dùng hàm g ta được chuỗi mã 1001101110, khi giải mã ta
đọc từ đầu đến khi đọc được 10 nhận được b, cắt đi còn lại chuỗi 01101110 và đọc tiếp 0
được a, tiếp tục đọc đến 110 được c , 111 được d và 0 được a .
Để chứng tỏ h không là đơn ánh, ta lấy ví dụ chuỗi h(ac) = h(ba) = 010.
Trên quan điểm giải mã, ta mong muốn hàm kiểu g hơn bởi vì có thể giải mã tuần tự từ đầu
do đó không cần có bộ nhớ để lưu chuỗi từ mã như trong trường hợp hàm . Tính chất cho
phép giải mã tuần tự đơn giản như của hàm g được gọi là tính chất prefix-free (Hàm mã hoá g
là prefix-free nếu không có hai từ x, y nào trong X và chuỗi z trong {0,1}* sao cho g(x) =
g(y) z ).

Trang 17/111


Các xem xét trên chưa có liên hệ gì đến entropy. Không có gì ngạc nhiên, entropy có liên
quan đến hiệu quả của mã hoá. Ta áp dụng entropy để đo độ hiệu quả của hàm mã , nó là độ
dài trung bình có trọng số (ký hiệu l ()) của mã hoá của các phần tử trong X. Như thế ta có
định nghĩa sau:
l ( f ) p( x) f ( x)
xX

trong đó | y | biểu thị độ dài của chuỗi y .
Bài toán đặt ra là tìm hàm mã đơn ánh làm l () cực tiểu . Thuật toán kinh điển để giải
quyết vấn đề là thuật toán Huffman. Hơn nữa với các khái niệm về entropy, ta có hàm mã hoá
tìm được theo thuật toán Huffman là prefix-free và
H(X) l () < H(X) +1 .
nghĩa là entropy cho ta dự đoán về độ dài trung bình của mã hoá đơn ánh tối ưu.
Ta mô tả sơ lược thuật toán Huffman như sau. Thuật toán bắt đầu với việc xem xét phân
phối xác suất trên X, đặt mã của các phần tử là rỗng. Trong mỗi bước lặp, hai phần tử có xác
suất thấp nhất được hợp vào một phần tử có xác suất bằng tổng xác suất của hai phần tử hợp
thành. Phần tử có xác suất nhỏ hơn được gán giá trị 0, phần tử còn lại được gán giá trị 1. Các
bước lặp đến khi chỉ còn lại 1 phần tử, mã hoá của mỗi phần tử x được xây dựng bằng cách
lần dọc theo dãy các phần tử theo hướng ngược từ phần tử cuối cùng đến phần tử khởi tạo của
x.
Ví dụ 2.3
Giả sử X = {a, b, c, d, e} có p(a) = 0.05, p(b) = 0.1, p(c) = 0.12, p(d) = 0.13 ,
p(e) = 0.6 . Hoạt động của thuật toán Huffman được mô tả trong bảng sau
a

b

c

d

e

0.05

0.10

0.12

0.13

0.6

0

1
0.12

0.13

0.6

0

1

0.15

0.15

0.25

0

1
0.4

0.6

0

1
1.0

Bảng 2.3: Ví dụ xác định mã Huffman.
Từ đó có mã Huffman như sau: e = 1, d=011, c=010, b=001 và a=000.

Trang 18/111


Khoá giả (Spurious key) và Khoảng cách duy nhất (Unicity
distance)
Trong mục này ta áp dụng các kết quả về entropy vào hệ mã. Entropy có điều kiện H(K |
C) được gọi là khoá đa nghĩa (key equivocation) và được dùng để đo lượng thông tin về khoá
do bản thân từ mã mang lại. Ta có định lý sau
Định lý 2.8

Cho hệ mã (P, C, K, E, D) khi đó

H(K | C) = H(K) + H(P) H(C) .
Giả sử có hệ mã (P, C, K, E, D), chuỗi từ hiện x1x2 .. xn được mã bằng một khoá và cho từ
mã y1y2 ..yn . Để ý rằng mục tiêu của kẻ phá khoá là xác định mã khoá được dùng do đó ta xét
trường hợp tấn công biết từ mã. Ta giả sử kẻ tấn công biết rằng từ hiện là ngôn ngữ tự
nhiên. Nói chung kẻ tấn công có thể xác định ra một số khoá tuy nhiên chỉ có một khoá là
đúng. Các khoá còn lại được gọi là khoá giả (spurious key). Ví dụ trong trường hợp dùng mã
chuyển dịch, kẻ tấn công thu được từ mã WNAJW. Dễ dàng xác định được có 2 khả năng giải
mã có nghĩa: river và arena ứng với 2 khoá K=5 và K=22. Tất nhiên trong đó chỉ có một khoá
là đúng.
Ta thử đánh giá số lượng khoá giả. Đầu tiên ta xác định ý nghĩa của entropy (của một ký tự)
cho một ngôn ngữ L , ký hiệu HL . HL cần là độ đo để xác định thông tin trung bình của từng
ký tự trong một chuỗi từ hiện. (Với ngôn ngữ dùng 26 ký tự tiếng anh, entropy của ký tự
trong một chuỗi từ ngẫu nhiên xấp xỉ log2 26 4.6 ). Với bậc 1, có thể xấp xỉ HL với H(P).
Trong trường hợp L là tiếng Anh, và với phân phối xác suất ký tự thống kê được ta có HL
4.19 .
Tất nhiên trong ngôn ngữ tự nhiên, các ký tự không phải là độc lập với nhau, và mối tương
quan giữa chúng làm giảm entropy. Ví dụ, ký tự q thường kéo theo ký tự u ở sau. Để ước
lượng, ta cần tính entropy của phân phối của tất cả các diagram và chia 2. Tổng quát ta có thể
gọi P n là biến ngẫu nhiên có phân phối của tất cả các tổ hợp chuỗi n ký tự.
Định nghĩa 2.9

Cho ngôn ngữ L, ta định nghĩa entropy của L là hệ thức

H (P n )
n
n

H L lim

và mức dư thừa (redundancy) của L là
RL 1 H L / log 2 | P |

Với tiếng Anh, từ các con số thống kê có thể tính được H(P3) 3.90 . Nhiều công trình
đưa ra con số 1 HL 1.5 . Dùng giá trị 1.25 ta có thể tính được độ dư thừa thông tin RL của
tiếng anh là 0.75 hay 75%. Điều đó không có nghĩa là ta có thể lược bớt 3 ký tự bất kỳ trong
Trang 19/111


từ 4 ký tự mà vẫn có thể khôi phục lại được từ ban đầu. Độ dư thừa 0.75 có nghĩa là dùng mã
hoá Huffman mã chuỗi n ký tự, với n đủ lớn, sẽ nén được còn khoảng 1 phần 4 kích thước ban
đầu.
Khi đã biết phân phối xác suất trên K và P n , ta có thể xác định phân phối xác suất cảm
sinh trên C n , tập các chuỗi từ mã n ký tự. cũng như trước , ta gọi C n là biến ngẫu nhiên biểu
diễn từ mã n ký tự. Với y C n ta đặt
K(y) = {K K : x P

n

, pPn (x) > 0 , eK(x) = y}

Như thế K(y) là tập các khoá với chúng, y là từ mã của chuỗi từ hiện có nghĩa độ dài n . Nếu
quan sát được chuỗi từ mã y, khi đó số lượng các khoá giả là Card(K(y)) 1 vì trong K(y) chỉ
có một khoá thật. Ký hiệu số lượng khoá giả trung bình (trên tất cả các chuỗi từ mã độ dài n)
là s n , ta có công thức sau:
log 2 ( s n 1) H ( K ) nRL log 2 P

Trong trường hợp các khóa được chọn với xác suất như nhau (H(K) cực đại) ta có
Định lý 2.10
Giả sử (P, C, K, E, D) là hệ mã có | C | = | P | và các khoá được chọn với
xác suất như nhau. Giả sử RL là độ dư thừa của ngôn ngữ được dùng. Khi đó nếu biết chuỗi từ
mã y với độ dài n đủ lớn, số lượng theo dự đoán các khoá giả s n thỏa
sn

K
P

nRL

1 .

Định nghĩa 2.11
Khoảng cách duy nhất (unicity distance) của hệ mã là giá trị của n, ký
hiệu n0 , mà từ đó, số lượng dự đoán các khoá giả bằng 0; có nghĩa là độ dài chuỗi từ mã cần
quan sát để tính được chỉ một khoá với đủ thời gian tính toán.
Từ định lý 2.11, đặt s n = 0 giải phương trình với ẩn n, ta có giá trị xấp xỉ của n0
n0

log 2 K
RL log 2 P

Ví dụ với hệ mã thay thế, ta có | P | = 26, | K | = 26! , nếu ta chọn RL = 0.75 khi đó unicity
distance n0 xấp xỉ
n0 88.4 / (0.75 * 4.7) 25
Tức là nếu có được chuỗi từ mã độ dài 25, khi đó việc giải mã nói chung là duy nhất.

Tích các hệ mã
Một trong những ý tưởng của Shannon đưa ra năm 1949 là kết hợp nhiều hệ mã qua khái
niệm tích. Để đơn giản ta xét trường hợp không gian từ hiện và không gian từ khoá trùng
Trang 20/111


nhau, tức là C = P (hệ mã kiểu này được gọi là tự đồng cấu- endomorphic). Giả sử có hai hệ
mã S1 = (P, P, K1, E1, D1) và S2 = (P, P , K2, E2, D2) . Khi đó hệ mã tích S1 S2 được xác định
như sau
(P, P, K1 K2, E, D)
Khoá mã trong hệ mã tích có dạng K = ( K1 , K2 ) với K1 K1 và K2 K2 . Quy tắc mã hoá
như sau: với khoá K = ( K1 , K2 ), ta có hàm mã hoá eK là hàm hợp
e( K1 , K2 )(x) = eK2 (e K1 (x))
còn hàm giải mã được xác định như sau
d( K1 , K2 )(y) = dK1 (d K2 (y))
Quá trình mã hoá được thực hiện hai lần, đầu tiến mã hoá từ hiện dùng khoá eK1 sau đó từ mã
trung gian lại được mã hoá dùng hàm eK2 .Quá trình giải mã được thực hiện tương tự với trình
tự ngược lại:
d( K1 , K2 )( e( K1 , K2 )(x)) = d( K1 , K2 )(eK2 (e K1 (x)))
= dK1 (d K2 (eK2 (e K1 (x))))
= dK1 ( e K1 (x)) = x
Với mỗi hệ mã trong tích có phân bố xác suất trên không gian khoá pK1(K1) và pK2(K2), ta
xác định phân bố xác suất trên không gian khoá tích pK(K1 , K2). Nếu hai khoá được xác định
độc lập với nhau ta có quan hệ đơn giản sau
pK(K1 , K2) = pK1(K1) pK2(K2).
Nếu ta dùng tích hệ mã tự đồng cấu S với chính nó, khi đó ta ký hiệu hệ mã tích là S2 , tổng
quát hơn, nếu dùng n lần lấy tích ta ký hiệu hệ mã tích là S n . Hệ mã S n được gọi là hệ mã
lặp (iterated).
Hệ mã S được gọi là luỹ đẳng (idempotent) nếu S 2 = S. Ví dụ một số hệ mã ta đã xem xét ở
trên (mã tuyến tính, mã chuyển dịch) là các hệ mã luỹ đẳng. Tất nhiên, nếu hệ mã S là luỹ
đẳng thì việc áp dụng tích không làm nâng cao độ an toàn mà ngược lại làm tốn năng lực tính
toán.
Nếu hệ mã là không luỹ đẳng, việc áp dụng tích nhiều lần làm tăng độ an toàn lên đáng kể.
Một trong các cách đơn giản để tránh sự bất biến là thực hiện tích hai hệ mã khác nhau.
ý tưởng tích các hệ mã được áp dụng khá phổ biến hiện nay, một trong những hệ mã phổ
biến nhất sử dụng khái niệm tích là hệ DES (Data Encryption Standard). Một phương thức áp
dụng khác là có thể kết hợp mã hoá với nén dữ liệu, như thế ta có thể đạt được hai mục đích
là tăng độ an toàn của hệ mã đồng thời giảm được khối lượng thông tin truyền.
Trang 21/111


3. Hình thức hoá
Từ nghiên cứu các hệ mã cổ điển ở trên, một cách tự nhiên xuất hiện vấn đề cần phải khái
quát hoá để có thể hiểu được bản chất của mã. Từ đó có thể phát triển các hệ mã mới. Trong
mục này ta đưa ra một số khái niệm để làm cơ sở cho lý thuyết mã, ta cũng sẽ đưa ra định
nghĩa tập mã và xem xét một số quan hệ giữa mã và vị nhóm con.

Các khái niệm mở đầu
Nửa nhóm: một tập khác rỗng S được trang bị phép toán hai ngôi kết hợp (binary
associative operation). Phép toán thường được gọi là phép nhân và ký hiệu đơn giản bằng
cách đặt cạnh nhau, như thế u = vw thể hiện tích của v và w.
Tập con T của nửa nhóm S được gọi là nửa nhóm con (subsemigroup) của S nếu nó là đóng
đối với phép toán của S
Nửa nhóm cùng với phần tử đơn vị tạo thành một vị nhóm (monoid). Phần tử đơn vị thường ký
hiệu là 1.
Nửa nhóm con N của vị nhóm M được gọi là vị nhóm con (submonoid) nếu N chứa phần tử
đơn vị của M.
Giả sử A là tập hữu hạn hoặc vô hạn các ký hiệu (symbol), A được gọi là bảng chữ cái
(alphabet). Mọi chuỗi hữu hạn tạo nên từ các phần tử của A được gọi là từ (word), từ rỗng là
từ không chứa chữ cái nào. Gọi tập tất cả các từ trên A là A*. Nếu ta định nghĩa phép nhân
hai phần tử trong A* đơn giản là phép nối hai chuỗi (từ) khi đó A* là một nửa nhóm với từ
rỗng phần tử trung hoà. Như thế A* là một vị nhóm. Ta gọi tập A+=A* 1 là nửa nhóm tự do
(free semigroup) được sinh bởi A và A* là vị nhóm tự do (free monoid) được sinh bởi A.
Cho x là từ thuộc A*, khúc đầu x của x được gọi là thừa số trái (left factor); tương tự ta có
khúc sau được gọi là thừa số phải, và khúc giữa được gọi là thừa số trong.
Cho S là nửa nhóm. Tập M S được gọi là unita phải nếu từ sS, uM, usM suy ra
sM. Tương tự ta có khái niệm unita trái. M được gọi là unita nếu nó vừa là unita phải vừa là
unita trái.

Định nghĩa mã
Giả sử A là bảng chữ cái. Tập con X của vị nhóm tự do A* được gọi là mã(code) nếu với
mọi m, n 1 và x1 , .. , xn ; y1 , .. , ym X, từ đẳng thức
x1 .. xn = y1 .. ym

(3.1)

suy ra m = n và xi = yi i = 1.. n

(3.2)
Trang 22/111


Nói một cách khác tập X là mã nếu mọi từ trong X+ đều chỉ có một phân tích duy nhất qua
các từ trong X. Do 1.1=1 ta thấy rằng mọi tập mã đều không thể chứa từ rỗng. Dễ dàng thấy
rằng mọi tập con của tập mã cũng là mã.
Sau đây là điều kiện cần và đủ về mã, biểu diễn qua đơn cấu của vị nhóm.
Mệnh đề 3.1
Nếu tập con X của A* là mã thì mọi đồng cấu (morphism) : B* A*
, cảm sinh một song ánh từ bảng chữ cái B nào đó lên X, sẽ là đơn ánh . Ngược lại, nếu tồn
tại một đơn ánh đồng cấu : B* A* sao cho (B) = X thì X là mã .
Chứng minh
() Giả sử : B* A* là đồng cấu, cảm sinh một song ánh từ B lên X. Giả sử u , v B* là
các từ thoả (u) = (v) = w. Nếu u = 1 thì v = 1, thật vậy (b) 1 với mọi chữ cái b B vì X
là mã (và (b) X). Nếu u 1 và v 1, đặt u = b1 b2 .. bm và v= c1 c2 .. cn với m, n 1 , bi , ci
B. Vì là đồng cấu, ta có:
(b1) (b2) .. (bm) = (c1) (c2) .. (cn)
Nhưng do X là mã và (bi), (cj) X; ta có m = n và (bi) = (ci) với i=1..n . Mặt khác là
đơn ánh trong B do đó bi = ci với i=1..n và u = v. Vậy là đơn ánh .
Ngược lại, nếu : B* A* là đồng cấu đơn ánh, và nếu:
x1 x2 .. xn = y1 y2 .. ym

(3.3)

với m, n 1, x1 x2 .. xn , y1 y2 .. ym X = (B) , ta gọi bi , cj B sao cho (bi) = xi , (cj)= yj ,
vì là đơn ánh từ đẳng thức ta có
b1 b2 .. bn = c1 c2 .. cm .
Do đó m = n và bi = ci , kéo theo xi = yi với i = 1 .. n.
Đồng cấu : B* A* có tính đơn ánh và có (B) = X được gọi là đồng cấu mã của X
(coding morphism for X). Mệnh đề 3.1 là nguồn gốc của thuật ngữ bởi vì các từ trong X mã
các chữ cái trong B. Quá trình mã hoá có thể coi là thay thế từ b1b2 .. bn (bi B) trong ngôn
ngữ hiện B bằng các từ mã (b1)(b2)..(bn) qua đồng cấu mã . Sự kiện là đơn ánh đảm
bảo rằng từ mã có thể được giải mã duy nhất để thu được từ hiện ban đầu .
Ví dụ 3.1
Với mọi bảng chữ cái A, tập X = A luôn là tập mã. Tổng quát hơn với mọi số
nguyên p 1, X = Ap là tập mã, được gọi là mã uniform từ các từ độ dài p. Thực vậy, từ điều
kiện (3.1) và từ tính chất các từ trong X có độ dài cố định ta suy ra kết luận (3.2).
Ví dụ 3.2

Tập X = {bb,abb,ab} trên bảng chữ cái A = {a, b} là tập mã.

Ví dụ 3.3
Tập X = {b, aba, ba} từ bảng chữ cái A = {a, b} không là mã vì từ w=baba có
hai phân tích trong X: w = b(aba) = (ba)(ba).

Trang 23/111


Từ mệnh đề 3.1 ta có các hệ quả sau:
Hệ quả 3.2 Giả sử : A* C* là đồng cấu đơn ánh. Nếu X là mã trong A thì tập (X) là
mã trong C . Nếu Y là mã trong C thì 1 (Y) là mã trong A .
Hệ quả 3.3 Nếu X A* là mã, khi đó Xn là mã với mọi số nguyên n > 0.
Ví dụ 3.4 : Ví dụ này chứng tỏ rằng tích của hai tập mã chưa chắc đã là mã. Cho X={a, ba}
và Y = {a, ab} là các mã trên A = {a, b}, nhưng tập
Z = XY = {aa, aab, baa, baab}
không phải là mã vì từ w = (aa)(baa) = (aab)(aa) có 2 phân tích.

Mã prefix, suffix, biprefix
Dựa trên một số đặc trưng về phân tích thừa số, ta có các tập prefix, suffix và biprefix.
Tập prefix: Cho tập X A*, khi đó X gọi là tập prefix nếu không có từ nào trong x là thừa số
trái thật sự (proper left factor) của từ khác trong X. Nói cách khác, tập X là prefix nếu với mọi
từ x, y trong X:
xy



x = y.

(3.4)

Tức là hai từ bất kỳ là không so sánh được theo thứ tự prefix.
Hoặc X là tập prefix nếu X-1 X = .
Ta có thể thấy rằng nếu X là tập prefix và chứa từ rỗng thì X = {1}.
Đối xứng với định nghĩa prefix ta có tập suffix. Tập X gọi là suffix nếu không có từ nào trong
x là thừa số phải thật sự (proper right factor) của từ khác trong X. Tập X gọi là biprefix nếu
nó vừa là prefix vừa là suffix.
Ví dụ 3.5
X = {abb,bb,bab} trên A={a,b} là tập prefix vì không tồn tại từ nào trong X có
chứa thừa số bên trái cũng là từ trong X. Tuy nhiên X không phải suffix vì từ abb thuộc X có
thừa số bên phải bb thuộc X. Do đó X không phải là tập suffix.
Ví dụ 3.6
X = {abb,baa,bab} trên A={a,b} là tập prefix vì không tồn tại từ nào trong X có
chứa thừa số bên trái cũng là từ trong X. X cũng là suffix. Do đó X là tập biprefix.
Một lớp mã quan trọng là lớp mã prefix, với khái niệm tập prefix, ta có định lý sau.
Mệnh đề 3.4

Mọi tập prefix khác {1} đều là mã.

Chứng minh:
Giả sử ngược lại, nếu X không phải là mã, khi đó tồn tại từ w là từ ngắn nhất có hai phân tích
trong X:
w = x1 x2 .. xn = y1 y2 .. ym ; xi và yj X
Trang 24/111


Vì w là từ ngắn nhất và x1, y1 khác rỗng, do đó x1 khác y1. Như thế hoặc x1 < y1 hoặc y1 < x1
trái với điều kiện X là prefix. Như thế, X là mã.
Hoàn toàn tương tự ta có mệnh đề tương tự với tập suffix.
Mã prefix (hoặc suffix, biprefix) là tập prefix (hoặc suffix, biprefix tương ứng)và là mã, tức là
khác tập {1}.
Ví dụ 3.7:

Mã uniform là tập biprefix, do đó nó là mã biprefix.

Mã X trên A gọi là cực đại nếu nó không bị chứa hoàn toàn trong một tập mã khác trên A,
tức là nếu X Y, Y là mã suy ra X = Y.
Tính cực đại còn phụ thuộc cả bảng chữ cái. Nếu X là mã cực đại trên A và A B thì X chưa
chắc là cực đại trên B.

Mã và vị nhóm con tự do
Mục trước ta đã trình bày khái niệm về mã và một số tính chất của mã. Tuy nhiên không
phải lúc nào cũng dễ dàng nghiên cứu các tính chất trực tiếp trên tập mã, trong nhiều trường
hợp làm việc với vị nhóm con sinh bởi tập mã dễ dàng hơn.
Đặc tính tập X là mã (prefix, suffix, biprefix) tương đương với sự kiện rằng tập X* là vị nhóm
tự do (unita phải, unit trái, unita).
Mệnh đề 3.5
Cho A là bảng chữ cái. Mọi vị nhóm con tự do của A* có tập sinh cực
tiểu duy nhất X = (M1) (M1)2 .
Chứng minh
Đặt Q = M1. Bởi vì XM nên X*M. Rõ ràng 1X*, giả sử q Q. Nếu q Q2 thì q X.
Nếu không thì m=m1 m2 với m1, m2 Q và thực sự ngắn hơn m. Do đó m1 m2 X* và suy ra
m X*. Như thế X* = M, nghĩa là X là tập sinh của M.
Bây giờ giả sử Y là tập sinh của M. Có thể giả sử 1Y. Mọi x X đều thuộc Y*. Do đó có
thể viết
x = y1 .. yn

(yi Y, n > 0)

Sự kiện x1 và xQ2 chứng tỏ n=1và xY. Như thế X Y và X là tập sinh cực tiểu.
Ví dụ 3.8

Cho A={a, b}, với M={w: |w|a 0 mod 2}. Ta có

X = (M1) (M1)2 = b ab*a.
Ngược lại, nếu ta bắt đầu từ tập mã và nghiên cứu tính chất của vị nhóm con sinh bởi tập
mã đó ta có mệnh đề sau
Trang 25/111


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay

×

×