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

Nghiên cứu các giải thuật mã hóa

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

MỤC LỤC
Lời nói đầu...............................................................................................................3
Chương 1. MÃ HOÁ VÀ CÁC KHÁI NIỆM VỀ MÃ HOÁ ....................................5
1.1. Giới thiệu chung..........................................................................................5
1.2. Các khái niệm cơ bản ..................................................................................6
1.3. Thuật toán mã hóa đối xứng (Symmetric Algorithms) .................................8
1.4. Thuật toán mã hóa phi đối xứng (Puclic-key Algorithm) .............................9
1.5. Thám mã (Cryptanalyis) ............................................................................10
1.6. Thuật toán mã hóa dòng ............................................................................12
1.7. Thuật toán mã hóa khối .............................................................................13
Chương 2. CÁC HỆ MÃ HOÁ CỔ ĐIỂN.............................................................. 18
2.1. Hệ mã hóa thay thế (Substitution Cipher) ..................................................18
2.1.1. Hệ mã hóa CAESAR...........................................................................19
2.1.2. Hệ mã hóa AFFINE ............................................................................20
2.1.3. Hệ mã hóa PLAYFAIR .......................................................................21
2.1.4. Hệ mã hóa VIGENERE.......................................................................23
2.1.5. Hệ mã hóa HILL .................................................................................24
2.2. Hệ mã hóa đổi chỗ (Transposition Cipher) ................................................25
Chương 3. CHUẨN MÃ HÓA DỮ LIỆU DES (Data Encryption Standard) .......... 28
3.1. Giới thiệu chung về DES...........................................................................28
3.2. Mô tả thuật toán.........................................................................................30
3.2.1. Mã hóa DES........................................................................................30
3.2.2. Hoán vị khởi đầu (PI)..........................................................................33
3.2.3. Khóa chuyển đổi (PC-1)......................................................................34
3.2.4. Hoán vị mở rộng (E) ...........................................................................35
3.2.5. Hộp thay thế S.....................................................................................36
3.2.6. Hộp hoán vị P .....................................................................................38
3.2.7. Hoán vị cuối cùng (IP-1) ......................................................................38
3.3. Giải mã DES .............................................................................................39
3.4. Các chế độ của DES ..................................................................................39
3.4.1. Chế độ ECB ........................................................................................39


3.4.2. Chế độ CFB và OFB ...........................................................................40
3.4.3. Chế độ CBC........................................................................................41

1


3.5. Phần cứng và phần mềm thực hiện DES ....................................................42
3.6. Quá trình thay thế DES..............................................................................44
3.7. Sự an toàn của DES...................................................................................44
3.8. Kết luận.....................................................................................................47
Chương 4. HỆ MÃ HÓA CÔNG KHAI ................................................................. 48
4.1. Giới thiệu ..................................................................................................48
4.2. Lý thuyết về mật mã khóa công khai .........................................................48
4.3. Ứng dụng của mật mã khóa công khai.......................................................53
4.4. Các yêu cầu của mật mã khóa công khai....................................................53
4.5. Giải thuật RSA (Rivest, Shamir và Adleman - 1977).................................54
4.5.1. Mô tả giải thuật ...................................................................................54
4.5.2. Tính bảo mật của giải thuật RSA.........................................................57
4.5.3. Sự che dấu thông tin trong hệ thống RSA............................................62
4.5.4. Các giải thuật toán học được sử dụng trong RSA ................................63
4.6. Hệ mật Rabin ............................................................................................65
4.7. Hệ mã Elgamal..........................................................................................67
4.8. Hệ mã MHK (Merkle -Hellman Knapsack) ...............................................70
4.8.1. Thuật toán ...........................................................................................71
4.8.2. Tính bảo mật của mã hóa MHK ..........................................................72
Chương 5. CÀI ĐẶT CHƯƠNG TRÌNH THỬ NGHIỆM ..................................... 73
5.1. Giao diện chính của chương trình ..............................................................73
5.2. Form mã hóa và giải mã RSA....................................................................73
5.3. Form Chữ ký điện tử dùng giải thuật RSA để mã hóa và giải mã...............74
5.4. Form mã hóa và giải mã DES....................................................................75

KẾT LUẬN .......................................................................................................76
TÀI LIỆU THAM KHẢO...................................................................................... 77
PHỤ LỤC: MỘT SỐ MÃ NGUỒN ....................................................................... 78

2


Lời nói đầu
Ngay từ xa xưa, ngành mật mã đã có một vị trí chiến lược trong các cuộc
chiến tranh vĩ đại. Để gửi những thông tin quan trọng cho các đội quân trong cùng
một liên minh, người ta đã biết cách mã hóa những văn bản thông thường thành
những văn bản mã nhằm đảm bảo rằng nếu có bị đối phương phát hiện ra bản mã
cũng không thể khôi phục lại được thông tin ban đầu nếu như không biết được khóa
bí mật. Qua nhiều cuộc chiến tranh, vai trò của mật mã càng quan trọng thì ngành
mật mã học cũng phát triển theo và để lại những thành quả không nhỏ như các hệ
mã hóa cổ điển Caesar, Hill, Affine…Tất cả đã làm nền tảng cho ngành mật mã học
ngày nay.
Ngày nay, công nghệ thông tin đã thâm nhập vào hầu hết các lĩnh vực trong
cuộc sống, từ quân sự, an ninh đến kinh tế, khoa học và cả nghệ thuật… Nhưng
cũng đi cùng với sự phát triển của xã hội, hoạt động của mạng lưới tình báo kinh tế
cũng ngày càng rộng lớn và tinh vi hơn. Vấn đề ăn cắp thông tin không phải là mới
mẻ, song với sự ứng dụng rộng rãi của công nghệ mạng máy tính hiện nay, sự đảm
bảo an toàn thông tin là khó kiểm soát.
Giải pháp hiện thời cho vấn đề này chính là mã hóa thông tin. Đối với hầu
hết các quốc gia, hệ thống mã hóa coi là tài sản quốc gia. Ở Việt Nam, các hoạt
động liên quan đến mã hóa thông tin thường được Ban cơ yếu Trung ương chủ trì.
Việc ra đời các hệ mã hiện đại (bất đối xứng) không hề làm mất đi vai trò
quan trọng của các hệ mã cổ điển (đối xứng) mà nó còn bổ xung cho ngành mật mã
nhiều phương pháp mã hóa mới và nhiều khái niệm mới ra đời ví dụ như chữ ký số,
hàm băm, mã đại diện…

Chính vì sự quan trọng của ngành mật mã mà trong đồ án này sẽ trình bày
những nghiên cứu về một số thuật toán mã hóa như hệ mã hóa cổ điển (mã Affine,
mã Vigenere, mã Hill…), hệ mã hóa hiện đại (mã RSA, mã Balo…), chuẩn mã hóa
dữ liệu DES.
Đồ án gồm các phần như sau:
Chương 1: Mã hóa và các khái niệm về mã hóa.
Chương 2: Các hệ mã hóa cổ điển.
Chương 3: Chuẩn mã hóa dữ liệu DES (Data Encryption Standard).
Chương 4: Hệ mã hóa công khai.
Chương 5: Cài đặt chương trình thử nghiệm.

3


