Đầ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 Để 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
Trang 1MÃ HÓA & BẢO MẬT
Trang 2Lờ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 34 §ång cÊu m· cña Z CODE 95
5 §Æc trng 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 4Lờ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 5Chươ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
(3) K là không gian khoá mã, là tập hữu hạn các khoá mã có thể có
eK : P C và dK : C P thỏa dK(eK(x)) = x với mọi từ hiện x P
đượ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 6x = x1 x2 xn , với các từ hiện xi P (1 i n)
A tính được yi = eK (xi ), 1 i n, và thu được thông điệp mã hoá
y= y1 y2 yn
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
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
Trang 7Ví 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
Để 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:
Trang 8Đị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
(m) (còn gọi là hàm Euler) Nếu m có phân tích ra thừa số
p m
1
p m
1
1
) (
) (
Định nghĩa 1.3 Giả sử a Zm , nghịch đảo của a là phần tử a1 Zm thoả aa1a1a 1 (mod m)
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
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 9Ta có thể kiểm tra lại rằng dK(eK(x)) = x với mọi x Z26 Thực vậy:
đ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
Để 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
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 10Hệ 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ử
811
m
k k k
k k k
2 1
1 12 11
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
187
811
811
=(11,22)
Từ đó ta có từ mã là DELW Để giải mã, ta dùng ma trận nghịch đảo
Trang 11187
=(11,24)
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
F
G
H
0.022 0.020 0.061
K
L
M
0.008 0.040 0.024
P
Q
R
0.019 0.001 0.060
U
V
W
0.028 0.010 0.023
Trang 12D
E
0.043 0.127
I
J
0.070 0.002
N
O
0.067 0.075
S
T
0.063 0.091
X
Y
Z
0.001 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:
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:
FMXVEDKAPHFERBNDKRXRSREFMORUDSDKDVSHVUFEDKAPRKDLYEVLRHHRH
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
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 13tự 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à:
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 14Ta 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
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
)) ( ( ) ( )
(
K C y K
K y d p K p 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):
) ( )
|
(
y dK x K
K p x
)}
( : {
))(()(
)()
()
|
(
K C y K
K
y dK x K
y d p K p
K p x
p y
x
p
P K
K P
P
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
Trang 15xá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 16Giả 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)
xác suất p(X) Entropy của phân phối xác suất đó là giá trị:
H
1
2
log )
H
1
log ) (
)
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í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
H(X/Y) H(X + H(Y)
Trang 17Quan 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ạ
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
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 18Cá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ó
x f x p f
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
Trang 19Khoá 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
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á
n
P H H
n n
L
)(lim
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 20từ 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
log s n H K nR L
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ó
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
1
L nR n
s
P
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
P
K
2
2 0
log
log
L R
Trang 21nhau, 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
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)
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 223 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ý
(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
Trang 23Nó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
, 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ã
đơ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 24Từ 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:
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
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 25Vì 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 < x1trá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)
tiểu duy nhất X = (M1) (M1)2
Chứng minh
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)
Ví dụ 3.8 Cho A={a, b}, với M={w: |w|a 0 mod 2} Ta có
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 26Mệnh đề 3.6 Nếu M là vị nhóm con tự do của A* , khi đó tập sinh nhỏ nhất của M là mã Ngược lại, nếu X A* là mã khi đó vị nhóm con X* của A* là vị nhóm con tự do với X chính là tập sinh nhỏ nhất
Chứng minh:
Giả sử : B* A* là isomorphism Khi đó có thể coi là đồng cấu đơn ánh từ B* sang A* Theo mệnh đề 3.1 ta có tập X=(B) là mã Mặt khác, M = (B*) = ((B))* = X* Suy ra X là tập sinh của M Hơn nữa B = B+ B+B+ và (B+) = M1, kéo theo X=(M1) (M1)2 , suy ra
X là tập sinh nhỏ nhất của M
Ngược lại, giả sử XA* là mã, đặt : B* A* là đồng cấu mã của X Khi đó là song ánh B* lên X* Kéo theo M=X* là tự do (free) Hơn nữa, vì là song ánh và B=B+B+B+ nên X=
X+ X+X+ , theo mệnh đề 3.5 ta có X là tập sinh nhỏ nhất của M
Mã X là tập sinh của vị nhóm con tự do M của A* được gọi là cơ sở của M
Từ mệnh đề trên ta có hệ quả sau:
Hệ quả 3.7 Giả sử X và Y là hai tập mã trên A, nếu X* = Y* thì X = Y
Ví dụ 3.8 (tiếp) Vì X là mã nên X* = M là vị nhóm con tự do của A
Từ mệnh đề 3.6 ta thấy có hai trường hợp theo đó tập X không là mã Trường hợp thứ nhất
là khi X không phải tập sinh cực tiểu của M = X*, tức là tồn tại đẳng thức:
Nói cách khác hệ thức (3.5) tương đương với w N1 N N N1 , như thế điều kiện ổn định
là N1 N N N1 N Dễ thấy vì 1 N do đó N N1 N N N1 , kéo theo N1N N N1
= N
Ta có mệnh đề sau
Từ đó ta có quan hệ sau
Trang 27ổ n định: N -1 N NN -1 = N
Biunita N -1 N=NN -1 =N
Unita phải: N -1 N=N Unita trái: NN -1 =N
Với các tính chất trên, ta có mối liên hệ giữa vị nhóm con và mã như sau
khi và chỉ khi tập sinh nhỏ nhất của nó là mã prefix (suffix , biprefix) Hơn nữa, vị nhóm con
có tính unita phải (unita trái, unita) của A* là tự do
Một trong những hướng nghiên cứu mạnh về lý thuyết mã hiện nay là nghiên cứu các vấn
đề về mã cực đại Cho M là vị nhóm con của A* M gọi là cực đại (maximal) nếu M A* và
M không phải là tập con thực sự của vị nhóm con nào khác ngoài A* Mệnh đề sau cho ta mối liên hệ vị nhóm con tự do cực đại với tính chất cực đại của cơ sở của nó
Chứng minh
Giả sử Y là mã trên A với XY Khi đó X* Y* và X*Y* (nếu không sẽ có X=Y theo hệ quả 3.7) Vì X* là cực đại do đó phải có Y*=A* và Y=A Do đó XA Giả sử bAX, tập Z=Xb2 là mã, do đó M Z* A* (vì b2 M và b2 Z), mâu thuẫn với M giả thiết là cực
Trang 28Mệnh đề 3.11 Giao của họ bất kỳ các vị nhóm con tự do của A* cũng là vị nhóm con tự
do
Nếu X là tập con của A*, theo mệnh đề 3.11 ta có giao của họ các vị nhóm con tự do chứa X
là vị nhóm con tự do nhỏ nhất của A* chứa X, vị nhóm con đó gọi là bao đóng tự do (free hull
) của X Nếu X* là vị nhóm con tự do thì khi đó rõ ràng X trùng với bao đóng tự do của X
Giả sử X A*, N là bao đóng tự do của X và Y là cơ sở của N Nếu X không là mã thì khi đó X Y Định lý sau gọi là định lý khuyết tật (defect theorem), cho ta mối liên quan giữa X và Y
Trang 29nghĩa là không phải đơn ánh Từ đó có bất đẳng thức
Chuỗi hình thức (formal series)
Cho bảng ký tự A và nửa vành K Chuỗi hình thức qua A với hệ số trong K là ánh xạ : A*K
Giá trị của ứng với từ wA* được ký hiệu bằng (,w) Tập các chuỗi hình thức qua A được
ký hiệu là K<<A>> hoặc KA* Ta ký hiệu K<A> là tập các chuỗi hình thức K<<A>> thoả
(,w)= số hữu hạn với w thuộc A* và 0 với mọi trường hợp khác ??
Các phần tử của K<A> được gọi là đa thức (polynomial)
Một chuỗi hình thức K<<A>> có thể được mở rộng thành hàm tuyến tính từ K<A> sang K bằng định nghĩa
, ( ) , (
A w
w p w
Định nghĩa trên có nghĩa vì p là đa thức
Giả sử có 2 chuỗi hình thức , K<<A>> Ta định nghĩa các chuỗi +, và k
v u
,
(k, w) = k(, w)
trong đó tổng | w | + 1 cặp (u, v) thoả uv = w, nghĩa là tổng hữu hạn Ta xác định 2 phần tử
đặc biệt ký hiệu 0 và 1 như sau:
(0, w) = 0, và (1, w) = 1 nếu w =1 , 0 nếu ngược lại
như mọi khi ta đặt n = (n lần) và 0 = 1
Với các phép toán và phần tử 0, 1 như trên, K<<A>> tạp thành một nửa vành
Ta định nghĩa giá (support) của chuỗi là tập
supp() = {wA*: (,w) 0}
ánh xạ supp() là isomorphism từ B<<A>> vào B(A*)
Họ (i)i0 được gọi là hữu hạn địa phương nếu với mọi w thuộc A*, tập
{iI : (i , w)0}
là hữu hạn Trong trường hợp đó ta ký hiệu chuỗi là
Trang 30(
định nghĩa đó là có nghĩa vì trong tổng trên chứa hữu hạn thừa số khác 0
Giả sử K<<A>> là chuỗi thoả (, 1) = 0
khi đó họ (n)n0 là hữu hạn địa phương Thật sự thì giá của n không chứa các từ w có độ dài nhỏ hơn n Ta ký hiệu
Với chuỗi như trên, ta có tính chất sau
Mệnh đề Cho K là nửa vành và K<<A>> là chuỗi thoả (, 1) = 0 Khi đó 1 là khả
Trang 31Chương 2: Một số lớp mã đặc biệt
Trong chương trước ta đã hình thức hoá khái niệm mã Để nghiên cứu mã, ta có thể sử dụng nhiều công cụ và cách tiếp cận khác nhau ở chương này, ta sẽ trình bày một số cách tiếp cận để nghiên cứu các tính chất của mã Mục thứ nhất trình bày định lý cơ sở và thuật toán Sardinas-Patterson kiểm tra một tập có là mã hay không Trong mục tiếp theo, ta nghiên cứu mã prefix là lớp mã quan trọng, có nhiều ứng dụng bằng các kỹ thuật khác nhau Mục thứ
ba trình bày khái niệm độ trễ giải mã, là một hướng tổng quát hoá, trong đó mã prefix là lớp mã có độ trễ bằng 0 Trong mục này ta xây dựng thuật toán tính độ trễ giải mã tương tự thuật toán Sardinas-Patterson, dựa trên ý tưởng trong [DNP93] Các cách tiếp cận trên cũng có thể
áp dụng để nghiên cứu các lớp mã khác, mục cuối cùng đề cập một số kết quả về lớp mã biprefix Các nội dung có thể tham khảo J Berstel và D Perrin [BePe85] Định lý kiểm tra mã về cơ bản được Sardinas và Patterson đưa ra vào năm 1953, do đó có tên thuật toán Sardians-Patterson Mã semaphore lần đầu tiên được nghiên cứu bởi Schuzenberger (1953) Khái niệm độ trễ giải mã đã xuất hiện rất sớm cùng với lý thuyết mã (Gilbert và Moore, 1959)
1 Định lý cơ bản về mã
Nói chung việc xác định một tập có là mã không phải luôn dễ dàng Trong phần này ta trình bày định lý Sardinas-Patterson làm cơ sở của thuật toán xác định tính chất mã của một tập Thuật toán không dựa trên các tính chất mới nào khác ngoài các tính chất ta đã trình bày
ở phần hình thức hoá, mà nó xây dựng dựa trên phương pháp tính toán Trong trường hợp tập
X hữu hạn (hoặc tổng quát hơn được đoán nhận/recognizable) thì các tính toán là hữu hạn
Để thể hiện ý tưởng của thuật toán, ta xét ví dụ sau
Ví dụ 1.1 Cho A = {a, b} và tập X = {b, abb, abbba, bbba, baabb} X không là mã vì ta có thể chỉ ra rằng từ w = abbbabbbaabb có hai phân tích:
w = (abbba)(bbba)(abb) = (abb)(b)(abb)(baabb)
Hai phân tích này xác định chuỗi các thừa số bên trái của w, mỗi thừa số tương ứng với cố gắng tạo hai phân tích khác nhau cho một từ
(abbba) (abbba) (abbba)bb (abbba)(bbba) (abbba)(bbba)abb (abbba)(bbba)(abb)
Trang 32suy ra ta tìm được từ w có 2 phân tích khác nhau
w = (abbba)(bbba)(abb) = (abb)(b)(abb)(baabb)
Trong thuật toán kiểm tra, ta tính tất cả các phần dư trên tất cả các bước tạo phân tích kép Thuật toán xác định phân tích kép qua sự kiện từ rỗng nằm trong tập các phần dư
Một cách hình thức, thuật toán có thể mô tả như sau
Để cho gọn, thay vì X{u} ta viết Xu
Thuật toán Sardinas Patterson
Đầu vào: tập XA+ , đầu ra: kết luận X có là mã hay không
Ta có định lý và mệnh đề sau đây khẳng định tính đúng đắn của thuật toán
Định lý 1.1 X A+ là mã khi và chỉ khi không có tập Un nào chứa từ rỗng
Chứng minh: Để chứng minh định lý ta sử dụng bổ đề sau:
Bổ đề 1.2 Giả sử X A+ và Un (n 1) được xác định như trên Với n 1 tuỳ ý, với mọi k
{1, 2, ,n} , ta có 1 Un khi và chỉ khi tồn tại u Uk và 2 số nguyên i, j 0 sao cho:
u Xi Xj , và i + j + k = n (1.1)
Chứng minh bổ đề :
thoả hệ thức (1.1) Ngược lại nếu có hệ thức (1.1) , vì k = n nên i = j = 0 , do đó Xi = Xj = 1
Trang 33Nếu j = 0 thì i = 0 và k = n Như thế j 1 So sánh độ dài của hai từ u và y1 ta có
Nếu u = y1 v với v A+ , khi đó v X-1 Uk Uk+1 và ta có
v x1 x2 xi = y2 yj
hệ thức tương đương với vXi Xj-1 , theo giả thiết quy nạp ta có 1 Un
Nếu uv = y1 với v A+ , khi đó v Uk-1 X Uk+1 v
Trang 34Ta có thể để ý rằng trong bổ đề 1.2, cách xác định U1 không đóng vai trò gì trong quá trình chứng minh, ta có thể thay U1 bằng tập bất kỳ Y và vẫn giữ nguyên cách tính Un với n > 1 Tuy nhiên cách xác định U1 đóng vai trò cơ bản trong việc chứng minh định lý 1.1
Mệnh đề sau chứng tỏ nếu tập X được đoán nhận thì thuật toán sẽ dừng sau hữu hạn bước
xác định như trên là hữu hạn
các từ trong X
Chứng minh:
Cho là tương đẳng cú pháp (syntactic congruence) của X, xác định bởi:
w w’ mod , khi và chỉ khi ( u, v A* , uwv X uw’v X)
Giả sử là tương đẳng của A* với hai lớp {1} và A+ Giả sử i = Ta có lập luận sau: Nếu L A* là hợp của các lớp tương đương ( equivalent ) của tương đẳng , khi đó với mọi tập con Y của A*, Y-1 L là hợp của các lớp tương đẳng mod ( Thật vậy, giả sử z Y-1 L và
z z’ mod Khi đó tồn tại y Y để yz L do đó yz’ L Kéo theo z’ Y-1 L )
Với n = 1, X là hợp của các lớp tương đương của , do đó X-1 X cũng là hợp của các lớp của
i Nếu Un là hợp của các lớp của i , khi đó theo lập luận trên cả Un-1 X và X-1 Un+1 là các hợp của các lớp của i Do đó Un+1 là hợp của các lớp của i Sự kiện X là đoán nhận được kéo theo
Đầu tiên ta sẽ đưa ra một số định nghĩa và một số tính chất cơ bản của mã prefix Tiếp theo ta
sẽ ứng dụng otomat trong nghiên cứu mã prefix và đưa ra cách xây dựng otomat ứng với mã prefix Sau đó ta nghiên cứu một số tính chất của mã prefix cực đại Trong mục tiếp theo ta nói về mã semaphore, là lớp mã con lý thú của lớp mã prefix
Trang 35Mã prefix
Trong mục này, ta đưa ra một số định nghĩa tương đương về mã prefix và cách biểu diễn tập prefix dùng cấu trúc cây Tiếp theo ta xét mối liên quan mã prefix với phân tích của vị nhóm tự do
Quy ước: để đơn giản ta ký hiệu tập các thừa số trái (phải) thực sự
XA = X(A+)1 ; AX = (A+)1X
mã Ta có các định nghĩa tương đương về mã prefix như sau:
(iii) XA+ , X , XA đôi một không giao nhau
(v) Nếu xu = x’u’ và x, x’ x thì x = x’ và u = u’
Mệnh đề sau cho ta quan hệ giữa mã prefix với ideal phải Cũng từ mệnh đề này ta có
được phương pháp xây dựng mã prefix từ một ngôn ngữ trong A*
2 Cho X là tập prefix, giả sử M là tập con của A* thoả XA* = MA* Khi đó
Chứng minh
1 Từ X = L LA+ ta có X L, kéo theo XA+ LA+ , do đó
X XA+ X LA+ = Vế đầu chứng tỏ X là prefix Để ý rằng
Chiều ngược lại, do X L do đó XA* LA* Vậy XA* = LA*
Trang 362 Giả sử x X Khi đó x = mu , với m M và u A* Cũng như thế m = x’v , với x’ X
và v A* Từ đó x = x’uv Do X là prefix do đó ta có uv = 1 Vậy X M Từ XA* = MA*
, như thế m = xu MA+ trái giả thiết m M MA+ Vậy u=1 và x M MA+
Tập X = L LA+ được gọi là tập khởi tạo của L hoặc cơ sở của ideal phải LA*
Từ mệnh đề ta có hệ quả sau
Hệ quả 2.1.3 Cho X và Y là các tập con prefix của A* Nếu XA*=YA* thì X=Y
Ví dụ 2.1.1 Cho A = {a, b}, L = A*aA* (tập các từ có chứa a) Khi đó ta có X=LLA+= b*a
Ví dụ 2.1.2 Cho A= {a, b}, X = A*ab A*abA+ Dễ thấy rằng X là prefix vì X là tập các
từ kết thúc bằng ab nhưng không chứa chuỗi ab nào khác ở giữa
Ví dụ 2.1.3 Cho A= {a, b}, L = {aa, ba, aab, aaa, bba, bab} khi đó
X = L LA+ = {aa, ba, bba} Dễ dàng thấy rằng X là prefix
Chúng ta xem xét biểu diễn hình học của mã nói chung và mã prefix trên 2,3 ký tự nói riêng Biểu diễn hình học cho mối liên hệ giữa mã với cấu trúc cây, mỗi từ của mã được ứng với một nút trên cây
Trước tiên ta xây dựng cây vô hạn cho tập A* như sau Bảng chữ cái được sắp theo thứ tự, các
từ có cùng độ dài được sắp theo thứ tự từ điển (lexicography) Như thế mỗi nút của cây tương ứng với một từ trong A* Từ có độ dài ngắn hơn nằm trước (nút cha) từ dài hơn, các từ cùng
độ dài được phân nhánh theo thứ tự từ điển Tồn tại nhánh đi từ u đến v khi và chỉ khi v= ua với a là chữ cái nào đó của A Cấu trúc cây xây dựng như trên được gọi là biểu diễn chữ (literal representation) của A*
Ví dụ 2.1.4 cây xây dựng cho A* với A ={a,b} và A* với A = {a, b, c}
1
a
b ab aa
Trang 37Hình 2.1: Biểu diễn chữ cho A*.
Từ cây cho tập A*, ta ứng tập X A* với một cây con bằng cách giữ lại các nút tương ứng với các từ trong X cùng với các nút trên đường đi từ gốc đến nó Cây con thu được gọi là biểu diễn chữ của X
Ví dụ 2.1.5 Cây xây dựng cho tập X = {ab, bb, aab}
Hình 2.2: Biểu diễn cây cho X
aab ab
bb
a b
aa 1
Dựa trên biểu diễn cây ta có thể thấy ngay rằng một từ là thừa số bên trái thực sự của từ khác nếu nó nằm trên đường đi từ gốc đến từ thứ hai Như thế tập X là prefix khi và chỉ khi trên cây biểu diễn chữ của X, mọi từ trong X là các nút lá của cây Biểu diễn chữ giúp ta dễ hình dung về tập X và có thể biểu diễn tập có khá nhiều phần tử
Bây giờ quay lại với mã prefix, ta có định lý phân tích thừa số
Cho X A*, X được gọi là tập prefix đóng (closed) nếu u thuộc X thì mọi thừa số trái của u cũng thuộc X ( v ta có uX suy ra uv1 X) Tương tự ta có khái niệm suffix đóng
Cho X, Y A*, tích XY gọi là không nhập nhằng nếu từ xy=x’y’, x,x’X, y,y’ Y suy ra x=x’ và y=y’
Ngược lại, nếu R là tập prefix đóng thuộc A*, khi đó X = RA R là mã prefix Nếu R thì
X là tập mã prefix duy nhất thoả R = A* XA*
Chứng minh:
Ta nhận xét rằng nếu từ w không chứa thừa số bên trái nào thuộc X thì mọi thừa số trái của w
đều có tính chất này Do đó từ cách xác định R, suy ra R là prefix đóng (closed) Mặt khác R
vì tập X {1} Tích XA* là không nhập nhằng theo mệnh đề 2.1.1.(v) Do đó XA* = X A* , ta có:
Trang 38khi đó YA*=XA* do đó theo hệ quả 2.1.3, ta có X=Y Chứng tỏ rằng X là duy nhất
Đẳng thức (2.1.5) nói rằng nếu thêm một ký tự vào sau một từ trong R thì ta được một từ trong R hoặc trong X , và một từ trong X là hợp của một từ trong R với một ký tự ở cuối Còn theo (2.1.6), một từ w A* có một phân tích duy nhất dạng:
w = x1 x2 xn u , x1 , , xn X và u R
Ví dụ 2.1.6 : Cho X = {a, baa,bab,bb} A+ là tập mã (có biểu diễn chữ trong hình) Tập R = A* XA* = {1, ba,b} , X 1 =(1 + ba + b)(A 1) Để ý R = XA
a b
ba baa bab bb
Hình 2.3: Biểu diễn ký tự của tập X
Trang 39Otomat của mã prefix
Cách biểu diễn chữ cung cấp cho ta cách đơn giản để kiểm tra xem một từ w (trong A*)
có thuộc X* hay không? Bằng cách lần theo đường dẫn từ gốc cây lần lượt qua các ký tự trong w Nếu ta đến được nút lá thì khi đó ta thu được một thừa số trái (left factor) trong X của w Ta cắt thừa số đó và tiếp tục kiểm tra lại từ gốc
Ta sẽ xây dựng các otomat chữ (literal automaton) từ dạng biểu diễn chữ và từ đó xây dựng
otomat tối tiểu (minimal automaton)
Để ý rằng với tập con X A* , ta ký hiệu A (X) là otomat tất định tối tiểu (minimal
deterministic automaton) đoán nhận (recognized) X
(ii) Otomat tối tiểu A (X) hoặc là rỗng hoặc chỉ có một trạng thái kết thúc t và t
A =
(iii) Tồn tại otomat tất định A =(Q, i, T) đoán nhận X với T A =
Trong đó là hàm chuyển dịch (transition function) trạng thái:
qw T} ={1} Thật vậy, giả sử x X và w A* là từ thoả i x = q T khi đó xw X, và vì X là prefix nên w = 1
Như thế 2 trạng thái cuối là unseparable và từ tính tối tiểu của A (X) ta có A (X) chỉ có một trạng thái cuối, gọi là t Bây giờ giả sử t A , như thế tồn tại chữ a và trạng thái p : t a =
p Bởi vì p là coaccessible nên tồn tại v để pv = t Suy ra tav = t hay av = 1, mâu thuẫn (ii) (iii) Theo lý thuyết Otomat ta luôn xây dựng được Otomat tất định A =(Q, i, T) nhận dạng X với T A = từ A (X)
Xuất phát từ dạng biểu diễn chữ, ta có thể dễ dàng xây dựng otomat cho mã prefix Otomat như thế gọi là otomat chữ (literal automaton) của mã prefix X, là otomat tất định A = (XA X , 1 , X), được định nghĩa như sau:
Trang 40đó biểu diễn của otomat chữ xây dựng như trên tất nhiên tương ứng với biểu diễn chữ của mã
Ví dụ 2.2.1(tiếp) Với otomat chữ trên của tập X = {ab, bab, bb} ta có thể xây dựng otomat tối tiểu
3
1
2
0 1
0 0
a
b
b
a b