Các hình cơ bản là các vòng tròn, hình chữ nhật....Ðiều này làm giảm rất nhiều số bít cần thiết so với việc phải phát ñi từng tọa ñộ và màu của từng ñiểm trên màn hình... Các sự kiện là
Trang 1Bắt ñầu Bước 1 Bước 2 Bước 3 Bước 4 Bước 5 Bước 6 Bước 7 Bước 8 Bước 9 Bước
10 Bước
11 Bước
12 Bước
13 Bước
14 Bước
- Trong 5 bước ñầu tiên, các bit có trọng số lớn của M(x) 2n xuất hiện ở ngã ra các FFD một cách bình thường
- Từ bước thứ 6 các kết quả phải kể ñến tác dụng của cổng EX-OR, thí dụ ở bước thứ
6 ở ngõ ra E chính là cộng Mod-2 của tín hiệu vào (bit 0) và tín hiệu ngã ra A trước ñó (bit 1), tức thực hiện EX-OR hai bít 0 và 1 ta ñược bit 1 Ngã ra D (bit 0) EX-OR với ngã ra A (bit 1) ñể ñược bit 1 ở ngã ra C Ngã ra B(bit 0) EX-OR với ngã ra A (bit 1) ñể ñược bit 1 ở ngã ra A Trên hình vẽ các bit EX-OR với bit ở ngã ra A ñược ñánh dấu
Tương tự như thế, sau15 lần dịch (bước 15), dữ liệu ở ngã ra các FF chính là mã CRC (số dư R = 01110) Ngã ra A là MSB
Có 4 da thức P(x) ñược dùng ñể tạo mê CRC thông dụng:
CRC_12 = x12 +x11 + x3 + x2 + x + 1
CRC_16 = x16+x15 + x2 + 1
CRC_CCITT = x16+x12 + x5 + 1
CRC_32 = x32+ x26+ x23+ x22 + x16+x12 + x11+ x10+ x8+ x7 + x5 + x4 + x2+ x +1
Trang 2CRC_12 dùng truyền với ký tự 6 bit và khung FCS dài 12 bit
CRC_16 & CRC_CCITT dùng truyền ký tự 8 bit và khung FCS dài 16 bit (ở Mỹ và
Gọi m là số bít của chuỗi dữ liệu và n là số bít của mã Hamming, tổng số bít phát ñi là m+n
- Với n = 1 ta xác ñịnh ñược 1 trong 2 kết quả : chuỗi dữ liệu sai hoặc ñúng nhưng không biết vị trí lỗi
- Với n = 2, 1 trong 4 trường hợp xảy ra: 2 phép kiểm tra ñều cho kết quả ñúng, 2 phép kiểm tra ñều cho kết quả sai, phép kiểm tra thứ nhất sai, phép kiểm tra thứ hai ñúng và ngược lại 4 trường hợp này cho phép kết luận ñược 1 bít sai ở 1 trong 3 vị trí
- Với n=3, có 8 khả năng xảy ra và ta có thể kết luận ñược 1 bít sai ở 1 trong 7 vị trí
- Với số n bất kỳ, có 2n khả năng xảy ra và ta có thể kết luận ñược 1 bít sai ở 1 trong
2n -1 vị trí
Vậy ñể có thể phát hiện 1 lỗi tại 1 vị trí cụ thể thì số n nhỏ nhất ñược chọn phải thỏa:
2n - 1 ≥≥≥≥ m + n hay 2n ≥≥≥≥ m + n + 1 Các bít của mã Hamming chèn vào vị trí 2n và dùng cho kiểm tra chẵn lẻ Các bít khác là bít thông tin (dữ liệu)
Dưới ñây là một ví dụ ñể thấy cách xác ñịnh mã Hamming:
Giả sử chuỗi dữ liệu cần truyền gồm 4 bít như sau :
1 0 1 0 Với m = 4 , ta chọn n = 3, bất ñẳng thức trên ñược thỏa
Gọi các bít của mã Hamming là H1 H2 và H4 (1, 2, 4 là các vị trí mà ta sẽ ñặt 3 bít của
mã Hamming vào dòng dữ liệu) Gọi các bít dòng dữ liệu là X3, X5, X6, X7
H2 = X3 ⊕ X6 ⊕ X7 = 1 ⊕ (1 ⊕ 0 ) = 1 ⊕ 1 = 0
H4 = X5 ⊕ X6 ⊕ X7 =0 ⊕ (1 ⊕ 0 ) = 0 ⊕ 1 Bản tin bao gồm bít mã trở thành: 1 0 1 1 0 1 0
Ở máy thu ñể kiểm tra người ta thực hiện các phép toán:
Trang 3C1 = H1⊕ X3 ⊕ X5 ⊕ X7
C2 =H2⊕ X3 ⊕ X6 ⊕ X7
C4 =H4⊕ X5 ⊕ X6 ⊕ X7 Nếu C1=C2=C4=0, không có lỗi xảy ra
Nếu C1 = 1, C2 = C4 = 0, một trong các bít 1, 3, 5, 7 bị lỗi Nhưng C2 = C4 = 0 có nghĩa là các bít 2, 3, 6, 7 và 4, 5, 6, 7 ñã ñúng Vậy bít sai phải là bít 1
Lý luận tương tự ta có các trường hợp khác Thí dụ nếu C1= C2 = C4 = 1 thì bít lỗi là bít 7
Vì chỉ bít X5 thuộc cả C1 và C4 nên bít sai là bít thứ 5
Quan sát tổ hợp C4 C2 C1 ta thấy C4 C2 C1 = 101 = (5)10 Như vậy giá trị có ñược của
tổ hợp này cho ta biết vị trí bít sai cần sửa chữa
Nếu tổ hợp này bằng 0 chứng tỏ bản tin nhận ñúng
Mã Hamming có thể ñược phát triển ñể dò ra hai bít sai và sửa ñược một bit lỗi
- Mã ñồ họa trong hệ thống Videotex dùng một bảng mã hình học ñể phát ñi các ñồ họa của máy tính hoặc hình ảnh video Mỗi hình ñược phát ñi là tập hợp các hình cơ bản với
vị trí, màu sắc và kích thước xác ñịnh Các hình cơ bản là các vòng tròn, hình chữ nhật Ðiều này làm giảm rất nhiều số bít cần thiết so với việc phải phát ñi từng tọa ñộ và màu của từng ñiểm trên màn hình
Trang 4Anh xác suất xuất hiện chữ E rất lớn so với xác suất xuất hiện chữ Z Mã này còn có tên Mã phụ thuộc tần số (frequency dependent code)
Với phương pháp này số bít trung bình dùng cho mỗi ký tự sẽ giảm Nhưng do các mã dài ngắn khác nhau, ñể máy thu phân biệt ñược, người ta phải chọn các từ mã ngắn sao cho không trùng với các bít ñầu của các từ mã dài hơn Gọi là tính tiền tố (prefix property)
Giải thuật Huffman: Dưới ñây là các bước tạo mã Huffman
- Tương ứng với mỗi dữ kiện liên kết một cây nhị phân chứa duy nhất một nút Ở mỗi cây ghi tần số xuất hiện mà ta gọi là trọng lượng của cây
- Tìm hai cây nhẹ nhất Nếu có nhiều hơn hai, ta chọn ngẫu nhiên hai cây trong số các cây có trọng lượng nhẹ nhất, ghép chúng lại thành một cây ñơn với nút gốc mới Tổng trọng lượng hai cây này là trọng lượng của cây mới
- Lặp lại các bước cho tới lúc chỉ còn một cây duy nhất
Các cây ban ñầu trở thành các lá của cây nhị phân cuối cùng này Ta biết rằng ñối với cây nhị phân thì chỉ có một ñường duy nhất từ gốc cho tới lá Với mỗi lá, ñường từ gốc ñến
nó chính là mã Huffman tương ứng Mã này xác ñịnh bằng cách ghi trị 0 cho nhánh bên trái
và 1 cho nhánh bên phải (hoặc ngược lại)
Thí dụ 1: Thiết lập mã Huffman cho các ký tự A, B, C, D, E với tần số xuất hiện lần lượt là 0,25; 0,15; 0,10; 0,20; 0,30
(H 3.3a) là cây với 5 nút ñơn ban ñầu và trọng lượng tương ứng
(H 3.3b) ghép 2 cây B và C thành một cây mới với trọng lượng là tổng trọng lượng cây B và C (0,25)
Bước tiếp theo ta có thể ghép cây mới hình thành với cây D hay cây A với D (H 3.3c) ghép cây mới với D ñể ñược một cây trọng lượng là 0,45
Trang 5Thí dụ 2: Mã hoá giá trị nhiệt ñộ trong khoảng từ 20°C ñến 30°C với xác suất cho trong (H 3.4) Thay vì thực hiện các cây nhị phân như trên, ta có thể dựa vào xác suất của các giá trị nhiệt ñộ mà lập một ñồ họa ñể thực hiện việc mã hóa sao cho các giá trị có xác suất lớn sẽ dùng từ mã ngắn nhất có thể có
Các sự kiện (là các giá trị nhiệt ñộ) ñược liệt kê theo xác suất giảm dần (H 3.4a)
Ta bắt ñầu bằng cách gán hai bít 0 và 1 cho 2 sự kiện có khả năng xảy ra ít nhất, sau
ñó hai sự kiện này ñược tổ hợp thành một sự kiện có xác suất bằng tổng hai xác suất của hai
sự kiện ñó, các sự kiện ñược sắp xếp theo thứ tự giảm dần và thủ tục lặp lại từ dưới lên và từ trái sang phải cho ñến khi hai sự kiện cuối cùng ñược kết hợp Từ mã của các sự kiện ñược viết bằng cách dò theo các ñường của sơ ñồ theo chiều ngược lại, từ phải qua trái Cuối cùng
ta có bảng mã (H 3.4b)
Từ mã trung bình: 0,21*2 + 0,17*3 + 0,15*3 + 0,12*3 + 0,1*3 + 0,06*4 + 0,05*4 + 0,04*5 + 0,03*6 + 0,02*6 =3,18 bít/sự kiện
Số bít dùng mã hóa ñã giảm khoảng 20%
Một ưu thế của phương pháp Huffman là có thể lập trình ñể thực hiện việc mã hóa Trở lại Thí dụ 1, bây giờ giả sử chuỗi ký tự ñược phát ñi là A B E C A D B C, tương ứng với chuỗi bít 01110001110110110111, máy thu khi nhận ñược chuỗi dữ liệu sẽ thực hiện việc giải mã như thế nào ?
Nhờ vào tính tiền tố của các mã, máy thu sẽ lần lượt ñọc các bít cho tới khi gặp một chuỗi con các bít tương ứng với một mã sẽ dừng lại, giải mã ký tự này, sau ñó tiếp tục ñọc chuỗi dữ liệu kế tiếp ñể tìm ra ký tự thứ hai
Trang 6
(a) (H3.4) (b)
3.3.2 Mã Run length :
Mã Huffman tuy có làm giảm số bít truyền ñi nhưng nó ñòi hỏi dữ liệu phải ñược tập hợp thành từng nhóm hay ký tự ñể xác ñịnh tần số lặp lại của các nhóm hay ký tự này Việc này ñôi khi rất khó thực hiện ñối với một số loại dữ liệu thí dụ như dữ liệu từ một bản fax, tín hiệu mã hình ảnh
Lấy thí dụ trường hợp bản fax, dữ liệu ñược phát ñi không phải là các ký tự mà là các bít tương ứng với ñiểm sáng tối trên tờ giấy, như vậy phải có một kỹ thuật phù hợp ñể nén chuỗi dữ liệu này, ñó chính là mã Run length
Mã Run length ñược tạo ra bằng cách quan sát chuỗi bit 0 (hoặc 1) liên tiếp và thay thế chiều dài chuỗi bít này bởi một số nhị phân Ở máy thu khi nhận ñược các số nhị phân sẽ thay các số này bởi các bít 0 (hoặc 1) ñồng thời chèn các bít khác loại vào
Thí dụ ta phải tạo mã Run length cho chuỗi dữ liệu sau bằng cách dùng số 4 bít thay cho số bit 0 liên tiếp:
Trang 7- Nếu chuỗi dữ liệu bắt ñầu bằng bit 1 thì máy phát sẽ gửi ñi 4 bít 0 ñầu tiên
Kỹ thuật nén này chỉ có hiệu quả khi chuỗi dữ liệu chứa rất nhiều một loại bit
Ngoài ra, kỹ thuật nén Run length cũng ñược dùng mã hóa các chuỗi ký tự giống nhau bằng cách thay mỗi chuỗi ký tự liên tiếp bằng con số chỉ ñộ dài ñứng trước ký tự ñó
Thí dụ, với chuỗi
HHHHHFFFFFFFFYYYYYYYYYYYYYGGGGGGGGGG
Sẽ có mã là: 5H8F13Y10G
3.3.3 Mã vi phân (Differential encoding) :
Còn gọi là mã tương ñối (Relative encoding)
Trong nhiều trường hợp, các dữ liệu liên tiếp nhau thay ñổi rất ít Thí dụ trường hợp
mã tín hiệu hình ảnh trong kỹ thuật video, do phải xử lý 30 bán ảnh (khung) trong một giây
ñể tạo ảnh ñộng, nên chi tiết của các ảnh không khác nhau bao nhiêu, thay vì phải nén tín hiệu từng khung người ta nghĩ tới việc xác ñịnh sự khác nhau của các khung liên tiếp, mã thông tin này và gửi ñi
Nguyên tắc của mã vi phân như sau: khung thứ nhất ñược phát ñi ñồng thời lưu ở bộ ñệm của máy phát và thu Máy phát sẽ so sánh khung thứ hai với khung thứ nhất này, mã sự khác biệt và phát ñi dưới dạng một khung Máy thu khi nhận khung thứ hai, nhờ các mã chỉ
sự khác biệt mà so sánh với khung thứ nhất (ñã lưu trước ñó) ñể tái tạo khung thứ hai, ñồng thời nó lưu khung thứ hai này trong bộ ñệm và quá trình tiếp tục với các khung mới
Trang 8Trong hình, các khung nằm dưới khung thứ hai và thứ ba là khung chứa các mã vi phân, số 0 chỉ không có sự khác biệt dữ liệu của 2 khung, số1chỉ dữ liệu khung sau lớn hơn khung trước 1 ñơn vị và số -1 chỉ ngược lại Dĩ nhiên có thể sử dụng các số khác hơn là 1 và -1
Thí dụ cho ta thấy sự xuất hiện một chuỗi dài các bít 0 và có thể ñược nén nhờ phương pháp Run length
Gọi bản tin ban ñầu là P (Plaintext), bản tin ñã cài mật mã là C (Ciphertext) thì C =
Ek(P), E và k là giải thuật và khóa tạo mã ( Algorithm & Encryption key) Nơi nhận, nhận bản tin C và phục hồi lại P với giải thuật và khóa là D và k’ : P =Dk’(C) = Dk’ Ek(P) Trong ña
số trường hợp (nhưng không phải luôn luôn) k=k’
Giải thuật và khóa càng phức tạp thì ñộ an toàn của bản tin càng cao
Chúng ta sẽ xét một số cách tạo mật mã từ ñơn giản ñến phức tạp
3.4.1 Mã Caesar (Caesar cipher) :
Còn gọi là mã mẫu tự ñơn (mono-alphabetic cipher)
Ðây là loại mật mã có sớm nhất và ñơn giản nhất Người ta sẽ thay các ký tự của bản tin bằng các ký tự khác theo một qui luật nào ñó, thí dụ bằng cách cộng một số nguyên vào
mã ASCII của các ký tự ta sẽ có một bản tin mật Thí dụ cộng 1 vào mã ASCII ta sẽ có ký tự
B thay cho A, C thay cho B Và nơi nhận sẽ giải mã bằng cách trừ 1 cho các mã nhận ñược trước khi tra bảng mã ASCII
Vì giải thuật tạo mã quá ñơn giản nên bản tin có thể ñược giải mã một cách dễ dàng
mà không cần biết trước khóa Thí dụ, trong tiếng Anh, các ký tự E, T, O và N là các ký tự thường xuất hiện nhiều lần trong các văn bản nên khi gặp bản mã người ta có thể thay các ký
tự lặp lại nhiều lần bằng các ký tự này Sau vài thử nghiệm có thể thấy ñược qui luật và suy
ra bản tin
Ðể minh họa, giả sử một người nhận ñược bản tin sau:
{;RSDR\SFF\,PMRU \YP\,U \NSML \ SVVPIMY \ $234567890
Trước nhất người ta liệt kê các ký tự thường xảy ra : \ (7 lần), S (4 lần), R, P và M (3 lần), như vậy người ta có thể thay thử các ký tự S, R, P, M bởi E, T, O, A và N (in ñậm):
Trang 9{;EADE \AFF \,ONEU \YO \,U \NANL \AVVOINY \$234567890
Tiếp tục, người ta có thể nghĩ là trong một văn bản luôn có các khoảng trống, như vậy thử thay các dấu \ bằng các khoảng trống, bản tin thành
{;EADE AFF ,ONEU YO ,U NANL AVVOINY $234567890
Nhận xét tiếp các từ chứa ít ký tự như AFF và YO, trong tiếng Anh, từ 3 ký tự mà hai
ký tự sau giống nhau khiến ta nghĩ ñến từ ADD và từ 2 ký tự kết thúc bằng O khiến ta nghĩ tới từ TO Thay vào ta lại ñược bản tin:
{;EADE ADD ,ONEU TO ,U NANL AVVOINY $234567890
Cho tới ñây, dường như ta ñã ñi ñược một ñoạn ñường khá dài ñể sắp tới ñích, thêm vài lần thử người ta có thể tìm ra bản tin
PLEASE ADD MONEY TO MY BANK ACCOUNT #123456789
Một phương pháp khác ñể tạo mã mẫu tự ñơn có tên là Polybius square Mẫu tự I và J ñược kết hợp lại và ñược xử lý như một từ ñơn, ñể tổng số mẫu tự là 25 25 mẫu tự lại ñược chia thành dãy 5x5 Mỗi mẫu tự sẽ ñược mã bởi một cặp số tương ứng với hàng và cột trong bảng mã
3.4.2 Mã ña mẫu tự (Poly-alphabetic cipher) :
Ðể tránh việc lặp lại các ký tự trong bản mật mã, người ta dùng loại mã ña mẫu tự, tương tự mã Caesar, mỗi ký tự cũng ñược thay bởi một ký tự khác, nhưng các ký tự giống nhau không phải ñược thay bằng một ký tự duy nhất, mà sẽ ñược thay bằng các ký tự khác nhau tùy theo vị trí của nó
Một thí dụ của mã ña mẫu tự là mã Vigenère
Dùng một mãng 2 chiều của các ký tự, trong ñó mỗi hàng chứa các mẫu tự theo Alphabet nhưng thứ tự trong từng hàng khác nhau:
Thí dụ:
Cột 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1516 1718 19 20 21 22 23 24 25
Hàng 0 A B CD E FGH I J K L M N O P Q R S T U V W X Y Z Hàng 1 B C DE FGH I J K L M N O P Q R S T U V W X Y Z A Hàng 2 C DE F GH I J K L M N O P Q R S T U V W X Y Z A B Hàng 3 D E FG H I J K L M N O P Q R S T U V W X Y Z A B C
Trang 10Hàng 24 Y Z AB C D E FGH I J K L M N O P Q R S T U V W X Hàng 25 Z AB C D E FGH I J K L M N O P Q R S T U V W X Y Cột 0 12 3 4 5 6 7 8 9 10 11 12 13 14 1516 17 18 1920 21 22 23 24 25
Ðể thay thế một ký tự, gọi i là vị trí tương ñối của nó trong bản tin (bắt ñầu là vị trí 0)
và j là vị trí tương ñối của nó trong thứ tự Alphabet Gọi V là mảng, ký tự sẽ ñược thay bằng một ký tự trong V[ i mod 26,j ]
Thí dụ dùng mảng ở trên ñể thay các chữ THE trong bản tin ở các vị trí 25, 54 và 104
Ta lập bảng thay thế như sau:
Ký tự cần thay Vị trí i i mod 26 Vị trí j Ký tự phải thay
Ðể khắc phục ñiều này người ta có thể tăng số hàng của mãng ký tự lên, nhưng như vậy ñưa ñến kết quả là khóa có thể quá dài (thậm chí dài hơn bản tin), khó khăn cho việc phát và lưu trữ một cách an toàn
3.4.3 Mã chuyển vị (Transposition cipher):
Người ta sẽ sắp xếp lại thứ tự các ký tự của bản văn bằng cách lưu chúng trong một mãng 2 chiều m cột, m ký tự ñầu tiên sẽ cho vào hàng thứ nhất, m ký tự kế tiếp cho vào hàng thứ hai, và cứ thế tiếp tục cho hết bản tin, sau ñó hoán ñổi vị trí các cột theo thứ tự mới, giả
sử p1, p2 pm Sự hoán ñổi có thể thực hiện một cách ngẫu nhiên hoặc theo một qui luật ñịnh trước Bản tin sẽ ñược truyền ñi theo thứ tự từ p1, p2 ñến pm
Thí dụ bản tin cần phát:
MISS PIGGY KERMIT ANIMAL AND FOZZIE BEAR Giả sử dùng mãng 5 cột 1 2 3 4 5, Bản tin ñược ñưa vào mãng như sau:
Số cột
Trang 11Sắp xếp lại các cột theo thứ tự 2, 4, 3, 1, 5, ta ñược bản tin:
IIKTMNZBSGRAL IASGE ADZEMP IIAO (2 khoảng trống) YMN FER
Rõ ràng là bản tin ñã mã hóa không còn một dáng dấp nào của bản tin ban ñầu Nhưng phương pháp vẫn còn khuyết ñiểm là sự lặp lại của các ký tự Nếu kẻ gian xác ñịnh ñược mật mã ñã dùng là loại chuyển vị thì khả năng giải ñược mã không khó lắm (nhất là có phương tiện tin học trong tay)
3.4.4 Mã DES (Data Encryption Standard) :
Mã DES ñược phát triển bởi IBM vào những năm ñầu thập niên 70, ñã ñược chính phủ cho phép xem như chuẩn trong việc tạo mật mã dùng trong thương mại và những tin tức không coi là bí mật và người ta ñã chế tạo các chip VLSI ñể thực hiện viêc tạo mã nhanh hơn
DES chia bản tin ra thành từng khối 64 bit và dùng khóa 56 bit ñể thực hiện quá trình tạo mã rất phức tạp bao gồm các kỹ thuật như chuyển vị, thay thế, toán tử EX-OR và vài xử
lý khác ñể tạo nên một bản mã 64 bit
Tiến trình thực hiên gồm:
- Bước 1: Chuyển vị 64 bit dữ liệu và 56 bit khóa
- Bước 2 gồm 16 lần thực hiện sự mã hóa tương tự nhau nhưng với các khóa khác nhau, dữ liệu ra của lần thực hiện trước sẽ là dữ liệu vào của lần thực hiện sau
- Bước 3: Trộn 32 bit ñầu và 32 bit cuối
- Bước 4: Thực hiện lần chuyển vị cuối cùng
(H 3 6) mô tả các bước tạo mã của DES