Do thời gian và khả năng có hạn, trong khi đề tài lại rộng cho nên em chỉ tìm
hiểu được một số hệ mã đơn giản (Affine, Viginera, Hill, RSA và chuẩn mã hóa dữ
liệu DES). Chắc chắn rằng bản luận văn này sẽ không tránh khỏi những thiếu sót,
em rất mong nhận được sự góp ý, chỉ dẫn thêm của các thầy cô và bạn bè để đồ án
này được hoàn thiện hơn.
Em xin chân thành cảm ơn cô giáo hướng dẫn Bùi Thị Thanh Xuân, cùng
toàn thể các thầy, các cô khoa Công Nghệ Thông Tin – ĐH Thái Nguyên đã tạo mọi
điều kiện giúp đỡ em hoàn thành luận văn này.
Thái Nguyên, tháng 5 năm 2008

4


Chương 1
MÃ HOÁ VÀ CÁC KHÁI NIỆM VỀ MÃ HOÁ
1.1.


Giới thiệu chung
Mọi người đều biết rằng, khi muốn giữ một cái gì đó cho riêng mình thì cần

phải che giấu nó đi. Để gửi một bức thư riêng cho một người bạn, chúng ta phải cho
nó vào một bao thư và dán bao thư lại. Nhưng nếu bức thư đó quan trọng mà chúng
ta không muốn cho ai khác người nhận biết được nội dung thì chúng ta muốn chắc
chắng rằng không một ai có thể bóc và đọc bức thư đó. Mặt khác, chúng ta cũng
không thể chắc chắn rằng trên đường bức thư đó tới tay người nhận có bị ai đó đọc
trộm hay không.
Từ đó nảy sinh vấn đề bảo vệ thông tin. Từ xa xưa, người ta đã biết áp dụng
các biện pháp bảo vệ thông tin thô sơ như là giấu thông tin, cho người canh
gác,….Khi trí tuệ sáng tạo của con người phát triển thì không thể áp dụng các biện
pháp thô sơ này được.
Ngày nay, với sự bùng nổ của công nghệ thông tin, đặc biệt là Internet với email, e-busuness, … thì vấn đề bảo vệ thông tin càng quan trọng, quyết định sự sống
còn của một công ty, đảm bảo an ninh quốc phòng, …
Có hai phương pháp để đạt được mục tiêu này: Kiểm soát lối vào và mã hóa
dữ liệu.
- Phương pháp kiểm soát lối vào nhằm ngăn cản sự xâm nhập trái phép vào
hệ thống nhờ xây dựng các cách kiểm soát thích hợp, ví dụ như các hệ thống sử
dụng mật khẩu, mà trong đó chỉ những người được phép sử dụng mới qua được để
vào hệ thống. Hệ này có một số nhược điểm: Chẳng hạn dữ liệu lưu trữ bên ngoài
cũng cần phải được bảo vệ và việc này dường như chỉ có sự bảo vệ thuần túy vật lý
là có thể đạt được. Như vậy, điều đó dẫn đến sự kém an toàn đối với hệ thống. Một
nhược điểm khác là phương pháp này không thực tiễn khi ta quan hệ với các hệ
thống lớn.
- Sự truy nhập thông tin còn được kiểm soát bằng một phương pháp khác:
Mã hóa dữ liệu. Điều này có nghĩa là thông tin được lưu trữ trong hệ thống dưới
dạng đã được mã hóa. Khi đó, những người truy nhập trái phép dù có lấy được


5


thông tin, nhưng nó lại ở dạng mã hóa, do đó thông tin này vô nghĩa nếu họ không
biết cách giải.
Mật mã học nghiên cứu các hệ thống dùng cho việc truyền thông bí mật, gồm
có hai lĩnh vực nghiên cứu: Mã hóa (cryptography) - thiết kế các hệ truyền thông bí
mật, và giải mã (cryptanalysis) – nghiên cứu các phương pháp để giải mã các hệ
truyền thông quân sự và ngoại giao, nhưng các áp dụng có ý nghĩa thực tế của nó
ngày nay đã xuất hiện trong tất cả các lĩnh vực của xã hội. Hai ví dụ minh chứng là
các hệ thống tập tin máy tính (trong đó mỗi người sử dụng thích giữ riêng các tập tin
của họ) và các hệ thống chuyển ngân điện tử. Một người sử dụng máy tính chỉ muốn
cất giữ riêng các tập tin máy tính của mình cũng như đã cất các giấy tờ trong tủ hồ
sơ, và một ngân hàng thì muốn việc chuyển ngân điện tử sẽ an toàn như là được
chuyển ngân bằng xe bọc thép vậy.

1.2.

Các khái niệm cơ bản
Mã hóa (cryptography) là “nghệ thuật” che giấu và bảo vệ thông tin để lưu

trữ và trao đổi. Mục đích của mã hóa là làm cho thông tin không thể đọc được ngoại
trừ những người được người tạo thông tin đó cho phép.
Các thông điệp cần chuyển đi và cần được bảo vệ an toàn gọi là bản rõ
(plaintext), và được ký hiệu là P. Nó có thể là một dòng vào các bit, các file, âm
thanh số hóa,… Bản rõ được dùng để lưu trữ hoặc để truyền đạt thông tin. Trong
mọi trường hợp bản rõ là thông điệp cần mã hóa.
Quá trình xử lý một thông điệp trước khi gửi được gọi là quá trình mã hóa
(encryption).
Một thông điệp đã được mã hóa được gọi là bản mã (ciphertext), và được ký

hiệu là C.
Quá trình xử lý ngược lại từ bản mã thành bản rõ được gọi là quá trình giải
mã (decryption).
Hàm mã hóa E thực hiện trên P để thu được C, ta có: E(P) = C
Hàm giải mã D thực hiện trên C để thu được P, ta có: D(C) = P
Việc mã hóa và giải mã thường được thực hiện theo một hệ mã được mô tả
rõ. Khóa (key) là một giá trị dùng để thực hiện một thuật toán mã hóa. Khóa có thể
là một số, một xâu ký tự, … Khóa này có thể nhận một trong nhiều giá trị (càng
nhiều càng tốt). Giới hạn các giá trị có thể của khóa được gọi là không gian khóa

6


(space key). Mỗi khóa k xác định một hàm mã hóa và giải mã, vì vậy các hàm mã
hóa và giải mã có thể được biểu diễn như sau:
Ek(P) = C
Dk(C) = P
Một cách cụ thể hơn, một hệ mã hóa bao gồm: Một không gian bản rõ, một
không gian bản mã và một không gian khóa.
- Không gian bản rõ có thể * trên bảng chữ cái  hoặc tập hợp tất cả các câu
có nghĩa trong một ngôn ngữ tự nhiên nào đó.
- Không gian bản mã có thể là * trên bảng chữ cái .
- Không gian khóa K là giới hạn có thể nhận được của khóa k. Mỗi khóa sẽ
xác định một cặp các ánh xạ Ek và Dk tương ứng.
Chúng ta đưa ra một số khái niệm cơ bản của lý thuyết ngôn ngữ. Một tập
hợp khác rỗng  được gọi là bảng chữ cái (alphabet). Các phần tử của bảng chữ cái
là các ký tự (letter). Chuỗi hữu hạn các phần tử của  được gọi là các từ (word).
Một ký tự có thể xuất hiện vài lần trong một từ. Một từ đặc biệt không chứa ký tự
nào được gọi là từ rỗng  (empty word). Độ dài của một từ là số ký tự trong từ đó,
mỗi ký tự được đếm bằng số lần xuất hiện của nó. Tập hợp tất cả các từ trên  được

ký hiệu là *. Các ngôn ngữ thông thường xuất hiện trên  là tập con của *.
Ví dụ, nếu  là bảng chữ cái tiếng Anh {A, B,... , Z} thì ABBA, HORSE và
KOKOOKOKOONKOKOKOKKO là các từ trên . Chúng ta cũng có thể thêm vào
bảng chữ cái các ký tự viết thường, các dấu và ký tự cách cần thiết cho một bản rõ bảng chữ cái mở rộng.
Thông thường bản rõ tiếng Anh đầu tiên được mã hóa thành dạng nhị phân
(encoded – mã hóa không có ý che dấu) bằng cách thay mỗi ký tự bởi một số nhị
phân chỉ vị trí của nó trong bảng chữ cái tiếng Anh. Với bảng chữ cái tiếng Anh có
26 ký tự ta có 24 < 26 < 2 5, do vậy mỗi ký tự cần được biểu diễn bằng một số nhị
phân 5 bit:
A = 00001, B = 00010, C = 00011,... , N = 01110,... , Z = 11010.
Trong một hệ mã hóa nếu khóa để mã và khóa để giải giống nhau thì:
Dk(Ek(P)) = P

7


Hình 1.1. Mã hóa với khóa mã và khóa giải giống nhau
Có nhiều thuật toán mà khóa mã và khóa giải khác nhau. Khi đó, khóa mã k1
khác với khóa giải k2:
Ek1(P) = C
Dk2(C) = P
Dk2(Ek1(P)) = P

Hình 1.2. Mã hóa với khóa mã và khóa giải khác nhau

1.3.

Thuật toán mã hóa đối xứng (Symmetric Algorithms)
Thuật toán mã hóa đối xứng là thuật toán có khóa dùng để giải mã có thể tính


toán được từ khóa dùng để mã hóa. Trong nhiều hệ thống khóa dùng để mã hóa và
khóa dùng để giải mã là giống nhau. Những thuật toán mã hóa này được gọi là thuật
toán mã hóa bí mật, khóa đơn, hay một khóa (secret-key algorithms, single-key
algorithms, one-key algorithms). Thuật toán mã hóa này cần người gửi và người
nhận thống nhất một khóa trước khi trao đổi thông tin. Khóa này cần phải được cả
hai giữ bí mật.

8


Sự bảo mật của một thuật toán đối xứng dựa trên khóa. Tiết lộ khóa có nghĩa
rằng bất cứ ai biết khóa đều có thể mã hóa và giải mã thông tin trên hệ thống này.
Nhóm mã hóa và giải mã bằng thuật toán đối xứng được thể hiện bằng công
thức:
Ek(P) = C
Dk(C) = P
Dk(Ek(P)) = P
Thuật toán đối xứng lại được chia làm hai loại. Một loại thực hiện trên bản rõ
từng bít một, gọi là thuật toán mã hóa dòng (stream algorithms, stream ciphers).
Còn một loại thực hiện trên bản rõ theo từng nhóm bít một, và thuật toán này được
gọi là thuật toán mã hóa khối (block algorithms, block ciphers). Những thuật toán
mã hóa khối thường được thực hiện trên máy tính, thông thường cỡ của một khối là
64 bits – đây là khối đủ lớn để ngăn ngừa sự phân tích của các nhà thám mã và cũng
đủ nhỏ để nó làm việc một cách hiệu quả. Trước khi máy tính ra đời, những thuật
toán này thực hiện trên bản rõ mỗi lần một ký tự. Ta có thể xem như là thuật toán
mã hóa dòng thực hiện trên một dòng các ký tự còn thuật toán mã hóa khối thực
hiện trên các khối 8 bits.

1.4.


Thuật toán mã hóa phi đối xứng (Puclic-key Algorithm)
Thuật toán mã hóa phi đối xứng hay còn gọi là thuật toán mã hóa khóa công

khai. Chúng được thiết kế trên cơ sở khóa dùng để mã hóa khác với khóa dùng để
giải mã.
Khóa dùng để giải mã khó mà có thể tính toán được từ khóa dùng để mã hóa
(thông thường là không đủ thời gian). Chúng được gọi là hệ thống khóa công khai vì
khóa dùng để mã có thể được công bố rộng rãi. Một người bất kỳ có thể sử dụng
khóa mã để mã hóa một thông điệp, nhưng chỉ có một số ít người với khóa giải
tương ứng mới có thể giải mã thông điệp đó. Trong những hệ thống này, khóa dùng
để mã hóa được gọi là khóa công khai (public key), còn khóa dùng để giải mã được
gọi là khóa riêng (private key).
Thuật toán này được thể hiện bằng:
Ek1(P) = C
Dk2(C) = P
Dk2(Ek1(P)) = P

9


Trong một số trường hợp, thông điệp sẽ được mã hóa bằng khóa riêng và giải
mã bằng khóa công khai, điều này thường được áp dụng đối với chữ ký điện tử.

1.5.

Thám mã (Cryptanalyis)
Thám mã là “nghệ thuật” tìm lại bản thông điệp gốc bằng cách phân tích bản

mã.
Mục đích chính của mật mã là phải giữ bí mật bản rõ (hoặc khóa, hoặc cả

hai) khỏi những người nghe trộm (attacker). Thám mã là cần phục hồi bản rõ của
một thông điệp từ bản mã không có khóa. Nếu thành công, người phân tích mã có
thể thu được bản rõ hoặc khóa, hoặc cũng có thể tìm thấy điểm yếu trong một hệ
thống mã hóa. Các thuật toán sử dụng cho phần lớn các hệ thống mã hóa là nổi
tiếng, vì vậy chúng ta giả thiết rằng người thám mã đã biết thuật toán để bắt đầu
thám mã.
Như vậy, vấn đề cốt yếu của một hệ mã hóa tốt là việc khôi phục bản rõ P từ
bản mã C khi biết Dk phải là khó, hoặc tốt hơn là không thể được.
Có 6 tình huống mà người thám mã có thể có khi phân tích. Trong các tình
huống đó giả sử rằng người thám mã đã biết thuật toán được dùng để mã hóa:
1. Chỉ biết bản mã (Ciphertext-only attack): Trong trường hợp này, người thám mã
có bản mã của một thông điệp, và biết được thuật toán dùng để mã hóa. Công việc
của người thám mã là phải tìm được bản rõ của thông điệp, và tốt hơn hết là tìm ra
khóa được sử dụng để mã hóa thông điệp, để từ đó giải mã những thông điệp khác
được mã hóa với cùng khóa đó.
Để việc phân tích của người thám mã có hiệu quả thì tốt hơn hết là bản mã
phải dài. Trong những hệ đơn giản, ví dụ như Affine, một bản mã ngắn cũng đưa lại
kết quả bởi vì chỉ có duy nhất một khóa được sử dụng để mã hóa. Trong những hệ
hoàn chỉnh hơn thì bản mã dài là cần thiết. Hiệu quả của phương pháp phân tích có
thể dựa trên thông tin thống kê liên quan tới ngôn ngữ mà bản rõ được sử dụng. Ví
dụ như thông tin về tần số xuất hiện của mỗi ký tự riêng lẻ trong tiếng Anh.
Đầu vào: C1 = Ek(P1), C2 = Ek(P2),... Ci = Ek(Pi)
Cần tìm: Hoặc P1, P2, ... Pi; k; hoặc một thuật toán để nhận được Pi+1 từ
Ci+1=Ek(Pi+1).
2. Biết bản rõ (Known-plaintext attack): Người thám mã không chỉ biết bản mã
của một vài thông điệp mà còn biết cả bản rõ của những thông điệp này. Công việc
của người thám mã là tìm ra khóa (hoặc các khóa) được sử dụng để mã hóa các

10



thông điệp hoặc thuật toán để giải mã bất kỳ một thông điệp mới nào được mã hóa
bằng khóa đó.
Đầu vào: P1, C1 = Ek(P1), P2, C2 = Ek(P2), ... Pi, Ci = Ek(Pi)
Cần tìm: Hoặc k, hoặc một thuật toán để nhận được Pi+1 từ Ek(Pi+1).
3. Bản rõ được lựa chọn (Chosen-plaintext attack): Người thám mã không chỉ
phân tích bản mã mà còn được kết hợp với bản rõ của một vài thông điệp, nhưng
các bản rõ không là tùy ý mà do người thám mã phải lựa chọn. Trường hợp này tốt
hơn trường hợp (2) đối với người thám mã, bởi vì người thám mã có thể chọn khối
bản rõ đặc trưng để giải mã, nó có thể mang lại nhiều thông tin về khóa. Công việc
của người thám mã là tìm ra khóa (hoặc các khóa) được sử dụng để mã hóa các
thông điệp hoặc một thuật toán để giải mã bất cứ thông điệp nào đã được mã hóa
mới bằng các khóa đó.
Đầu vào: P1, C1 = Ek(P1), P 2, C2 = Ek(P2),... Pi, Ci = Ek(Pi), người thám mã
được chọn P1, P2, ... Pi.
Cần tìm: Hoặc k, hoặc một thuật toán để nhận được Pi+1 từ Ci+1 = Ek(Pi+1).
4. Bản rõ được lựa chọn thích hợp (Adaptive-chosen-plaintext attack): Đây là một
trường hợp đặc biệt của trường hợp bản rõ được lựa chọn. Người thám mã không
chỉ có thể được lựa chọn bản rõ mà nó được mã hóa, mà họ còn có thể biến đổi
những điểm cần thiết dựa trên kết quả của những lần mã hóa trước. Với trường hợp
bản rõ được lựa chọn, người thám mã có thể lựa chọn một khối bản rõ lớn để giải
mã; trong trường hợp bản rõ được lựa chọn thích hợp họ có thể lựa chọn một khối
bản rõ nhỏ hơn sau đó lựa chọn khối khác dựa vào kết quả của khối đầu tiên, v.v…
5. Bản mã được lựa chọn (Chosen-plaintext attack): Người thám mã có thể chọn
các bản mã khác nhau và biết được bản rõ. Công việc của người thám mã là tìm
khóa.
Đầu vào: C1, P1 = Dk(C1), C2, P2 = Dk(C2),... Ci, Pi = Dk(Ci)
Cần tìm: k
6. Khóa được lựa chọn (Chosen-key): Người thám mã biết phương pháp mã hóa Ek
và cố tìm phương pháp giải mã tương ứng Dk trước khi nhận bất cứ mẫu bản mã

nào. Trong trường hợp này người thám mã có rất nhiều thời gian để làm việc.
Trường hợp (5), (6) thường được ứng dụng chủ yếu đối với các hệ thống mã
hóa sử dụng khóa công khai.
Hiện nay rất nhiều thuật toán mã hóa. Có ba thuật toán thường được sử dụng:

11


- DES (Data Encryption Standard) là thuật toán mã hóa trên máy tính, hiện
nay đang được sử dụng rộng rãi nhất. DES là chuẩn mã hóa được phát minh ở Mỹ.
Nó là thuật toán đối xứng; khóa để mã và khóa để giải giống nhau.
- RSA (tên của thuật toán được viết tắt bởi tên của các tác giả - Rivest,
Shamir và Adleman) là thuật toán khóa công khai phổ biến nhất. Nó có thể được sử
dụng cho cả mã hóa và chữ ký điện tử.
- DSA (Digital Signature Algorithm) là thuật toán khóa công khai, nó không
được sử dụng để mã hóa mà được dùng trong chữ ký điện tử.

1.6.

Thuật toán mã hóa dòng
Mã hóa dòng là thuật toán biến đổi bản rõ thành bản mã một bít một lần.
Mô tả đơn giản nhất của mã dòng được chỉ bởi hình 1.3:

Hình 1.3. Mã dòng
Bộ tổng hợp dòng khóa (key generator) mà đầu ra là một dòng các bít k1,
k2,... , ki. Khóa này được XOR với một dòng các bít bản rõ p 1, p2,... , để tạo ra dòng
bít bản mã.
ci = pi XOR ki
Để giải mã, các bít của bản mã được XOR với các dòng khóa để khôi phục
lại các bít của bản rõ.

pi = ci XOR ki
(Điều này có thể suy ra từ: (pi XOR ki) XOR ki = p i).
Bí mật của hệ thống phụ thuộc vào toàn bộ bên trong của bộ tổng hợp dòng
khóa. Nếu bộ tổng hợp dòng khóa cho ra một dòng vô tận các bít 0 thì bản mã sẽ
bằng bản rõ và toàn bộ việc mã hóa sẽ bị hỏng. Nếu bộ tổng hợp dòng khóa tạo ra

12


một dòng các mẫu 16 bít thì thuật toán sẽ chỉ là một phép XOR bình thường với bí
mật không đáng kể. Nếu bộ tổng hợp dòng khóa tạo ra một dòng vô tận các bít ngẫu
nhiên (không phải giả ngẫu nhiên mã là ngẫu nhiên thật sự), có một tập hợp lớn các
số ngẫu nhiên không lặp lại (one-time pad) và một bí mật hoàn hảo.
Các mã dòng thực sự nằm ở giữa một phép XOR bình thường với một onetime pad – càng lý tưởng nếu nó càng gần với one-time pad. Bộ tổng hợp dòng khóa
tạo ra một dòng bít tựa ngẫu nhiên, nhưng thật ra là một dòng xác định mà có thể tái
tạo lại lúc giải mã. Bộ tổng hợp dòng khóa cho ra dãy bít càng ngẫu nhiên thì người
phá mã càng khó phá khóa hơn. Tuy vậy, vấn đề tạo ra một bộ tổng hợp dòng khóa
tạo ra dãy bít tựa ngẫu nhiên đối với một người mới tìm hiểu không phải là chuyện
dễ.
Hình 1.4 giới thiệu một sơ đồ dùng LFSR (LFSL – linear feedback shift
register) để tạo bộ tổng hợp dòng khóa ngẫu nhiên.
â

Hình 1.4. Bộ tổng hợp dòng khóa ngẫu nhiên

1.7.

Thuật toán mã hóa khối
Thuật toán mã hóa khối thực hiện trên các khối bản rõ và bản mã - một khối


thường có độ lớn 64 bits. Sử dụng thuật toán mã hóa khối theo một vài phương pháp
khác nhau phụ thuộc vào mục đích đặc biệt. Thuật toán mã hóa khối thường thực
hiện chậm hơn thuật toán mã hóa dòng.
1. Chế độ chuyển mã điện tử (Electronic Code Book Mode - ECB)
Phương pháp rõ ràng nhất để sử dụng mã hóa khối là mã hóa mỗi khối của
bản rõ thành một khối bản mã. Phương pháp này được gọi là chuyển mã điện tử Electronic Code Book Mode (ECB), bởi vì một khối của bản rõ luôn luôn mã hóa
thành một khối tương tự trong bản mã. Một khối thông thường là 64 bits, vì vậy

13


bảng mã (codebook) sẽ có 264 phần tử (entry) – quá lớn để tính toán trước
(precompute). Mỗi khóa lại có một bảng mã khác nhau.
Đây là phương pháp mã hóa dễ dùng nhất. Lợi ích của phương pháp này là
các khối bản rõ được mã hóa độc lập với nhau. Chúng ta không phải mã hóa một
file một cách tuần tự; chúng ta có thể mã hóa mười khối ở giữa trước, sau đó là
những khối ở cuối và cuối cùng là những khối đầu tiên. Điều quan trọng là khi mã
hóa một file là phải truy nhập ngẫu nhiên. Ví dụ về cơ sở dữ liệu nếu một cở sở dữ
liệu được mã hóa bằng ECB thì sau đó một bản ghi có thể được giải mã không phụ
thuộc vào bất kỳ bản ghi nào. Các bản ghi có thể được thêm vào và xóa đi ở giữa
của cơ sở dữ liệu.
Vấn đề xảy ra với phương pháp mã hóa này là nếu người thám mã có bản rõ
và bản mã của một vài thông điệp, thì họ có thể dịch được bản mã (codebook) mà
không cần khóa. Thực tế hiện nay, một thông điệp được chia thành các mảng dẫn
đến việc lặp lại thông tin. Một thông điệp có thể có các bit tuần tự dùng chung với
các thông điệp khác. Thông điệp do máy tính tạo ra, giống như thư điện tử, có thể có
một cấu trúc đặc biệt. Thông điệp có thể có tham số, các tham số này chỉ nhận một
vài giá trị hoặc là xâu dài các số 0 hoặc dấu cách. Thông điệp do máy tính sinh ra có
thể luôn có vùng dữ liệu quan trọng ở cùng một vị trí nào đó.
Nếu người thám mã được biết rằng bản rõ “5e081bc5” mã hóa thành khối

bản mã “7ea593a4”, họ có thể ngay lập tức giải mã khối bản mã đó ở bất cứ chỗ nào
mà nó xuất hiện trong thông điệp khác. Nếu một ứng dụng mã hóa các thông điệp
với nhiều sự dư thừa, và các sự dư thừa đó dẫn tới sự xuất hiện trong những chỗ
nhất định của các thông báo, thì đó là một điểm rất dễ có thể bị xâm nhập.
Điểm không an toàn nhất nằm ở đầu và cuối thông điệp, đây là nơi chứa
thông tin về người nhận, người gửi, ngày tháng, v.v…. Vấn đề này đôi khi được gọi
là sự bắt đầu và kết thúc dập khuôn (stereotyped beginnings và stereotyped
endings), và vấn đề đó được giải quyết trong các phương pháp mã hóa sẽ trình bày
tiếp theo.
2. Chế độ liên kết khối mã (Cipher Block Chaining Mode - CBC).
Chế độ này sử dụng một chuỗi nối tiếp các thao tác, bởi vì kết quả mã hóa
của khối dữ liệu trước được đưa vào để mã hóa khối dữ liệu hiện thời. Khối dữ liệu
trước được sử dụng để thay đổi khối mã hóa tiếp theo. Mỗi khối bản rõ phụ thuộc
vào tất cả các khối bản rõ trước đó.

14


Trong chế độ liên kết khối mã (Cipher Block Chaining Mode - CBC), bản rõ
được XOR với khối mã trước đó, trước khi được mã hóa (Hình 1.5). Sau khi một
khối bản rõ được mã hóa, bản mã của nó được lưu trữ trong một thanh ghi kéo lùi
(feedback register). Trước khi khối bản rõ tiếp theo được mã hóa, nó XOR với thanh
ghi kéo lùi để tạo ra đầu vào tiếp theo cho quá trình mã hóa. Bản mã được tạo ra lại
tiếp tục được lưu trữ trong thanh ghi kéo lùi, để XOR với khối bản rõ tiếp theo. Cứ
như vậy đến khi hết thông điệp. Sự mã hóa một khối phụ thuộc vào tất cả các khối
trước đó.

Hình 1.5. Chế độ liên kết khối mã
Giải mã cũng như vậy. Một khối bản mã được giải mã bình thường và cũng
được cất giữ trong thanh ghi kéo lùi. Sau khi khối tiếp theo được giải mã, nó được

XOR với kết quả trong thanh ghi kéo lùi. Cứ như vậy đến hết thông điệp.
Mô tả bằng công thức toán học quá trình trên như sau:
Ci = EK(Pi XOR Ci-1)
Pi = Ci-1 XOR DK(Ci)
Sự lan truyền lỗi: CBC có thể được mô tả như là “kéo lùi” bản mã ở lúc kết
thúc mã hóa và “kéo tiến” bản mã lúc kết thúc sự giải mã. Điều đó dẫn tới bao hàm
cả việc phải làm việc với các lỗi. Một lỗi đơn trên một khối bản rõ sẽ ảnh hưởng đến
khối bản mã tương ứng và tất cả các khối bản mã tiếp theo. Nhưng điều đó không

15


đáng chú ý bởi vì lúc giải mã sẽ đảo lại các ảnh hưởng này, và bản rõ đã lấy lại chỉ
có một lỗi đơn tương tự.
Bản rõ bị lỗi là việc bình thường. Chúng bị lỗi có thể đơn giản do nhiễu trên
đường kết nối hoặc sai số của các phương tiện lưu trữ. Trong kiểu CBC, một lỗi bít
đơn trong bản rõ ảnh hưởng đến một khối bit của bản rõ sau khi giải mã. Khối chứa
lỗi bị thay đổi hoàn toàn. Khối tiếp theo có một bít lỗi ở vị trí giống như vị trí ở khối
bị lỗi. Các khối sau khối này không bị ảnh hưởng do lỗi vậy nên CBC có khả năng
tự sửa. Hai khối bị ảnh hưởng bởi lỗi, nhưng hệ thống tự sửa lại và tiếp tục hoạt
động bình thường ở tất cả các khối tiếp theo.
3. Chế độ phản hồi mã (Cipher Feedback Mode - CFB)
Với CBC, việc mã hóa thông tin không thể bắt đầu cho đến khi một khối dữ
liệu hoàn chỉnh đã được nhận. Đó là một vấn đề trong nhiều ứng dụng mạng. Ví dụ,
trong một môi trường mạng bảo mật, một thiết bị đầu cuối phải chuyển mỗi ký tự
tới Host ngay lúc nó được nhập vào. Khi dữ liệu phải xử lý ở kích cỡ byte thì kiểu
CBC là không thích hợp.
Trong kiểu phản hồi mã (Cipher Feedback – CFB), dữ liệu được mã hóa
trong những đơn vị nhỏ hơn kích cỡ khối. Ví dụ sau sẽ mã hóa một ký tự ASCII một
lần (được gọi là CFB 8-bit). Không có gì bí mật ở số 8, ta có thể mã hóa một bit một

lần bằng cách sử dụng CFB 1-bit.
Hình 1.6 cho ta thấy cách làm việc của CFB 8-bit với thuật toán mã hóa 64
bit. Một thuật toán mã khối trong kiểu CFB làm việc trên một hàng đợi kích cỡ của
khối vào (64 bit). Lúc bắt đầu, hàng đợi được điền đầy với một giá trị khởi đầu như
trong kiểu CBC. Hàng đợi được mã hóa và 8 bít trái nhất được XOR với ký tự 8 bít
đầu tiên của bản rõ để trở thành ký tự 8 bít đầu tiên của bản mã. Ký tự này được
chuyền đi, 8 bít đó cùng được chuyển vào vị trí của 8 bít bên phải nhất của hàng đợi
và tất cả các bít khác của hàng đợi dịch trái đi 8 vị trí, 8 bít trái nhất được bỏ đi. Sau
đó ký tự tiếp theo được mã hóa tương tự. Việc giải mã tiến hành ngược lại quá trình
mã hóa. Tất cả hai việc mã hóa và giải mã, thuật toán mã khối được sử dụng với
kiểu mã hóa của nó. Giống như CBC, CFB liên kết các ký tự của bản rõ với nhau.
Vậy nên bản mã phụ thuộc vào tất cả các bản rõ ở phía trước.

16


Hình 1.6. Chế độ phản hồi mã
Sự lan truyền lỗi: Với CFB, một lỗi ở bản rõ ảnh hưởng tới tất cả các bản mã
tiếp sau như CBC. Lỗi này được đảo lại lúc giải mã.
Một lỗi ở bản mã thú vị hơn nhiều. Ảnh hưởng đầu tiên của 1 bit lỗi trong
bản mã sẽ dẫn đến một lỗi đơn ở bản rõ. Sau đó, lỗi được nhập vào thanh ghi dịch.
Trong kiểu CFB 8 bit, 9 byte của bản mã bị hỏng do một lỗi bit đơn. Sau đó hệ
thống sẽ trở lại và tất cả dãy bản mã tiếp theo được giải mã đúng.
Một vấn đề khó thấy với kiểu nảy sinh lỗi này là nếu một kẻ tấn công biết
được bản rõ của một cuộc vận chuyển, anh ta có thể đảo các bit trong khối được đưa
ra và tạo một khối mà giải mã tới bất kỳ cái gì anh ta muốn. Khối tiếp theo được
giải mã thành một khối hỏng, nhưng phụ thuộc vào ứng dụng, phần trước đó có thể
đã bị sử dụng rồi. Tuy rất dễ tạo ra một lỗi dây chuyền, song CFB tự nó sửa lại tốt
với các lỗi đồng bộ. Các lỗi được nhập vào thanh ghi dịch, ở đó nó gây hỏng 8 byte
dữ liệu cho đến khi nó rơi ra ngoài ở đầu kia.


17


Chương 2
CÁC HỆ MÃ HOÁ CỔ ĐIỂN
2.1.

Hệ mã hóa thay thế (Substitution Cipher)
Hệ mã hóa thay thế là hệ mã hóa trong đó mỗi ký tự của bản rõ được thay thế

bằng ký tự khác trong bản mã (có thể là một chữ cái, một số hoặc một ký hiệu). Sự
thay thế này làm cho bản rõ trở lên khó hiểu đối với mọi người nhưng người nhận sẽ
đảo sự thay thế trong bản mã để được bản rõ.
Có 4 kỹ thuật thay thế sau đây:
- Thay thế đơn giản (A simple substitution cipher): Là hệ trong đó một ký tự
của bản rõ được thay bằng một ký tự tương ứng trong bản mã. Một ánh xạ 1-1 từ
bản rõ tới bản mã để mã hóa toàn bộ thông điệp.
- Thay thế đồng âm (A homophonic substitution cipher): Giống như hệ thống
mã hóa thay thế đơn, ngoại trừ một ký tự của bản rõ có thể được ánh xạ tới một
trong số một vài ký tự của bản mã: Sơ đồ ánh xạ 1-n. Ví dụ, “A” có thể tương ứng
với 5, 13, 25, hoặc 56, “B” có thể tương ứng với 7, 19, 31, hoặc 42, v.v…
- Thay thế đa mã tự (A Polyalphbetic substitution cipher): Được tạo nên từ
nhiều thuật toán mã hóa thay thế đơn. Ánh xạ 1-1 như trong trường hợp thay thế
đơn, nhưng có thể thay đổi trong phạm vi một thông điệp. Ví dụ, có thể có năm
thuật toán mã hóa đơn khác nhau được sử dụng; đặc biệt thuật toán mã hóa đơn
được sử dụng thay đổi theo vị trí của mỗi ký tự trong bản rõ.
- Thay thế đa sơ đồ (A polygram substitution cipher): Là thuật toán trong đó
các khối ký tự được mã hóa theo nhóm. Đây là thuật toán tổng quát nhất, cho phép
thay thế các nhóm ký tự của văn bản gốc. Ví dụ, “ABA” có thể tương ứng với

“RTQ”, “ABB” có thể tương ứng với “SLL”, v.v…
Ví dụ ROT13 là một chương trình mã hóa đơn giản thường thấy trên hệ
thống UNIX. Trong thuật toán mã hóa này, A được thay thế bằng N, B được thay
thế bằng O, v.v…Mọi ký tự được quay dịch 13 vị trí. Đây là một ví dụ về mã hóa
thay thế đơn.
#include <stdio.h>
void main()
{

int c;

18


while ((c ==

getchar()) != EOF)

{
if (c >= ‘a’ && c <= ‘m’)
c = c + 13;
else
if (c >= ‘n’ && c <= ‘z’)
c = c – 13;
else
if (c >= ‘A’ && c <= ‘M’)
c = c + 13;
else
if (c >= ‘N’ && c <= ‘Z’)
c = c-13;

putcharI;
}
}

Mã hóa một file hai lần bằng ROT13 và lưu giữ kết quả trong file gốc:
P = ROT13(ROT13(P))
Có rất nhiều hệ mã có thể dễ dàng bẻ gẫy bởi vì bản mã không ẩn đi được tần
số xuất hiện của các ký tự khác nhau của bản rõ, khoảng 26 ký tự tiếng Anh. Một
nhà thám mã giỏi có thể xây dựng lại được bản rõ.
2.1.1. Hệ mã hóa CAESAR
Hệ mã hóa nổi tiếng CAESAR là một hệ mã hóa thay thế đơn làm việc trên
bảng chữ cái tiếng Anh 26 ký tự (A, B, …, Z).
Trong hệ CAESAR và các hệ tương tự còn lại ta sử dụng các số tự nhiên thay
cho các ký tự - đánh số các ký tự trong bảng chữ cái theo thứ tự: A là 0, B là 1, …và
Z là 25.
A B
0 1

C
2

D
3

E
4

F G H
5 6 7


I
8

J
9

... L M N ... W X Y Z
... 11 12 13 ... 22 23 23 25

Các phép toán số học thực hiện theo modul 26. Có nghĩa là 26 đồng nhất với
0, 27 đồng nhất với 1, 28 đồng nhất với 2, …Ví dụ:
217 + 59 = 79 = 1 + 326 = 1
Hệ CAESAR sử dụng thuật toán mã hóa trong đó mỗi ký tự được thay thế
bởi một ký tự khác được xác định bằng cách dịch ký tự cần mã hóa sang phải k
bước theo modul 26: Ek() = ( + k) MOD 26

19


Với  là một ký tự, 0  k  26, MOD là phép chia lấy phần dư.
Thuật toán giải mã tương ứng I là lùi lại k bước trong bảng chữ cái theo
modulu 26: I() = ( - k) MOD 26
Không gian khóa của hệ CAESAR bao gồm 26 số 0, 1, 2, …, 25.
Ví dụ: với k = 3, A được thay thế bằng D, B được thay bằng E, …, W được
thay bằng Z, …, X được thay bằng A, Y được thay bằng B, và Z được thay bằng C.
Ta có:
Bảng chữ cái gốc:
A B C D E F G H I J K L M N O P Q R S T U V WX Y Z
Bảng chữ cái dùng để mã hóa:
D E F G H I J K L MN O P Q R S T U V WX Y Z A B C

Trong trường hợp này bản rõ “TRY I” được mã hóa thành “WUBDJDLQ”,
bản rõ “HELP ME” được mã hóa thành “KHOSPH”. (Chú ý, các ký tự trống trong
bản mã được bỏ đi để đảm bảo tính an toàn).
Thêm một vài ví dụ minh họa:
E25(IBM) = HAL, E6(MUPID) = SAVOJ,
E3(HELP) = KHOS, E1(HOME) = IPNF,
E6(SAVOJ) = E20(SAVOJ) = MUPID.
Một số thuộc tính của Ek và I là:
- Tính giao hoán: Ek và I được áp dụng lần lượt, thứ tự không quan trọng. Ví
dụ: E3 D7 E6 D11 = E3 E6 D7 D11 = D9 = E17.
- Với k bất kỳ thỏa mãn 1  k  26 ta có: I = E26-k, IEk = E0 = D0.
Hệ CAESAR là hệ mã hóa cũ và không an toàn vì không gian khóa của nó
rất nhỏ, do đó có thể thám mã theo phương pháp vét cạn. Khóa giải mã có thể tính
ngay được từ khóa mã hóa. Do chỉ có 26 khóa nên ta có thể thử lần lượt các khóa
cho đến khi tìm được khóa đúng.
2.1.2. Hệ mã hóa AFFINE
Hệ mã AFFINE được xác định bởi hai số nguyên a và b, với điều kiện 0  a,
b  25 (tức a, b thuộc bảng chữ cái tiếng Anh 26 ký tự). Ở đây chúng ta xét hệ làm
việc trên các số tự nhiên thay cho các ký tự như đã nói ở phần trên, các phép toán số
học được thực hiện theo modul 26.

20


Sự thay thế mỗi ký tự  sẽ được xác định bằng công thức (hàm mã hóa
AFFINE): Ek() = (a + b) MOD 26
Lưu ý: Khi a = 1 thì ta có hệ mã hóa CAESAR.
Ví dụ: Nếu a = 3 và b = 5 thì ta có, bảng số tự nhiên tương ứng với bảng chữ
cái gốc:
0


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15


16

17

18

19

20

21

22

23

24

25

Bảng số tự nhiên sau khi mã hóa:
5

8

11

14


17

20

23

0

3

6

9

12

15

18

21

24

1

4

7


10

13

16

19

22

25

2

Tương ứng ta có bảng chữ cái gốc:
A B C D E F G H I J K L M N O P Q R S T U V WX Y Z
và bảng chữ cái dùng để mã hóa:
F I L O R U X A D G J M P S V Y B E H K N Q T WZ C
Khi đó bản rõ “NOTEVERYSTEAMBATHISSAUNA” được mã hóa thành
“SVKRQREZHKRFPIFKADHHFNSF”.
Để có thể giải mã được ta chú ý rằng hàm mã khóa AFFINE: Ek()=(a + b)
MOD 26 phải là hàm đơn ánh hay nói cách khác hàm này có ánh xạ 1 – 1. Ví dụ với
a = 10, b = 1 ta có ánh xạ 10 + 1. Ánh xạ này không thỏa mãn vì hai ký tự A và N
cùng ánh xạ tới B, vì vậy khi giải mã B có thể được giải mã thành A và N. Ngược
lại, không có một ký tự nào ánh xạ tới O, và vì vậy O không xuất hiện trong bảng
chữ cái thay thế. Ta có thể dễ dàng tìm thấy tất cả các cặp ký tự cùng ánh xạ tới một
ký tự cũng như tất cả các ký tự không xuất hiện trong bảng chữ cái thay thế.
2.1.3. Hệ mã hóa PLAYFAIR
PLAYFAIR là tên họ của Baron Playfair. Các ký tự của bảng chữ cái tiếng
Anh, trừ ký tự J, được sắp xếp theo hình vuông 5 x 5 như sau:

S
Y
D
W
Z
R
I
P
U
L
H
C
A
X
F
T
N
O
G
E
B
K
M
Q
V

21


Hình vuông này là cơ sở để mã hóa và giải mã theo nguyên tắc như sau:

- Bản rõ được chia thành các khối, mỗi khối hai ký tự. Điều này cần chú ý là
không khối nào được chứa hai ký tự giống nhau và độ dài bản rõ phải chẵn. Ví dụ,
ALL MEM là một bản rõ hợp lệ với các khối AL LM EM, trong khi KISS ME và
WHERE ARE YOU không thỏa mãn điều kiện. Bởi vì KISS ME chứa hai ký tự
giống nhau trong một khối (KI SS ME), còn WHERE ARE YOU có độ dài lẻ.
- Ta biết rằng mỗi khối bản rõ gồm hai ký tự riêng biệt. Quá trình mã hóa
một khối diễn ra như sau, sử dụng hình vuông. Nếu hai ký tự không nằm trên cùng
một hàng hoặc một cột, ví dụ A và E, thì ta nhìn vào các góc của hình chữ nhật được
xác định bởi hai ký tự đó, trong ví dụ của ta là A, F, O, E. Cặp AE được ánh xạ
thành FO. Thứ tự của FO được xác định bởi điều kiện là F cùng hàng với A và O
cùng hàng với E. Tương tự EA được ánh xạ thành OF, OF thành EA, SV thành ZB,
RC thành IH và TL thành ER. Nếu hai ký tự cùng nằm trên một hàng (hoặc một
cột), thì ta dịch phải một bước (hoặc dịch xuống), và làm như vậy một các tuần
hoàn. Ví dụ, HA được ánh xạ thành CX, WX thành UG, CA thành AX, DM thành
PD, và RL thành IR.
Ví dụ, ta cần mã hóa thông điệp SECOND WORLD WAR. Bản rõ được chia
thành các khối:
SE

CO

ND

WO

RL

DW

AR


Theo hình vuông ta có cặp SE được ánh xạ thành ZT, Co thành AN, ND
thành OY, WO thành DG, RL thành IR, DW thành WZ, và AR thành HP. Vì vậy
bản rõ được mã hóa thành ZTANOYDGIRWZHP.
Không có gì khác đối với hình vuông PLAYFAIR nếu một số cột được
chuyển từ bên này sang bên kia, hoặc chuyển một số hàng từ trên xuống dưới. Ta có
thể xác minh bằng hình vuông
P
A
O
M
D

U
X
G
Q
W

L
F
E
V
Z

R
H
T
B
S


I
C
N
K
Y

là tương đương với hình vuông ban đầu, có nghĩa là cả hai hình vuông này mã hóa
bất kỳ một bản rõ nào theo cùng một cách.
Các quy tắc của PLAYFAIR không có nghĩa là chỉ những trường hợp như
vậy mới hợp lệ. Ký tự kép trong bản rõ có thể được xử lý khác đi, ví dụ bằng cách

22


chèn một ký tự đặc biệt (thường là Q) vào giữa cặp ký tự đó. Hình chữ nhật 5x5 có
thể được thay thế bởi một hình chữ nhật 4x6 hoặc 3x9 tương ứng với kích cỡ của
bảng chữ cái.
2.1.4. Hệ mã hóa VIGENERE
Hệ mã hóa này được đặt theo tên của một nhà mật mã người Pháp Blaise de
Vigenère (1523-1596).
VIGENERE cũng giống như CAESAR, nhưng ở đây khóa được thay đổi
theo từng bước. Hình vuông VIGENERE được sử dụng để mã hóa và giải mã:
A
B
C
D
E
F
G

H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z

B
C
D
E
F
G
H
I
J
K

L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
A

C
D
E
F
G
H
I
J
K
L
M
N
O

P
Q
R
S
T
U
V
W
X
Y
Z
A
B

D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S

T
U
V
W
X
Y
Z
A
B
C

E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W

X
Y
Z
A
B
C
D

F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
A

B
C
D
E

G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
A
B
C
D
E

F

H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
A
B
C
D
E
F
G

I

J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
A
B
C
D
E
F
G
H

J
K
L
M

N
O
P
Q
R
S
T
U
V
W
X
Y
Z
A
B
C
D
E
F
G
H
I

K
L
M
N
O
P
Q

R
S
T
U
V
W
X
Y
Z
A
B
C
D
E
F
G
H
I
J

L
M
N
O
P
Q
R
S
T
U

V
W
X
Y
Z
A
B
C
D
E
F
G
H
I
J
K

M
N
O
P
Q
R
S
T
U
V
W
X
Y

Z
A
B
C
D
E
F
G
H
I
J
K
L

N
O
P
Q
R
S
T
U
V
W
X
Y
Z
A
B
C

D
E
F
G
H
I
J
K
L
M

O
P
Q
R
S
T
U
V
W
X
Y
Z
A
B
C
D
E
F
G

H
I
J
K
L
M
N

P
Q
R
S
T
U
V
W
X
Y
Z
A
B
C
D
E
F
G
H
I
J
K

L
M
N
O

Q
R
S
T
U
V
W
X
Y
Z
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O

P

R
S
T
U
V
W
X
Y
Z
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q

S

T
U
V
W
X
Y
Z
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R

T
U
V
W

X
Y
Z
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S

U
V
W
X
Y
Z
A

B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T

V
W
X
Y
Z
A
B
C
D
E

F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U

WX
X Y
Y Z
Z A
A B
B C
C D
D E
E F
F G
G H
H I
I J

J K
K L
L M
MN
N O
O P
P Q
Q R
R S
S T
T U
U V
V W

Y
Z
A
B
C
D
E
F
G
H
I
J
K
L
M
N

O
P
Q
R
S
T
U
V
W
X

Z
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R

S
T
U
V
W
X
Y

Hình vuông VIGENERE
Một cột của hình vuông VIGENERE có thể được xem như là một hệ
CAESAR, với các khóa 0, 1, 2, …, 25. Để mã hóa thì bản rõ được đọc từ các hàng
và khóa được đọc từ các cột.
Ví dụ, để mã hóa bản rõ PURPLE với từ khóa CRYPTO, đầu tiên ta tìm
điểm giao nhau của hàng P và cột C, ta được R. Cứ như vậy ta được bản mã

23


RLPEES. Ta sẽ thu được bản mã tương tự nếu ta thay đổi vai trò của hàng và cột
trong khi mã hóa. Để giải mã bản mã RLPEES vừa mã hóa, ta nhìn vào hàng nào có
chứa R trong cột C, theo cách này ra sẽ tìm được P. Và như vậy ta tìm được bản rõ
là PURPLE.
Khóa được áp dụng một cách tuần hoàn, tức là nếu bản rõ dài hơn khóa thì
khóa lại được bắt đầu lại từ đầu. Ví dụ, khóa CRYPTO được áp dụng với bản rõ có
độ dài 15 ký tự là CRYPTOCRYPTOCRY.
Ta thấy rằng trong hệ mã hóa VIGENERE, với khóa có độ dài d thì sẽ có 26d
khóa hợp lệ. vì vậy, chỉ cần với giá trị d nhỏ thì phương pháp thám mã vét cạn cũng
đòi hỏi khá nhiều thời gian.
2.1.5. Hệ mã hóa HILL
Hệ mã hóa này dựa trên lý thuyết về đại số tuyến tính do Lester S.Hill đưa ra

vào năm 1929.
Cả không gian bản rõ và bản mã đều là *, trong đó  là bản chữ cái tiếng
Anh. Chúng ta sử dụng các số tự nhiên thay cho các ký tự và các phép toán học
được thực hiện theo modulo 26 như đã nói ở phần trên.
Ta chọn một số nguyên d  2. Xét M là ma trận vuông d phần tử. Các phần tử
của M là các số nguyên từ 0 đến 25. Hơn nữa M phải là ma trận khả nghịch, tức là
tồn tại M-1. Ví dụ:
3
M 
2

3

5



 15
M 1  
 20

17 
9 

Để mã hóa, bộ d chữ cái của bản rõ được mã hóa cùng nhau. Trong các
trường hợp sẽ xét dưới đây ta lấy d = 2.
Quá trình mã hóa được thực hiện thưp công thức: MP = C
Trong đó P và C được viết thành các vector cột d chiều. Mỗi bộ d chữ cái của
bản rõ được viết thành vector P với các thành phần là các số biểu diễn các ký tự. Và
C cũng thể hiện khối d ký tự của bản mã.

Còn khi giải mã ta phải dùng ma trận nghịch đảo M-1: P = M-1C
Ví dụ, bản rõ “HELP” được viết thành hai vector
H 7
P1   E    4 
   

  11 
và P 2   L
P  15 
 





theo công thức mã hóa ta có
 3 3   7   33   7   H 
MP1  
 *             C1
 2 5   4   34   7   I 

24




 3 3  11  78   0   A 
MP 2  
*            C2
 2 5  15   97  19   T 

chúng ta thu được bản mã “HIAT”.

2.2.

Hệ mã hóa đổi chỗ (Transposition Cipher)
Một hệ mã hóa đổi chỗ là hệ mã hóa trong đó các ký tự của bản rõ vẫn được

gữi nguyên, nhưng thứ tự của chúng được đổi chỗ vòng quanh.
Ví dụ, một hệ mã hóa đổi chỗ đơn giản, bản rõ được viết theo hàng ngang
trên trang giấy với độ dài cố định, và bản mã được đọc theo hàng dọc (Hình 2.1).
Bản rõ:
COMPUTER GRAPHICS MAY BE SLOW BUT AT LEAST IT’S EXPENSIVE
COMPUTERGR
APHICSMAYB
ESLOWBUTAT
LEASTITSEX
PENSIVE
Bản mã:
CAELPOPSEEMHLANPIOSSUCWTITSBIUEMUTERATSGYAERBTX
Hình 2.1. Mã hóa thay đổi vị trí cột
Phương pháp này có các kỹ thuật sau:
- Đảo ngược toàn bộ bản rõ: Nghĩa là bản rõ được viết theo thứ tự ngược lại
để tạo ra bản mã. Đây là phương pháp mã hóa đơn giản nhất vì vậy không đảm bảo
an toàn.
Ví dụ: Bản rõ “TRANSPOSITION CIPHER” được mã hóa thành
“REHPICNOITISOPSNART”.
- Mã hóa theo mẫu hình học: Bản rõ được sắp xếp lại theo một mẫu hình học
nào đó, thường là một mảng hoặc một ma trận hai chiều.
Ví dụ: Bản rõ “LIECHTENSTEINER” được viết thành ma trận 35 theo hàng
như sau:

Cột

1

2

3

4

5

Bản rõ

L
T
E

I
E
I

E
N
N

C
S
E


H
T
R

Nếu lấy các ký tự ra theo số thứ tự cột 2, 4, 1, 3, 5 thì sẽ có bản mã
“IEICSELTEENNHTR”.

25


×