BỘ GIAO THÔNG VẬN TẢI
TRƯỜNG ĐẠI HỌC HÀNG HẢI
BỘ MÔN: KHOA HỌC MÁ Y TÍNH
KHOA: CÔNG NGHỆ THÔNG TIN
Giáo trình
AN TOÀN VÀ BẢO MẬT THÔNG TIN
TÊN HỌC PHẦN : An toàn và bảo mật Thông tin
MÃ HỌC PHẦN : 17212
TRÌNH ĐỘ ĐÀO TẠO : ĐẠI HỌC CHÍNH QUY
DÙNG CHO SV NGÀNH : CÔNG NGHỆ THÔNG TIN
HẢI PHÒNG - 2008
Tên học phần: An toàn bảo mâ ̣t thông tin Loại học phần: II
Bộ môn phụ trách giảng dạy: Khoa học máy tính.
Khoa phụ trách: Công nghệ thông tin
Mã học phần: Tổng số TC: 3
TS tiết Lý thuyết Thực hành/ Xemina Tự học Bài tập lớn Đồ án môn học
75 45 30 0 0 0
Điều kiện tiên quyết:
Sinh viên cần học xong các học phần:
- Lâ ̣p trình hướng đối tượng
- Cấu trúc dữ liê ̣u
- Phân tích, thiết kế và đánh giá thuâ ̣t toán.
Mục đích của học phần:
Truyền đạt cho sinh viên những kiến thức cơ bản về các lĩnh vực riêng trong an
toàn bảo mật máy tính:
- Các giải thuật mã hóa trong truyền tin.
- Các thuật toán tạo hàm băm và chữ ký điện tử.
- Các mô hình trao chuyển khóa.
- Các mô hình chứng thực và các giao thức mật mã.
Nội dung chủ yếu:
Gồm 2 phần:
-Phần lý thuyết: cung cấp các lý thuyết về thuâ ̣t toán mã hóa, các giao thức.
-Phần lâ ̣p trình: cài đặt các hệ mã, viết các ứ ng dụng sử dụng các hê ̣mã mâ ̣t
Nội dung chi tiết của học phần:
Tên chương mục
Phân phối số tiết
TS LT Xemine BT KT
Chương I. Giới thiệu nhiệm vụ của an toàn và bảo
mật thông tin.
4 3 1 0 0
1.1. Các khái niệm mở đầu.
1.1.1. Thành phần của một hệ thống thông tin
1.1.2. Những mối đe dọa và thiệt hại đối với hệ thống
thông tin.
1.1.3. Giải pháp điều khiển kiểm soát an toàn bảo mật
1.2. Mục tiêu và nguyên tắc chung của ATBM.
1.2.1. Ba mục tiêu.
1.2.2. Hai nguyên tắc
1.3. Giới thiệu chung về các mô hình mật mã.
1.3.1. Mô hình cơ bản trong truyền tin và luật Kirchoff.
1.3.2. Những giai đoạn phát triển của lý thuyết mã hóa.
1
1
1 1
Chương II. Một số phương pháp mã hóa cổ điển. 13 5 5 2 1
2.1. Phương pháp mã đơn giản.
2.1.1. Mã hoán vị trong bảng Alphabet.
2.1.2. Mật mã cộng tính.
2.2.3. Mật mã nhân tính.
2.1.4. Phân tích mã theo phương pháp thống kê.
2.2. Phương pháp mã bằng phẳng đồ thị tần xuất.
2.2.1. Mã với bảng thế đồng âm.
2.2.2. Mã đa bảng thế: giải thuật mã Vigenre và One time
pad.
2.2.3. Lý thuyết về sự bí mật tuyệt đối.
2.2.4. Đánh giá mức độ bảo mật của một phương pháp
mã hóa.
Kiểm tra
2
3
2
3
1
1
1
Chương III. Mật mã khối. 16 8 7 1 0
3.1. Khái niệm.
3.1.1. Điều kiện an toàn cho mật mã khối
3.1.2. Nguyên tắc thiết kế.
3.2. Chuẩn mã hóa dữ liê ̣u DES
3.2.1. Lịch sử của DES
3.2.2. Cấu trúc vòng lặp DES.
3.2.3. Thuật toán sinh khóa con
3.2.4. Cấu trúc hàm lặp.
3.2.5. Thuật toán giải mã DES.
3.2.6. Đánh giá mức độ an toàn bảo mật của DES.
3.2.7. TripleDES
3.3. Chuẩn mã hóa cao cấp AES
3.3.1. Giới thiê ̣u về AES
3.3.2. Thuâ ̣t toán mã hóa
3.3.3. Thuâ ̣t toán giải mã
3.3.4. Cài đặt AES
3.4 Một số chế độ sử dụng mã khối.
3.4.1. Chế độ bảng tra mã điện tử
3.4.2. Chế độ mã móc xích
3.4.3. Chế độ mã phản hồi
1
3
3
1
3
3
1
0,5
0,5
Chương IV. Hệ thống mã với khóa công khai. 16 6 7 2 1
4.1. Khái niệm khóa công khai.
4.1.1. Đặc trưng và ứng dụng của hệ mã khóa công khai.
4.1.2. Nguyên tắc cấu tạo hệ khóa công khai
4.2. Giới thiệu một số giải thuật PKC phổ biến.
4.1.1. Hệ mã Trapdoor Knapsack.
4.1.2. Hệ mã RSA
1
1
2
1
3
2
4.1.3. Hệ mã ElGamal
Kiểm tra
2 3
1
Chương V. Chữ ký điện tử và hàm băm. 12 7 5 0 0
5.1. Chữ ký điện tử.
5.1.1. Định nghĩa.
5.1.2. Ứng dụng của chữ ký điện tử
5.2. Giới thiê ̣u một số hê ̣chữ ký điê ̣n tử
5.2.1. Hê ̣chữ ký điê ̣n tử RSA
5.2.2. Hê ̣chữ ký điê ̣n tử ElGamal
5.2.3. Chuẩn chữ ký điê ̣n tử DSA
5.3. Hàm băm.
5.3.1. Định nghĩa.
5.3.2. Sinh chữ ký điện tử với hàm băm
5.4. Một số hàm băm thông dụng
5.4.1. Hàm băm MD5
5.4.2. Hàm băm SHA1
0,5
3
0,5
3
2
1,5
1,5
Chương VI. Quản lý khóa trong hệ thống mật mã 8 5 3 0 0
6.1. Quản lý khóa đối với hệ SKC
6.1.1. Giới thiệu phương pháp quản lý khóa.
6.2. Quản lý khóa trong các hệ PKC
6.2.1. Giao thức trao chuyển khóa Needham – Schoeder
6.2.2. Giao thứ c trao đổi khóa Diffie-Hellman
6.2.3. Giao thứ c Kerberos
1
1
1
1
1
1
2
Chương VII. Giao thức mật mã 6 3 2 0 1
7.1. Khái niệm giao thức mật mã
7.1.1. Định nghĩa giao thức mật mã
7.1.2. Mục đích giao thức mật mã.
7.1.3. Các bên tham gia vào giao thức mật mã
7.2. Tìm hiểu thiết kế các giao thức mật mã điển hình
7.2.1. Một số dạng tấn công đối với giao thức mật mã.
7.2.2. Giới thiệu một số giao thức mật mã.
7.3. Kiểm tra.
1
2 2
1
Nhiệm vụ của sinh viên: Lên lớp đầy đủ và chấp hành mọi quy định của Nhà trường.
Tài liệu học tập:
1. Phan Đình Diệu. Lý thuyết mật mã và An toàn thông tin. Đại học Quốc Gia Hà
Nội.
2. Douglas R. Stinson. Cryptography Theory and practice. CRC Press. 1995.
3. A. Menezes, P. VanOorschot, and S. Vanstone. Handbook of Applied
Cryptography. CRC Press. 1996.
4. William Stallings. Cryptography and Network Security Principles and Practices,
Fourth Edition. Prentice Hall. 2005.
5. MichaelWelschenbach. Cryptography in C and C++. Apress. 2005.
Hình thức và tiêu chuẩn đánh giá sinh viên:
- Sinh viên phải làm các bài kiểm tra trong quá trình học và thực hành. Thi vấn đáp.
- Sinh viên phải bảo đảm các điều kiện theo Quy chế của Nhà trường và của Bộ.
Thang điểm : Thang điểm 10.
Điểm đánh giá học phần: Z = 0,3 X + 0,7 Y.
MỤC LỤC
LỜ I NÓ I ĐẦ U....................................................................................................................1
CHƢƠNG I: GIỚ I THIỆU..................................................................................................2
1. An toà n bảo mật thông tin và mật mã học .................................................................2
2. Khái niệm hệ thố ng và tà i sản của hệ thố ng ..............................................................2
3. Các mối đe doạ đối với một hệ thống và các biện pháp ngăn chặn ...........................2
4. Mục tiêu và nguyên tắc chung của an toàn bảo mật thông tin ...................................3
5. Mật mã học (cryptology) ............................................................................................4
6. Khái niệm hệ mã mật (CryptoSystem) .......................................................................4
7. Mô hình truyề n tin cơ bản của mật mã học và luật Kirchoff .......................................5
8. Sơ lƣợc về li ̣ch sƣ̉ mật mã học..................................................................................6
9. Phân loại cá c thuật toá n mật mã học.........................................................................8
10. Một số ƣ́ ng dụng của mật mã học ...........................................................................8
CHƢƠNG II: CƠ SỞ TOÁN HỌC................................................................................... 10
1. Lý thuyết thông tin ................................................................................................... 10
1.1. Entropy............................................................................................................. 10
1.2. Tố c độ của ngôn ngƣ̃. (Rate of Language) ....................................................... 11
1.3. Tính an toàn của hệ thống mã hoá ................................................................... 11
1.4. Kỹ thuật lộn xộn và rƣờ m rà (Confusion and Diffusion)..................................... 12
2. Lý thuyết độ phức tạp.............................................................................................. 13
2.1. Độ an toàn tính toán ......................................................................................... 14
2.2. Độ an toàn không điều kiện .............................................................................. 14
3.3. Hệ mật tích ....................................................................................................... 16
3. Lý thuyết toán học ................................................................................................... 17
3.1. Modulo số học .................................................................................................. 17
3.2. Số nguyên tố .................................................................................................... 17
3.3. Ƣớc số chung lớn nhất..................................................................................... 17
3.4. Vành ZN (vành đồng dƣ module N)................................................................... 18
3.5. Phầ n tƣ̉ nghi ̣ch đảo .......................................................................................... 18
3.6. Hàm phi Ơle ..................................................................................................... 19
3.7. Thặng dƣ bậc hai.............................................................................................. 19
3.8. Thuật toá n lũy thƣ̀ a nhanh................................................................................ 20
3.9. Thuật toá n Ơclit mở rộng.................................................................................. 21
3.10. Phƣơng trình đồ ng dƣ bậc nhấ t 1 ẩn.............................................................. 22
3.11. Đi ̣nh lý phầ n dƣ Trung Hoa............................................................................. 22
4. Các thuật toán kiểm tra số nguyên tố. ..................................................................... 23
4.1. Một số ký hiệu toá n học.................................................................................... 23
4.2. Thuật toá n Soloway-Strassen........................................................................... 25
4.3. Thuật toá n Rabin-Miller..................................................................................... 26
4.4. Thuật toá n Lehmann......................................................................................... 26
5. Bài tập..................................................................................................................... 26
CHƢƠNG III: CÁC HỆ MÃ KHÓA BÍ MẬT...................................................................... 28
1. Các hệ mã cổ điển................................................................................................... 28
1.1. Hệ mã hoá thay thế (substitution cipher)........................................................... 28
1.2. Hệ mã Caesar .................................................................................................. 28
1.3. Hệ mã Affine..................................................................................................... 29
1.4. Hệ mã Vigenere................................................................................................ 30
1.5. Hệ mã Hill......................................................................................................... 30
1.6. Hệ mã đổi chỗ (transposition cipher)................................................................. 32
2. Các hệ mã khối ....................................................................................................... 34
2.1. Mật mã khối...................................................................................................... 34
2.2. Chuẩn mã hoá dữ liệu DES (Data Encryption Standard) .................................. 35
2.3. Các yếu điểm của DES..................................................................................... 51
2.4. Triple DES (3DES)............................................................................................ 52
2.5. Chuẩn mã hó a cao cấ p AES............................................................................. 54
2.6. Các cơ chế, hình thức sử dụng của mã hóa khối (Mode of Operation) ............. 68
3. Bài tập..................................................................................................................... 72
CHƢƠNG IV: CÁC HỆ MÃ MẬT KHÓA CÔNG KHAI ..................................................... 77
1. Khái niệm hệ mã mật khóa công khai...................................................................... 77
2. Nguyên tắ c cấ u tạo của cá c hệ mã mật khó a công khai.......................................... 78
3. Một số hệ mã khó a công khai.................................................................................. 78
3.1. Hệ mã knapsack............................................................................................... 78
3.2. Hệ mã RSA....................................................................................................... 79
3.3. Hệ mã El Gamal ............................................................................................... 83
3.4. Các hệ mã mật dựa trên các đƣờng cong Elliptic............................................. 85
4. Bài tập..................................................................................................................... 96
CHƢƠNG V: CHƢ̃ KÝ ĐIỆN TƢ̉ VÀ HÀ M BĂM............................................................ 101
1. Chƣ̃ ký điện tƣ̉ ....................................................................................................... 101
1.1. Khái niệm về chữ ký điện tử ........................................................................... 101
1.2. Hệ chữ ký RSA............................................................................................... 102
1.3. Hệ chữ ký ElGammal...................................................................................... 103
1.4. Chuẩn chữ ký điện tử (Digital Signature Standard)......................................... 106
1.5. Mô hình ƣ́ ng dụng của chƣ̃ ký điện tƣ̉ ................................................................ 108
2. Hàm Băm (Hash Function) .................................................................................... 109
2.1. Khái niệm ....................................................................................................... 109
2.2. Đặc tính của hàm Băm ................................................................................... 109
2.3. Birthday attack................................................................................................ 110
2.4. Một số hàm Băm nổi tiếng .............................................................................. 111
2.5. Một số ƣ́ ng dụng của hàm Băm...................................................................... 118
3. Bài tập................................................................................................................... 119
CHƢƠNG VI: QUẢN LÝ KHÓA..................................................................................... 120
1. Quản lý khoá trong các mạng truyền tin ................................................................ 120
2. Một số hệ phân phối khoá ..................................................................................... 120
2.1. Sơ đồ phân phối khoá Blom ........................................................................... 120
2.2. Hệ phân phối khoá Kerberos .......................................................................... 122
2.3. Hệ phân phối khó a Diffe-Hellman ................................................................... 123
3. Trao đổi khoá và thoả thuận khoá ......................................................................... 124
3.1. Giao thức trao đổi khoá Diffie-Hellman ........................................................... 124
3.2. Giao thức trao đổi khoá Diffie-Hellman có chứng chỉ xác nhận....................... 125
3.3. Giao thức trao đổi khoá Matsumoto-Takashima-Imai...................................... 126
3.4. Giao thức Girault trao đổi khoá không chứng chỉ............................................ 127
4.Bài tập.................................................................................................................... 128
CHƢƠNG VII: GIAO THƢ́ C MẬT MÃ ........................................................................... 130
1. Giao thức .............................................................................................................. 130
2. Mục đích của các giao thức................................................................................... 130
3. Các bên tham gia vào giao thức (the players in protocol) ...................................... 131
4. Các dạng giao thức ............................................................................................... 132
4.1. Giao thức có trọng tài ..................................................................................... 132
4.2. Giao thức có ngƣời phân xử........................................................................... 133
4.3. Giao thức tƣ̣ phân xƣ̉ ..................................................................................... 134
5. Các dạng tấn công đối với giao thức ..................................................................... 134
TÀI LIỆU THAM KHẢO ................................................................................................. 136
Danh mục hình vẽ
DANH MỤC HÌNH VẼ
Hình 1.1: Mô hình cơ bản của truyền tin bảo mật..............................................................5
Hình 3.1: Chuẩn mã hó a dƣ̃ liệu DES ............................................................................. 35
Hình 3.2: Sơ đồ mã hoá DES.......................................................................................... 38
Hình 3.3: Sơ đồ một vòng DES ....................................................................................... 39
Hình 3.4: Sơ đồ tạo khoá con của DES.......................................................................... 41
Hình 3.5: Sơ đồ hàm f ..................................................................................................... 43
Hình 3.6: Sơ đồ hàm mở rộng (E) ................................................................................... 44
Hình 3.7: Triple DES ....................................................................................................... 53
Hình 3.8: Các trạng thái của AES.................................................................................... 56
Hình 3.9: Thuật toán mã hóa và giải mã của AES ........................................................... 59
Hình 3.10: Hàm ShifftRows()........................................................................................... 62
Hình 3.11: Hàm MixColumns của AES............................................................................ 63
Hình 3.12: Hàm AddRoundKey của AES......................................................................... 63
Hình 3.13: Hàm InvShiftRows() của AES ........................................................................ 66
Hình 3.14: Cơ chế ECB................................................................................................... 69
Hình 3.15: Chế độ CBC................................................................................................... 70
Hình 3.16: Chế độ CFB................................................................................................... 71
Hình 4.1: Mô hình sƣ̉ dụng 1 của các hệ mã khóa công khai PKC.................................. 78
Hình 4.2: Mô hình sƣ̉ dụng 2 của các hệ mã khóa công khai PKC.................................. 78
Hình 4.3: Mô hình ƣ́ ng dụng lai ghép RSA vớ i cá c hệ mã khố i ....................................... 83
Hình 4.4: Các đƣờng cong Elliptic trên trƣờng số thực................................................... 87
Hình 4.5: Hình biểu diễn E2
4
(g4
, 1) .................................................................................. 92
Hình 4.6: Phƣơng phá p trao đổi khó a Diffie-Hellman dƣ̣a trên ECC ............................... 94
Hình 5.1: Mô hình ƣ́ ng dụng của chƣ̃ ký điện tƣ̉ ........................................................... 108
Hình 5.2: Sơ đồ chữ ký sử dụng hàm Băm ................................................................... 109
Hình 5.3: Sơ đồ vòng lặp chính của MD5...................................................................... 112
Hình 5.4: Sơ đồ một vòng lặp MD5 ............................................................................... 113
Hình 5.5: Sơ đồ một vòng lặp của SHA......................................................................... 117
Danh mục bảng
DANH MỤC BẢ NG
Bảng 2.1: Bảng bậc của các phần tử trên Z*
21 ................................................................. 19
Bảng 2.2: Bảng lũy thừa trên Z13 ..................................................................................... 20
Bảng 3.1: Bảng đá nh số cá c chƣ̃ cá i tiế ng Anh............................................................... 29
Bảng 3.2: Mã hoá thay đổi vị trí cột ................................................................................. 32
Bảng 3.3: Mã hóa theo mẫu hình học.............................................................................. 32
Bảng 3.4: Ví dụ mã hóa theo mẫu hình học .................................................................... 33
Bảng 3.5: Mã hóa hoán vị theo chu kỳ ............................................................................ 33
Bảng 3.6: Bảng hoán vị IP............................................................................................... 39
Bảng 3.7: Bảng hoán vị ngƣợc IP-1
................................................................................. 39
Bảng 3.8: Bảng PC-1 ...................................................................................................... 41
Bảng 3.9: Bảng dịch bit tại các vòng lặp của DES........................................................... 42
Bảng 3.10: Bảng PC-2 .................................................................................................... 42
Bảng 3.11: Bảng mô tả hàm mở rộng E.......................................................................... 44
Bảng 3.12: Hộp S1........................................................................................................... 45
Bảng 3.13: Hộp S2........................................................................................................... 45
Bảng 3.14: Hộp S3........................................................................................................... 45
Bảng 3.15: Hộp S4........................................................................................................... 46
Bảng 3.16: Hộp S5........................................................................................................... 46
Bảng 3.17: Hộp S6........................................................................................................... 46
Bảng 3.18: Hộp S7........................................................................................................... 46
Bảng 3.19: Hộp S8........................................................................................................... 46
Bảng 3.20: Bảng hoán vị P.............................................................................................. 47
Bảng 3.21: Ví dụ về các bƣớc thực hiện của DES .......................................................... 50
Bảng 3.22: Các khóa yếu của DES ................................................................................. 51
Bảng 3.23: Các khóa nửa yếu của DES.......................................................................... 51
Bảng 3.24: Qui ƣớ c một số tƣ̀ viế t tắ t và thuật ngƣ̃ của AES.......................................... 54
Bảng 3.25: Bảng biểu diễn các xâu 4 bit ......................................................................... 56
Bảng 3.26: Bảng độ dài khóa của AES............................................................................ 57
Bảng 3.27: Bảng thế S-Box của AES .............................................................................. 61
Bảng 3.28: Bảng thế cho hàm InvSubBytes().................................................................. 66
Bảng 4.1: Tố c độ của thuật toá n Brent-Pollard................................................................ 81
Bảng 4.2: Biểu diễn của tập E23(1, 1)............................................................................. 89
Bảng 4.3: Bảng so sánh các hệ mã ECC với hệ mã RSA................................................ 95
Lờ i nói đầu
1
LỜ I NÓ I ĐẦ U
Từ trƣớc công nguyên con ngƣời đã phải quan tâm tới việc làm thế nào để đảm
bảo an toàn bí mật cho các tài liệu, văn bản quan trọng, đặc biệt là trong lĩnh vực quân
sự, ngoại giao. Ngày nay với sự xuất hiện của máy tính, các tài liệu văn bản giấy tờ và
các thông tin quan trọng đều đƣợc số hóa và xử lý trên máy tính, đƣợc truyền đi trong
một môi trƣờng mà mặc định là không an toàn. Do đó yêu cầu về việc có một cơ chế, giải
pháp để bảo vệ sự an toàn và bí mật của các thông tin nhạy cảm, quan trọng ngày càng
trở nên cấp thiết. Mật mã học chính là ngành khoa học đảm bảo cho mục đích này. Khó
có thể thấy một ứng dụng Tin học có ích nào lại không sử dụng các thuật toán mã hóa
thông tin. Tài liệu này dựa trên những kinh nghiệm và nghiên cứu mà tác giả đã đúc rút,
thu thập trong quá trình giảng dạy môn học An toàn và Bảo mật Thông tin tại khoa Công
nghệ Thông tin, Đại học Hàng hải Việt nam. Với bảy chƣơng đƣợc chia thành các chủ đề
khác nhau từ cơ sở toán học của mật mã học cho tới các hệ mã, các giao thức mật mã,
hy vọng sẽ cung cấp cho các em sinh viên, các bạn độc giả một tài liệu bổ ích. Mặc dù đã
rất cố gắng song vẫn không tránh khỏi một số thiếu sót, hy vọng sẽ đƣợc các bạn bè
đồng nghiệp, các em sinh viên, các bạn độc giả góp ý chân thành để tôi có thể hoàn thiện
hơn nữa cuố n sá ch này.
Xin gửi lời cảm ơn chân thành tới các bạn bè đồng nghiệp , nhƣ̃ng ngƣờ i thân đã
luôn động viên , góp ý cho tôi trong quá trình biên soạn . Xin gƣ̉ i lờ i cảm ơn tớ i Thạc sỹ
Nguyễn Đình Dƣơng, ngƣờ i đã đọc và cho nhƣ̃ng nhận xét , góp ý quí báu cho phần viết
về hệ mã khó a công khai dƣ̣a trên cá c đƣờ ng cong Elliptic. Xin gƣ̉ i lờ i cảm ơn sâu sắc tớ i
Thạc sỹ Phạm Tuấn Đạt, ngƣờ i đã hiệu đính một cá ch kỹ cà ng và cho rấ t nhiề u nhận xét
có giá trị cho bản thảo của cuốn sách này . Cuố i cù ng xin gƣ̉ i lờ i cảm ơn tớ i Ban chủ
nhiệm khoa Công nghệ Thông tin, đặc biệt là Tiế n sỹ Lê Quố c Đi ̣nh – chủ nhiệm khoa, đã
luôn tạo điều kiện tố t nhấ t, giúp đỡ để cuố n sá ch này có thể hoàn thành.
Hải phòng, tháng 12 năm 2007
Tác giả
Nguyễn Hữu Tuân
Chƣơng I: Giớ i thiệu
2
CHƢƠNG I: GIỚ I THIỆU
1. An toà n bả o mật thông tin và mật mã học
Trải qua nhiều thế kỷ hàng loạt các giao thức (protocol) và các cơ chế (mechanism)
đã đƣợc tạo ra để đá p ƣ́ ng nhu cầ u an toà n bảo mật thông tin kh i mà nó đƣợc truyền tải
trên cá c phƣơng tiện vật lý (giấ y, sách, báo …). Thƣờ ng thì cá c mục tiêu của an toà n bảo
mật thông tin không thể đạt đƣợc nế u chỉ đơn thuầ n dƣ̣a và o cá c thuật toá n toá n học và
các giao thức, mà để đạt đƣợc điề u nà y đò i hỏi cầ n có cá c kỹ thuật mang tính thủ tục và
sƣ̣ tôn trọng cá c điề u luật . Chẳng hạn sƣ̣ bí mật của cá c bƣ́ c thƣ tay là do sƣ̣ phân phá t
các lá thƣ đã có đóng dấu bởi một dịch vụ thƣ tín đã đƣợ c chấ p nhận . Tính an toàn về
mặt vật lý của cá c lá thƣ là hạn chế (nó có thể bị xem trộm ) nên để đảm bảo sƣ̣ bí mật
của bức thƣ pháp luật đã đƣa ra qui định : việc xem thƣ mà không đƣợc sƣ̣ đồ ng ý của
chủ nhân hoặc nhữ ng ngƣờ i có thẩm quyề n là phạm phá p và sẽ bi ̣trƣ̀ ng phạt . Đôi khi
mục đích của an toàn bảo mật thô ng tin lại đạt đƣợc nhờ chí nh phƣơng tiện vật lý mang
chúng, chẳng hạn nhƣ tiền giấ y đò i hỏi phải đƣợc in bằ ng loại mƣ̣c và giấ y tố t để không
bị làm giả.
Về mặt ý tƣở ng việc lƣu giƣ̃ thông tin là không có nhiề u thay đổi đá ng kể qua thờ i
gian. Ngày xƣa thông tin thƣờng đƣợc lƣu và vận chuyển trên giấy tờ , trong khi giờ đây
chúng đƣợc lƣu dƣới dạn g số hó a và đƣợc vận chuyển bằ ng cá c hệ thố ng viễn thông
hoặc cá c hệ thố ng không dây . Tuy nhiên sƣ̣ thay đổi đá ng kể đến ở đây chính là khả
năng sao ché p và thay đổi thông tin. Ngƣờ i ta có thể tạo ra hà ng ngà n mẩu tin giố ng nhau
và không thể phân biệt đƣợc nó với bản gốc . Vớ i cá c tà i liệu lƣu trƣ̃ và vận chuyển trên
giấ y điề u nà y khó khăn hơn nhiề u . Và điều cần thiết đối với một xã hội mà thông tin hầu
hế t đƣợc lƣu trƣ̃ và vận chuyển trên các phƣơng tiện điện tử chính là các phƣơng tiện
đảm bảo an toà n bảo mật thông tin độc lập vớ i cá c phƣơng tiện lƣu trƣ̃ và vận chuyển vật
lý của nó . Phƣơng tiện đó chính là mật mã học , một ngà nh khoa học có li ̣ch sƣ̉ lâ u đờ i
dƣ̣a trên nền tảng cá c thuật toá n toá n học, số học, xác suất và các môn khoa học khác.
2. Khái niệm hệ thống và tài sản của hệ thống
Khái niệm hệ thống : Hệ thố ng là một tập hợp cá c má y tính gồ m cá c thà nh phầ n
phấ n cƣ́ ng, phầ n mềm và dƣ̃ liệu là m việc đƣợc tích luỹ qua thờ i gian.
Tài sản của hệ thống bao gồm:
 Phầ n cƣ́ ng
 Phầ n mề m
 Dƣ̃ liệu
 Các truyền thông giữa các máy tính của hệ thống
 Môi trƣờ ng là m việc
 Con ngƣờ i
3. Các mối đe doạ đố i vớ i một hệ thố ng và cá c biện pháp ngăn chặn
Có 3 hình thức chủ yếu đe dọa đối với hệ thống:
Chƣơng I: Giớ i thiệu
3
 Phá hoại: kẻ thù phá hỏng thiết bị phần cứng hoặc phần mềm hoạt động trên hệ
thố ng.
 Sƣ̉ a đổi: Tài sản của hệ thố ng bi ̣sƣ̉ a đổi trá i phép. Điều nà y thƣờ ng là m cho hệ
thố ng không là m đú ng chƣ́ c năng của nó . Chẳng hạn nhƣ thay đổi mật khẩu ,
quyền ngƣờ i dù ng trong hệ thố ng là m họ không thể truy cập và o hệ thố ng để
làm việc.
 Can thiệ p: Tài sản bị truy cập bởi những ngƣời không có thẩm quyền . Các
truyề n thông thƣ̣c hiện trên hệ thố ng bi ̣ngăn chặn, sƣ̉ a đổi.
Các đe dọa đối với một hệ thống thông tin có thể đến từ nhiều nguồn và đƣợc thực
hiện bở i cá c đố i tƣợng khá c nhau . Chúng ta có thể chia thành 3 loại đối tƣợng nhƣ sau :
các đối tƣợng từ ngay bên trong hệ thống (insider), đây là nhƣ̃ng ngƣờ i có quyền truy cập
hợp phá p đố i vớ i hệ thố ng , nhƣ̃ng đố i tƣợng bên ngoà i hệ th ống (hacker, cracker),
thƣờ ng cá c đố i tƣợng nà y tấ n công qua nhƣ̃ng đƣờ ng kế t nố i vớ i hệ thố ng nhƣ Internet
chẳng hạn, và thứ ba là các phần mềm (chẳng hạn nhƣ spyware, adware …) chạy trên hệ
thố ng.
Các biện pháp ngăn chặn:
Thƣờng có 3 biện phá p ngăn chặn:
 Điề u khiển thông qua phầ n mềm : dƣ̣a và o cá c cơ chế an toà n bảo mật của hệ
thố ng nền (hệ điề u hà nh), các thuật toán mật mã học
 Điề u khiển thông qua phầ n cƣ́ ng : các cơ chế bảo mật , các thuật toán mật mã
học đƣợc cứng hóa để sử dụng
 Điề u khiển thông qua cá c chính sá ch của tổ chƣ́ c : ban hà nh cá c qui đi ̣nh của tổ
chƣ́ c nhằ m đảm bảo tính an toà n bảo mật của hệ thố ng.
Trong môn học nà y chú ng ta tập trung xem xé t các thuật toán mật mã học nhƣ là
một phƣơng tiện cơ bản, chủ yếu để đảm bảo an toàn cho hệ thống.
4. Mục tiêu và nguyên tắc chung của an toàn bảo mật thông tin
Ba mục tiêu của an toà n bảo mật thông tin:
 Tính bí mật: Tài sản của hệ thống chỉ đƣợc truy cập bởi những ngƣời có thẩm
quyề n. Các loại truy cập gồm có : đọc (reading), xem (viewing), in ấ n (printing), sƣ̉ dụng
chƣơng trình, hoặc hiểu biế t về sƣ̣ tồ n tại của một đố i tƣợng trong tổ chƣ́ c.Tính bí mật có
thể đƣợc bảo vệ nhờ việc kiểm soá t truy cập (theo nhiề u kiểu khá c nhau ) hoặc nhờ cá c
thuật toá n mã hó a dƣ̃ liệu. Kiế m soá t truy cập chỉ có thể đƣợc thƣ̣c hiện vớ i cá c hệ thố ng
phầ n cƣ́ ng vật lý . Còn đố i vớ i cá c dƣ̃ liệu công cộng thì thƣờ ng phƣơng phá p hiệu quả là
các phƣơng pháp của mật mã học.
 Tính toàn vẹn dữ liệu: tài sản của hệ thống chỉ đƣợc thay đổi bởi những ngƣời
có thẩm quyền.
 Tính sẵn dùng: tài sản luôn sẵn sà ng đƣợc sƣ̉ dụng bở i nhƣ̃ng ngƣờ i có thẩm
quyề n.
Hai nguyên tắc của an toà n bảo mật thông tin:
Chƣơng I: Giớ i thiệu
4
 Việc thẩm đi ̣nh về bảo mật phả i là khó và cầ n tính tớ i tấ t cả cá c tình huố ng ,
khả năng tấn công có thể đƣợc thực hiện.
 Tài sản đƣợc bảo vệ cho tới khi hết gía trị sử dụng hoặc hết ý nghĩa bí mật.
5. Mật mã học (cryptology)
Mật mã học bao gồ m hai lĩnh vƣ̣c : mã hóa (cryptography) và thám mã
(cryptanalysis-codebreaking) trong đó:
 Mã hóa: nghiên cƣ́ u cá c thuật toá n và phƣơng thƣ́ c để đảm bả o tính bí mật và
xác thực của thông tin (thƣờ ng là dƣớ i dạng cá c văn bản lƣu trƣ̃ trên má y tính ). Các sản
phẩm của lĩnh vƣ̣c nà y là cá c hệ mã mật , các hàm băm , các hệ chƣ̃ ký điện tƣ̉ , các cơ
chế phân phố i, quản lý khóa và các giao thức mật mã.
 Thám mã: Nghiên cƣ́ u cá c phƣơng phá p phá mã hoặc tạo mã giả . Sản phẩm
của lĩnh vực này là các phƣơng pháp thám mã , các phƣơng pháp giả mạo c hƣ̃ ký , các
phƣơng phá p tấ n công cá c hà m băm và cá c giao thƣ́ c mật mã.
Trong giớ i hạn của môn học nà y chú ng ta chủ yế u tập trung và o tìm hiểu cá c vấ n đề
mã hóa với các hệ mã mật, các hàm băm, các hệ chữ ký điện tử, các giao thức mật mã.
Mã hóa (cryptography) là một ngành khoa học của các phương pháp truyền tin bảo
mật. Trong tiếng Hy Lạp, “Crypto” (krypte) có nghĩa là che dấu hay đảo lộn, còn “Graphy”
(grafik) có nghĩa là từ. [3]
Ngƣời ta quan niệm rằng: những từ, những ký tự của bản văn bản gốc có thể hiểu
đƣợc sẽ cấu thành nên bản rõ (P-Plaintext), thƣờ ng thì đây là cá c đoạn văn bản trong
một ngôn ngƣ̃ nà o đó ; còn những từ, những ký tự ở dạng bí mật không thể hiểu đƣợc thì
đƣợc gọi là bản mã (C-Ciphertext).
Có 2 phƣơng thức mã hoá cơ bản: thay thế và hoán vị:
 Phƣơng thức mã hoá thay thế là phƣơng thức mã hoá mà từng ký tự gốc hay
một nhóm ký tự gốc của bản rõ đƣợc thay thế bởi các từ, các ký hiệu khác hay kết hợp
với nhau cho phù hợp với một phƣơng thức nhất định và khoá.
 Phƣơng thức mã hoá hoán vị là phƣơng thức mã hoá mà các từ mã của bản
rõ đƣợc sắp xếp lại theo một phƣơng thức nhất định.
Các hệ mã mật thƣờ ng sƣ̉ dụng kết hợp cả hai kỹ thuật nà y.
6. Khái niệm hệ mã mật (CryptoSystem)
Một hệ mã mật là bộ 5 (P, C, K, E, D) thoả mãn các điều kiện sau:
1) P là không gian bản rõ: là tập hữu hạn các bản rõ có thể có.
2) C là không gian bản mã: là tập hữu hạn các bản mã có thể có.
3) K là kkhông gian khoá: là tập hữu hạn các khoá có thể có.
4) Đối với mỗi k  K, có một quy tắc mã hoá ek  E và một quy tắc giải mã
tương ứng dk  D. Với mỗi ek: P →C và dk: C →P là những hàm mà dk(ek(x)) = x cho mọi
bản rõ x  P. Hàm giải mã dk chính là ánh xạ ngược của hàm mã hóa ek [5]
Chƣơng I: Giớ i thiệu
5
Thƣờ ng thì không gian cá c bản rõ và không gian cá c bản mã là cá c văn bản đƣợc
tạo thành từ một bộ chữ cái A nào đó. Đó có thể là bộ chƣ̃ cá i tiế ng Anh, bộ mã ASCII, bộ
mã Unicode hoặc đơn giản nhất là các bit 0 và 1.
Tính chất 4 là tính chất quan trọng nhất của mã hoá. Nội dung của nó nói rằng nếu
mã hoá bằng ek và bản mã nhận đƣợc sau đó đƣợc giải mã bằng hàm dk thì kết quả nhận
đƣợc phải là bản rõ ban đầu x. Rõ ràng trong trƣờng hợp này, hàm ek(x) phải là một đơn
ánh, nếu không thì ta sẽ không giải mã đƣợc. Vì nếu tồn tại x1 và x2 sao cho y = ek(x1) =
ek(x2) thì khi nhận đƣợc bản mã y ta không biết nó đƣợc mã từ x1 hay x2.
Trong một hệ mật bất kỳ ta luôn có |C| ≥ |P| vì mỗi quy tắc mã hoá là một đơn ánh.
Khi |C| = |P| thì mỗi hàm mã hoá là một hoán vị.
7. Mô hình truyề n tin cơ bả n củ a mật mã học và luật Kirchoff
Mô hình truyề n tin thông thƣờ ng : Trong mô hình truyề n tin thông thƣờ ng thông tin
đƣợc truyề n (vận chuyển) tƣ̀ ngƣờ i gƣ̉ i đến ngƣờ i nhận đƣợc thƣ̣c hiện nhờ một kênh vật
lý (chẳng hạn nhƣ việc gƣ̉ i thƣ) đƣợc coi là an toà n.
Mô hình truyề n tin cơ bản của mật mã học:
Hình 1.1: Mô hình cơ bản của truyền tin bảo mật
Đây là mô hình cơ bản của truyền tin bảo mật. Khác với truyền tin thông thƣờng, có
các yếu tố mới đƣợc thêm vào nhƣ khái niệm kẻ địch (E-Enemy), các khoá mã hoá và
giải mã K để đảm bảo tính bảo mật của thông tin cần truyền đi.
Trong mô hình nà y ngƣời gƣ̉ i S (Sender) muốn gửi một thông điệp X (Message – là
một bản rõ ) tới ngƣời nhận R (Receiver) qua một kênh truyền không an toà n (Insecured
Channel), kẻ địch E (Enemy) có thể nghe trộm, hay sửa đổi thông tin X. Vì vậy, S sử dụng
phép biến đổi, tức mã hoá (E-Encryption) lên thông tin X ở dạng đọc đƣợc (Plaintext) để
tạo ra một đoạn văn bản đƣợc mã hoá Y (C-Ciphertext) không thể hiểu đƣợc theo một
quy luật thông thƣờ ng sƣ̉ dụng một thông tin bí mật đƣợc gọi là khoá K1 (Key), khoá K1
chính là thông số điều khiển cho phép biến đổi từ bản rõ X sang bản mã Y (chỉ các bên
tham gia truyền tin S và R mớ i có thể biết khó a nà y). Giải mã (D-Decryption) là quá trình
ngƣợc lại cho phép ngƣời nhận thu đƣợc thông tin X ban đầu từ đoạn mã hoá Y sƣ̉ dụng
khóa giải mã K2 (chú ý là khóa giải mã và khóa mã hóa có thể khác nhau hoặc là một tùy
thuộc và o hệ mã sƣ̉ dụng).
Các phép biến đổi đƣợc sử dụng trong mô hình truyền tin trên thuộc về một hệ mã
mật (Cryptosytem) nào đó.
XYYX
Sender Encrypt
Insecured
Channel Decrypt Receiver
K1 K2
Enemy
Chƣơng I: Giớ i thiệu
6
Quá trình mã hóa và giải mã yêu cầu các quá trình biến đổi dữ liệu từ dạng nguyên
thuỷ thành in put cho việc mã hóa và chuyển output của q uá trình giải mã thành bản rõ .
Các quá trình này là các quá trình biến đổi không khóa và đƣợc gọi là các quá trình
encode và decode.
Theo luật Kirchoff (1835 - 1903) (một nguyên tắ c cơ bản trong mã hoá ) thì: toàn bộ
cơ chế mã/giải mã trừ khoá là không bí mật đối với kẻ địch [5]. Rõ ràng khi đối phƣơng
không biết đƣợc hệ mã mật đang sử dụng thuật toá n mã hó a gì thì việc thá m mã sẽ rất
khó khăn. Nhƣng chúng ta không thể tin vào độ an toàn của hệ mã mật chỉ dựa vào một
giả thiết không chắc chắn là đối phƣơng không biết thuật toá n đang sử dụng . Vì vậy, khi
trình bày một hệ mật bất kỳ , chúng ta đều giả thiết hệ mật đó đƣợc trình bày dƣới luật
Kirchoff.
Ý nghĩa của luật Kirchoff : sƣ̣ an toà n của cá c hệ mã mật không phải dựa vào sự
phƣ́ c tạp của thuật toá n mã hó a sƣ̉ dụng.
8. Sơ lƣợc về li ̣ch sƣ̉ mật mã học
Mật mã học là một ngà nh khoa học có một li ̣ch sƣ̉ khoảng 4000 năm. Các cổ vật
của ngành khảo cổ học thu đƣợc đã cho thấ y điề u nà y. Nhƣ̃ng ngƣờ i Ai cập cổ đại đã sƣ̉
dụng các chữ tƣợng hình nhƣ là một dạng mã hóa đơn giản nhất trên các bia mộ của họ .
Các tài liệu viết tay khác cũng cho thấy các phƣơng pháp mã hóa đơn giản đầu tiên mà
loài ngƣời đã sử dụng là của ngƣời Ba Tƣ cổ và ngƣời Do Thái cổ.
Tuy vậy có thể chia li ̣ch sƣ̉ mật mã học thà nh hai thờ i kỳ nhƣ sau:
Thờ i kỳ tiền khoa học : Tƣ̀ trƣớ c công nguyên cho tớ i năm 1949. Trong giai đoạn
này mật mã học đƣợc coi là một nghệ thuật nhiề u hơn là một môn khoa học mặc dù đã
đƣợc ƣ́ ng dụng trong thƣ̣c tế.
Lịch sử của mật mã học đƣợc đánh dấu vào năm 1949 khi Claude Shannon đƣa ra
lý thuyết thông tin . Sau thờ i kỳ nà y một loạt cá c nghi ên cƣ́ u quan trọng của nghà nh mật
mã học đã đƣợc thực hiện chẳng hạn nhƣ các nghiên cứu về mã khối , sƣ̣ ra đờ i của cá c
hệ mã mật khó a công khai và chƣ̃ ký điện tƣ̉ .
Qua nhiề u thế kỷ phá t triển của mật mã học chủ yế u đƣ ợc phục vụ cho các mục
đích quân sƣ̣ (gián điệp , ngoại giao, chiế n tranh …). Một ví dụ điển hình là 2000 năm
trƣớ c đây hoà ng đế La mã Julius Caesar đã tƣ̀ ng sƣ̉ dụng một thuật toá n thay thế đơn
giản mà ngày nay đƣợc mang tên ông trong cuộc chiế n tranh Gallic.
Tác phẩm “A manuscript on Deciphering Cryptography Messages” của Abu al -Kindi
đƣợc viết vào thế kỷ thứ 9 đƣợc tìm thấ y tại Istabul và o năm 1987 đã cho thấ y nhƣ̃ng nhà
khoa học Ả rập là nhƣ̃ng ngƣờ i đầ u tiên đã phá t triển cá c phƣơng phá p thá m mã dƣ̣a và o
phân tích tầ n số xuấ t hiện của cá c ký tƣ̣ đố i vớ i cá c hệ mã thay thế đơn âm (một phƣơng
pháp đƣợc sử dụng rộng rãi trong thời kỳ Trung cổ do đơn giản và khá hiệu quả).
Ở châu Âu thờ i kỳ Trung cổ là một khoảng thờ i gian u á m và tăm tố i của li ̣ch sƣ̉ nên
không có nhiề u phá t triển mạnh về văn hó a nó i chung và mật mã học nó i riêng . Một vài
sự kiện đƣợc ghi lại bởi các vị linh mục nhƣng chỉ có Roger Bacon là ngƣời thực sự đã
viết về mật mã học trong tác phẩm “Secret Work of Art and the Nullity of Magic” vào giữa
những năm 1200. Vào thời Trung cổ một trong những cái tên nổi tiếng nhất là Chaucer,
ngƣờ i đã đƣa ra các công trình nghiên cứu nghiêm túc đầu tiên về mật mã học trong các
Chƣơng I: Giớ i thiệu
7
tác phẩm của mình chẳng hạn nhƣ “Treatise on the Astrolabe”. Trong thờ i kỳ Trung cổ ở
phƣơng Tây cuốn sách của Blaise De Vegenere (ngƣờ i phá t minh ra thuật toá n mã hó a
thay thế đa âm tiế t ) đƣợc xem nhƣ là một tổng kết các kiến thức về mật mã học cho tới
thời điểm bấy giờ, bao gồm cả thuật toán thay thế đa âm tiết và một vài sơ đồ khóa tự
động.
Blaise De Vegenere cũng là tá c giả của hệ mã mang tên ông , hệ mã nà y đã tƣ̀ ng
đƣợc xem là an toà n tuyệt đố i và đƣợc sƣ̉ dụng trong một thờ i gian dà i, tuy nhiên Charles
Babbages đã thực hiện thám mã thành công vào năm 1854 nhƣng điều này đƣợc giữ bí
mật. Một thuật toán thám mã đƣợc phát hiện độc lậ p bởi một nhà khoa học ngƣời Phổ
(thuộc nƣớ c Đƣ́ c ngà y nay) có tên là Friedrich Kasiski . Tuy vậy do việc thiếu các thiết bị
cải tiến nên các biến thể của thuật toán mã hóa này vẫn còn đƣợc sử dụng trong những
năm đầu của thế kỷ 20 mà tiêu biểu nhất là việc thám mã thành công máy điện tín
Zimmermann của quân Đƣ́ c (một trong cá c sƣ̣ kiện tiêu biểu của mật mã học ) trong thế
chiến thứ nhất và kết quả là sự tham gia của Mỹ vào cuộc chiến.
Vớ i sƣ̣ xuấ t hiện của cá c hệ thố ng má y tính cá nhân và mạng má y tính cá c thông tin
văn bản ngà y cà ng đƣợc lƣu trƣ̃ và xƣ̉ lý nhiều hơn trên cá c má y tính do đó nảy sinh yêu
cầ u về an toà n bảo mật đố i vớ i cá c thông tin đƣợc lƣu trƣ̃ , xƣ̉ lý và truyề n giƣ̃a cá c má y
tính.
Vào đầu những năm 1970 là sự phát triển của các thuật toán mã hóa khối đầu tiên:
Lucipher và DES . DES sau đó đã có một sƣ̣ phá t triển ƣ́ ng dụng rƣ̣c rỡ cho tớ i đầ u
nhƣ̃ng năm 90.
Vào cuối những năm 1970 chứng kiến sự phát triển của các thuật toán mã hóa
khóa công khai sau khi Whitfield Diffie và Martin Hellman công bố bà i bá o “New Directions
in Cryptography” làm nền tảng cho sự ra đời của các hệ mã khóa công khai và các hệ
chƣ̃ ký điện tƣ̉ .
Do nhƣợc điểm của cá c hệ mã mật khó a công khai là chậm nên cá c hệ mã khố i vẫn
tiếp tục đƣợc phát triển với các hệ mã khối mới ra đời để thay thế cho DES và o cuố i thế
kỷ 20 nhƣ IDEA, AES hoặc 3DES (một cải tiế n của DES).
Gầ n đây nhấ t là các sự kiện liên quan tới các hàm băm MD5 (một hà m băm thuộc
họ MD d o Ron Rivest phá t triển ) và SHA 1. Một nhó m cá c nhà khoa học ngƣời Trung
Quố c (Xiaoyun Wang, Yiqun Lisa Yin, Hongbo Yu) đã phá t triển các phƣơng pháp cho
phép phát hiện ra các đụng độ của các hàm băm đƣợc sử dụng rộng rãi nhất trong số cá c
hàm băm này. Đây là một sƣ̣ kiện lớ n đố i vớ i ngà nh mật mã học do sƣ̣ ƣ́ ng dụng rộng rãi
và có thể xem là còn quan trọng hơn bản thân các hệ mã mật của các hàm băm . Do sƣ̣
kiện nà y cá c hãng viết phầ n mề m lớ n (nhƣ Microsoft) và các nhà mật mã học đã khuyến
cáo các lập trình viên sử dụng các hàm băm mạnh hơn (nhƣ SHA-256, SHA-512) trong
các ứng dụng.
Bruce Schneier (một trong nhƣ̃ng nhà mật mã học hà ng đầ u , tác giả của hệ mã
Blowfish) đã tƣ̀ ng nó i rằ ng cá c hình thƣ́ c tấ n công đố i vớ i cá c hệ mã mật nó i riêng và tấ n
công đố i vớ i cá c hệ thố ng má y tính nó i chung sẽ ngà y cà ng trở nên hoà n thiện hơn
“Attacks always get better ; they never get worse .” và li ̣ch sƣ̉ phá t triển của mật mã học
chính là lịch sử phát triển của các hình thức tấn công đối với các hệ mã mật đang đƣợc
sƣ̉ dụng.
Chƣơng I: Giớ i thiệu
8
9. Phân loại cá c thuật toán mật mã học
Có nhiều cách khác nhau để chúng ta có thể phâ n loại cá c thuật toá n mật mã học
sẽ đƣợc học trong chƣơng trình. Ở đây chúng ta sẽ phân loại các thuật toán mật mã học
dƣ̣a và o hai loại tiêu chí.
Tiêu chí thƣ́ nhấ t là dƣ̣a và o cá c di ̣ch vụ an toà n bảo mật mà cá c thuật toán cung
cấ p, dƣ̣a và o số lƣợng khó a sƣ̉ dụng (0, 1, 2) chúng ta có các thuật toán mã hóa sau:
1. Các thuật toán mã hóa khóa bí mật tƣơng ứng với các hệ mã mật khóa bí mật
hay khó a đố i xƣ́ ng SKC (Symmetric Key Cryptosytems), do vai trò của ngƣờ i nhận và
ngƣờ i gƣ̉ i là nhƣ nhau , cả hai đều có thể mã hóa và giải mã thông điệp , nhƣ Caesar,
DES, AES … Khó a sƣ̉ dụng cho cá c thuật toá n nà y là 1 khóa cho cả việc mã hóa và giải
mã.
2. Các thuật toán mã hóa khóa công khai tƣơng ứng với các hệ mã khóa công
khai PKC (Public Key Cryptosystems). Đôi khi cá c hệ mã nà y cò n đƣợc gọi là cá c hệ mã
khóa bất đối xứng (Asymmetric Key Cryptosytems). Khóa sử dụng cho các thuật toán này
là 2 khóa, một cho việc mã hó a và một cho việc giải mã , khóa mã hóa đƣợc công khai
hóa.
3. Các thuật toán tạo chữ ký điện tử (Digital Signature Algorithms). Các thuật
toán tạo chữ ký điện tử tạo thành các hệ chữ ký điện tử . Thông thƣờ ng mỗi hệ chƣ̃ ký
điện tƣ̉ có cù ng cơ sở lý thuyế t vớ i một hệ mã mật khó a công khai nhƣng vớ i cá ch á p
dụng khác nhau. Trong chƣơng trình học chú ng ta sẽ học một số hệ chƣ̃ ký điện tƣ̉ phổ
biế n là RSA, ElGammma…
4. Các hàm băm (Hash functions). Các hàm băm là các thuật toán mã hóa không
khóa hoặc có khóa và thƣờng đƣợc sử dụng trong các hệ chữ ký điện tử hoặc các hệ mã
khóa công khai.
Tiêu chí thƣ́ hai phân loại cá c thuật toá n mã hóa dựa trên cách thức xử lý input của
thuật toá n (tƣ́ c là bản rõ ), dƣ̣a trên tiêu chí nà y chú ng ta có hai loại thuật toá n mã hó a
sau:
1. Các thuật toán mã hóa khối (chẳng hạn nhƣ DES , AES …) xƣ̉ lý bản rõ dƣớ i
các đơn vị cơ bản là các khối có kích thƣớc giống nhau.
2. Các thuật toán mã hóa dòng (RC4 …) coi bản rõ là một luồ ng bit, byte liên tục.
10. Một số ƣ́ ng dụng củ a mật mã học
Ngày nay khó có thể tìm thấy các ứng dụng trên máy tính lại không sƣ̉ dụng tớ i cá c
thuật toá n và cá c giao thƣ́ c mật mã học . Tƣ̀ cá c ƣ́ ng dụng cho cá c má y tính cá nhân
(Desktop Applications ) cho tớ i cá c chƣơng trình hệ thố ng nhƣ cá c hệ điều hà nh
(Operating Systems) hoặc cá c ƣ́ ng dụng mạng nhƣ Yahoo Messenger hoặc cá c hệ cơ sở
dƣ̃ liệu đều có sƣ̉ dụng cá c thuật toá n mã hó a mật khẩu ngƣờ i dù ng bằ ng một hệ mã
hoặc một hà m băm nà o đó . Đặc biệt với sự phát triển mạnh mẽ của thƣơng mại điện tử
các mô hình chƣ̃ ký điện tƣ̉ ngà y cà ng đó ng vai trò tích cƣ̣c cho một môi trƣờ ng an toà n
cho ngƣờ i dù ng. Tuy vậy chú ng ta vẫn có thể chia cá c lĩnh vực ứng dụng của mật mã học
thành các lĩnh vực nhỏ nhƣ sau:
Chƣơng I: Giớ i thiệu
9
 Bảo mật (Confidentiality): che dấ u nội dung của cá c thông điệp đƣợc trao đổi
trong một phiên truyề n thông hoặc giao di ̣ch hoặc cá c thông điệp trên một hệ thố ng má y
tính (các file, các dữ liệu trong một cơ sở dữ liệu …).
 Xác thực hóa (Authentication): đảm bảo nguồ n gố c của một thông điệp , ngƣờ i
dùng.
 Toàn vẹn (Integrity): đảm bảo chỉ có cá c tổ chƣ́ c đã đƣợc xá c thƣ̣c hó a mớ i có
thể thay đổi cá c tà i sản của hệ thố ng cũng nhƣ cá c thông tin trên đƣờ ng truyề n.
 Dịch vụ khôn g thể chố i tƣ̀ (Non-Repudiation): Các bên đã đƣợc xác thực
không thể phủ nhận việc tham gia và o một giao di ̣ch hợp lệ.
 Ngoài ra còn các dịch vụ quan trọng khác chẳng hạn nhƣ chữ ký điện tử , dịch
vụ chứng thực danh tính (Identification) cho phé p thay thế hình thƣ́ c xá c thƣ̣c hó a ngƣờ i
dùng dựa trên các mật khẩu bằng các kỹ thuật mạnh hơn hoặc di ̣ch vụ thƣơng mại điện
tƣ̉ cho phé p tiế n hà nh cá c giao di ̣ch an toà n trên cá c kênh truyề n thông không an t oàn
nhƣ Internet.
Chƣơng II: Cơ sở toán học
10
CHƢƠNG II: CƠ SỞ TOÁN HỌC
Để hiểu đƣợc nhƣ̃ng thuật toá n sƣ̉ dụng trong cá c hệ mã mật , trong cá c hệ chƣ̃ ký
điện tƣ̉ cũng nhƣ cá c giao thƣ́ c mật mã , chúng ta phải có những kiến thức nề n tảng cơ
bản về toán học, lý thuyết thông tin … đƣợc sƣ̉ dụng trong mật mã học. Chƣơng nà y trình
bày nhƣ̃ng khá i niệm cơ bản về lý thuyế t thông tin nhƣ Entropy , tố c độ của ngôn ngƣ̃
(Rate of Language), độ phƣ́ c tạp của thuật toá n , độ an toà n của thuật toá n, và một số
kiế n thƣ́ c toán học: đồ ng dƣ số học (modulo), số nguyên tố , đi ̣nh lý phầ n dƣ trung hoa ,
đi ̣nh lý Fermat . . . và các thuật toán kiểm tra số nguyên tố . Nhƣ̃ng vấ n đề chính sẽ đƣợc
trình bày trong chƣơng này gồ m :
 Lý thuyết thông tin
 Lý thuyết độ phức tạp
 Lý thuyết số học.
1. Lý thuyết thông tin
Nhƣ̃ng khá i niệm mở đầ u của lý thuyết thông tin đƣợc đƣa ra lầ n đầ u tiên và o năm
1948 bở i Claude Elmwood Shannon (một nhà khoa học đƣ ợc coi là cha để của lý thuyết
thông tin). Trong phầ n nà y chú ng ta chỉ đề cập tớ i một số chủ đề quan trọng của lý thuyế t
thông tin.
1.1. Entropy
Lý thuyết thông tin định nghĩa khố i lƣợng thông tin trong một thông bá o là số bít nhỏ
nhấ t cầ n thiết để mã hoá tấ t cả nhƣ̃ng nghĩa có thể của thông bá o đó .
Ví dụ, trƣờ ng ngay_thang trong một cơ sở dƣ̃ liệu chƣ́ a không quá 3 bít thông tin,
bở i vì thông tin ngà y có thể mã hoá với 3 bít dữ liệu:
000 = Sunday
001 = Monday
010 = Tuesday
011 = Wednesday
100 = Thursday
101 = Friday
110 = Saturday
111 is unused
Nế u thông tin nà y đƣợc biểu diễn bở i chuỗi ký tƣ̣ ASCII tƣơng ƣ́ ng , nó sẽ chiếm
nhiề u không gian nhớ hơn , nhƣng cũng không chƣ́ a nhiề u thông tin hơn . Tƣơng tƣ̣ nhƣ
trƣờ ng gioi_tinh của một cơ sở dƣ̃ liệu chỉ chứa 1 bít thông tin, nó có thể lƣu trữ nhƣ một
trong hai xâu ký tƣ̣ ASCII : Nam, Nƣ̃.
Khố i lƣợng thông tin trong một thông bá o M đo bở i Entropy củ a thông bá o đó , ký
hiệu là H(M). Entropy của thông bá o gioi _tinh là 1 bít, ký hiệu H (gioi_tinh) = 1, Entropy
của thông báo số ngày trong tuần là nhỏ hơn 3 bits.
Chƣơng II: Cơ sở toán học
11
Trong trƣờ ng hợp tổng quát, Entropy của một thông báo là log 2n, vớ i n là số khả
năng có thể (ý nghĩa) của thông báo.
1.2. Tố c độ củ a ngôn ngƣ̃. (Rate of Language)
Đối với một ngôn ngữ, tố c độ thƣ̣c tế (actual rate) của ngôn ngữ là:
r = H(M)/N
trong trƣờ ng hợp nà y N là độ dà i của thông bá o và M là một thông điệp có độ dài N.
Tố c độ của tiế ng Anh bình thƣờ ng là 0.28 do đó mỗi chƣ̃ cá i tiế ng Anh có 1.3 bit nghĩa.
Tố c độ tuyệt đố i (absolute rate) của một ngôn ngƣ̃ là số bits lớ n nhấ t cầ n thiết để
mã hóa các ký tƣ̣ của ngôn ngƣ̃ đó . Nế u có L ký tƣ̣ trong một ngôn ngƣ̃ , thì tốc độ tuyệt
đố i là :
R = log2L
Đây là số Entropy lớ n nhấ t của mỗi ký tƣ̣ đơn lẻ . Đối với tiếng Anh gồm 26 chƣ̃ cá i,
tố c độ tuyệt đố i là log 226 = 4.7bits/chƣ̃ cái. Sẽ không có điều gì là ngạc nhiên đối với tất
cả mọi ngƣời rằng thực tế tốc độ của tiếng Anh nhỏ hơn nhiề u so vớ i tố c độ tuyệt đố i , và
chúng ta vẫn thấy rằng đối với một thông báo bằng tiếng Anh có thể loại bỏ một số chƣ̃
cái nhƣng ngƣời đọc vẫn có thể hiểu đƣợc . Hiện tƣợng nà y đƣợc gọi là độ dƣ thƣ̀ a củ a
ngôn ngƣ̃ (Redundancy) tƣ̣ nhiên.
Không chỉ đố i vớ i tiếng Anh mà vớ i hầ u hế t cá c ngôn ngƣ̃ tƣ̣ nhiên , do cấ u trú c của
ngôn ngƣ̃ , do việc sƣ̉ dụng ngôn ngƣ̃ dẫn tớ i có một số chƣ̃ cá i đƣợc sƣ̉ dụng vớ i tầ n
suấ t không đồ ng đề u hoặc chỉ có thể xuấ t hiện vớ i một cấ u trú c nà o đó là m cho chú ng ta
vẫn có thể đoá n đƣợc nghĩa của cá c thông bá o nếu loại bỏ cá c chƣ̃ cá i nà y.
Độ dƣ thừa (Redundancy) của một ngôn ngữ ký hiệu là D và D = R – r. Đối với
tiếng Anh:
D = 1 - .28 = .72 letters/letter
D = 4.7 – 1.3 = 3.4 bits/letter
Nhƣ vậy mỗi chƣ̃ cá i có 1.3 bit nghĩa và 3.4 bit dƣ thƣ̀ a (xấ p xỉ 72%).
1.3. Tính an toà n củ a hệ thố ng mã hoá
Shannon đi ̣nh nghĩa rấ t rõ rà ng , tỉ mỉ các mô hình toán học để đánh giá độ an toà n
của các hệ mã mật sử dụng . Mục đích của ngƣời thám mã là phát hiện ra khoá sƣ̉ dụng
của hệ mã (K-Key), bản rõ (P-PlainText), hoặc cả hai . Hơn nƣ̃a họ có thể hà i lò ng vớ i
một và i thông tin có khả năng về bản rõ P chẳng hạn nhƣ đó là âm thanh dạng số , hoặc
là một văn bản tiế ng Đƣ́ c, hoặc là một bảng tính dữ liệu, v. v . . .
Trong hầ u hế t cá c lầ n thám mã, ngƣờ i thám mã thƣờ ng cố gắ ng thu thập một số
thông tin có khả năng về bản rõ P trƣớ c khi bắ t đầ u. Họ có thể biết ngôn ngữ đã đƣợc sƣ̉
dụng để mã hoá. Ngôn ngƣ̃ nà y chắ c chắn có sƣ̣ dƣ thƣ̀ a kết hợp vớ i chính ngôn ngƣ̃ đó .
Nếu nó là một thông bá o gƣ̉ i tớ i Bob, nó có thể bắt đầu với "Dear Bob". Đoạn văn bản
H(M) = log2n
Chƣơng II: Cơ sở toán học
12
"Dear Bob" sẽ là một khả năng có thể hơn là một chuỗi không mang ý nghĩa gì chẳng hạn
"tm*h&rf". Mục đích của việc thám mã là sửa những tập hợp khả năng có thể có của bản
mã (C-CipherText) vớ i mỗi khả năng có thể của bản rõ.
Shannon phá t triển lý thuyế t cho rằ ng , hệ thố ng mã hoá chỉ an toà n tuy ệt đối nếu
nế u số khoá có thể sƣ̉ dụng ít nhất phải bằ ng số thông bá o có thể . Hiểu theo một nghĩa
khác, khoá tối thiểu của hệ mã phải dài bằng thông báo của hệ mã đó .
Ngoại trừ các hệ mã an toà n tuyệt đố i , các bản mã thƣờ ng chƣ́ a một số thông tin
đú ng vớ i bản rõ , điề u nà y là không thể trá nh đƣợc . Một thuật toá n mật mã tố t giƣ̃ cho
thông tin bị tiết lộ ở mức nhỏ nhất và một ngƣờ i thá m mã giỏi sẽ khai thá c tố t nhƣ̃ng
thông tin nà y để phá t hiện ra bản rõ.
Ngƣờ i thám mã sử dụng sự dƣ thừa tự nhiên của ngôn ngữ để làm giảm số khả
năng có thể có của bản rõ. Nhiề u thông tin dƣ thƣ̀ a của ngôn ngƣ̃ , sẽ dễ dàng hơn cho
quá trình thám mã. Chính vì lý do nà y mà nhiều mô hình mã hó a sƣ̉ dụng thuật toá n nén
bản rõ để giảm kích thƣớc văn bản trƣớc khi mã hoá chúng. Vì quá trình nén làm giảm sự
dƣ thƣ̀ a của thông bá o . Entropy của một hệ mã mật là kích thƣớc của không g ian khoá
(Keyspace).
H(K) = log2(number of keys )
Shannon cũng đƣa ra một khá i niệm gọi là Unicity Distance (ký hiệu là U ) để đánh
giá độ an toàn của một hệ mã mật. Đối với một hệ mã mật U của nó là:
U = H(K)/D
Đây là số nhỏ nhấ t cá c bản mã cầ n thiế t để có thể tiế n hà nh thá m mã theo cá ch thƣ̉
tấ t cả cá c khó a có thể (brute-force attack) thành công. Chẳng hạn đố i vớ i hệ mã thay thế
đơn âm (nhƣ Caesar) trên bảng chƣ̃ cá i tiế ng Anh ta sẽ có:
H(K)= log226! = 87. D = 3.4 suy ra U = 25.5.
Điều nà y có nghĩa là nếu chú ng ta có khoảng 25 chƣ̃ cá i bản mã chú ng ta chỉ có thể
thƣ̉ để khớ p vớ i một bản rõ.
Khái niệm Unicity Distance là một khái niệm mang tính xác suất nó cho ch úng ta
biế t số lƣợng ít nhấ t cá c bản mã cầ n có để có thể xá c đi ̣nh duy nhấ t 1 bản mã chứ không
phải là số bản mã đủ để tiến hành thám mã (chắ c chắn thà nh công). Nế u chú ng ta có số
bản mã ít hơn số U thì không thể nói là dự đoán (phép thử) của chúng ta là đúng . Dƣ̣a
vào công thức này chúng ta thấy nếu nhƣ độ dƣ thừa của ngôn ngữ càng gần 0 thì càng
khó thám mã mặc dù đó có thể là một hệ mã rất đơn giản . Cũng dựa vào công thứ c nà y
suy ra để tăng tính an toà n của hệ mã có thể tăng không gian khó a của nó .
1.4. Kỹ thuật lộn xộn và rƣờ m rà (Confusion and Diffusion)
Theo Shannon, có hai kỹ thuật cơ bản để che dấu sự dƣ thừa thông tin trong thông
báo gốc, đó là : sƣ̣ lộn xộn và sƣ̣ rƣờ m rà.
Kỹ thuật lộn xộn (Confusion): che dấ u mố i quan hệ giƣ̃a bản rõ và bản gố c . Kỹ
thuật nà y là m thấ t bại các cố gắng nghiên cƣ́ u bản mã để tìm kiếm thông tin dƣ thừa và
thố ng kê mẫu. Phƣơng phá p dễ nhấ t để thƣ̣c hiện điề u nà y là thông qua kỹ thuật thay
thế . Một hệ mã hoá thay thế đơn giản , chẳng hạn hệ mã di ̣ch vò ng Caesar , dƣ̣a trên nền
Chƣơng II: Cơ sở toán học
13
tảng của sự thay thế các chƣ̃ cá i của bản rõ, nghĩa là chữ cái này đƣ ợc thay thế bằng
chƣ̃ cá i khá c
Kỹ thuật rƣờm rà (Diffusion): làm mất đi sự dƣ thừa của bản rõ bằng cách tăng
sự phụ bản mã vào bản rõ (và khóa). Công việc tìm kiếm sƣ̣ dƣ thƣ̀ a của ngƣờ i thá m mã
sẽ rất mất thời gian và phức tạp. Cách đơn giản nhất tạo ra sự rƣờm rà là thông qua việc
đổi chỗ (hay cò n gọi là kỹ thuật hoán vị).
Thông thƣờ ng cá c hệ mã hiện đại thƣờ ng kế t hợp cả hai kỹ thuật thay thế và hoá n
vị để tạo ra các thuật toán mã hóa có độ an toàn cao hơn.
2. Lý thuyết độ phức tạp
Lý thuyết độ phức tạp cung cấp một phƣơng pháp để phân tích độ phức tạp tính
toán của thuật toán và các kỹ thuật mã hoá khác nhau . Nó so sánh các thuật toán mã
hoá, kỹ thuật và phát hiện ra độ an toàn của các thuật toán đó . Lý thuyết thông tin đã cho
chúng ta biết rằng một thuật toán mã hoá có thể bị bại lộ . Còn lý thuyết độ phứ c tạp cho
biế t khả năng bi ̣thá m mã củ a một hệ mã mật.
Độ phức tạp thời gian của thuật toán là một hà m của kích thƣớ c dƣ̃ liệu input của
thuật toá n đó . Thuật toá n có độ phƣ́ c tạp thờ i gian f (n) đố i vớ i mọi n và kích thƣớc input
n, nghĩa là số bƣớc thƣ̣c hiện của thuật toán lớn hơn f(n) bƣớ c.
Độ phức tạp thời gian thuật toán phụ thuộc vào mô hình của các thuật toán , số cá c
bƣớ c nhỏ hơn nếu cá c hoạt động đƣợc tập trung trong một bƣớ c (chẳng hạn nhƣ cá c
vòng lặp, các lời gọi hàm …).
Các lớp của thuật toán, vớ i độ phƣ́ c tạp thờ i gian là một hàm mũ đố i vớ i kích thƣớ c
input đƣợc coi là "không có khả năng thƣ̣c hiện ". Các thuật toán có độ phức tạp giống
nhau đƣợc phân loại và o trong cá c lớ p tƣơng đƣơn g. Ví dụ tất cả các thuật toán có độ
phƣ́ c tạp là n 3
đƣợc phân và o trong lớ p n 3
và ký hiệu bởi O(n3
). Có hai lớp tổng quát sẽ
đƣợc là lớ p P (Polynomial) và lớp NP (NonPolynomial).
Các thuật toán thuộc lớp P có độ phức tạ p là hà m đa thƣ́ c của kích thƣớc input .
Nếu mỗi bƣớ c tiếp theo của thuật toá n là duy nhấ t thì thuật toá n gọi là đơn đi ̣nh . Tấ t cả
thuật toá n thuộc lớ p P đơn đi ̣nh có thờ i gian giớ i hạn là P _time, điều nà y cho biế t chú ng
sẽ thực hiện trong thời gian đa thức , tƣơng đƣơng vớ i độ phƣ́ c tạp đa thƣ́ c của kích
thƣớ c input.
Thuật toán mà ở bƣớc tiếp theo việc tính toán phải lựa chọn giải pháp từ những
giớ i hạn giá tri ̣của hoạt động gọi là không đơn đi ̣nh. Lý thuyết độ phức tạp sử dụng các
máy đặc biệt mô tả đặc điểm bằng cách đƣa ra kết luận bởi các chuẩn . Máy Turing là
một má y đặc biệt , máy hoạt động trong thời gian rời rạc , tại một thời điểm nó nằm trong
khoảng trạng thái đầy đủ số của tất cả các trạng thái có thể là hữu hạn . Chúng ta có thể
đi ̣nh nghĩa hà m độ phƣ́ c tạp thờ i gian kết hợp vớ i má y Turing A.
fA(n) = max{m/A kế t thú c sau m bƣớ c vớ i đầ u và o w = n3
}
Ở đây chúng ta giả sử rằng A là trạng thái kết thúc đối với tất cả các đầu vào , vấ n
đề sẽ trở nên khó khăn hơn nếu các trạng thái không nằm trong P . Máy Turing k hông
đơn đi ̣nh hoạt động vớ i thuật toá n NP. Máy Turing không đơn định có thể có một và i trạng
Chƣơng II: Cơ sở toán học
14
thái chính xác. S(w) là trạng thái đo sự thành công ngắn nhất của thuật toán, (Nghĩa là sự
tính toán dẫn đến trạng thái cuối cùng)
Hàm số độ phức tạp thời gian của máy Turing không đơn định A đƣợc đi ̣nh nghĩa :
fA(n)=max{1,m/s(w) có m bƣớc đối với w/w=n}
ở mỗi bƣớc máy Turing không đơn định bố trí nhiều bản sao của chính nó nhƣ có
một và i giải phá p và tính toá n độc lập vớ i mọi lờ i giải.
Các thuật toán thuộc lớ p NP là không đơn đi ̣nh và có thể tính toá n trên má y Turing
không đơn đi ̣nh trong thờ i gian P.
Tuy nhiên không phải thuật toá n mã hó a cà ng có độ phƣ́ c tạp lớ n thì hệ mã mật sƣ̉
dụng thuật toán đó sẽ càng an toà n theo nhƣ phát biểu của luật Kierchoff.
Vậy có thể đá nh giá độ an toà n của một hệ mã mật nhƣ thế nà o ? Vấ n đề này đã
đƣợc Claude Shannon trả lờ i vớ i cá c khá i niệm về độ an toà n củ a cá c hệ mã mật trong
một bài báo có tiêu đề “Lý thuyết thông tin của các hệ thống bảo mật” (1949).
2.1. Độ an toàn tính toán
Định nghĩa:
Một hệ mật được gọi là an toàn về mặt tính toán nếu có một thuật toán tốt nhất để
phá nó thì cần ít nhất N phép toán, với N là một số rất lớn nào đó. [10]
Tuy nhiên trong thực tế, không có một hệ mật nào chứng tỏ là an toàn theo định
nghĩa trên. Vì vậy, trên thực tế, ngƣời ta gọi hệ mật là “an toàn tính toán” nếu có một
thuật toán để phá nó nhƣng đòi hỏi thời gian lớn đến mức không chấp nhận đƣợc (thuật
toán có độ phƣ́ c tạp hà m mũ hoặc thuộc lớ p cá c bà i toá n có độ phƣ́ c tạp NP).
Một cách tiếp cận khác về độ “an toàn tính toán” là quy nó về một bài toán đã đƣợc
nghiên cứu kỹ và đƣợc coi là khó. Ví dụ nhƣ bài toán “phân tích ra thừa số nguyên tố của
một số n cho trƣớc” đƣợc coi là bài toán khó với n lớn, vì vậy ta có thể coi một hệ mật
dựa trên bài toán “phân tích ra thừa số nguyên tố” là an toàn (tất nhiên đây chỉ là độ an
toàn dựa vào chứng minh một bài toán khác chứ không phải chứng minh hoàn chỉnh về
độ an toàn của hệ mật).
2.2. Độ an toàn không điều kiện
Định nghĩa 1:
Một hệ mật được coi là an toàn không điều kiện khi nó không thể bị phá ngay cả với
khả năng tính toán không hạn chế. [10]
Rõ ràng là “độ an toàn không điều kiện” không thể nghiên cứu theo quan điểm độ
phức tạp tính toán vì thời gian tính toán là không hạn chế. Vì vậy, ở đây lý thuyết xác suất
sẽ đƣợc đề cập để nghiên cứu về “an toàn không điều kiện”.
Định nghĩa 2:
Giả sử biến X và Y là các biến ngẫu nhiên. Ký hiệu xác suất để X nhận giá trị x là
p(x) và để Y nhận giá trị y là p(y). Xác suất đồng thời p(x, y) là xác suất để đồng thời X
nhận giá trị x và Y nhận giá trị y. Xác suất có điều kiện p(x/y) là xác suất để X nhận giá trị
Chƣơng II: Cơ sở toán học
15
x với điều kiện Y nhận giá trị y. Các biến X và Y đƣợc gọi là độc lập nếu p(x, y) = p(x)p(y)
với mọi giá trị có thể có của X và Y.
Định lý Bayes:
Nếu p(y) ≠ 0 thì ta có:
( ) ( / )
( / )
( )
p x p y x
p x y
p y

Hệ quả:
X, Y là biến độc lập khi và chỉ khi p(x/y) = p(x) với mọi x, y. [5]
Ở đây, ta giả thiết rằng một khoá cụ thể chỉ đƣợc dùng cho một bản mã. Ký hiệu
xác suất tiên nghiệm để bản rõ xuất hiện là pp(x). Cũng giả thiết rằng khoá K đƣợc chọn
theo một phân bố xác suất nào đó (thông thƣờng khoá K đƣợc chọn ngẫu nhiên nên các
khoá sẽ đồng khả năng). Ký hiệu xác suất khoá K đƣợc chọn là pk(K).
Giả thiết rằng khoá K và bản rõ x là các biến độc lập. Hai phân bố xác suất trên P
và K sẽ tạo ra một phân bố xác suất trên C . Ký hiệu C(K) là tập các bản mã có thể nếu
K là khoá.
C (K) = { eK(x): xP }
Khi đó với mỗi yC, ta có:
C
, ( )
( ) ( ). ( ( ))K p K
K y C K
p y p K p d y

 
Và xác suất có điều kiện pC(y/x) là xác suất để y là bản mã với điều kiện bản rõ là x
đƣợc tính theo công thức sau:


)(,
)()/(
ydxK
KC
K
Kpxyp
Bây giờ ta có thể tính xác suất có điều kiện pP(x/y) là xác suất để x là bản rõ khi bản
mã là y theo định lý Bayes:
, ( )C
, ( )
( ) ( )
( ) ( / )
( / )
( ) ( ) ( ( ))
K
P K
K x d yP
P
C K P K
K y C K
p x p K
p x p y x
p x y
p y p K p d y


 


Lúc này, ta có thể định nghĩa khái niệm về độ mật hoàn thiện. Nói một cách không
hình thức, độ mật hoàn thiện nghĩa là đối phƣơng với bản mã trong tay cũng không thể
thu nhận đƣợc thông tin gì về bản rõ. Tuy nhiên ta sẽ nêu định nghĩa chính xác về độ mật
hoàn thiện nhƣ sau:
Định nghĩa:
Một hệ mật hoàn thiện nếu pP(x/y) = pP(x) với mọi xP và mọi yC. Tức là xác suất
hậu nghiệm để thu được bản rõ là x với điều kiện đã thu được bản mã là y đồng nhất với
xác suất tiên nghiệm để bản rõ là x. [5]
Chƣơng II: Cơ sở toán học
16
Hay nói cách khác, độ mật hoàn thiện cũng tƣơng đƣơng với pC(y/x)= pC(y)).
Định lý Shannon:
Giả sử (P, C, K, E, D) là một hệ mật, khi đó hệ mật đạt được độ mật hoàn thiện khi
và chỉ khi |K| ≥ |C|. Trong trường hợp |K| = |C| = |P|, hệ mật đạt độ mật hoàn thiện khi và
chỉ khi mỗi khoá K được dùng với xác suất bằng nhau, bằng 1/|K| và với mỗi xP, mỗi
yC có một khoá K duy nhất sao cho eK(x) = y. [5]
Nhƣ vậy ta thấy để đạt độ hoàn thiện đòi hỏi khoá phải rất dài, do vậy rất khó khăn
trong việc chuyển giao khoá giữa hai bên truyền tin. Vì vậy trong thực tế, chúng ta không
thể có an toàn không điều kiện mà chúng ta chỉ cần an toàn thực tế, tức là phụ thuộc vào
thông tin và thời gian cần bảo mật bằng cách sử dụng các hệ mật khác nhau với độ bảo
mật khác nhau.
3.3. Hệ mật tích
Một ý tƣởng khác đƣợc Shannon đƣa ra là ý tƣởng tạo ra các hệ mật mới dựa trên
các hệ mật cũ bằng cách tạo tích của chúng. Đây là một ý tƣởng quan trọng trong việc
thiết kế các hệ mật hiện đại ngày nay.
Để đơn giản, ở đây chúng ta chỉ xét các hệ mật trong đó C = P, các hệ mật loại này
gọi là tự đồng cấu. Giả sử S1 = (P, C, K1, E1, D1) và S2 = (P, C, K2, E2, D2) là các hệ
mật tự đồng cấu có cùng không gian bản rõ và bản mã. Khi đó hệ mật tích đƣợc định
nghĩa là hệ mật S = (P, C, K1K2 ,E ,D). Khoá của hệ mật tích K = (K1, K2) trong đó K1
 K1, K2  K2. Các hàm mã hoá và giải mã đƣợc xác định nhƣ sau:
))(()( 1221 ),( xeexe KKKK 
))(()( 2121 ),( xedxd KKKK 
Nếu chúng ta lấy tích của S với chính nó, ta có hệ mật (S×S) (ký hiệu S2). Nếu lấy
tích n lần thì kết quả là Sn. Ta gọi Sn là một hệ mật lặp. Nếu S2 = S thì ta gọi hệ mật là
luỹ đẳng. Nếu S là luỹ đẳng thì không nên lấy tích lặp vì độ bảo mật không tăng lên mà
không gian khoá lại lớn hơn. Đƣơng nhiên nếu S không luỹ đẳng thì ta có thể lặp lại S
nhiều lần để tăng độ bảo mật. Ở đây nảy sinh một vấn đề là làm thế nào để có một hệ
mật không luỹ đẳng?
Ta biết rằng nếu S1 và S2 là luỹ đẳng và giao hoán thì S1×S2 cũng luỹ đẳng, đơn
giản vì:
(S1×S2)×(S1×S2) = S1×(S2×S1)×S2
= S1×(S1×S2)×S2
= (S1×S1)×(S2×S2)
= (S1×S2)
Vậy nếu muốn (S1×S2) không luỹ đẳng thì cần phải có S1 và S2 không giao hoán.
Điều này có thể dễ dàng thực hiện bằng cách lấy tích của một hệ mật theo kiểu thay thế
và một hệ mật theo kiểu hoán vị. Đây là kỹ thuật đƣợc dùng để thiết kế các hệ mã hiện
đại nhƣ mã DES.
Chƣơng II: Cơ sở toán học
17
3. Lý thuyết toán học
3.1. Modulo số học
Về cơ bản a  b(mod n) nế u a = b+kn trong đó k là một số nguyên . Nế u a và b
dƣơng và a nhỏ hơn n, chúng ta có thể gọi a là phầ n dƣ của b khi chia cho n. Nói chung a
và b đều là phầ n dƣ khi chia cho n . Ngƣờ i ta cò n gọ b là thặng dƣ của a theo modulo n,
và a là đồng dƣ của b theo modulo n.
Modulo số học cũng giố ng nhƣ số học bình thƣờ ng , bao gồ m cá c phé p giao hoá n ,
kết hợp và phân phố i. Mặt khá c giảm mỗi giá tri ̣trung gian trong suố t quá trình tính toá n.
(a+b) mod n = ((a mod n) + (b mod n)) mod n
(a- b) mod n = ((a mod n) - (b mod n)) mod n
(ab) mod n = ((a mod n)  (b mod n)) mod n
(a(b + c)) mod n = (((a  b) mod n) + ((a  c) mod n)) mod n
Các phép tính trong các hệ mã mật hầ u hế t đều thƣ̣c hiện đố i vớ i một modulo N nà o
đó .
3.2. Số nguyên tố
Số nguyên tố là một số lớ n hơn 1, nhƣng chỉ chia hế t cho 1 và chính nó , ngoài ra
không cò n số nào nó có thể chia hết nữa . Số 2 là một số nguyên tố đầ u tiên và là số
nguyên tố chẵn duy nhấ t . Do vậy 7, 17, 53, 73, 2521, 2365347734339 cũng là số nguyên
tố . Số lƣợng số nguyên tố là vô tận. Hệ mật mã thƣờ ng sƣ̉ dụng số nguyên tố lớ n cỡ 512
bits và thậm chí lớ n hơn nhƣ vậy.
3.3. Ƣớc số chung lớn nhất
Hai số a và n đƣợc gọi là hai số nguyên tố cùng nhau nếu chúng không có thừa số
chung nà o khá c 1, hay nó i một cá ch khá c, nế u ƣớ c số chung lớ n nhấ t của a và n là bằng
1. Chúng ta có thể viết nhƣ sau :
GCD(a,n)=1, (GCD-Greatest Common Divisor)
Số 15 và 28 là hai số nguyên tố cù ng nhau, nhƣng 15 và 27 thì không phải là hai số
nguyên tố cùng nhau do có ƣớ c số chung là 1 và 3, dễ dà ng thấ y 13 và 500 cũng là một
cặp số nguyên tố cùng nhau. Một số nguyên tố sẽ là nguyên tố cù ng nhau vớ i tấ t cả cá c
số nguyên khá c trƣ̀ cá c bội số của nó.
Một cá ch dễ nhấ t để tính toá n ra ƣớ c số chung lớ n nhấ t của hai số là nhờ và o thuật
toán Euclid. Knuth mô tả thuật toá n và một và i mô hình của thuật toá n đã đƣợc sƣ̉ a đổi.
Dƣớ i đây là đoạn mã nguồ n trong ngôn ngƣ̃ C:
/* Thuật toá n tìm ƣớ c số chung lớ n nhấ t của x và y, giả sử x,y>0 */
int gcd(int x, int y)
{
int g;
if(x<0)
Chƣơng II: Cơ sở toán học
18
x=-x;
if(y<0)
y= -y;
g=y;
while(x>0){
g=x;
x=y%x;
y=g;
}
return g;
}
3.4. Vành ZN (vành đồng dƣ module N)
Tập cá c số nguyên ZN = {0, 1, …, N-1} trong đó N là một số tƣ̣ n hiên dƣơng vớ i
hai phé p toá n cộng (+) và nhân (.) đƣợc đi ̣nh nghĩa nhƣ sau tạo thà nh một vành đồng dƣ
modulo N (hay cò n gọi là tập thặng dƣ đầ y đủ theo modulo N):
Phép cộng:
 a, b ZN: a+b = (a+b) mod N.
Phép nhân:
 a, b ZN: a . b = (a * b) mod N.
Theo tính chấ t của modulo số học chú ng ta dễ dà ng nhận thấ y Z N là một vành giao
hoán và kết hợp. Hầ u hế t cá c tính toá n trong cá c hệ mã mật đều đƣợc thƣ̣c hiện trên một
vành ZN nào đó.
Trên và nh ZN số 0 là phần tử trung hòa vì a + 0 = 0 + a = a,  a ZN, số 1 đƣợc gọi
là phần tử đơn vị vì a . 1 = 1 . a = a  a ZN.
3.5. Phầ n tƣ̉ nghi ̣ch đả o
Trên trƣờ ng số thƣ̣c R , số nghi ̣ch đảo của 5 là 1/5, bở i vì 5  1/5=1. Còn trên một
vành số nguyên ZN ngƣờ i ta đƣa ra khá i niệm về số nghi ̣ch đảo của một số nhƣ sau:
Giả sử a ZN và tồn tại b ZN sao cho a.b = (a*b) mod N = 1. Khi đó b đƣợc gọi là
phầ n tƣ̉ nghi ̣ch đảo của a trên ZN và ký hiệu là a-1
= b.
Việc tìm phần tử nghịch đảo của một số a ZN cho trƣớ c thƣ̣c chấ t tƣơng đƣơng
vớ i việc tìm hai số b và k sao cho: a.b = k.N + 1 trong đó b, k ZN. Hay viế t gọn lại là :
a-1
 b (mod N )
Đi ̣nh lý về sƣ̣ tồ n tại củ a phầ n tƣ̉ nghi ̣ch đả o : Nế u GCD(a, N) = 1 thì tồn tại duy
nhấ t 1 số b ZN là phần tử nghịch đảo của a, nghĩa là thỏa mãn a.b = (a*b) mod N = 1.
Chƣơng II: Cơ sở toán học
19
3.6. Hàm phi Ơle
Vớ i mỗi số nguyên N , giá trị của hàm phi Ơle của N là tổng số tất cả các số
nguyên ZN và nguyên tố cùng nhau với N . Chẳng hạn nế u P là một số nguyên thì giá tri ̣
hàm phi Ơle của P: (P) = P – 1 hoặc nế u N = p*q trong đó p và q là hai số nguyên tố thì
(N) = (p-1)*(q-1).
Trong trƣờ ng hợp tổng quá t nế u dạng phân tích ra thừa số nguyên tố của N là:
1 2
1 2 ... k
kN p p p  

trong đó pi là các số nguyên tố còn i là các số nguyên dƣơng thì giá trị của hàm
phi Ơle đƣợc tính nhƣ sau:
1 2 11 1
1 1 2 2( ) ( 1) ( 1) ...( 1) k
k kN p p p p p p  
  
   
Liên quan tớ i khá i niệm về hà m phi Ơle chú ng ta có đi ̣nh lý Ơle phá t biểu nhƣ sau:
 a  Z*
N = ZN – {0} và GCD(a, N) = 1 ta có
( )
1(mod )N
a N
 . Có nghĩa là
( )N
a
chính là giá trị nghịch đảo của a trên ZN.
Một trƣờ ng hợp riêng của đi ̣nh lý Ơle chính là đi ̣nh lý Fermat nhỏ : Nế u P là một số
nguyên tố thì  a  Z*
P ta có
1
1(mod )P
a P
 . Đây là một trong nhƣ̃ng đi ̣nh lý đẹp nhấ t
của số học.
Vớ i mỗi số nguyên N và nh Z *
N gồ m cá c phầ n tƣ̉ thuộc Z N và nguyên tố cù ng nhau
vớ i N, hay nó i cá ch khá c: Z*
N = {x: xZN, (x, N) = 1} = {x: xZN, ( )
1N
x
 }.
Vớ i mỗi phầ n tƣ̉ a  ZN, bậc t của a (ký hiệu là ord(a)) là số nhỏ nhất sao cho : at
=
1. Theo đi ̣nh lý Ơle ta suy ra (N) chia hết cho t.
Cụ thể với N = 21 ta có bảng sau:
aZ*
21 1 2 4 5 8 10 11 13 16 17 19 20
Ord(a) 1 6 3 6 2 6 6 2 3 6 6 2
Bảng 2.1: Bảng bậc của các phần tử trên Z*
21
Nếu bậc của a  Z*
N bằ ng (N) thì a đƣợc g ọi là phần tử sinh hay phần tử nguyên thủy
của tập Z*
N. Và nếu tập Z*
N chỉ có một phần tử sinh thì nó đƣợc gọi là một cyclic.
3.7. Thặng dƣ bậc hai
Giả sử a  Z*N, khi đó a đƣợc gọi là thặng dƣ bậc 2 theo modulo N nế u tồ n tại x 
Z*N sao cho x2
= a (mod N). Tập cá c phầ n tƣ̉ thặng dƣ theo modulo N đƣợc ký hiệu là QN,
tập cá c phầ n tƣ̉ không thặng dƣ theo modulo N đƣợc gọi là bất thặng dƣ theo modulo N
và ký hiệu là NQ .
Chƣơng II: Cơ sở toán học
20
Đi ̣nh lý : nế u p là một số nguyên tố lẻ và  là một phần tử sinh của Z *N, khi đó a là
một thặng dƣ bậc 2 theo modulo N khi và chỉ khi a = i
mod p, trong đó i là số nguyên lẻ .
Tƣ̀ đi ̣nh lý nà y suy ra ( 1)/ 2 NNQ p Q   .
Ví dụ với p = 13,  = 6  Z13 ta có bảng sau:
i 0 1 2 3 4 5 6 7 8 9 10 11
i
mod 13 1 6 10 8 9 2 12 7 3 5 4 11
Bảng 2.2: Bảng lũy thừa trên Z13
Do đó Q13 = {1, 3, 4, 9, 10, 12} và 13Q = {2, 5, 6, 7, 8, 11}.
Vớ i a  QN. Nế u x  Z*N thỏa mãn x2
= a (mod N) thì a đƣợc gọi là căn bậc hai của
x theo modulo N.
3.8. Thuật toá n lũy thƣ̀ a nhanh
Để có thể tìm phầ n tƣ̉ nghi ̣ch đảo của một số nguyên a trên một và nh Z N cho trƣớ c
chúng ta có thể sƣ̉ dụng đi ̣nh lý Ơle để tính giá tri ̣lũy thƣ̀ a của a vớ i số mũ là giá tri ̣hà m
phi Ơle của N . Tuy nhiên để có thể nhanh chó ng tính đƣợc giá tri ̣lũy thƣ̀ a nà y chú ng ta
cầ n có một thuật toá n hiệu quả và một trong cá c thuật toá n đó (còn nhiều thuật toán khác
phƣ́ c tạp hơn ) là thuật toán lũy thừa nhanh . Thuật toá n nà y do Chivers đƣa ra và o năm
1984. Các bƣớc của thuật toán nhƣ sau:
Input: a, m, N.
Output: am
mod N.
Begin
Phân tích m thà nh dạng nhị phân m = bkbk-1…b0.
j = 0, kq = a;
while (k>=j)
{
if (bj==1)
kq = (kq * a) mod N;
a = (a * a) mod N;
j = j + 1;
}
return kq;
end
Một cà i đặt khá c bằng ngôn ngƣ̃ C nhƣ sau:
long modexp(long a, long x, long n)
{
Chƣơng II: Cơ sở toán học
21
long r = 1;
while (x > 0){
if (x % 2 == 1) /* is x odd? */
r = (r * a) % n;
a = (a*a) % n;
x /= 2;
}
return r;
}
Thuật toá n nà y chạy không quá log2(m+1) bƣớ c.
3.9. Thuật toá n Ơclit mở rộng
Trong phầ n 3.3 chúng ta đã biết thuật toán Ơclit đƣợc d ùng để tìm ƣớc số chung
lớ n nhấ t của ha i số nguyên và trong phầ n 3.7 chúng ta đã biết cách tìm một phần tử
nghịch đảo của một số bằ ng cá ch sƣ̉ dụng thuật toá n lũy thƣ̀ a nhanh tuy nhiên vẫn có
một thuật toá n hiệu qu ả khác để tìm phầ n tƣ̉ nghịch đảo gọi là thuật tóan Ơclit mở rộng
(do dƣ̣a trên thuật toá n Ơclit). Các bƣớc của thuật toán nhƣ sau:
input: a, N vớ i GCD(a, N) = 1
output: a-1
begin
g0=n, g1 = a, u0 = 1, u1 = 0, v0 = 0, v1 = 1, i = 1;
while (gi <>0 )
{
y = gi-1 div gi;
gi+1 = gi-1 – y*gi;
ui+1 = ui-1 – y*ui;
vi+1 = vi-1 – v*ui;
i = i + 1;
}
x = vi-1;
if(x>0) then
return x;
else
return (N+x);
end;
Chƣơng II: Cơ sở toán học
22
3.10. Phƣơng trình đồ ng dƣ bậc nhấ t 1 ẩn
Phƣơng trình đồ ng dƣ bậc nhấ t 1 ẩn là phƣơng trình có dạng:
ax  b (mod N) trong đó a, b  ZN là các hệ số còn x là ẩn số.
Nế u nhƣ GCD(a, N) = 1 chúng ta có thể tìm a -1
sau đó nhân và o 2 vế của phƣơng
trình và tìm ra nghiệm một cách dễ dàng tuy nhiên nếu g = GCD(a, N) là một giá trị khác 1
thì sao? Khi đó bà i toá n có thể vô nghiệm hoặc có nhiề u nghiệm . Chúng ta xét đi ̣nh lý
sau:
Giả sử g = GCD(a, N) và nếu b chia hết cho g thì phƣơng trình đồng dƣ bậc nhất 1
ẩn:
ax  b (mod N)
sẽ có g nghiệm có dạng
x  ((b/g)x0 + t(n/g)) (mod N) trong đó t = 0, …, g-1,
và x0 là nghiệm của phƣơng trình (a/g)x  1 (mod N/g).
3.11. Đi ̣nh lý phầ n dƣ Trung Hoa.
Đi ̣nh lý phầ n dƣ Trung Hoa là m ột định lý quan trọng của số học đƣợc c ác nhà
toán học Trung Quốc khám phá ra vào thế kỷ thứ nhất. Đi ̣nh lý phá t biểu nhƣ sau:
Nế u d1, d2, …, dk là các số nguyên đôi một nguyên tố cùng nhau và N = d1d2…dk
thì hệ phƣơng trình đồng dƣ:
x  xi (mod di), i=1, 2, …, k
sẽ có một nghiệm thuộc vào ZN. Nghiệm của hệ có tính theo công thƣ́ c sau:
1
( / ) (mod )
k
i i i
i
x N d y x N

 
trong đó yi là các nghiệm của các phƣơng trình đồng dƣ (N/di) yi  1(mod di).
Dƣớ i đây là đoạn mã đi ̣nh lý phầ n dƣ trung hoa trong ngôn ngƣ̃ C :
int chinese_remainder(int r, int *m, int *u)
{
int i;
int modulus;
int n;
modulus = 1;
for ( i=0; i<r:++i )
modulus *=m[i];
n=0;
for ( i=0; i<r:++i )
Chƣơng II: Cơ sở toán học
23
{
n+=u[i]*modexp(modulus/m[i],totient(m[i]),m[i]);
n%=modulus;
}
return n;
}
4. Các thuật toán kiể m tra số nguyên tố .
Hàm một phía (one-way functions) là một khái niệm cơ bản của mã hoá công
khai. Việc nhân hai số nguyên tố là một ví dụ về hàm một phía , nhân cá c số nguyên tố
lớ n để tạo thà nh một hợp số là dễ , nhƣng công việc ngƣợc lại phân tích một số nguyên
lớ n thà nh dạng thƣ̀ a số nguyên tố lại là một bà i toá n khó (chƣa có một thuật toá n tố t).
Các thuật toá n mã hoá khóa công khai đều cầ n phải sử dụng các số nguyên tố . Có
một số phƣơng phá p để sinh ra số nguyên tố và hầu hết chúng đều dựa trên các thuật
toán kiểm tra tính nguyên tố của một số nguyên . Tuy nhiên có một số vấ n đề đƣợc đặt ra
đố i vớ i số nguyên tố nhƣ sau
 Trong một hệ thố ng có thể đảm bảo hai ngƣờ i dù ng sẽ đƣợc sƣ̉ dụng hai số
nguyên tố khá c nhau hay không ? Câu trả lờ i là có thể vì có tớ i 10150
số nguyên tố có độ
dài 512 bits hoặc nhỏ hơn.
 Khả năng hai ngƣời dùng sẽ lựa chọn cù ng một số nguyên tố là bao nhiêu. Vớ i sƣ̣
lƣ̣a chọn tƣ̀ 10150
số nguyên tố , điều kỳ xảy ra với xác xuất nhỏ hơn so với sự tự bốc cháy
của máy tính.
Các loại thuật toán kiểm tra số nguyên tố đƣợc chia làm hai loại : thuật toá n tấ t đi ̣nh
và thuật toán xác suất. Các thuật toán tất định cho chúng ta biết chính xác câu trả lời một
số nguyên có phải là một số nguyên tố hay không cò n một thuật toá n xác suất cho biết
xác suất của một số ngu yên là một số nguyên tố là bao nhiêu . Trong phầ n nà y sẽ trình
bày một số thuật toán kiểm tra số nguyên tố phổ biến.
4.1. Một số ký hiệu toán học
4.1.1. Ký hiệu Lagrăng (Legendre Symbol)
Ký hiệu L(a,p) đƣợc đi ̣nh nghĩa vớ i a là một số nguyên và p là một số nguyên tố lớn
hơn 2. Nó nhận ba giá trị 0, 1, -1 :
L(a,p) = 0 nế u a chia hế t cho p.
L(a,p) = 1 nế u a  QN (a là thặng dƣ bậc 2 modulo p).
L(a,p) = -1 nế u a  NQ (a không là thặng dƣ bậc 2 modulo p).
Một phƣơng phá p dễ dà ng để tính toá n ra L(a,p) là :
L(a,p) = a (p-1)/2
mod p
Chƣơng II: Cơ sở toán học
24
4.1.2. Ký hiệu Jacobi (Jacobi Symbol)
Ký hiệu Jacobi đƣợc viết là J (a,n), nó là sự khái quát hoá của ký hiệu Lagrăng , nó
đi ̣nh nghĩa cho bấ t kỳ cặp số nguyên a và n nào. Ký hiệu Jacobi là một chức năng trên
tập hợp số thặng dƣ thấ p của ƣớ c số n và có thể tính toá n theo công thƣ́ c sau:
 Nế u n là số nguyên tố , thì J(a,n) = 1 nế u a là thặng dƣ bậc hai modulo n .
 Nế u n là số nguyên tố , thì J(a,n) = -1 nế u a không là thặng dƣ bậc hai modulo
n .
 Nế u n không phải là số nguyên tố thì Jacobi (a,n) sẽ đƣợc tính theo công thức
sau:
 J(a,n)=J(h,p1)  J(h,p2) . . .  J(h,pm)
vớ i p1,p2. . .,pm là các thừa số lớn nhất của n.
Thuật toá n nà y tính ra số Jacobi tuầ n hoà n theo công thƣ́ c sau :
1. J(1,k) = 1
2. J(ab,k) = J(a,k)  J(b,k)
3. J(2,k) =1 Nế u (k2
-1)/8 là chia hết và J(2,k) = -1 trong cá c trƣờ ng hợp khá c.
4. J(b,a) = J((b mod a),a)
5. Nế u GCD(a,b)=1 :
a. J(a,b)  J(b,a) = 1 nế u (a-1)(b-1)/4 là chia hết.
b. J(a,b)  J(b,a) = -1 nế u (a-1)(b-1)/4 là còn dƣ.
Sau đây là thuật toá n trong ngôn ngƣ̃ C :
int jacobi(int a,int b)
{
int a1,a2;
if(a>=b)
a%=b;
if(a==0)
return 0;
if(a==1)
return 1;
if(a==2)
if(((b*b-1)/8)%2==0)
return 1;
else
return -1;
Chƣơng II: Cơ sở toán học
25
if(a&b&1) (cả a và b đều là số dƣ)
if(((a-1)*(b-1)/4)%2==0)
return +jacobi(b,a);
else
return -jacobi(b,a);
if(gcd(a,b)==1)
if(((a-1)*(b-1)/4)%2==0)
return +jacobi(b,a);
else
return -jacobi(b,a);
return jacobi(a1,b) * jacobi(a2,b);
}
Trên thƣ̣c tế có thể tính đƣợc ký hiệu Jacobi một cá ch thuận lợi hơn nế u dƣ̣a và o 1
trong cá c tính chấ t sau, giả sử m, n là cá c số nguyên lẻ, a, b  Z:
(i) J(a*b, n) = J(a, n) * J(b, n) do đó J(a2
, n) = 1.
(ii) J(a, m*n) = J(a, m) * J(a, n).
(iii) nế u a  b (mod n) thì J(a, n) = J(b, n).
(iv) J(1, n) = 1.
(v) J(-1, n) = (-1)(n-1)/2
(vi) J(m, n) = J(n, m) * (-1)(m-1)*(n-1)/4
4.2. Thuật toá n Soloway-Strassen
Soloway và Strassen đã phá t triển thuật toá n có thể kiểm tra số nguyên tố . Thuật
toán này sử dụng hàm Jacobi.
Thuật toá n kiểm tra số p là số nguyên tố:
1. Chọn ngẫu nhiên một số a nhỏ hơn p.
2. Nế u ƣớ c số chung lớ n nhấ t gcd(a,p)  1 thì p là hợp số.
3. Tính j = a(p-1)/2
mod p.
4. Tính số Jacobi J(a,p).
5. Nế u j  J(a,p), thì p không phải là số nguyên tố.
6. Nế u j = J(a,p) thì nói p có thể là số nguyên tố với chắc chắn 50%.
Lặp lại cá c bƣớ c nà y n lầ n, mỗi lầ n vớ i một giá trị ngẫu nhiên khác nhau của a .
Phầ n dƣ của hợp số vớ i n phé p thƣ̉ là không quá 2n
.
Thƣ̣c tế khi thƣ̣c hiện chƣơng trình, thuật toá n chạy vớ i tố c độ khá nhanh.
Chƣơng II: Cơ sở toán học
26
4.3. Thuật toá n Rabin-Miller
Thuật toá n này đƣợc phát triển bởi Rabin , dƣ̣a trên một phầ n ý tƣở ng của Miller .
Thƣ̣c tế nhƣ̃ng phiên bản của thuật toá n đã đƣợc giớ i thiệu tại NIST . (National Institute of
Standards and Technology).
Đầu tiên là chọn ngẫu nhiên một số p để kiểm tra. Viế t p dƣớ i dạng p = 1+2b
m trong
đó m là một số lẻ.
Sau đây là thuật toá n :
1. Chọn một số ngẫu nhiên a, và giả sử a nhỏ hơn p.
2. Đặt j=0 và z=am
mod p.
3. Nế u z=1, hoặc z=p-1 thì p đã qua bƣớc kiểm tra và có thể là số nguyên tố.
4. Nế u j > 0 và z=1 thì p không phải là số nguyên tố.
5. Đặt j = j+1. Nế u j < b và z  p-1 thì đặt z=z2
mod p và trở lại bƣớ c 4.
6. Nế u j = b và z  p-1, thì p không phải là số nguyên tố.
4.4. Thuật toá n Lehmann.
Một phƣơng pháp đơn giản hơn kiểm tra số nguyên tố đƣợc phát triển độc lập bởi
Lehmann. Sau đây là thuật toá n vớ i số bƣớ c lặp là 100.
1. Chọn ngẫu nhiên một số n để kiểm tra.
2. Chắ c chắn rằng n không chia hế t cho cá c số nguyên tố nhỏ nhƣ 2,3,5,7 và 11.
3. Chọn ngẫu nhiên 100 số a1, a2, . . . , a100 giƣ̃a 1 và n-1.
4. Tính ai
(n-1)/2
(mod n) cho tấ t cả ai = a1. . . a100 . Dƣ̀ ng lại nế u bạn tìm thấ y ai sao
cho phé p kiểm tra là sai.
5. Nế u ai
(n-1)/2
= 1 (mod n) vớ i mọi i, thì n có thể là hợp số .
Nế u ai
(n-1)/2
 1 hoặc -1 (mod n) vớ i i bấ t kỳ, thì n là hợp số.
Nế u ai
(n-1)/2
= 1 hoặc -1 (mod n) vớ i mọi i  1, thì n là số nguyên tố.
5. Bài tập
Bài tập 2.1: hãy tính 1753
mod 29, hỏi cần dùng ít nhất là bao nhiêu phép nhân để
tìm ra kết quả.
Bài tập 2.2: Tính 876611
mod 899.
Sƣ̉ dụng một trong cá c ngôn ngƣ̃ lập trình C, C++, Java hoặc C# để làm các bài tập sau:
Bài tập 2.3: Viế t chƣơng trình cà i đặt thuật toá n tìm phầ n tƣ̉ nghịch đảo.
Bài tập 2.4: Viế t chƣơng trình cà i đặt thuật toá n lũy thƣ̀ a nhanh.
Bài tập 2.5: Viế t chƣơng trình giải hệ phƣơng trình đồ ng dƣ bậc nhấ t hai ẩn.
Bài tập 2.6: Viế t chƣơng trình cà i đặt thuật toá n kiểm tra số nguyên tố vớ i input là
một số nguyên nhỏ hơn 2000000000.
Chƣơng II: Cơ sở toán học
27
Bài tập 2.7: Viế t chƣơng trình cà i đặt thƣ viện số nguyên lớ n vớ i cá c thao tá c tính
toán cơ bản: nhân, chia, cộng trƣ̀ , lấ y modulo.
Bài tập 2.8: Sƣ̉ dụng thƣ viện số lớ n (ở bài tập 2.5 hoặc một thƣ viện mã nguồ n
mở ) cài đặt các thuật toán kiểm tra số nguyên tố đƣợc trình bày trong phần 4 của chƣơng
2.
Chƣơng III: Các hệ mã khóa bí mật
28
CHƢƠNG III: CÁC HỆ MÃ KHÓA BÍ MẬT
1. Các hệ mã cổ điển
1.1. Hệ mã hoá thay thế (substitution cipher)
Hệ mã hoá thay thế là hệ mã hoá 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).
Có 4 kỹ thuật thay thế sau đây:
1. Thay thế đơ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ã đƣợc sử dụng để mã hoá toàn bộ thông điệp.
2. Thay thế đồ ng âm (A homophonic substitution cipher ): giố ng nhƣ hệ thố ng mã
hoá 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 (one-to-many). 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.
3. Thay thế đa mẫu tƣ̣ (A polyalphbetic substitution cipher): đƣợc tạo nên tƣ̀ nhiều
thuật toá n mã hoá 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ã hoá đơn khác nhau đƣợc sử dụng ; đặc biệt thuật toá n mã hoá đơn
đƣợc sƣ̉ dụng thay đổi theo vi ̣trí của mỗi ký tƣ̣ trong bản rõ.
4. Thay thế đa sơ đồ (A polygram substitution cipher ): là thuật toán trong đó các
khố i ký tƣ̣ đƣợc mã hoá 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.
1.2. Hệ mã Caesar
Hệ mã Caesar là một hệ mã hoá thay thế đơn âm làm việc trên bảng chữ cái tiếng
Anh 26 ký tự (A, B, ... , Z). Đây là hệ mã cổ điển và đơn giản nhấ t đã tƣ̀ ng đƣ ợc dùng
trong thƣ̣c tế bở i hoà ng đế La mã Caesar nên đƣợc đặt theo tên của vi ̣hoà ng đế nà y.
Không gian cá c bản rõ P là các thông điệp đƣợc tạo từ bảng chữ cái A (để tiện trình
bày chúng ta xem đây là một bảng chữ cái tổ ng quá t). Tƣơng tƣ̣ không gian cá c bản mã
C  P. Giả sử số phần tử của bảng chữ cái |A| = N.
Để mã hó a ngƣờ i ta đá nh số cá c chƣ̃ cá i tƣ̀ 0 tớ i N-1. Không gian khó a K = ZN. Vớ i
mỗi khó a K  K hàm mã hóa và giải mã một ký tự có số thứ tự là i sẽ đƣợc thực hiện nhƣ
sau:
Mã hóa: EK(i) = (i + k) mod N.
Giải mã: DK(i) = (i – k) mod N.
Hệ mã Caesar vớ i bảng chƣ̃ cá i tiế ng Anh sẽ có N = 26 chƣ̃ cá i, bảng chữ cái đƣợc
đá nh số nhƣ sau:
Chƣơng III: Các hệ mã khóa bí mật
29
A B C D ... L M N ... W X Y Z
0 1 2 3 ... 11 12 13 ... 22 23 23 25
Bảng 3.1: Bảng đánh số các chữ cái tiếng Anh
Các phép tính toán số học đƣợc thƣ̣c hiện trên và nh Z 26, số khó a có thể sƣ̉ dụng
là 26 nhƣng trên thƣ̣c tế chỉ có 25 khóa có ích.
Ví dụ : vớ i k=3 (trƣờ ng hợp đã đƣợc hoà ng đế Caesar sƣ̉ dụng ), ký tự A đƣợc
thay 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.
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 W X Y Z
Bảng chữ cái dùng để mã hoá:
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
Do đó chẳng hạn xâu “ANGLES” sẽ đƣợc mã hó a thà nh “DQJOHV”.
Hệ mã Caesar sƣ̉ dụ ng phƣơng phá p thay thế đơn âm nên có hiện tƣợng gọi là
phụ thuộc tần suất xuất hiện của ngôn ngữ tự nhiên. Trong ngôn ngƣ̃ tƣ̣ nhiên một số chƣ̃
cái xuất hiện nhiều hơn so với các chữ cái khác (chẳng hạn trong tiế ng Anh cá c chƣ̃ cá i
xuấ t hiện nhiề u là e, t, i, h …) nên cá c chƣ̃ cá i dù ng để thay thế cho chú ng cũng xuấ t hiện
nhiề u. Điề u nà y có thể dẫn tớ i hệ quả là ngƣờ i thá m mã có thể sƣ̉ dụng phƣơng phá p thƣ̉
thay thế cá c ký t ự xuấ t hiện nhiều trong bản mã bằ ng cá c ký tƣ̣ xuấ t hiện nhiề u trên cá c
văn bản thƣ̣c tế .
Trên thƣ̣c tế hệ mã Caesar có số khó a ít nên hoà n toà n có thể thá m mã bằ ng
cách thử tất cả các khóa có thể (kiểu tấ n công Brute force).
1.3. Hệ mã Affine
Không gian cá c bản rõ và bản mã của hệ mã là cá c xâu đƣợc hình thà nh tƣ̀ một
bảng chữ cái A, giả sử |A| = N. Khi đó không gian khó a của hệ mã đƣợc xá c đi ̣nh nhƣ sau:
K = { (a, b): a, b  ZN, (a, N) = 1}
Để mã hó a ngƣờ i ta đá nh số cá c chƣ̃ cá i của bảng chƣ̃ cá i tƣ̀ 0 tớ i N – 1 và tiến
hành mã hóa, giải mã từng ký tự (thay thế ) theo cá c công thƣ́ c sau:
Mã hóa:
EK(x) = (a*x + b) mod N. Ký tự bản rõ có số thứ tự là x sẽ đƣợc chuyển th ành ký tự
có số thứ tự là (a*x+b) mod N trong bảng chƣ̃ cá i.
Để giải mã ta cầ n tìm a-1
(do (a, N) = 1 nên luôn tìm đƣợc) và tiến hành công thức
giải mã sau:
Chƣơng III: Các hệ mã khóa bí mật
30
DK(y) = a*(y - b) mod N. Ký tự bản mã có số thứ tự là y sẽ đƣợc thay thế bằ ng ký tƣ̣
có số thứ tự là a*(y - b) mod N trong bảng chƣ̃ cá i.
Có thể thấy rằng đối với một hệ mã Affine thì số khóa có thể sử dụng sẽ là:
|K| = (N) * N. Ví dụ với N = 26 tƣơng ƣ́ ng vớ i bảng chƣ̃ cá i tiế ng Anh chúng ta sẽ
có (26) * 26 = 12 * 26 = 312 khóa. Con số nà y là tƣơng đố i nhỏ .
1.4. Hệ mã Vigenere
Hệ mã này đƣợc đặt theo tên của một nhà mật mã học ngƣờ i Phá p Blaise de
Vigenère (1523-1596).
Đối với hệ mã này không gian các bản mã và bản rõ cũng là các thông điệp đƣợc
tạo thành từ một bảng chữ cái A nhƣ trong hệ mã Caesar, các chữ cái đƣợc đanh số từ 0
tớ i N-1 trong đó N là số phầ n tƣ̉ của bảng chƣ̃ cá i.
Không gian khó a K đƣợc xá c đi ̣nh nhƣ sau:
Vớ i mỗi số nguyên dƣơng M , khóa có độ dài M là một xâu ký tự có độ dài M , K =
k1k2…kM.
Để mã hó a một bản rõ P ngƣờ i ta chia P thà nh cá c đoạn độ dà i M và chuyển thành
số thƣ́ tƣ̣ tƣơng ƣ́ ng củ a chú ng trong bảng chƣ̃ c ái, chẳng hạn X = x1x2…xM. Khi đó việc
mã hóa và giải mã đƣợc thực hiện nhƣ sau:
EK(X) = (x1 + k1, x2 + k2, …, xM + kM) mod N
DK(Y) = (y1 - k1, y2 - k2, …, yM - kM) mod N vớ i N là số phầ n tƣ̉ của bảng chƣ̃ cá i và Y
= y1y2…yM là bản mã.
Ví dụ: xét A là bảng chữ cái tiếng Anh , ta có N = 26 giả sử khóa có độ dài 6 và K =
“CIPHER”, bản rõ P = “THIS CRYPTOSYSTEM IS NOT SECURE” . Ta có K = 2 8 15 7 4
17, P = 19 7 8 18 2 17 | 24 15 19 14 18 23 | 18 19 4 12 8 18 | 13 14 19 18 4 2 | 20 17 4.
Quá trình mã hóa thực hiện nhƣ sau:
P = 19 7 8 18 2 17 | 24 15 19 14 18 23 | 18 19 4 12 8 18 | 13 14 19 18 4 2 | 20 17 4
K = 2 8 15 7 4 17 | 2 8 15 7 4 17 | 2 8 15 7 4 17 | 2 8 15 7 4 17 | 2 8 15
C = 21 15 23 25 6 8 | 0 23 8 21 22 14 | 20 1 19 19 12 9 | 15 22 8 25 8 19 | 22 25 19
Vậy bản mã là C = “VPXZGI AXIVWO UBTTMJ PWIZIT WZT”.
Về thƣ̣c chấ t hệ mã nà y là kế t hợp của nhiề u mã Caesar , trong hệ mã Caesar
chúng ta thay thế từng ký tự đơn l ẻ thì trong hệ mã Vigenere này thay thế từng bộ M ký
tƣ̣ liên tiế p. Vớ i mỗi M chú ng ta có số khó a có thể sƣ̉ dụng là N M
, cụ thể là với bảng chữ
cái tiếng Anh sẽ có 26M
khóa có thể sử dụng.
1.5. Hệ mã Hill
Hệ mã hoá n ày dựa trên lý thuyết về đại số tuyến tính do Lester S .Hill đƣa ra năm
1929.
Cả không gian bản rõ và bản mã đều là các xâu đƣợc thành lập từ một bảng chữ
cái A nhƣ trong hệ mã Vigenere.
Chƣơng III: Các hệ mã khóa bí mật
31
Vớ i mỗi số nguyên M khó a của hệ mã là một ma trận K vuông kích thƣớc MxM gồm
các phần tử là c ác số nguyên thuộc Z N trong đó N là số phầ n tƣ̉ của bảng chƣ̃ cá i . Điề u
kiện để ma trận K có thể sƣ̉ dụng là m khó a của hệ mã là K phải là một ma trận không suy
biế n trên ZN hay nó i cá ch khá c là tồ n tại ma trận nghi ̣ch đảo của ma trận K trên ZN.
Các ký tự của bảng chữ cái cũng đƣợc đánh số từ 0 tớ i N-1.
Để mã hó a một bản rõ ngƣờ i ta cũng chia bản rõ đó thà nh cá c xâu có độ dà i M,
chuyển cá c xâu nà y thà nh số thƣ́ tƣ̣ của cá c chƣ̃ cá i trong bảng chƣ̃ cá i dƣớ i dạng một
vectơ hà ng M chiề u và tiế n hà nh mã hó a, giải mã theo công thức sau:
Mã hóa:
C = P * K.
Giải mã:
P = C * K-1
.
Ví dụ: cho hệ mã Hill có M = 2 (khóa là các ma trận vuông cấp 2) và bảng chữ cái là
bảng chữ cái tiếng Anh, tƣ́ c là N = 26. Cho khó a
K = 





52
33
Hãy mã hóa xâu P = “HELP” và giải mã ngƣợc lại bản mã thu đƣợc.
Để mã hó a chú ng ta chia xâu bản rõ thà nh hai vecto hà ng 2 chiề u “HE” (7 4) và “LP”
(11 15) và tiến hành mã hóa lần lƣợt.
Vớ i P1 = (7 4) ta có C1 = P1 * K =  7 4 





52
33
=  3 15 =  D P
Vớ i P2 = (11 15) ta có C2 = P2 * K =  11 15 





52
33
=  11 4 =  L E
Vậy bản mã thu đƣợc là C = “DPLE”.
Để giải mã ta tính khó a giải mã là ma trận ngh ịch đảo của ma trận khóa trên Z 26
theo công thƣ́ c sau:
Vớ i K =
11 12
21 22
k k
k k
 
 
 
và det(K) = (k11*k22 – k21*k12) mod N là một phầ n tƣ̉ có phầ n tƣ̉
nghịch đảo trên ZN (ký hiệu là det(K)-1
) thì khóa giải mã sẽ là
K-1
= det(K)-1
*
22 12
21 11
k -k
-k k
 
 
 
Áp dụng vào trƣờng hợp trên ta có det(K) = (15 - 6) mod 26 = 9. GCD(9, 26) =1 nên
áp dụng thuật toán Ơclit mở rộng tìm đƣợc det (K)-1
= 3. Vậy K -1
= 3 *
5 23
24 3
 
 
 
= 





920
1715
.
Chƣơng III: Các hệ mã khóa bí mật
32
Quá trình giải mã tiến hành giống nhƣ quá trình mã hóa với khóa mã hóa thay bằng
khóa giải mã.
Giải mã C = “DP” = ( 3 15 ), P = C * K-1
= (3 15) * 





920
1715
=  3 15 = “HE”.
Tƣơng tự giải mã xâu C = “LE” kết quả sẽ đƣợc bản rõ P = “LP”.
Chú ý là trong ví dụ trên chúng ta sử dụng khóa K có kích thƣớc nhỏ nên dễ dàng
tìm đƣợc khóa để giải mã còn trong trƣờng hợp tổng quát điều này là không dễ dàng.
1.6. Hệ mã đổ i chỗ (transposition cipher)
Một hệ mã hoá đổi chỗ là hệ mã hoá trong đó cá c ký tƣ̣ của bản rõ vẫn đƣợc giƣ̃
nguyên, nhƣng thƣ́ tƣ̣ của chú ng đƣợc đổi chỗ cho nhau.
Ví dụ một hệ mã hoá đổi chỗ cột đơn giản , bản rõ đƣợc viết theo hà ng ngang trên
trang giấ y vớ i độ dà i cố đi ̣nh, và bản mã đƣợc đọc theo hàng dọc.
Bản rõ: COMPUTER GRAPHICS MAY BE SLOW BUT AT LEAST IT‟S EXPENSIVE
COMPUTERGR
APHICSMAYB
ESLOWBUTAT
LEASTITSEX
PENSIVE
Bản mã: CAELPOPSEEMHLANPIOSSUCWTITSBIUEMUTERATSGYAERBTX
Bảng 3.2: Mã hoá thay đổi vị trí cột
Phƣơng phá p nà y có cá c kỹ thuật sau:
1. Đả 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ã hoá đơ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ã hoá thành
“REHPICNOITISOPSNART”.
2. Mã hoá 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 I E C H
T E N S T
E I N E R
Bảng 3.3: Mã hóa theo mẫu hình học
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”.
Chƣơng III: Các hệ mã khóa bí mật
33
Đổi chỗ cột: Đầu tiên đổi chỗ các ký tự trong bản rõ thành dạng hình chữ nhật theo
cột, sau đó cá c cột đƣợc sắ p xế p lại và cá c chƣ̃ cá i đƣợc lấ y ra theo hà ng ngang
Ví dụ: bản rõ gốc là “NGAY MAI BAT DAU CHIEN DICH XYZ” đƣợc viết dƣới dạng
ma trận 55 theo cột nhƣ sau:
Cột 1 2 3 4 5
Bản rõ N A D I C
G I A E H
A B U N X
Y A C D Y
M T H I Z
Bảng 3.4: Ví dụ mã hóa theo mẫu hình học
Vì có 5 cột nên chú ng có thể đƣợc sắ p lại theo 5!=120 cách khác nhau. Để tăng độ
an toà n có thể chọn một trong cá c cá ch sắ p xếp lại đó .
Nế u ta c huyển vi ̣cá c cột theo thƣ́ tƣ̣ 3, 5, 2, 4, 1 rồ i lấ y cá c ký tƣ̣ ra theo hà ng
ngang ta sẽ đƣợc bản mã là “DCAINAHIEGUXBNACYADY HZTIM”. Lƣu ý rằ ng cá c ký tƣ̣
cách đƣợc bỏ đi.
Hạn chế của phƣơng pháp này là toàn bộ các ma trận k ý tự phải đƣợc sinh để mã
hoá và giải mã.
3. Hoán vị các ký tự của bản rõ theo chu kỳ cố định d : Nế u hà m f là một hoá n
vị của một khối gồm d ký tự thì khoá mã hoá đƣợc biểu diễn bởi K(d,f).
Do vậy, bản rõ:
M = m1m2...mdmd+1...m2d
Vớ i mi là các ký tự , và bản rõ sẽ đƣợc mã hoá thà nh
Ek(M) = mf(1)mf(2)...mf(d)mf(d)+1...md+f(d)
Trong đó mf(1)mf(2)...mf(d) là một hoán vị của m1m2...md.
Ví dụ: giả sử d=5 và f hoán vị dãy i=12345 thành f(i)=35142
Vị trí đầu Vị trí hoán vị Tƣ̀ Mã hoá
1 3 G O
2 5 R P
3 1 O G
4 4 U U
5 2 P R
Bảng 3.5: Mã hóa hoán vị theo chu kỳ
Theo bảng trên, ký tự đầu trong khối 5 ký tự đƣợc chuyển tới vị trí thứ 3, ký tƣ̣ thƣ́
hai đƣợc chuyển tớ i vi ̣trí thƣ́ 5, ... Chẳng hạn tƣ̀ gố c GROUP đƣợc mã hoá thà nh
Chƣơng III: Các hệ mã khóa bí mật
34
OPGUR. Bằng cá ch đó , bản rõ “I LOVE BEETHOVENS MUSIC” sẽ đƣợc chuyển thành
“OEIVLEHBTEESONVSCMIU”.
Hệ mã ADFGV của Đƣ́ c , đƣợc sƣ̉ dụng trong suố t chiế n tranh thế giớ i lầ n thƣ́ I , là
một hệ mã hoá đổi chỗ (có sử dụng phƣơng phá p thay thế đơn giản). Nó đƣợc coi là một
thuật toá n mã hoá phƣ́ c tạp và o thờ i ấ y nhƣng nó đã bi ̣phá bở i Georges Painvin , một
nhà thám mã ngƣời Pháp . Trên thƣ̣c tế c ó rất nhiều hệ thống mã hoá sử dụng phƣơng
pháp đổi chỗ, nhƣng chúng rấ t rắ c rố i vì thƣờng đòi hỏi không gian nhớ lớ n.
2. Các hệ mã khối
Trong phầ n nà y chú ng ta sẽ học về cá c hệ mã k hố i điển hình là chuẩn mã hó a dƣ̃
liệu DES (Data Encryption Standard), một trong số cá c hệ mã khố i đƣợc sƣ̉ dụng rộng rãi
nhấ t và là nề n tảng cho rấ t nhiề u cá c hệ mã khố i khá c.
Chuẩn mã hó a dƣ̃ liệu DES là một chuẩn mã hoá đƣợc công bố bởi Uỷ ban Tiêu
chuẩn quốc gia Hoa Kỳ vào 15/02/1977. Hệ mã nà y đƣợc xây dựng dựa trên một hệ mã
khố i phổ biến có tên là LUCIFER và đƣợc phát triển bởi IBM.
DES có nhiề u ƣu điểm (nhanh, thuật toá n công khai , dễ cà i đặt ) và đã tƣ̀ ng đƣợc
sƣ̉ dụng trên thƣ̣c tế trong một thờ i gian rấ t dà i (cho đế n trƣớ c đầ u nhƣ̃ng năm 90) tuy
nhiên theo thờ i gian năng lƣ̣c của cá c má y tính phá t triển cù ng vớ i cá c kỹ thuật thá m mã
mớ i đƣợc đƣa ra đã cho thấ y nhu cầ u về một hệ mã khố i mạnh hơn và chuẩn mã hóa
cao cấp AES đã ra đờ i . Chuẩn nà y ra đờ i dƣ̣a trên một cuộc thi về thiế t kế một hệ mã
khố i an toà n hơn (vào năm 1997) thay thế cho DES của Ủ y ban Tiêu chuẩn quố c gia của
Hoa Kỳ (NIST). Có rất nhiều hệ mã đã đƣợc gửi đến làm ứng cử viên cho AES nhƣng
cuố i cù ng hệ mã Rijndael của hai tá c giả ngƣờ i Bỉ là tiế n sĩJoan Daemen và tiế n sĩ
Vincent Rijmen (vào năm 2001).
2.1. Mật mã khối
Các hệ mã cổ điển mà chúng ta xem xét ở phần đầu chƣơng này đều có đặc điểm
chung là từng ký tự của bản rõ đƣợc mã hoá tách biệt. Điều này làm cho việc phá mã trở
nên dễ dàng hơn. Chính vì vậy, trên thực tế ngƣời ta hay dùng một kiểu mật mã khác,
trong đó từng khối ký tự của bản rõ đƣợc mã hoá cùng một lúc nhƣ là một đơn vị mã hoá
đồng nhất. Trong kiểu mã hoá này, các tham số quan trọng là kích thƣớc (độ dài) của mỗi
khối và kích thƣớc khoá.
Điều kiện để mã hoá khối an toàn:
 Kích thƣớc khối phải đủ lớn để chống lại phƣơng án tấn công bằng phƣơng
pháp thống kê. Tuy nhiên điều này sẽ dẫn đến thời gian mã hoá sẽ tăng lên.
 Không gian khoá, tức chiều dài khoá phải đủ lớn để chống lại phƣơng án tấn
công bằng vét cạn. Tuy nhiên khoá phải đủ ngắn để việc tạo khoá, phân phối và
lƣu trữ khoá đƣợc dễ dàng.
Khi thiết kế một hệ mã khối, phải đảm bảo hai yêu cầu sau:
 Sự hỗn loạn (confusion): sự phụ thuộc giữa bản rõ và bản mã phải thực sự
phức tạp để gây khó khăn đối với việc tìm quy luật thám mã. Mối quan hệ này
tốt nhất là phi tuyến.
Chƣơng III: Các hệ mã khóa bí mật
35
 Sự khuếch tán (diffusion): Mỗi bit của bản rõ và khóa phải ảnh hƣởng lên càng
nhiều bit của bản mã càng tốt.
Trong khi sự hỗn loạn (confusion) đƣợc tạo ra bằng kỹ thuật thay thế thì sự khuếch
tán (diffusion) đƣợc tạo ra bằng các kỹ thuật hoán vị. Các hệ mã khối mà chúng ta xem
xét trong phần này đều thỏa mãn các yêu cầu đó.
Ngoài các hệ mã khối đƣợc trình bày trong phần này còn rất nhiều các hệ mã khối
khác đã phát triển qua thời gian (tại các quốc gia khác nhau v à ứng dụng trong các lĩnh
vƣ̣c khá c nhau), có thể kể ra đây một số hệ mã nổi tiếng nhƣ: Lucifer (1969), DES (1977),
Madryga (1984), NewDES (1985), FEAL, REDOC, LOKI (1990), Khufu and Khafre (1990),
RC2, RC4, IDEA (1990), MMB, CA-1.1, Shipjack, GOST, CAST, Blowfish, SAFER, 3-
Way, Crab, SXAL8/MBAL, SAFER, RC5, RC6 ...
Đặc điểm chung của các hệ mã khối là quá trình mã hóa làm việc với các khối dữ
liệu (thƣờng ở dạng xâu bit) có kích thƣớc khác nhau (tối thiếu là 64 bit), khóa của hệ mã
cũng là một xâu bit có độ dài cố định (56 bit với DES, các hệ mã khác là 128, 256, hoặc
thậm chí 512 bit). Tất cả các hệ mã này đều dựa trên lý thuyết của Shannon đƣa ra năm
1949 và nếu mang mã hóa hai bản rõ giống nhau sẽ thu đƣợc cùng một bản mã. Hoạt
động của các hệ mã khối thƣờng đƣợc thực hiện qua một số lần lặp, mỗi lần sẽ sử dụng
một khóa con đƣợc sinh ra từ khóa chính.
2.2. Chuẩn mã hoá dữ liệu DES (Data Encryption Standard)
Vào cuối thập niên 60, hệ mã Lucifer đã đƣợc đƣa ra bởi Horst Feistel. Hệ mã nà y
gắ n liền với hãng IBM nổi tiế ng. Sau đó Uỷ ban Tiêu chuẩn Hoa Kỳ đã dà n xếp vớ i IBM
để thuật toán mã hóa này thành miễn phí và phát triển nó thành chuẩn mã hóa dữ liệu và
công bố và o ngà y 15/02/1977.
2.2.1. Mô tả sơ đồ mã hoá DES
Mô tả tổng quan:
DES là thuật toá n mã hó a vớ i input là khố i 64 bit, output cũng là khố i 64 bit. Khóa
mã hóa có độ dài 56 bit, thƣ̣c ra chính xá c hơn phải là 64 bit vớ i cá c bit ở vi ̣trí chia hế t
cho 8 có thể sử dụng là cá c bit kiểm tra tính chẵn lẻ . Số khó a của không gian khó a K là
256
.
Hình 3.1: Chuẩn mã hó a dƣ̃ liệu DES
Thuật toá n thƣ̣c hiện 16 vòng. Tƣ̀ khó a input K, 16 khóa con 48 bit Ki sẽ đƣợc sinh
ra, mỗi khó a cho một vò ng thƣ̣c hiện trong quá trình mã hó a . Trong mỗi vò ng, 8 ánh xạ
thay thế 6 bit thà nh 4 bit Si (còn gọi là hộp Si) đƣợc chọn lƣ̣a kỹ cà ng và cố đi ̣nh , ký hiệu
chung là S sẽ đƣợc sƣ̉ dụng. Bản rõ 64 bit sẽ đƣợc sƣ̉ dụng chia thà nh hai nƣ̉ a L0 và R0.
Các vòng có chức năng giống nhau , nhận input là L i-1 và Ri-1 tƣ̀ vò ng trƣớ c và sinh ra
output là cá c xâu 32 bit Li và Ri nhƣ sau:
Chƣơng III: Các hệ mã khóa bí mật
36
Li = Ri-1; (1)
Ri = Li-1  f(Ri-1, Ki) trong đó f(Ri-1, Ki) = P( S( E(Ri-1)  Ki ) ); (2)
Trong đó:
  là ký hiệu của phép tuyển loại trừ (XOR) của hai xâu bit theo modulo 2.
 Hàm f là một hàm phi tuyến.
 E là hoá n vi ̣mở rộng á nh xạ R i-1 tƣ̀ 32 bit thà nh 48 bit (đôi khi tấ t cả cá c bit sẽ
đƣợc sƣ̉ dụng hoặc một bit sẽ đƣợc sử dụng hai lần).
 P là hoá n vi ̣cố đi ̣nh khá c của 32 bit.
Một hoá n vi ̣bit khở i đầ u (IP) đƣợc sƣ̉ dụng cho vò ng đầ u tiên ; sau vò ng cuố i cù ng
nƣ̉ a trá i và phải sẽ đƣợc đổi cho nhau và cuố i cù ng xâu kế t quả sẽ đƣợc hoá n vi ̣bit lầ n
cuố i bở i hoá n vi ̣ngƣợc của IP (IP-1
).
Quá trình giải mã diễn ra tƣơng tự nhƣng với các khoá con ứng dụng vào các vòng
trong theo thƣ́ tƣ̣ ngƣợc lại.
Có thể hình dung đơn giản là phần bên p hải trong mỗi vòng (sau khi mở rộng input
32 bit thà nh 8 ký tự 6 bit – xâu 48 bit) sẽ thực hiện một tính toán thay thế phụ thuộc khó a
trên mỗi một ký tƣ̣ trong xâu 48 bit, và sau đó sử dụng một phép chuyển bit cố định để
phân bố lại cá c bit của cá c ký tƣ̣ kế t quả hình thành nên output 32 bit.
Các khoá con Ki (chƣ́ a 48 bit của K) đƣợc tính bằ ng cá ch sƣ̉ dụng cá c bảng PC1 và
PC2 (Permutation Choice 1 và 2). Trƣớ c tiên 8 bit (k8, k16,…,k64) của K bị bỏ đ i (áp dụng
PC1). 56 bit cò n lại đƣợc hoá n vi ̣và gá n cho hai biến 28 bit C và D , và sau đó trong 16
vòng lặp cả C và D sẽ đƣợc quay 1 hoặc 2 bit, và các khóa con 48 bit Ki đƣợc chọn tƣ̀ kết
quả của việc ghép hai xâu với nhau.
Nhƣ vậy, ta có thể mô tả toàn bộ thuật toán sinh mã DES dƣới dạng công thức nhƣ
sau:
Y = IP-1
 f16  T f15  T ...  f2  T f1  IP(x)
Trong đó:
 T mô tả phép hoán vị của các khối LiRi (1 ≤ i ≤ 15).
 fi mô tả việc dùng hàm f với khoá Ki (1 ≤ i ≤ 16).
Thuật toá n chi tiế t:
Input: bản rõ M = m1m2…m64, khóa 64 bit K = k1k2…k64 (bao gồ m cả 8 bit chẵn lẻ ,
việc thêm bit chẵn lẻ sao cho cá c đoạn khó a 8 bit có số bit 1 là lẻ)
Output: bản mã 64 bit C = c1c2…c64
1. Sinh khó a con. Tính các khóa con theo thuật toán sinh khóa con bên dƣới
2. (L0,R0)  IP(m1m2…m64) (Sƣ̉ dụng bảng hoá n vi ̣IP để hoá n vi ̣cá c bit , kế t quả
nhận đƣợc chia thà nh hai nƣ̉ a là L0 = m58m50…m8, R0 = m57m49…m7.)
3. (16 vòng) for i = 1 to 16
Tính các Li và Ri theo cá c công thƣ́ c (1) và (2), việc tính
Chƣơng III: Các hệ mã khóa bí mật
37
f(Ri-1, Ki) = P( S( E(Ri-1)  Ki ) ) đƣợc thƣ̣c hiện nhƣ sau:
a) Mở rộng R i-1 = r1r2…r32 tƣ̀ 32 bit thà nh 48 bit bằ ng cá ch sƣ̉ dụng hoá n vi ̣mở
rộng E.
T  E(Ri-1). (Vì thế T = r32r1r2…r32r1)
b) T’  T  Ki. Biểu diễn T’ nhƣ là cá c xâu gồ m 8 ký tự 6 bit T’ = (B1,…,B8)
c) T’’  (S1(B1), S2(B2),…,S8(B8)). Trong đó Si(Bi) ánh xạ b1b2…b6 thành các xâu 4
bit của phầ n tƣ̉ thuộc hà ng r và cột c của cá c bảng S i (S box) trong đó r = 2 * b1
+ b6 và c = b2b3b4b5 là một số nhị phân từ 0 tớ i 15. Chẳng hạn S 1(011011) sẽ
cho r = 1 và c = 13 và kết quả là 5 biểu diễn dƣớ i dạng nhi ̣phân là 0101.
d) T’’’  P(T’’) trong đó P là hoá n vi ̣cố đi ̣nh để hoá n vi ̣ 32 bit của T ’’ = t1t2…t32
sinh ra t16t7…t25.
4. b1b2…b64  (R16, L16) (đổi vi ̣trí cá c khố i cuố i cù ng L16, R16
5. C  IP-1
(b1b2…b64) (Biế n đổi sƣ̉ dụng IP-1
, C = b40b8…b25)
Sơ đồ 16 vòng lặp của DES:
Chƣơng III: Các hệ mã khóa bí mật
38
Hình 3.2: Sơ đồ mã hoá DES
K16 (48 bit)
K15 (48 bit)
Bản rõ (64 bit)
Bản mã (64 bit)
IP
IP-1
L0(32 bit)
L1 = R0
R0(32 bit)
R1 = L0  f(R0, K1)
f
K1 (48 bit)
Li = Ri-1
L15 = R14
Ri = Li-1  f(Ri-1, Ki)
R15 = L14  f(R14, K15)
f
f
Ki (48 bit)
L16 = L15  f(R15, K16) R16 = L15
f
Chƣơng III: Các hệ mã khóa bí mật
39
2.2.2. Hoán vị IP và hoán vị ngƣợc IP-1
Bảng hoán vị IP đƣợc đƣa ra trong bảng dƣới đây:
58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7
Bảng 3.6: Bảng hoán vị IP
Bảng hoán vị ngƣợc IP-1
:
40 8 48 16 56 24 64 32 39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25
Bảng 3.7: Bảng hoán vị ngƣợc IP-1
Hai hoán vị IP và IP-1
không có ý nghĩa gì về mặt mật mã mà hoàn toàn nhằm tạo
điều kiện cho việc “chip hoá” thuật toán DES.
Sơ đồ cấu trúc một vòng DES:
Hình 3.3: Sơ đồ một vòng DES
Li-1 Ri-1
Hàm mở
rộng (E)
S-Box
P-Box
RiLi
Trật tự nén
(PC-2)
Khoá
Khoá
Vòng dịch Vòng dịch
Hàm f
Khoá K
Chƣơng III: Các hệ mã khóa bí mật
40
2.2.3. Thuật toá n sinh khó a con
Mƣờ i sá u vòng lặp của DES chạy cùng thuật toán nhƣ nhau nhƣng với 16 khoá con
khác nhau. Các khoá con đều đƣợc sinh ra từ khoá chính của DES bằng một thuật toán
sinh khoá con. Khoá chính K (64 bit) đi qua 16 bƣớc biến đổi, tại mỗi bƣớc biến đổi này
một khoá con đƣợc sinh ra với độ dài 48 bit.
Có thể mô tả thuật toán sinh các khóa con chi tiết nhƣ sau:
Input: khóa 64 bit K = k1k2...k64 (bao gồ m cả 8 bit kiểm tra tính chẵn lẻ )
Output: 16 khóa con 48 bit Ki, 1  i  16.
1) Đi ̣nh nghĩa v i, 1  i  16 nhƣ sau: vi = 1 đố i vớ i i  {1,2,9,16}; vi = 2 cho cá c
trƣờ ng hợp khá c (Đây là cá c giá tri ̣di ̣ch trá i cho cá c quay vò ng 28 bit bên dƣớ i).
2) T  PC1(K); biểu diễn T thà nh cá c nƣ̉ a 28 bit (C0, D0) (Sƣ̉ dụng bảng PC1 để
chọn các bit từ K: C0 = k57k49...k36, D0 = k63k55...k4.)
3) For i from 1 to 16, tính các Ki nhƣ sau: Ci  (Ci-1  vi), Di  (Di-1  vi), Ki
PC2(Ci, Di). (Sƣ̉ dụng bảng PC 2 để chọn 48 bit tƣ̀ xâu ghé p b 1b2...b56 của Ci và Di: Ki =
b14b17...b32. ‟ „ là ký hiệu di ̣ch vò ng trá i.)
Sơ đồ sinh cá c khó a con của DES:
Chƣơng III: Các hệ mã khóa bí mật
41
Hình 3.4: Sơ đồ tạo khoá con của DES
64 bit đầu vào sẽ giảm xuống còn 56 bit bằng cách bỏ đi 8 bit (ở các vị trí chia hết
cho 8), các bit này dùng để kiểm tra bit chẵn lẻ. Sau đó 56 bit này lại đƣợc trích lấy 48 bit
để sinh ra cho 16 vòng khoá của DES.
Bảng trật tự khoá (PC-1):
57 49 41 33 25 17 9 1 58 50 42 34 26 18
10 2 59 51 43 35 27 19 11 3 60 52 44 36
63 55 47 39 31 23 15 7 62 54 46 38 30 22
14 6 61 53 45 37 29 21 13 5 28 20 12 4
Bảng 3.8: Bảng PC-1
Đầu tiên 56 bit khó a đƣợc chia ra thành hai nƣ̉ a 28 bit. Sau đó, hai nƣ̉ a 28 bit này
đƣợc dịch vòng trái hoặc 1 hoặc 2 bit phụ thuộc vào số bit di ̣ch tƣơng ƣ́ ng vớ i vòng đó.
Số bit dịch của các vòng (LS):
Vòng lặp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Khoá chính (64 bit)
C0 (28 bit) D0 (28 bit)
PC-1
C1 (28 bit) D1(28 bit)
LS1 LS1
Ci (28 bit) Di (28 bit)
LS2 LS2
C16 (28 bit) D16 (28 bit)
LS1 LS1
PC-2 K1 (48 bit)
PC-2 Ki (48 bit)
PC-2 K16 (48 bit)
Chƣơng III: Các hệ mã khóa bí mật
42
Số bit dịch 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1
Bảng 3.9: Bảng dịch bit tại các vòng lặp của DES
Sau khi dịch vòng, một bảng chọn 48 bit đƣợc sƣ̉ dụng. Vì cá ch hoán vị này của
các bit đƣợc chọn nhƣ một tổ hợp con của các bit nên đƣợc gọi là “hoán vị nén” hay “trật
tự nén”.
Bảng trật tự nén(PC-2):
14 17 11 24 1 5 3 28 15 6 21 10
23 19 12 4 26 8 16 7 27 20 13 2
41 52 31 37 47 55 30 40 51 45 33 48
44 49 39 56 34 53 46 42 50 36 29 32
Bảng 3.10: Bảng PC-2
Ví dụ nhƣ chúng ta có thể nhận thấ y bit ở vị trí 33 của khoá sẽ dịch sang vị trí 35 ra
ngoài, còn bit ở vị trí 18 của khoá sẽ bị bỏ qua. Chính việc dịch vòng này, tạo nên một tập
hợp con của khoá đƣợc sử dụng trong mỗi tổ hợp khoá. Mỗi bit đƣợc sử dụng khoảng 14
lần trong tổng số 16 tổ hợp khoá, dù không phải tất cả các bít đƣợc sử dụng một cách
chính xác cùng một lúc trong mỗi lần sử dụng.
2.2.4. Mô tả hàm f
Hàm f(Ri-1,Ki) là một hàm có hai biến vào: biến thứ nhất Ri-1 là một xâu bit có độ dài
32 bit, biến thứ hai khoá Ki là một xâu bít có độ dài 48 bit. Đầu ra của f là một xâu bit có
độ dài 32 bit. Hàm f có thể là hàm bất kỳ tuy nhiên vì nguồn gốc “sức mạnh” của DES
nằm trong hàm f nên việc chọn hàm f phải cẩn thận để tránh bị phá mã một cách dễ dàng.
Thông thƣờng hàm f đƣợc chọn thƣờng là hàm có tính chất f = f-1
, tức f(f(x)) = x.
Trong sơ đồ mô tả mã hoá của DES đƣợc công bố bởi Uỷ ban Tiêu chuẩn Quốc gia
Hoa Kỳ (The Untied States Nation Bureau of Standard), hàm f thực hiện các việc sau:
 Biến thứ nhất Ri-1 đƣợc mở rộng thành một xâu bit có độ dài 48 bit theo một
hàm mở rộng cố định E. Thực chất hàm mở rộng E(Ri-1) là một hoán vị có lặp trong đó lặp
lại 16 bit của Ri-1.
 Tính E(Ri-1)  Ki và viết kết quả thành 8 xâu 6 bit B1B2B3B4B5B6B7B8.
 Đƣa 8 khối Bi vào 8 bảng S1, S2, ..., S8 (đƣợc gọi là các hộp S-Box). Mỗi hộp
S-Box là một bảng 4*16 cố định có các cột từ 0 đến 15 và các hàng từ 0 đến 3. Với mỗi
xâu 6 bit Bi = b1b2b3b4b5b6, ta tính đƣợc Si(Bi) nhƣ sau: hai bit b1b6 xác định hàng r trong
hộp Si, bốn bit b2b3b4b5 xác định cột c trong hộp Si. Khi đó, Si(Bi) sẽ xác định phần tử Ci =
Si(r,c), phần tử này viết dƣới dạng nhị phân 4 bit. Nhƣ vậy, 8 khối 6 bit Bi (1 ≤ i ≤ 8) sẽ
cho ra 8 khối 4 bit Ci với (1 ≤ i ≤ 8).
 Xâu bit C = C1C2C3C4C5C6C7C8 có độ dài 32 bit đƣợc hoán vị theo phép hoán
vị P (hộp P-Box). Kết quả P(C) sẽ là kết quả của hàm f(Ri-1, Ki), và cũng chính là Ri cho
vòng sau.
Hàm f cũng có thể mô tả bằng hình vẽ sau:
Chƣơng III: Các hệ mã khóa bí mật
43
Hình 3.5: Sơ đồ hàm f
2.2.5. Hàm (ánh xạ) mở rộng (E)
Hàm mở rộng (E) sẽ tăng độ dài của Ri từ 32 bit lên 48 bit bằng cách thay đổi các
thứ tự của các bit cũng nhƣ lặp lại các bit. Việc thực hiện này nhằm hai mục đích:
 Làm độ dài của Ri cùng cỡ với khoá K để thực hiện việc cộng modulo XOR.
 Cho kết quả dài hơn để có thể đƣợc nén trong suốt quá trình thay thế.
Tuy nhiên, cả hai mục đích này đều nhằm một mục tiêu chính là bảo mật dữ liệu.
Bằng cách cho phép 1 bit có thể chèn vào hai vị trí thay thế, sự phụ thuộc của các bit đầu
ra với các bit đầu vào sẽ trải rộng ra. DES đƣợc thiết kế với điều kiện là mỗi bit của bản
mã phụ thuộc vào mỗi bit của bản rõ và khoá.
Sơ đồ hàm mở rộng:
32 bit
32 bit
8×6 bit
Ri-1 (32 bit)
Hàm mở rộng (E) Khoá Ki (48 bit)
S1 S2 S3 S4 S5 S6 S7 S8
P
Ri (32 bit)
48 bit
8×4 bit
48 bit
Chƣơng III: Các hệ mã khóa bí mật
44
Hình 3.6: Sơ đồ hàm mở rộng (E)
Đôi khi nó đƣợc gọi là hàm E-Box, mỗi 4 bit của khối vào, bit thứ nhất và bit thứ tƣ
tƣơng ứng với 2 bit của đầu ra, trong khi bit thứ 2 và 3 tƣơng ứng với 1 bit ở đầu ra. Bảng
sau đây miêu tả vị trí của bit ra so với bit vào.
Bảng mô tả hàm mở rộng (E):
32 1 2 3 4 5 4 5 6 7 8 9
8 9 10 11 12 13 12 13 14 15 16 17
16 17 18 19 20 21 20 21 22 23 24 25
24 25 26 27 28 29 28 29 30 31 32 1
Bảng 3.11: Bảng mô tả hà m mở rộng E
Ví dụ nhƣ bit ở vị trí số 3 của khối vào sẽ di chuyển đến vị trí số 4 của khối ra và bit
ở vị trí 21 ở đầu vào sẽ di chuyển đến vị trí 30 và 32 ở đầu ra.
2.2.6. Mô tả hộp S - Box
Đối với sơ đồ mã hoá DES, mọi tính toán đều là tuyến tính, tức là việc tính phép
tuyển loại trừ XOR của hai đầu ra cũng giống với phép tuyển loại trừ XOR của hai đầu
vào rồi tính toán đầu ra. Chỉ duy nhất có các tính toán với hộp S là phi tuyến. Chính vì vậy
các hộp S-Box (chứa đựng các thành phần phi tuyến của hệ mật) là quan trọng nhất đối
với độ mật của hệ mã, chính các hộp S tạo nên sự hỗn loạn (confusion) và sự khuếch tán
(diffusion) của DES. Năm 1976, NSA đã đƣa ra tiêu chuẩn thiết kế hộp S nhƣ sau:
 Mỗi hàng trong mỗi hộp S là một hoán vị của các số nguyên từ 0 đến 15.
 Không có hộp S nào là hàm Affine hay tuyến tính đối với các đầu vào của nó.
 Sự thay đổi của một bit đầu vào sẽ dẫn đến sự thay đổi ít nhất hai bit đầu ra.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 2 3 4 5 4 5 6 7 8 9 8 9 10 11 12 1312 1314 15 16 1716
32
32
Chƣơng III: Các hệ mã khóa bí mật
45
 Đối với hộp S bất kỳ và với đầu vào x (một xâu bit có độ dài bằng 6) bất kỳ, thì
S(x) và S(x 001100) phải khác nhau ít nhất là 2 bit.
NSA cũng tiết lộ 3 thuộc tính của hộp S, những thuộc tính này đảm bảo tính
confusion và diffusion của thuật toán:
 Các bit vào luôn phụ thuộc không tuyến tính với các bit ra.
 Sửa đổi ở một bit vào làm thay đổi ít nhất là hai bit ra.
 Khi một bit vào đƣợc giữ cố định và 5 bit còn lại cho thay đổi thì hộp S thể hiện
một tính chất đƣợc gọi là “phân bố đồng nhất”: so sánh số lƣợng bit số 0 và 1 ở các đầu
ra luôn ở mức cân bằng. Tính chất này khiến cho việc phân tích theo lý thuyết thống kê
để tìm cách phá hộp S là vô ích.
Sau khi cộng modulo với khoá K, kết quả thu đƣợc chuỗi 48 bit chia làm 8 khối đƣa
vào 8 hộp S-Box. Mỗi hộp S-Box có 6 bit đầu vào và 4 bit đầu ra (tổng bộ nhớ yêu cầu
cho 8 hộp S-Box chuẩn DES là 256 bytes). Kết quả thu đƣợc là một chuỗi 32 bit tiếp tục
vào hộp P-Box.
Ta có thể xây dựng các hộp S của riêng mình, tuy nhiên cũng có thể dùng các hộp
S chuẩn đã đƣợc công bố:
14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
Bảng 3.12: Hộp S1
15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
Bảng 3.13: Hộp S2
10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
13 6 4 9 8 15 3 0 11 1 2 12 15 10 14 7
1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
Bảng 3.14: Hộp S3
7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
Chƣơng III: Các hệ mã khóa bí mật
46
10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
Bảng 3.15: Hộp S4
2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6
4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
Bảng 3.16: Hộp S5
12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
Bảng 3.17: Hộp S6
4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
Bảng 3.18: Hộp S7
13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11
Bảng 3.19: Hộp S8
Ví dụ:
Giả sử đầu vào của hộp S6 là chuỗi bit 110011 từ 31 đến 36 . Bit đầu tiên và bit cuối
cùng kết hợp lại thành 11 tƣơng ứng với hàng 3 của hộp S6. Bốn bit giữa có giá trị 1001,
tƣơng ứng với cột 9. Nhƣ vậy, giá trị nhận đƣợc là 14 (số đếm của cột, hàng bắt đầu từ
0) và giá trị 1110 đƣợc thay thế cho giá trị 110110 ở đầu ra.
2.2.7. Hộp P-Box
Việc hoán vị này mang tính đơn ánh, nghĩa là một bit đầu vào sẽ cho một bit ở đầu
ra, không bit nào đƣợc sử dụng hai lần hay bị bỏ qua. Hộp P-Box thực chất chỉ làm chức
năng sắp xếp đơn thuần theo bảng sau:
Chƣơng III: Các hệ mã khóa bí mật
47
Bảng mô tả hộp P-Box (P):
16 7 20 21 29 12 28 17
1 15 23 26 5 18 31 10
2 8 24 14 32 27 3 9
19 13 30 6 22 11 4 25
Bảng 3.20: Bảng hoán vị P
Ví dụ nhƣ bit 21 sẽ dịch chuyển đến bit thứ 4, trong khi bit thứ 4 lại dịch chuyển đến
bit 31. Kết quả cuối cùng của hộp P-Box lại đƣợc XOR với nƣ̉ a trái của khối 64 bit của
chính nó (tức Li-1 để tạo ra Ri) và sau đó nƣ̉ a trái và nƣ̉ a phải đảo cho nhau và bắt đầu
một vòng khác.
2.2.8. Ví dụ về mã hoá DES
Để có thể hiểu rõ hơn về phƣơng pháp mã hoá DES, chúng ta hãy xét ví dụ sau:
 Một bản rõ mang nội dung: “0123456789ABCDEF”.
 Sử dụng khoá (ở dạng thập phân): “133457799BBCDFFI”. Khoá này ở dạng
nhị phân là một chuỗi bit nhƣ sau (không có bit kiểm tra):
00010010011010010101101111001001101101111011011111111000
 Chuyển đổi IP, chúng ta lấy ra L0 và R0:
L0 = 11001100000000001100110011111111
L0 = R0 = 11110000101010101111000010101010
 16 vòng mã hoá đƣợc thực hiện nhƣ sau:
E(R0) = 011110100001010101010101011110100001010101010101
K1 = 000110110000001011101111111111000111000001110010
E(R0)  K1 = 011000010001011110111010100001100110010100100111
Đầu ra S-Box = 01011100100000101011010110010111
f(R0,K1) = 00100011010010101010100110111011
L2=R1 = 11101111010010100110010101000100
E(R1) = 011101011110101001010100001100001010101000001001
K2 = 011110011010111011011001110110111100100111100101
E(R1)  K2 = 000011000100010010001101111010110110001111101100
Đầu ra S-Box = 11111000110100000011101010101110
f(R1,K2) = 00111100101010111000011110100011
L3=R2 = 11001100000000010111011100001001
Chƣơng III: Các hệ mã khóa bí mật
48
E(R2) = 111001011000000000000010101110101110100001010011
K3 = 010101011111110010001010010000101100111110011001
E(R2)  K3 = 101100000111110010001000111110000010011111001010
Đầu ra S-Box = 00100111000100001110000101101111
f(R2,K3) = 01001101000101100110111010110000
L4=R3 = 10100010010111000000101111110100
E(R3) = 010100000100001011111000000001010111111110101001
K4 = 011100101010110111010110110110110011010100011101
E(R3)  K4 = 001000101110111100101110110111100100101010110100
Đầu ra S-Box = 00100001111011011001111100111010
f(R3,K4) = 10111011001000110111011101001100
L5=R4 = 01110111001000100000000001000101
E(R4) = 101110101110100100000100000000000000001000001010
K5 = 011111001110110000000111111010110101001110101000
E(R4)  K5 = 110001100000010100000011111010110101000110100010
Đầu ra S-Box = 01010000110010000011000111101011
f(R4,K5) = 00101000000100111010110111000011
L6=R5 = 10001010010011111010011000110111
E(R5) = 110001010100001001011111110100001100000110101111
K6 = 011000111010010100111110010100000111101100101111
E(R5)  K6 = 101001101110011101100001100000001011101010000000
Đầu ra S-Box = 01000001111100110100110000111101
F(R5,K6) = 10011110010001011100110100101100
L7=R6 = 11101001011001111100110101101001
E(R6) = 111101010010101100001111111001011010101101010011
K7 = 111011001000010010110111111101100001100010111100
E(R6)  K7 = 000110011010111110111000000100111011001111101111
Đầu ra S-Box = 00010000011101010100000010101101
F(R6,K7) = 10001100000001010001110000100111
Chƣơng III: Các hệ mã khóa bí mật
49
L8=R7 = 00000110010010101011101000010000
E(R7) = 000000001100001001010101010111110100000010100000
K8 = 111101111000101000111010110000010011101111111011
E(R7)  K8 = 111101110100100001101111100111100111101101011011
Đầu ra S-Box = 01101100000110000111110010101110
F(R7,K8) = 00111100000011101000011011111001
L9=R8 = 11010101011010010100101110010000
E(R8) = 011010101010101101010010101001010111110010100001
K9 = 111000001101101111101011111011011110011110000001
E(R8)  K9 = 100010100111000010111001010010001001101100100000
Đầu ra S-Box = 00010001000011000101011101110111
F(R8,K9) = 00100010001101100111110001101010
L10=R9 = 00100100011111001100011001111010
E(R9) = 000100001000001111111001011000001100001111110100
K10 = 101100011111001101000111101110100100011001001111
E(R9)  K10 = 101000010111000010111110110110101000010110111011
Đầu ra S-Box = 11011010000001000101001001110101
F(R9,K10) = 01100010101111001001110000100010
L11=R10 = 10110111110101011101011110110010
E(R10) = 010110101111111010101011111010101111110110100101
K11 = 001000010101111111010011110111101101001110000110
E(R10)  K11 = 011110111010000101111000001101000010111000100011
Đầu ra S-Box = 01110011000001011101000100000001
f(R10,K11) = 11100001000001001111101000000010
L12=R11 = 11000101011110000011110001111000
E(R11) = 011000001010101111110000000111111000001111110001
K12 = 011101010111000111110101100101000110011111101001
E(R11)  K12 = 000101011101101000000101100010111110010000011000
Chƣơng III: Các hệ mã khóa bí mật
50
Đầu ra S-Box = 01111011100010110010011000110101
f(R11,K12) = 11000010011010001100111111101010
L13=R12 = 01110101101111010001100001011000
E(R12) = 001110101011110111111010100011110000001011110000
K13 = 100101111100010111010001111110101011101001000001
E(R12)  K13 = 101011010111100000101011011101011011100010110001
Đầu ra S-Box = 10011010110100011000101101001111
f(R12,K13) = 11011101101110110010100100100010
L14=R13 = 00011000110000110001010101011010
E(R13) = 000011110001011000000110100010101010101011110100
K14 = 010111110100001110110111111100101110011100111010
E(R13)  K14 = 010100000101010110110001011110000100110111001110
Đầu ra S-Box = 01100100011110011001101011110001
f(R13,K14) = 10110111001100011000111001010101
L15=R14 = 11000010100011001001011000001101
E(R14) = 111000000101010001011001010010101100000001011011
K15 = 101111111001000110001101001111010011111100001010
E(R14)  K15 = 010111111100010111010100011101111111111101010001
Đầu ra S-Box = 10110010111010001000110100111100
f(R14,K15) = 01011011100000010010011101101110
L16=R15 = 01000011010000100011001000110100
E(R15) = 001000000110101000000100000110100100000110101000
K16 = 110010110011110110001011000011100001011111110101
E(R15)  K16 = 111010110101011110001111000101000101011001011101
Đầu ra S-Box = 10100111100000110010010000101001
f(R15,K16) = 11001000110000000100111110011000
R16 = 00001010010011001101100110010101
Bảng 3.21: Ví dụ về các bƣớc thực hiện của DES
 Cuối cùng, chuyển đổi IP-1
, ta thu đƣợc bản mã (ở dạng Hecxa):
“85E813540F0AB405”.
Chƣơng III: Các hệ mã khóa bí mật
51
2.3. Các yếu điểm của DES
2.3.1. Tính bù
Nếu ta ký hiệu u là phần bù của u (ví dụ nhƣ: 0100101 là phần bù của 1011010) thì
DES có tính chất sau:
y = DES(x,k) → y = DES( x , k )
Cho nên nếu ta biết mã y đƣợc mã hoá từ thông tin x với khoá K thì ta suy ra đƣợc
bản mã y đƣợc mã hoá từ bản rõ x với khoá k . Tính chất này chính là một yếu điểm
của DES bởi vì qua đó đối phƣơng có thể loại bỏ đi một số khoá phải thử khi tiến hành
thử giải mã theo kiểu vét cạn.
2.3.2. Khoá yếu
Khoá yếu là các khoá mà theo thuật toán sinh khoá con thì tất cả 16 khoá con đều
nhƣ nhau:
K1 = K2 = ... = K15 = K16
Điều đó khiến cho việc mã hóa và giải mã đối với khoá yếu là giống hệt nhau.
Có tất cả 4 khoá yếu sau:
Khoá yếu (Hex) C0 D0
0101 0101 0101 0101 {0}28
{0}28
FEFE FEFE FEFE FEFE {1}28
{1}28
1F1F 1F1F 0E0E 0E0E {0}28
{1}28
E0E0 E0E0 F1F1 F1F1 {1}28
{0}28
Bảng 3.22: Các khóa yếu của DES
Đồng thời còn có 6 cặp khoá nƣ̉ a yếu (semi-weak key) khác với thuộc tính nhƣ sau:
y = DES(x,k1) và y = DES(x,k2)
nghĩa là với 2 khoá khác nhau nhƣng mã hoá ra cùng một bản mã từ cùng một bản
rõ:
C0 D0 Semi-weak key (Hex) C0 D0
{01}14
{01}14
01FE 01FE 01FE 01FE FE01 FE01 FE01 FE01 {10}14
{10}14
{01}14
{10}14
1FE0 1FE0 0EF1 0EF1 E01F E01F F10E F10E {10}14
{01}14
{01}14
{0}28
01E0 01E0 01F1 01F1 E001 E001 F101 F101 {10}14
{0}28
{01}14
{1}28
1FFE 1FFE 0EFE 0EFE FE1F FE1F FE0E FE0E {10}14
{1}28
{0}28
{01}14
011F 011F 010E 010E 1F01 1F01 0E01 0E01 {0}28
{10}14
{1}28
{01}14
E0FE E0FE F1FE F1FE FEE0 FEE0 FEF1 FEF1 {1}28
{10}14
Bảng 3.23: Các khóa nửa yếu của DES
Chƣơng III: Các hệ mã khóa bí mật
52
2.3.3. DES có cấu trúc đại số
Với 64 bit khối bản rõ có thể đƣợc ánh xạ lên tất cả vị trí của 64 bit khối bản mã
trong 264
cách. Trong thuật toán DES, với 56 bit khoá, có thể cho chúng ta 256
(khoảng
1017
) vị trí ánh xạ. Với việc đa mã hoá thì không gian ánh xạ còn lớn hơn. Tuy nhiên điều
này chỉ đúng nếu việc mã hoá DES là không có cấu trúc.
Với DES có cấu trúc đại số thì việc đa mã hoá sẽ đƣợc xem ngang bằng với việc
đơn mã hoá. Ví dụ nhƣ có hai khoá bất kỳ K1 và K2 thì sẽ luôn đƣợc khoá thứ K3 nhƣ sau:
EK2(EK1(x)) = EK3(x)
Nói một cách khác, việc mã hoá DES mang tích chất “nhóm”, đầu tiên mã hoá bản
rõ bằng khoá K1 sau đó là khoá K2 sẽ giống với việc mã hoá ở khoá K3. Điều này thực sự
quan trọng nếu sử dụng DES trong đa mã hoá. Nếu một “nhóm” đƣợc phát với cấu trúc
hàm quá nhỏ thì tính an toàn sẽ giảm.
2.3.4. Không gian khó a K
DES có 256
= 1017
khoá. Nếu chúng ta biết đƣợc một cặp “tin/mã” thì chúng ta có
thể thử tất cả 1017
khả năng này để tìm ra khoá cho kết quả khớp nhất. Giả sử nhƣ một
phép thử mất 10-6
s, thì chúng sẽ mất 1011
s, tức 7300 năm. Nhƣng với các máy tính đƣợc
chế tạo theo xử lý song song. Chẳng hạn với 107
con chipset mã DES chạy song song thì
bây giờ mỗi một con chipset chỉ phải chịu trách nhiệm tính toán với 1010
phép thử.
Chipset mã DES ngày nay có thể xử lý tốc độ 4.5×107
bit/s tức có thể làm đƣợc hơn 105
phép mã DES trong một giây.
Vào năm 1976 và 1977, Diffie và Hellman đã ƣớc lƣợng rằng có thể chế tạo đƣợc
một máy tính chuyên dụng để vét cạn không gian khoá DES trong ½ ngày với cái giá 20
triệu đô la. Năm 1984, chipset mã hoá DES với tốc độ mã hoá 256000 lần/giây. Năm
1987, đã tăng lên 512000 lần/giây. Vào năm 1993, Michael Wiener đã thiết kế một máy
tính chuyên dụng với giá 1 triệu đô la sử dụng phƣơng pháp vét cạn để giải mã DES
trung bình trong vòng 3,5 giờ (và chậm nhất là 7 giờ).
Đến năm 1990, hai nhà toán học ngƣời Do Thái - Biham và Shamir - đã phát minh
ra phƣơng pháp phá mã vi sai (diferential cryptanalyis), đây là một kỹ thuật sử dụng
những phỏng đoán khác nhau trong bản rõ để đƣa ra những thông tin trong bản mã. Với
phƣơng pháp này, Biham và Shamir đã chứng minh rằng nó hiệu quả hơn cả phƣơng
pháp vét cạn.
Phá mã vi sai là thuật toán xem xét những cặp mã hoá khác nhau, đây là những
cặp mã hoá mà bản rõ của chúng là khác biệt. Ngƣời ta sẽ phân tích tiến trình biến đổi
của những cặp mã này thông qua các vòng của DES khi chúng đƣợc mã hoá với cùng
một khoá K. Sau đó sẽ chọn hai bản rõ khác nhau một cách ngẫu nhiên hợp lý nhất. Sử
dụng sự khác nhau của kết quả mã hoá và gán cho những khoá khác nhau một cách phù
hợp nhất. Khi phân tích nhiều hơn những cặp bản mã, chúng ta sẽ tìm ra một khoá đƣợc
xem là đúng nhất.
2.4. Triple DES (3DES)
Nhƣ đã trình bà y ở cá c phầ n trên, hệ mã DES (hay chuẩn mã hó a dƣ̃ liệu ) vớ i
không gian khó a vẻn vẹn có 254
khóa nên thƣ̣c tế hiện nay có thể bị thám mã trong
Chƣơng III: Các hệ mã khóa bí mật
53
khoảng thời gian vài giờ đồng hồ. Vì vậy việc tìm kiếm các hệ mã khác thay thế cho D ES
là một điều cần thiết. Một trong nhƣ̃ng cá ch thƣ́ c đƣợc xem xé t đầ u tiên là tận dụng DES
nhƣng sƣ̉ dụng mã hó a nhiề u lầ n . Cách thứ nhất là sử dụng hai khóa để mã hóa hai lần
nhƣ sau:
C = EK2(EK1(P))
Cách này gọi là doubl e DES hay 2DES, khóa của hệ mã theo mô hình này là 112
bit, có vẻ an toàn hơn so với DES , ít nhất là trên nguyên tắc . Tuy nhiên cá c chƣ́ ng minh
về mặt lý thuyế t (không nằ m trong phạm vi của tà i liệu nà y ) đã cho thấ y rằ ng hệ m ã này
không hề an toà n hơn DES (thuật toá n thá m mã theo kiểu vét cạn brute -force yêu cầ u số
phép tính gấp đôi để thám mã 2DES so vớ i DES).
Cách thức thứ hai và hiện nay đang đƣợc sử dụng rộng rãi là mã hóa DES ba lần ,
cách nà y gọi là Triple DES (TDES) hay 3DES, hoặc một cá ch chuẩn mƣ̣c hơn là TDEA
(Triple Data Encryption Algorithm). Mô hình sƣ̉ dụng đơn giản nhấ t của Triple DES là mã
hóa 3 lầ n sƣ̉ dụng 3 khóa K1, K2, K3 nhƣ hình minh họa sau:
Hình 3.7: Triple DES
Bản mã C = DESK3(DESK2(DESK1(M)), mô hình nà y gọi là EEE vì cả ba bƣớ c sƣ̉
dụng ba khóa ở đây đều sử dụng thuật toán mã hóa chuẩn của DES , một biế n thể khá c
của mô hình này gọi là EDE vớ i bƣớ c ở giƣ̃a sƣ̉ dụng thuật toá n giải mã của DES:
C = DESK3( 1
2KDES
(DESK1(M)).
Việc lƣ̣a chọn mã hó a hay giải mã ở bƣớ c thƣ́ hai không là m thay đổi tính an toà n
của Triple DES. Khóa của Triple DES là 168 bit, một số biế n thể của Triple DES sƣ̉ dụng
khóa có độ dài 112 bit (K1=K3) nhƣng khá c vớ i double DES, khi đó phƣơng phá p nà y có
tên gọi là Two key Triple DES . Các chứng minh về mặt lý thuyết và các tấn công đối với
Triple DES cho thấ y hệ mã nà y vẫn sẽ cò n đƣợc sƣ̉ dụng trong một tƣơng lai dà i nƣ̃a
mặc dù trên trên thƣ̣c tế nó chậm hơn so vớ i AES 6 lầ n.
Chƣơng III: Các hệ mã khóa bí mật
54
2.5. Chuẩ n mã hó a cao cấp AES
2.5.1. Giớ i thiệu
Chuẩn mã hó a dƣ̃ liệu cao cấ p AES là một hệ mã khóa bí mật có tên là Rijndael (Do
hai nhà mật mã học ngƣờ i Bỉ là Joan Daemen và Vincent Rijmen đƣa ra và trở thà nh
chuẩn tƣ̀ năm 2002) cho phé p xƣ̉ lý cá c khố i dƣ̃ liệu input có kích thƣớ c 128 bit sƣ̉ dụng
các khóa có độ dài 128, 192 hoặc 256 bit. Hệ mã Rijndael đƣợc thiết kế để có thể là m
việc vớ i cá c khó a và cá c khố i dƣ̃ liệu có độ dà i lớ n hơn tuy nhiên khi đƣợc chọn là một
chuẩn do Ủ y ban tiêu chuẩn của Hoa Kỳ đƣa ra và o năm 2001, nó đƣợc qui đi ̣nh chỉ là m
việc vớ i cá c khố i dƣ̃ liệu 128 bit và cá c khó a có độ dà i 128, 192 hoặc 256 bit (do đó cò n
đặt cho nó cá c tên AES-128, AES-192, AES-256 tƣơng ƣ́ ng vớ i độ dà i khó a sƣ̉ dụng).
2.5.2. Các khái niệm và định nghĩa (Definitions)
2.5.2.1. Các khái niệm và ký hiệu
Các khái niệm và định nghĩa đƣợc sử dụng để trình bày về chuẩn mã hóa cao cấp:
AES Chuẩn mã hó a cao cấ p
Biế n đổi Affine
Phép biến đổi bao gồm một phép nhân với một ma tr ận
sau đó là một phé p cộng của một vectơ
Bit Một số nhi ̣phân nhận giá tri ̣0 hoặc 1
Block
Một dãy cá c bit nhi ̣phân tạo thà nh input , output, trạng
thái (state) và các khóa sử dụng tại các vòng lặp (Round
Key) của hệ mã . Độ dài của dãy (khố i) là số lƣợng các
bit mà nó chƣ́ a . Các khối cũng có thể đƣợc xem là một
dãy các byte
Byte Một nhó m 8 bit
Cipher Thuật toá n mã hó a
Cipher Key
Khóa của hệ mã , có thể đƣợc biểu diễn dƣới dạng một
mảng 2 chiề u gồ m 4 hàng và Nk cột
Ciphertext Bản mã
Inverse Cipher Thuật toá n giải mã
Thủ tục sinh khóa (Key
Expansion)
Thủ tục đƣợc sử dụng để sinh ra các khóa sử dụng tại
các vòng lặp của thuật toán mã hóa , giải mã từ khóa
chính ban đầu
Round Key
Là các giá trị sinh ra từ khóa chính bằng cách sử dụng
thủ tục sinh khóa . Các khóa này đƣợc sử dụng tại các
vòng lặp của thuật toán
Trạng thái (State)
Các giá trị mã hóa trung gian có thể biểu diễn dƣớ i dạng
một mảng 2 chiề u gồ m 4 hàng và Nb cột
S-box
Một bảng thế phi tuyến đƣợc sƣ̉ dụng trong thủ tục sinh
khóa và trong các biến đổi thay thế các byte để thực
hiện cá c thay thế 1-1 đố i vớ i một giá tri ̣1 byte
Word
Một nhó m 32 bit có thể đƣợc xem nhƣ 1 đơn vi ̣tính toá n
độc lập hoặc là một mảng 4 byte
Bảng 3.24: Qui ƣớ c một số tƣ̀ viế t tắ t và thuật ngƣ̃ của AES
2.5.2.2. Các hàm, ký hiệu và các tham số của thuật toán
Các tham số thuật toán , các ký hiệu và các hàm đƣợc sử dụng trong mô tả thuật
toán:
AddRoundKey()
Hàm biến đổi đƣợc sử dụng trong thuật toán mã hóa và giải
mã trong đó thực hiện phép toán XOR bit giữa một trạng
Chƣơng III: Các hệ mã khóa bí mật
55
thái trung gian (State) và một khóa của vòng lặp (Round
Key). Kích thƣớc của một Round Key bằng kích thƣớc của
trạng thái (chẳng hạn vớ i Nb = 4 độ dà i của một Round Key
sẽ là 128 bit hay 16 byte)
InvMixColumns()
Hàm biế n đổi đƣợc sƣ̉ dụng trong thuật toá n giải mã, là hàm
ngƣợc của hà m MixColumns()
InvShiftRows()
Hàm biến đổi trong thuật toán giải mã , là hàm ngƣợc của
hàm ShiftRows()
InvSubBytes()
Hàm biến đổi trong thuật toán giải mã , là hàm ngƣợc của
hàm SubBytes()
K Khóa mã hóa
MixColumns()
Hàm biến đổi trong thuật toán mã hóa nhận tất cả các cột
của một trạng thái (State) và trộn với dữ liệu của nó (không
phụ thuộc lẫn nhau) để nhận đƣợc một cột mới
Nb
Số lƣợng cá c cột (là các word 32 bit) tạo thành một trạng
thái, Nb = 4)
Nk
Số lƣợng cá c word 32 bit tạo thà nh khó a mã hó a K (Nk = 4,
6, hoặc 8)
Nr
Số lƣợng cá c vò ng lặp của thuật toá n , là một hàm của Nk
và Nb (là các giá trị cố định ) (Nr = 10, 12 hoặc 14 tƣơng
ứng với các giá trị khác nhau của Nk)
Rcon[] Mảng word hằng số sử dụng trong các vòng lặp
RotWord()
Hàm sử dụng trong thủ tục sinh khóa nhận một word 4-byte
và thực hiện một hoá n vi ̣vò ng
ShiftRows()
Hàm sử dụng trong quá trình mã hóa , xƣ̉ lý cá c trạng thá i
bằ ng cá ch di ̣ch vò ng ba hà ng cuố i của trạng thá i vớ i số lầ n
dịch khác nhau
SubBytes()
Hàm biến đổi sử dụng trong quá trình mã hó a, xƣ̉ lý một
trạng thá i bằ ng cá ch sƣ̉ dụng một bảng thế phi tuyến cá c
byte (S-box) thao tá c trên mỗi byte một cá ch độc lập
SubWord()
Hàm sử dụng trong thủ tục sinh khóa nhận một word input
4-byte và sƣ̉ dụng một S -box trên mỗi giá trị 4-byte nà y để
thu đƣợc 1 word output
XOR Phép or bit tuyệt đối
 Phép or bit tuyệt đối
 Phép nhân 2 đa thƣ́ c (bậc nhỏ hơn 4) theo modulo (x4
+ 1)
 Phép nhân trên trƣờng hữu hạn
2.5.3. Các ký hiệu và qui ƣớc
2.5.3.1. Input và Output
Input và Output của chuẩn mã hó a cao cấ p đề u là cá c dãy 128 bit, còn gọi là các
khố i (block), độ dà i của mỗi khố i nà y là số bit dƣ̃ liệu mà nó chứa. Khóa của chuẩn mã
hóa cao cấp là một dãy có độ dà i 128, 192 hoặc 256 bit. Chuẩn mã hó a dƣ̃ liệu cao cấ p
không là m việc vớ i cá c giá tri ̣input, output và khó a có cá c độ dà i khá c (mặc dù thuật toá n
cơ sở của nó cho phép điề u nà y).
Các bit của input, output và khó a của hệ mã đƣợc đánh số từ 0.
2.5.3.2. Đơn vi ̣Byte
Đơn vi ̣cơ bản để xƣ̉ lý trong AES là một byte tƣ́ c là một dãy 8 bit đƣợc xem nhƣ là
một đố i tƣợng đơn. Các giá trị input, output và khó a của hệ mã (đƣợc qui đi ̣nh trong phầ n
3.1) đƣợc xem là một mảng các byte. Các giá trị input, output và khó a của hệ mã đƣợc ký
Chƣơng III: Các hệ mã khóa bí mật
56
hiệu bở i tên mảng a và biểu diễn dƣớ i dạng a n hoặc a[n] trong đó n nhận cá c giá tri ̣trong
các khoảng sau:
Nế u độ dà i khó a bằ ng 128 bit: 0 ≤ n < 16;
Nế u độ dà i khó a bằ ng 192 bit: 0 ≤ n < 24;
Nế u độ dà i khó a bằ ng 256 bit: 0 ≤ n < 32;
Tấ t cả cá c giá tri ̣ Byte sƣ̉ dụng trong thuật toá n của AES đề u đƣợc biểu diễn dƣớ i
dạng một dãy các bit 0 hoặc 1 theo đi ̣nh dạng {b7, b6, b5, b4, b3, b2, b1, b0}. Các Byte này
sau đƣợc hiểu là cá c phầ n tƣ̉ trên trƣờ ng hƣ̃u hạn bằ ng cá ch sƣ̉ dụng biểu diễn thà nh
dạng đa thức:
b7x7
+ b6x6
+ b5x5
+ b4x4
+ b3x3
+ b2x2
+ b1x1
+ b0x0
=
7
0
i
i
i
b x

 .
Chẳng hạn giá tri ̣ {01100011} tƣơng đƣơng vớ i phầ n tƣ̉ trên trƣờ ng hƣ̃u hạn x 6
+
x5
+ x + 1.
Để thuận tiện , các giá trị Byte đƣợc biểu diễn sử dụng các ký hiệu của hệ Hexa ,
sƣ̉ dụng 4 bit cho một ký tƣ̣ và hai ký tƣ̣ cho một Byte nhƣ bảng sau:
Bit Ký tự Bit Ký tự Bit Ký tự Bit Ký tự
0000 0 0100 4 1000 8 1100 c
0001 1 0101 5 1001 9 1101 d
0010 2 0110 6 1010 a 1110 e
0011 3 0111 7 1011 b 1111 f
Bảng 3.25: Bảng biểu diễn các xâu 4 bit
Khi đó cá c Byte (8 bit) sẽ đƣợc biểu diển bằng hai ký tự , chẳng hạn {01100011}
sẽ đƣợc biểu diễn thành {63}.
2.5.3.4. Trạng thái (State)
Các thao tác bên trong của AES đƣợc thực hiện trên một mảng 2 chiề u cá c byte
đƣợc gọi là trạng thá i. Một trạng thá i gồ m bố n hà ng cá c byte , mỗi hà ng có Nb byte trong
đó Nb là kích thƣớ c của khố i chia cho 32. Mảng trạng thái ký hiệu là s trong đó mỗi byte
của mảng có 2 chỉ số hàng r và cột c (0  r, c < 4).
Tại thời điểm bắt đầu input của thuật toán – mảng các byte in 0, in1, …, in15 đƣợc
copy và o mảng trạng thá i theo qui tắ c đƣợc minh họa bằ ng hình vẽ:
Hình 3.8: Các trạng thái của AES
trong đó cá c giá tri ̣của mảng s và mảng output đƣợc tính nhƣ sau:
s[r, c] = in[r + 4c]  0  r, c < 4
input bytes
in0 in4 in8 in12
in1 in5 in9 in13
in2 in6 in10 in14
in3 in7 in11 in15
State array
S0,0 S0,1 S0,2 S0,3
S1,0 S1,1 S1,2 S1,3
S2,0 S2,1 S2,2 S2,3
S3,0 S3,1 S3,2 S3,3
output bytes
out0 out4 out8 out12
out1 out5 out9 out13
out2 out6 out10 out14
out3 out7 out11 out15
Chƣơng III: Các hệ mã khóa bí mật
57
out[r + 4c] = s[r, c]  0  r, c < 4
2.5.3.5. Biể u diễn củ a trạng thá i
Bố n cột của mảng trạng thá i của thuật toá n tạo thà nh 4 word 32-bit w0, w1, …, w3
đƣợc biểu diễn nhƣ sau:
w0 = s0,0 s1,0 s2,0 s3,0 w1 = s0,1 s1,1 s2,1 s3,1
w2 = s0,2 s1,2 s2,2 s3,2 w3 = s0,3 s1,3 s2,3 s3,3
2.5.4. Thuật toán
Độ dài của input, output và cá c trạng thá i (state) của chuẩn mã hóa cao cấp AES là
128 bit tƣơng ƣ́ ng vớ i giá tri ̣của Nb = 4 (là số lƣợng các word 32-bit và cũng là số cột
của mỗi trạng thái). Khóa của AES có độ dài là 128, 192 hoặc 256 bit tƣơng ƣ́ ng vớ i cá c
giá trị của Nk là 4, 6, hoặc 8 và cũng là số cột của khóa mã hóa.
Tƣơng ƣ́ ng vớ i độ dà i của khó a sƣ̉ dụng số vò ng lặp của thuật toá n Nr nhận cá c giá
trị 10 (Nk = 4), 12 (Nk = 6) hoặc 14 (Nk = 8). Chúng ta có thể minh họa qua bảng sau:
Độ dài khóa (Nk) Kích thƣớc khối (Nb) Số lầ n lặp (Nr)
AES-128 4 4 10
AES-192 6 4 12
AES-256 8 4 14
Bảng 3.26: Bảng độ dài khóa của AES
Cả quá trình mã hó a và giải mã AES sƣ̉ dụng một hà m lặp là kế t hợp của bố n hà m
biế n đổi (đơn vi ̣xƣ̉ lý là byte) sau: 1) biến đổi thay thế byte sƣ̉ dụng một bảng thế (S-box),
2) dịch các hàng của mảng trạng thái với số lần dịch của mỗi hàng là khác nhau , 3) kế t
hợp dƣ̃ liệu của mỗi cột trong mảng trạng thái và 4) cộng một khó a Round Key và o trạng
thái. Các biến đối này (và các hàm ngƣợc của chúng ) đƣợc mô tả trong cá c phầ n 4.1.1-
4.1.4 và 4.3.1-4.3.4.
2.5.4.1. Thuật toá n mã hó a
Bắ t đầ u thu ật toán bản rõ (input) đƣợc copy và o mảng trạng thá i sƣ̉ dụng cá c qui
ƣớc đƣợc mô tả trong phần 3.4. Sau khi cộng vớ i khó a Round Key khở i tạo mảng trạng
thái đƣợc biến đổi bằng các thực hiện một hàm vòng (round function) Nr lầ n (10, 12, hoặc
14 phụ thuộc vào độ dài khóa ) trong đó lầ n cuố i cù ng thƣ̣c hiện khá c cá c lầ n trƣớ c đó .
Trạng thái sau lần lặp cuối cùng sẽ đƣợc chuyển thành output của thuật toán theo qui tắc
đƣợc mô tả trong phầ n 3.4.
Hàm vòng đƣợc tham số hóa sử dụng một (key schedule) dãy các khóa đƣợc biểu
diễn nhƣ là một mảng 1 chiề u của cá c word 4-byte đƣợc sinh ra tƣ̀ thủ tục sinh khó a (Key
Expansion) đƣợc mô tả trong phầ n 5.2.
Chúng ta có thể thấy tấ t cả cá c vò ng đề u thƣ̣c hiện cá c công việc giố ng nhau dƣ̣a
trên 4 hàm (theo thƣ́ tƣ̣ ) SubBytes(), ShiftRows(), MixColumns() và AddRoundKey() trƣ̀
vòng cuối cùng bỏ qua việc thực hiện hàm MixColumns().
Thuật toá n đƣợc mô tả chi tiết qua đoạn giả mã lệnh sau:
Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])
Chƣơng III: Các hệ mã khóa bí mật
58
begin
byte state[4,Nb]
state = in
AddRoundKey(state, w[0, Nb-1]) // See Sec. 5.1.4
for round = 1 step 1 to Nr–1
SubBytes(state) // See Sec. 5.1.1
ShiftRows(state) // See Sec. 5.1.2
MixColumns(state) // See Sec. 5.1.3
AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])
end for
SubBytes(state)
ShiftRows(state)
AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])
out = state
end
Sơ đồ thuật toá n:
Chƣơng III: Các hệ mã khóa bí mật
59
Plaintext
Substitute bytes
Add round key
Shift rows
Mix Columns
Add round key
Round1
…
Substitute bytes
Shift rows
Mix Columns
Add round key
Round9
Substitute bytes
Shift rows
Add round key
Round10
Plaintext
(a) Mã hóa
Plaintext
Add round key
Inverse sub bytes
Inverse shift row
Ciphertext
(b) Giải mã
Key
w[0, 3]
Expand key
w[4, 7]
Inverse mix cols
Add round key
Inverse sub bytes
Inverse shift row
Round9Round10
Inverse mix cols
Add round key
Inverse sub bytes
Inverse shift row
Round1
w[40, 43] Add round key
…
w[36,39]
Hình 3.9: Thuật toá n mã hó a và giải mã của AES
2.5.4.1.1 Hàm SubBytes()
Hàm SubBytes() thƣ̣c hiện phé p thay thế cá c byte của mảng trạng thá i bằng cá ch
sƣ̉ dụng một bảng thế S -box, bảng thế nà y là khả nghi ̣ch và đƣợc xây dƣ̣ng bằng cá ch
kết hợp hai biế n đố i sau:
1. Nhân nghi ̣ch đảo trên trƣờ ng hƣ̃n hạn GF (28
) (mô tả trong phầ n 4.2), phầ n tƣ̉
{00} đƣợc á nh xạ thà nh chính nó
2. Áp dụng biến đổi Affine sau (trên GF(2)):
Chƣơng III: Các hệ mã khóa bí mật
60
'
( 4)mod8 ( 5)mod8 ( 6)mod8 ( 7)mod8i i i i i i ib b b b b b c         trong đó 0  i <8 là bit thứ i
của byte b tƣơng ứng và ci là bit thứ i của byte c với giá trị {63} hay {01100011}.
Các phần tử biến đổi affine của S -box có thể đƣợc biểu diến dƣớ i dạng ma trận
nhƣ sau:
'
0 0
'
1 1
'
2 2
'
3 3
'
4 4
'
5 5
'
6 6
'
7 7
1 0 0 0 1 1 1 1 1
1 1 0 0 0 1 1 1 1
1 1 1 0 0 0 1 1 0
1 1 1 1 0 0 0 1 0
1 1 1 1 1 0 0 0 0
0 1 1 1 1 1 0 0 1
0 0 1 1 1 1 1 0 1
0 0 0 1 1 1 1 1 0
b b
b b
b b
b b
b b
b b
b b
b b
     
     
     
     
     
      
     
    
    
    
    
         







 
 
 
 
 
Hình sau minh họa kết quả của việc áp dụng hàm biến đổi SubBytes () đố i vớ i mảng
trạng thái:
0,0S 0,1S 0,2S 0,3S
1,0S 1,2S 1,3S
2,0S 2,1S 2,2S 2,3S
3,0S 3,1S 3,2S 3,3S
Bảng thế S -box đƣợc sƣ̉ dụng trong hà m SubBytes () có thể đƣợc biểu diễn dƣới
dạng hexa nhƣ sau:
'
0,0S '
0,1S '
0,2S '
0,3S
'
1,0S '
1,2S '
1,3S
'
2,0S '
2,1S '
2,2S '
2,3S
'
3,0S '
3,1S '
3,2S '
3,3S
,r cS '
,r cS
S-Box
Chƣơng III: Các hệ mã khóa bí mật
61
Bảng 3.27: Bảng thế S-Box của AES
trong đó chẳng hạn nếu s 1,1 = {53} có nghĩa là giá trị thay thế sẽ đƣợc xác định
bằ ng giao của hà ng có chỉ số 5 vớ i cột có chỉ số 3 trong bảng trên điề u nà y tƣơng ƣ́ ng
vớ i việc s‟1,1 = {ed}.
2.5.4.1.2. Hàm ShiftRows()
Trong hà m nà y cá c byte trong 3 hàng cuối của mảng trạng thái sẽ đƣợc dịch vòng
vớ i số lầ n di ̣ch (hay số byte bi ̣di ̣ch) khác nhau. Hàng đầu tiên r = 0 không bi ̣di ̣ch.
Cụ thể hàm này sẽ tiến hành biến đổi sau:
'
, ,( ( , ))mod ( 4)r c r c shift r Nb Nbs s Nb  trong đó giá tri ̣di ̣ch shift (r, Nb) phụ
thuộc và o số hà ng r nhƣ sau:
shift(1, 4) = 1, shift(2, 4) = 2, shift(3, 4) = 3.
Thao tá c nà y sẽ chuyển cá c byte tớ i cá c vi ̣trí thấ p hơn trong cá c hà ng , trong khi
các byte thấp nhất sẽ đƣợc chuyển lên đầu của hàng . Tấ t cá c cá c mô tả trên có thể minh
họa qua hình vẽ sau:
S
0,0S 0,1S 0,2S 0,3S
1,0S 1,1S 1,2S 1,3S
2,0S 2,1S 2,2S 2,3S
3,0S 3,1S 3,2S 3,3S
0,0S 0,1S 0,2S 0,3S0,0S 0,1S 0,2S 0,3S
S’
0,0S 0,1S 0,2S 0,3S
1,1S 1,2S 1,3S 1,0S
2,2S 2,3S 2,0S 2,31S
3,3S 3,0S 3,1S 3,2S
ShiftRows()
Chƣơng III: Các hệ mã khóa bí mật
62
Hình 3.10: Hàm ShifftRows()
2.5.4.1.3. Hàm MixColumns()
Hàm này làm việc trên các cột của bảng trạng thái , nó coi mỗi cột của mảng trạng
thái nhƣ là một đa thức gồm 4 hạng tử nhƣ đƣợc mô tả trong phần 4.3. Các cột sẽ đƣợc
xem nhƣ là cá c đa thƣ́ c trên GF(28
) và đƣợc nhân theo modulo x4
+ 1 vớ i một đa thƣ́ c cố
đi ̣nh a(x):
a(x) = {03}x3
+ {01}x2
+ {01}x + {02}
Nhƣ đã mô tả trong phầ n 4.3 điều nà y có thể biểu diễn bằng một phé p nhân ma
trận:
s‟(x) = a(x)s(x):
'
0, 0,
'
1, 1,
'
2, 2,
'
3, 3,
02 03 01 01
01 02 03 01
01 01 02 03
03 01 01 02
c c
c c
c c
c c
S S
S S
S S
S S
    
    
    
    
    
       
vớ i mọi 0  c < Nb = 4.
Kế t quả là bố n byte trong mỗi cột sẽ đƣợc thay thế theo công thƣ́ c sau:
'
0, 0, 1, 2, 3,({02} ) ({03} )c c c c cs s s s s     
'
1, 0, 1, 2, 3,({02} ) ({03} )c c c c cs s s s s     
'
2, 0, 1, 2, 3,({02} ) ({03} )c c c c cs s s s s     
'
3, 0, 1, 2, 3,({03} ) ({02} )c c c c cs s s s s     
Có thể minh họa việc thực hiện của hàm này bằng hình vẽ sau:
Chƣơng III: Các hệ mã khóa bí mật
63
Hình 3.11: Hàm MixColumns của AES
2.5.4.1.4. Hàm AddRoundKey()
Trong hà m nà y một khó a vò ng (Round Key ) sẽ đƣợc cộng vào mảng trạng thái
bằ ng một thao tá c XOR bit . Mỗi khó a vò ng gồ m Nb word đƣợc sinh ra bở i thủ tục sinh
khóa (phầ n 5.2). Các word này sẽ đƣợc cộng vào mỗi cột của mảng trạng thái nhƣ sau:
 ' ' ' '
0, 1, 2, 3, 0, 1, 2, 3, *, , , , , , 0 4c c c c c c c c round Nb cs s s s s s s s w c Nb
           
trong đó [wi] là các word của khó a đƣợc mô tả trong phầ n 5.2 và round là lần lặp
tƣơng ƣ́ ng vớ i qui ƣớ c 0  round  Nr. Trong thuật toá n mã hó a phép cộng khó a vò ng
khở i tạo xảy ra vớ i round = 0 trƣớ c khi cá c vò ng lặp của thuật toá n đƣợc thƣ̣c hi ện. Hàm
AddRoundKey() đƣợc thƣ̣c hiện trong thuật toá n mã hó a khi 1  round  Nr.
Việc thƣ̣c hiện của hà m nà y có thể minh họa qua hình vẽ tring đó l = round * Nb.
Đi ̣a chỉ byte trong cá c word của dãy khó a đƣợc mô tả trong phầ n 3.1.
Hình 3.12: Hàm AddRoundKey của AES
2.5.4.2. Thuật toá n sinh khó a (Key Expansion)
Thuật toá n sinh khó a của AES nhận mộ t khó a mã hó a K sau đó thƣ̣ c hiện một thủ
tục sinh khóa để sinh một dãy các khóa cho việc mã hó a . Thủ tục này sẽ sinh tổng số
Nb*(Nr+1) word, thủ tục sử dụng một tập khởi tạo Nb word và mỗi một lần lặp trong số Nr
lầ n sẽ cầ n tớ i Nb word của dƣ̃ liệu khó a . Dãy khóa kết quả là một mảng tuyến tính c ác
word 4-byte đƣợc ký hiệu là [wi] trong đó 0  i < Nb(Nr+1).
Sƣ̣ mở rộng khó a thà nh dãy khó a đƣợc mô tả qua đoạn giả mã sau:
KeyExpansion(byte key[4*Nk], word w[Nb*(Nr+1)], Nk)
begin
word temp
i = 0
while (i < Nk)
Chƣơng III: Các hệ mã khóa bí mật
64
w[i] = word(key[4*i], key[4*i+1], key[4*i+2], key[4*i+3])
i = i+1
end while
i = Nk
while (i < Nb * (Nr+1)]
temp = w[i-1]
if (i mod Nk = 0)
temp = SubWord(RotWord(temp)) xor Rcon[i/Nk]
else if (Nk > 6 and i mod Nk = 4)
temp = SubWord(temp)
end if
w[i] = w[i-Nk] xor temp
i = i + 1
end while
end
SubWord() là một hàm nhận một input 4-byte và á p dụng bảng thế S -box lên input
để nhận đƣợc một word output . Hàm RotWord() nhận một word input [a0, a1, a2, a3] thƣ̣c
hiện một hoá n vi ̣vò ng và trả về [a1, a2, a3, a0]. Các phần tử của mảng hằng số Rcon [i]
chƣ́ a cá c giá tri ̣nhận đƣợc bở i [xi-1
, {00}, {00}, {00}] trong đó xi-1
là mũ hóa của x (x đƣợc
biểu diễn dƣớ i dạng {02} trên GF(28
) và i bắt đầu từ 1).
Theo đoạn giả mã trên chú ng ta có thế nhận thấ y rằ ng Nk word của khó a kế t quả sẽ
đƣợc điề n bở i khó a mã hó a . Các word sau đó w [i] sẽ bằng XOR với word đứng trƣớc nó
w[i-1] vớ i w[i-Nk]. Vớ i cá c word ở vi ̣trí chia hết cho Nk một biến đổi sẽ đƣợc thƣ̣c hiện vớ i
w[i-1] trƣớ c khi thƣ̣c hiện phé p XOR bit , sau đó là phé p XOR vớ i một hằng số Rcon [i].
Biến đổi nà y gồ m một phép di ̣ch vò ng cá c byte của một word (RotWord()), sau đó là á p
dụng một bảng tra lên tất cả 4 byte của word (SubWord()).
Chú ý là thủ tục mở rộng khóa đối với các khóa có độ dài 256 hơi khác so với thủ
tục cho các khóa có độ dài 128 hoặc 192. Nế u Nk = 8 và i – 4 là một bội số của Nk thì
SubWord() sẽ đƣợc áp dụng cho w[i-1] trƣớ c khi thƣ̣c hiện phép XOR bit.
2.5.4.3. Thuật toá n giả i mã
Thuật toá n giải mã khá giố ng vớ i thuật toá n mã hó a về mặt cấ u trú c nhƣng 4 hàm
cơ bản sƣ̉ dụng là cá c hà m ngƣợc của cá c hà m trong thuật toá n giải mã . Đoạn giả mã
cho thuật toá n giải mã nhƣ sau:
InvCipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])
begin
byte state[4,Nb]
state = in
Chƣơng III: Các hệ mã khóa bí mật
65
AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1]) // See Sec. 5.1.4
for round = Nr-1 step -1 downto 1
InvShiftRows(state) // See Sec. 5.3.1
InvSubBytes(state) // See Sec. 5.3.2
AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])
InvMixColumns(state) // See Sec. 5.3.3
end for
InvShiftRows(state)
InvSubBytes(state)
AddRoundKey(state, w[0, Nb-1])
out = state
end
2.5.4.3.1. Hàm InvShiftRows()
Hàm này là hàm ngƣợc của hàm ShiftRows () . Các byte của ba hàng cuối của
mảng trạng thái sẽ đƣợc dịch vòng với các vị trí dịch khác nhau . Hàng đầu tiên không bị
dịch, ba hà ng cuố i bi ̣di ̣ch đi Nb – shift(r, Nb) byte trong đó các giá trị shift (r, Nb) phụ
thuộc và o số hà ng nhƣ trong phầ n 5.1.2.
Cụ thể hàm này tiến hành xử lý sau:
'
,( ( , ))mod , 0 4,0 ( 4)r c shift r Nb Nb r cs s r c Nb Nb       
Hình minh họa:
Chƣơng III: Các hệ mã khóa bí mật
66
Hình 3.13: Hàm InvShiftRows() của AES
2.5.4.3.2. Hàm InvSubBytes()
Hàm này là hàm ngƣợc của hàm SubBytes(), hàm sử dụng nghịch đảo của biến đổi
Affine bằ ng cá ch thƣ̣c hiện nhân nghi ̣ch đảo trên GF(28
).
Bảng thế đƣợc sử dụng trong hàm là:
Bảng 3.28: Bảng thế cho hà m InvSubBytes()
2.5.4.3.3. Hàm InvMixColumns()
Hàm này là hàm ngƣợc của hàm MixColumns (). Hàm làm việc trên các cột của
mảng trạng thái, coi mỗi cột nhƣ là môtô đa thƣ́ c 4 hạng tử đƣợc mô tả trong phần 4.3.
Các cột đƣợc xem là các đa thức trên GF(28
) và đƣợc nhân theo modulo x4
+1 vớ i một đa
thƣ́ c cố đi ̣nh là a-1
(x):
a-1
(x) = {0b}x3
+ {0d}x2
+ {09}x + {0e}
Và có thể mô tả bằng phép nhân ma trận nhƣ sau:
s‟(x) = a-1
(x)s(x):
'
0, 0,
'
1, 1,
'
2, 2,
'
3, 3,
0 0 0 09
09 0 0 0
0 09 0 0
0 0 09 0
c c
c c
c c
c c
e b dS S
e b dS S
d e bS S
b d eS S
    
    
    
    
    
       
trong đó 0  c < Nb.
Kế t quả là bố n byte trong mỗi cột sẽ đƣợc thay thế theo công thƣ́ c sau:
'
0, 0, 1, 2, 3,({0 } ) ({0 } ) ({0 } ) ({09} )c c c c cs e s b s d s s       
'
1, 0, 1, 2, 3,({09} ) ({0 } ) ({0 } ) ({0 } )c c c c cs s e s b s d s       
Chƣơng III: Các hệ mã khóa bí mật
67
'
2, 0, 1, 2, 3,({0 } ) ({09} ) ({0 } ) ({0 } )c c c c cs d s s e s b s       
'
3, 0, 1, 2, 3,({0 } ) ({0 } ) ({09} ) ({0 } )c c c c cs b s d s s e s       
2.5.4.3.4. Hàm nghịch đảo của hàm AddRoundKey()
Thật thú vi ̣là hà m nà y tƣ̣ bản thân nó là nghi ̣ch đảo của chính nó là do hà m chỉ có
phép toán XOR bit.
2.5.4.3.5. Thuật toá n giả i mã tƣơng đƣơng
Trong thuật toá n giải mã đƣợc trình bà y ở trên chú ng ta thấ y thƣ́ tƣ̣ của các hàm
biế n đổi đƣợc á p dụng khá c so vớ i thuật toá n mã hó a trong khi dạng của danh sá ch khó a
cho cả 2 thuật toá n vẫn giƣ̃ nguyên . Tuy vậy một số đặc điểm của AES cho phép chú ng
ta có một thuật toá n giải mã tƣơng đƣơ ng có thƣ́ tƣ̣ á p dụng cá c hà m biến đổi giố ng vớ i
thuật toá n mã hó a (tấ t nhiên là thay cá c biế n đổi bằng cá c hà m ngƣợc của chú ng ). Điề u
này đạt đƣợc bằng cách thay đổi danh sách khóa.
Hai thuộc tính sau cho phé p chú ng ta có một thuật toá n giải mã tƣơng đƣơng:
1. Các hàm SubBytes () và ShiftRows() hoán đổi cho nhau ; có nghĩa là một biến
đổi SubBytes () theo sau bở i một biế n đổi ShiftRows () tƣơng đƣơng vớ i một biế n đổi
ShiftRows() theo sau bở i một biế n đổi SubBytes (). Điều nà y cũng đú ng vớ i cá c hà m
ngƣợc của chú ng
2. Các hàm trộn cột – MixColumns() và InvMixColumns() là các hàm tuyến tính
đố i vớ i cá c cột input, có nghĩa là:
InvMixColumns(state XOR Round Key) = InvMixColumns(state) XOR
InvMixColumns(Round Key).
Các đặc điểm này cho phép thứ tự của các hàm InvSubBytes() và InvShiftRows() có
thể đổi chỗ. Thƣ́ tƣ̣ của cá c hà m AddRoundKey() và InvMixColumns() cũng có thể đổi chỗ
miễn là cá c cột của danh sách khóa giải mã phải đƣợc thay đổi bằng cách sử dụng hàm
InvMixColumns().
Thuật toá n giải mã tƣơng đƣơng đƣợc thƣ̣c hiện bằ ng cá ch đảo ngƣợc thƣ́ tƣ̣ của
hàm InvSubBytes () và InvShiftRows (), và thay đổi thứ tự của AddRoundKe y() và
InvMixColumns() trong cá c lầ n lặp sau khi thay đổi khó a cho giá tri ̣round = 1 to Nr-1 bằng
cách sử dụng biến đổi InvMixColumns (). Các word đầu tiên và cuối cùng của danh sách
khóa không bị thay đổi khi ta áp dụng phƣơng pháp nà y.
Thuật toá n giải mã tƣơng đƣơng cho một cấ u trú c hiệu quả hơn so vớ i thuật toá n
giải mã trƣớc đó.
Đoạn giả mã cho thuật toá n giải mã tƣơng đƣơng:
EqInvCipher(byte in[4*Nb], byte out[4*Nb], word dw[Nb*(Nr+1)])
begin
byte state[4,Nb]
Chƣơng III: Các hệ mã khóa bí mật
68
state = in
AddRoundKey(state, dw[Nr*Nb, (Nr+1)*Nb-1])
for round = Nr-1 step -1 downto 1
InvSubBytes(state)
InvShiftRows(state)
InvMixColumns(state)
AddRoundKey(state, dw[round*Nb, (round+1)*Nb-1])
end for
InvSubBytes(state)
InvShiftRows(state)
AddRoundKey(state, dw[0, Nb-1])
out = state
end
Các thay đổi sau cần thực hiện trong thuật toán sinh khóa để thuật toán trên có thể
hoạt động đƣợc:
for i = 0 step 1 to (Nr+1)*Nb-1
dw[i] = w[i]
end for
for round = 1 step 1 to Nr-1
InvMixColumns(dw[round*Nb, (round+1)*Nb-1]) // note change of type
end for
2.6. Các cơ chế, hình thức sử dụng của mã hóa khối (Mode of Operation)
2.6.1. Các hình thức sử dụng
Nhƣ chú ng ta đã biết c ác mã hóa khối mã hóa các khối thông tin có độ dài cố định,
chẳng hạn DES với các khối bit 64, sử dụng khóa là xâu bít có độ dài bằng 56. Tuy nhiên
để sử dụng các hệ mã này trên thực tế vẫn cần có một qui đi ̣nh về qui cá ch sƣ̉ dụng
chúng để mã hóa các dữ liệu cần mã hóa. Cách thức sử dụng một thuật toán mã hóa khối
trong thực tế đƣợc gọi là Mode of Use hay Mode Of Operation. Có 4 hình thức sử dụng
các hệ mã khối đƣợc định nghĩa trong các chuẩn ANSI (ví dụ ANSI X3.106-1983 dành
cho DES). Dƣ̣a và o việc xƣ̉ lý dƣ̃ liệu input của hệ mã ngƣời ta chia thành hai loại cơ chế
sử dụng các hệ mã khối sau:
1. Các chế độ khối (Block Mode): xử lý các thông điệp theo các khối (ECB, CBC)
2. Các chế độ luồng, dòng (Stream Modes): xử lý các thông điệp nhƣ là một
luồng bit/byte (CFB, OFB).
Các chế độ khối thƣờng đƣợc sử dụng để mã hóa các dữ liệu mà chúng ta biết
trƣớ c về vi ̣trí , độ lớ n trƣớ c khi mã hó a (chẳng hạn nhƣ cá c file , các email trƣớc khi cần
Chƣơng III: Các hệ mã khóa bí mật
69
gƣ̉ i đi) trong khi cá c chế độ luồ ng thƣờ ng đƣợc sƣ̉ dụng cho việc mã hó a cá c dƣ̃ liệu
không đƣợc biế t trƣớ c về độ lớ n cũng nhƣ vi ̣trí chẳng hạn nhƣ cá c tín hiệu gƣ̉ i về tƣ̀ vệ
tinh hoặc cá c tín hiệu do một bộ cảm biế n đọc tƣ̀ bên ngoà i và o.
Chú ý: DES, 3DES, AES (hay bất kỳ một thuật toán mã hóa khối nào khác) tạo
thành một khối xây dựng cơ bản. Tuy nhiên để sử dụng chúng trong thực tế, chúng ta
thường cần làm việc với các khối lượng dữ liệu không thể biết trước được, có thể chúng là
một khối dữ liệu sẵn sàng ngay cho việc mã hóa(khi đó việc sử dụng mã hóa theo cơ chế
khối là phù hợp), hoặc có thể chỉ được một vài bit, byte tại một thời điểm (khi đó sử dụng
chế độ dòng là phù hợp). Vì thế các cơ chế sử dụng mã khối được trình bày trong phần
này là riêng cho DES nhưng cũng được á p dụng tương tự cho cá c hệ mã khố i khá c.
2.6.2. Cơ chế bả ng tra mã điện tƣ̉ ECB (Electronic CodeBook Book)
Thông điệp cầ n mã hó a đƣợc chia thành các khối độc lập để mã hóa, mỗi khố i bản
mã là kết quả của việc mã hó a riêng biệt khố i bản rõ tƣơng ƣ́ ng vớ i nó và độc lập vớ i khố i
khác. Cách làm việc này giống nhƣ chúng ta thay thế các khối bản mã bằng các khối bản
rõ tƣơng ứng nên có tên gọi là bảng tra mã điện tử.
P = P1P2…PN
Mã hóa: Ci = DESK(Pi), kế t quả bản mã là C = C1C2..CN. Quá trình giải mã tiến hành
ngƣợc lại: Pi = DES-1
K(Ci).
Mã hóa
P
P1 P2 Pn
C1 C2 Cn
E E E
C
K Giải mã
C
C1 C2 Cn
P1 P2 Pn
D D D
P
K
Hình 3.14: Cơ chế ECB
ECB là chế độ sử dụng đơn giản và dễ cài đặt nhất, đƣợc sử dụng khi chỉ một khối
đơn thông tin cần đƣợc gửi đi (chẳng hạn nhƣ một khóa session đƣợc mã hóa bằng cách
dùng một khóa chính).
Do trong ECB các khối bản rõ đƣợc mã hóa độc lập nên làm nảy sinh một số nhƣợc
điểm sau: các lặp lại của thông điệp có thể đƣợc thể hiện trên bản mã, nghĩa là nếu có
các bản rõ giống nhau thì tƣơng ứng các bản mã giống nhau , điều nà y đặc biệt thể hiện
rõ với các dữ liệu lặp lại nhiều chẳng hạn nhƣ các dữ liệu hình ảnh. Việc để lộ tính lặp lại
của bản rõ có thể dẫn tới các tấn công theo phƣơng pháp phân tích thống kê . Hơn nƣ̃a
các bản mã có thể bị giả mạo bằng cách thêm một số khối bản mã giả vào kết quả mã
hóa, bên nhận sẽ không phá t hi ện ra sự giả mạo này. Bên cạnh đó việc mã hóa các khối
thông điệp là độc lập làm suy yếu DES. Trên thƣ̣c tế ECB chỉ thực sự có ích khi gửi một
khối dữ liệu nhỏ.
Chƣơng III: Các hệ mã khóa bí mật
70
2.6.3. Cơ chế mã mó c xích CBC - Cipher Block Chaining
Để vƣợt qua các vấn đề về sự lặp lại và yêu cầu độc lập trong ECB , chúng ta cần
một vài cách để làm cho bản mã phụ thuộc vào tất cả các khối trƣớc nó . Đó này chính là
điều mà CBC cung cấp cho chúng ta bằng cách kết hợp khối bản rõ trƣớc với khối thông
điệp hiện tại trƣớc khi mã hóa.
Cũng giống nhƣ cơ chế EBC trong cơ chế CBC bản rõ sẽ đƣợc chia thành các khối
nhƣng sẽ đƣợc liên kết với nhau trong quá trình mã hóa để tạo thành bản rõ . Chính vì
các khối bản mã đƣợc móc xích với bản rõ và vì thế chế độ này có tên là CBC
CBC sử dụng một vector khởi tạo IV (Initial Vector) để bắt đầu:
C0 = IV, P = P1P2..PN
Mã hóa: Ci = DESK (Pi  Ci-1), C = C1C2..CN
Giải mã: Pi = DES-1
K(Ci)  Ci-1, P = P1P2..PN.
Hình 3.15: Chế độ CBC
Chế độ CBC phù hợp với các yêu cầu cần gửi các lƣợng lớn dữ liệu một cách an
toàn (chẳng hạn nhƣ FTP, EMAIL, WEB)
Trong CBC mỗi khối bản mã là phụ thuộc vào tất cả các khối thông điệp đứng trƣớc
đó nên việc sai lệch một khố i bản rõ hoặc bản m ã nào đó cũng làm sai lệch kết quả mã
hóa và giải mã tƣơng ứng . Khó khăn nhất trong việc sử dụng CBC chính là quản lý các
giá trị IV sử dụng , thƣờ ng thì cả hai bên nhận và gửi đều biết (chẳng hạn nhƣ bằng 0)
hoặc sẽ đƣợc khở i tạo bằ ng cá c giá tri ̣mớ i và gƣ̉ i cho bên nhận trƣớ c khi mã hó a . Tuy
nhiên nếu IV bị tiết lộ kẻ tấn công có thể làm thay đổi các bit ở khối đầu tiên, vì thế có thể
IV là một giá trị cố định hoặc đƣợc gửi đi sau khi đã mã hóa bằng ECB.
2.6.4. Chế độ mã phản hồi CFB (Cipher Feedback) và chế độ mã phản hồi đầu ra
OFB (Output Feedback)
Các chế độ luồng CFB và OFB đƣợc sử dụng để mã hóa các dữ liệu đƣợc cung
cấ p rờ i rạc, thƣờ ng là cá c tín hiệu nhận đƣợc tƣ̀ vệ tinh hoặc do một bộ cảm biế n nà o đó
truyền về . Chính vì dữ liệu đƣợc cung cấp rời rạc nên tại một thời điểm chúng ta không
thể biế t trƣớ c độ lớ n và vi ̣trí dƣ̃ liệu sẽ đƣợc mã hó a . Do đó đố i vớ i cá c chế độ luồ ng
x1
ek
y1
IV=y0
x2
ek
y2
y1
x1
IV=y0 dk
y2
x2
dk
Mã hoá Giải mã
Chƣơng III: Các hệ mã khóa bí mật
71
input cho thuật toá n mã hó a đƣợc xem là một luồ ng cá c bit của bản rõ đƣợc lầ n lƣợt theo
thờ i gian.
Trong chế độ OFB và CFB dòng khoá đƣợc tạo ra sẽ đƣợc cộng modulo 2 với bản
rõ. OFB thực sự là một hệ mã đồng bộ: dòng khoá đƣợc thành lập bởi việc tạo lập các
vector khởi tạo 64 bit (vector IV). Ta xác định z0 = IV và tính dòng khoá z1z2 ... zn theo quy
tắc zi = ek(zi-1) với i ≥ 1. Sau đó dãy bản rõ x1x2 ... xn sẽ đƣợc mã hoá bằng cách tính yi =
xi  zi với i ≥ 1.
Trong chế độ CFB, ta bắt đầu với y0 = IV (vector khởi tạo 64 bit) và tạo phần tử zi
của dòng khoá bằng cách mã hoá khối bản mã trƣớc đó. Tức là zi = ek(yi-1) với i≥1 và yi =
xi  zi với i≥1. Việc sử dụng CFB đƣợc mô tả bằng sơ đồ sau (ek trong trƣờng hợp này
đƣợc sử dụng cho cả mã hoá và giải mã):
Hình 3.16: Chế độ CFB
Cũng có một vài dạng khác của OFB và CFB đƣợc gọi là chế độ phản hồi k-bit (1<
k < 64). Ở đây ta đã mô tả chế độ phản hồi 64 bit. Các chế độ phản hồi 1-bit và 8-bit
thƣờng đƣợc sử dụng cho phép mã hoá đồng thời 1 bit (hay byte) dữ liệu. Kỹ thuật cơ
bản đƣợc sử dụng ở đây là một thanh ghi dịch 64 bit và mỗi bƣớc dịch đƣợc k-bit làm
đầu vào cho mã hoá. K-bit bên trái của đầu vào hàm mã hoá đƣợc XOR với đơn vị đầu
của block bản rõ tiếp theo để đƣa ra một đơn vị bản mã truyền đi và đơn vị này đƣợc
đƣa lại vào k-bit bên phải của thanh ghi dịch. Quá trình xử lý tiếp tục cho tới khi tất cả
đơn vị bản rõ đều đƣợc mã hoá. Điểm khác nhau giữa CFB và OFB là k-bit hồi tiếp cho
bộ ghi dịch đƣợc lấy từ trƣớc hay sau bộ XOR (nếu lấy sau bộ XOR thì dữ liệu đã mã hoá
ứng với CFB, còn lấy phía trƣớc thì là OFB).
Nhìn chung , bốn chế độ của DES đều có những ƣu nhƣợc điểm riêng. Ở chế độ
ECB và OFB, sự thay đổi của một khối bản rõ xi 64 bit sẽ làm thay đổi khối bản mã yi
tƣơng ứng, nhƣng các khối bản khác thì không bị ảnh hƣởng. Trong một số tình huống,
x1
y1
ek ekIV=y0
x2
y2
y1
x1
ek ekIV=y0
y2
x2
Giải mã
Mã hoá
Chƣơng III: Các hệ mã khóa bí mật
72
đây là một tính chất đáng mong muốn. Ví dụ nhƣ chế độ OFB thƣờng đƣợc dùng để mã
hoá trong việc truyền tín hiệu qua vệ tinh.
Mặt khác, ở chế độ CBC và CFB, nếu một khối bản rõ xi bị thay đổi thì yi và các khối
tiếp theo sẽ bị ảnh hƣởng. Nhƣ vậy ở chế độ CBC và CFB có thể đƣợc sử dụng rất hiệu
quả trong mục đích xác thực. Cũng vì lý do đó nên CFB thƣờ ng đƣợc dù ng để mã hó a
trong cá c trƣờ ng hợp mà đƣờ ng truyền tố t, tín hiệu ít nhiễu. Đặc biệt hơn, các chế độ này
dùng để tạo mã xác thực bản tin (MAC – Message Authentication Code). MAC đƣợc gắn
thêm vào các khối bản rõ để thuyết phục R (receiver) rằng đây chính là dãy bản rõ đƣợc
gửi từ S (sender) mà không phải một ai khác giả mạo. Nhƣ vậy MAC đảm bảo tính xác
thực của bản tin.
Ta sẽ mô tả cách sử dụng chế độ CBC để tạo MAC. Ta bắt đầu bằng vector khởi
tạo IV chứa toàn số 0. Sau đó dùng chế độ CBC để tạo các khối bản mã y1y2...yn với khoá
K. Cuối cùng ta xác định MAC là yn. Ngƣời gửi S (sender) sẽ phát đi khối bản rõ x1x2 ... xn
cùng với MAC. Khi ngƣời nhận R (receiver) thu đƣợc x1x2 ... xn, anh ta sẽ khôi phục lại y1,
y2, yn bằng khoá bí mật K và xác minh liệu yn có giống MAC của mình thu đƣợc hay
không. Nếu một ngƣời thứ ba E (enemy) thu chặn đƣợc bản rõ x1x2 ... xn rõ ràng E không
thể tạo ra MAC hợp lệ nếu không biết khoá bí mật K mà S và R đang dùng. Hơn nữa, nếu
E thay đổi ít nhiều nội dung thì chắc chắn E không thể thay đổi đƣợc MAC để đƣợc R
chấp nhận.
Thông thƣờng ta muốn kết hợp cả tính xác thực lẫn độ bảo mật. Điều đó đƣợc thực
hiện nhƣ sau: trƣớc tiên S dùng khoá K1 để tạo MAC cho dãy bản rõ x1x2... xn, sau đó S
xác định xn+1 là MAC, rồi mã hoá dãy x1x2 ... xnxn+1 bằng khoá K2 để tạo dãy bản mã y1y2 ...
ynyn+1. Khi R nhận đƣợc y1y2...ynyn+1, R sẽ giải mã bằng khoá K2 và sau đó kiểm tra xem
xn+1 có phải là MAC (bằng khoá K1) của dãy bản rõ x1x2 ... xn hay không.
3. Bài tập
Bài tập 3.1: Hãy giải mã bản mã đƣợc mã hóa bằng hệ mã Caesar sau (sƣ̉ dụng bảng
chƣ̃ cá i tiếng Anh): WKXPEVXS.
Bài tập 3.2 (khó): Thông điệp bí mật ẩn sau đoạn văn bản tiếng Anh sau là gì:
“The supply of game for London is going steadily
up. Head keeper Hudson, we believe, has been
now told to receive all orders for fly paper and for
preservations of your hen-pheasant's life.”
Trích trong tác phẩm ”The Gloria Scott”.
Bài tập 3.3: Sƣ̉ dụng bảng sau (hệ mã Freemason) để giải mã thông điệp:
••
Bảng mã các ký tự:
A B C
D E F
G H I
Chƣơng III: Các hệ mã khóa bí mật
73
J
K L
M
N• O• P•
Q• R• S•
T• U• V•
W•
X• Y•
Z•
Gợi ý: đây là một hệ mã thay thế tƣợng hình.
Bài tập 3.4: Hãy tìm thông điệp bí mật ẩn giấu trong đoạn văn bản sau:
Dear George, 3rd March
Greetings to all at Oxford. Many thanks for your
letter and for the Summer examination package.
All Entry Forms and Fees Forms should be ready
for final dispatch to the Syndicate by Friday
20th or at the very least, I‟m told, by the 21st.
Admin has improved here, though there‟s room
for improvement still; just give us all two or three
more years and we‟ll really show you! Please
don‟t let these wretched 16+ proposals destroy
your basic O and A pattern. Certainly this
sort of change, if implemented immediately,
would bring chaos.
Bài tập 3.5: Cho hệ mã Affine đƣợc cài đặt trên Z99. Khi đó khóa là các cặp (a, b) trong
đó a, b  Z99 với (a, 99) = 1. Hàm mã hóa EK (x) = (a * x + b) mod 99 và hàm giải mã DK
(x) = a-1
* (x – b) mod 99.
a) Hãy xác định số khóa có thể đƣợc sử dụng cho hệ mã này.
b) Nếu nhƣ khóa giải mã là K-1
= (16, 7), hãy thực hiện mã hóa xâu m =
“DANGER”.
Bài tập 3.6: Cho hệ mã Affine đƣợc cài đặt trên Z39. Khi đó khóa là các cặp (a, b) trong
đó a, b  Z39 với (a, 39) = 1. Hàm mã hóa EK (x) = (a * x + b) mod 39 và hàm giải mã DK
(x) = a-1
* (x – b) mod 39.
a) Hãy xác định số khóa có thể đƣợc sử dụng cho hệ mã này.
b) Nếu nhƣ khóa giải mã là K-1
= (23, 7), hãy thực hiện mã hóa xâu m = “ATTACK”.
Bài tập 3.7: Cho hệ mã Affine đƣợc cài đặt trên Z55. Khi đó khóa là các cặp (a, b) trong
đó a, b  Z55 với (a, 55) = 1. Hàm mã hóa EK (x) = (a * x + b) mod 55 và hàm giải mã DK
(x) = a-1
* (x – b) mod 55.
a) Hãy xác định số khóa có thể đƣợc sử dụng cho hệ mã này.
Chƣơng III: Các hệ mã khóa bí mật
74
b) Khóa giải mã là K-1
= (13, 17), hãy xác định khóa mã hóa.
Bài tập 3.8: Giả sử hệ mã Affine đƣợc cài đặt trên Z99.
a) Hãy xác định só khóa có thể có của hệ mã.
b) Giả sử khóa mã hó a là (16, 7), hãy xác định khóa giải mã.
Bài tập 3.9: Giả sử hệ mã Affine đƣợc cài đặt trên Z126.
a) Hãy xác định só khóa có thể có của hệ mã.
b) Giả sử khóa mã hóa là (23, 7), hãy xác định khóa giải mã.
Bài tập 3.10: Cho hệ mã Hill có M = 2.
a) Ma trận A = 





1713
35
có thể đƣợc sử dụng làm khóa cho hệ mã trên không giải
thích.
b) Cho A = 





73
512
hãy thực hiện mã hóa và giải mã với xâu S = “HARD”.
Bài tập 3.11: Cho hệ mã Hill có M = 2.
a) Ma trận A = 





a11
35
đƣợc sử dụng làm khóa cho hệ mã trên. Hãy tìm tất cả các
khóa có thể sử dụng của hệ mã trên.
b) Giả sử ngƣời ta sử dụng hệ mã trên để mã hóa bản rõ P = “EASY” và thu đƣợc
bản mã là “UMQA”. Hãy thực hiện giải mã với bản mã là C = “MCDZUZ” và đƣa
ra bản rõ.
Bài tập 3.12: Cho hệ mã Hill có M = 2.
a) Ma trận A = 





a7
1315
đƣợc sử dụng làm khóa cho hệ mã trên. Hãy tìm tất cả
các khóa có thể sử dụng của hệ mã trên.
b) Giả sử ngƣời ta sử dụng hệ mã trên để mã hóa bản rõ P = “MARS” và thu đƣợc
bản mã là “YARH”. Hãy thực hiện giải mã với bản mã là C = “MANNTF” và đƣa
ra bản rõ.
Bài tập 3.13: Cho hệ mã Vigenere có M = 6, K = “CIPHER”.
a) Hãy thực hiện mã hóa xâu P = “THIS IS MY TEST“.
b) Hãy thực hiện giải mã xâu M = “EICJIC RTPUEI GBGLEK CBDUGV”.
Bài tập 3.14: Cho hệ mã Vigenere có M = 6. Mã hóa xâu P = “THIS IS MY TEST“ ngƣời
ta thu đƣợc bản mã là “LLKJML ECVVWM”.
a) Hãy tìm khóa mã hóa đã dùng của hệ mã trên.
b) Dùng khóa tìm đƣợc ở phần trên hãy giải mã bản mã C = “KLGZWT
OMBRVW”.
Chƣơng III: Các hệ mã khóa bí mật
75
Bài tập 3.15: Cho hệ mã Vigenere có M = 6. Mã hóa xâu P = “SPIRIT“ ngƣời ta thu đƣợc
bản mã là “OXHRZW”.
a) Hãy tìm khóa mã hóa đã dùng của hệ mã trên.
b) Dùng khóa tìm đƣợc ở phần trên hãy giải mã bản mã C = “BQETYH HMBEEW”.
Bài tập 3.16: Cho hệ mã Vigenere có M = 6. Giải mã xâu C = “RANJLV” ngƣời ta thu
đƣợc bản rõ là “CIPHER”.
a) Tìm khóa đã sử dụng của hệ mã trên.
b) Dùng khóa tìm đƣợc ở phần trên hãy hãy giải mã xâu M = “PLDKCI DUJQJO“.
Bài tập 3.17: Phƣơng phá p mã hó a thay thế đơn giản
Đoạn văn bản sau đƣợc mã hó a bằ ng cá ch sƣ̉ dụng một phƣơng phá p mã hó a thay
thế đơn giản. Bản rõ là một phần của một văn bản tiếng Anh viết hoa, bỏ qua các dấu
câu. Hãy sử dụng bảng thống kê tần suất xuất hiện của các chữ cái trong tiếng Anh để
giải mã bản mã đã cho.
ODQSOCL OW GIU BOEE QRROHOCS QV GIUR KIA QF Q DQCQSLR WIR
ICL IW CQFQF EIYQE YIDJUVLR FGFVLDF GIU SLV OCVI GIUR
IWWOYL IC VXQV DICPQG DIRCOCS VI WOCP VXL JXICLF ROCSOCS
LHLRG YQEELR OF Q POFVRQUSXV YICWUFLP CQFQ BIRMLR QCP
LHLRG YQEELR QFFURLF GIU VXQV XOF IR XLR WOEL IR
QYYIUCVOCS RLYIRP IR RLFLQRYX JRIKLYV LHLRG ICL IW BXOYX
OF DOFFOCS WRID VXL YIDJUVLR FGFVLD OF QAFIEUVLEG HOVQE
Bảng thống kê tần suất xuất hiện của các chữ cái trong tiế ng Anh:
Chƣ̃ cá i Tầ n suấ t Chƣ̃ cá i Tầ n suấ t Chƣ̃ cá i Tầ n suấ t
A 8.2 % J 0.2 % S 6.3 %
B 1.5 % K 08 % T 9.1 %
C 2.8 % L 4.0 % U 2.8 %
D 4.3 % M 2.4 % V 1.0 %
E 12.7 % N 6.7 % W 2.3 %
F 2.2 % O 7.5 % X 0.1 %
G 2.0 % P 1.9 % Y 2.0 %
H 6.1 % Q 0.1 % Z 0.1 %
I 7.0 % R 6.0 %
Bài tập 3.18: Cho bản mã sau:
EYMHP GZYHH PTIAP QIHPH YIRMQ EYPXQ FIQHI AHYIW ISITK MHXQZ PNMQQ
XFIKJ MKXIJ RIKIU XSSXQ ZEPGS ATIHP PSXZY H
Chƣơng III: Các hệ mã khóa bí mật
76
Biết rằ ng bảng chƣ̃ cá i sƣ̉ dụng là tiếng Anh, hãy thực hiện các yêu cầu sau:
a) Hãy đƣa ra bảng phân phối tần suất của các chữ cái trong bản mã trên.
b) Giả sử bản mã trên nhận đƣợc bằng cách sử dụng phƣơng pháp mã hóa đổi chỗ
hoặc thay thế đơn âm, hãy dựa vào bảng phân phối tần suất ở phần a để xác định
xem khả năng nà o là cao hơn (hệ mã đổi chỗ hay thay thế đơn âm)?
c) Hãy xác định bản rõ nếu nhƣ phần bắt đầu của bản rõ là “What ought …”.
d) Giải thích cách thành lập khóa của hệ mã.
Bài tập 3.19 (khó):
Hãy giải mã bản mã đƣợc mã hóa bằng hệ mã Vigenere sau, xác định độ khóa sử
dụng biết rằng bản rõ gồm các chữ cái trong bảng mã tiếng Anh.
IGDLK MJSGC FMGEP PLYRC IGDLA TYBMR KDYVY XJGMR TDSVK ZCCWG ZRRIP
UERXY EEYHEUTOWSERYWC QRRIP UERXJ QREWQ FPSZC ALDSD ULSWF FFOAM
DIGIY DCSRR AZSRB GNDLC ZYDMMZQGSS ZBCXM OYBID APRMK IFYWF MJVLY
HCLSP ZCDLC NYDXJ QYXHDAPRMQ IGNSU MLNLG EMBTF MLDSB AYVPU TGMLK
MWKGF UCFIY ZBMLC DGCLY VSCXY ZBVEQ FGXKN QYMIY YMXKM GPCIJ HCCEL
PUSXF MJVRY FGYRQ
Sƣ̉ dụng một trong cá c ngôn ngƣ̃ lập trình C, C++, Java hoặc C# để làm các bài tập sau:
Bài tập 3.20: Viế t chƣơng trình đếm tần số xuất hiện của các chữ cái tiếng Anh trong một
văn bản tiế ng Anh ở dạng file text.
Bài tập 3.21: Viế t chƣơng trình đếm tần số xuất hiện của các chữ cái tiếng Việt trong một
văn bản tiế ng Việt ở dạng file RTF.
Bài tập 3.22: Viế t chƣơng trình cà i đặt thuật toá n mã hóa và giải mã của hệ mã Ceasar.
Bài tập 3.23: Viế t chƣơng trình cà i đặt thuật toá n mã hó a và giải mã của hệ mã Affine.
Bài tập 3.24: Viế t chƣơng trình tính đi ̣nh thƣ́ c của ma trận vuông cấ p N (N < 20).
Bài tập 3.25: Viế t chƣơng trình cà i đặt thuật toá n mã hóa và giải mã của hệ mã Hill.
Bài tập 3.26: Viế t chƣơng trình cà i đặt thuật toá n mã hó a và giải mã của hệ mã Vigenere.
Bài tập 3.27: Viế t chƣơng trình mã hó a và giải mã file theo hệ mã DES vớ i cá c cơ chế
mã hóa ECB, CBC.
Bài tập 3.28: Viế t chƣơng trình mã hó a và giải mã file theo hệ mã AES vớ i cá c cơ chế
mã hóa ECB, CBC.
Chƣơng IV: Các hệ mã mật khóa công khai
77
CHƢƠNG IV: CÁC HỆ MÃ MẬT KHÓA CÔNG KHAI
Trong cá c hệ mã mật khó a bí mật nế u chú ng ta biế t khó a và hà m mã hó a chú ng ta
có thể tìm đƣợc khóa và hàm giải mã một cách nhanh chóng (thờ i gian đa thƣ́ c).
Một hệ mã mật khó a bí mật là một hệ mã mật mà tấ t cả mọi ngƣờ i đề u biế t hà m mã
hóa và khóa mã hóa nhƣng không tồn tại một t huật toá n thờ i gian đa thƣ́ c để có thể tính
đƣợc khó a giải mã tƣ̀ cá c thông tin đó.
1. Khái niệm hệ mã mật khóa công khai
Các hệ mã đƣợc trình bà y trong cá c chƣơng trƣớ c đƣợc gọi là cá c hệ mã khó a bí
mật, khóa đối xứng, hay cá c hệ mã truyền thố ng (conventional).
Các hệ mã này có các điểm yếu sau đây:
 Nế u số lƣợng ngƣờ i sƣ̉ dụng lớn thì số khóa sẽ tăng rấ t nhanh, chẳng hạn vớ i n
ngƣờ i sƣ̉ dụng thì số khó a sẽ là n *(n-1)/2 do đó rấ t khó quản lý, phƣ́ c tạp và
không an toà n.
 Dƣ̣a trên cá c hệ mã nà y không thể xây dƣ̣ng cá c khá i niệm và di ̣ch vụ nhƣ chƣ̃
ký điện tử, dịch vụ xác thực hóa ngƣời dùng cho các ứng dụng thƣơng mại điện
tƣ̉ .
Vào năm 1975 Diffie và Hellman trong một công trình của mình (một bà i bá o) đã đề
xuấ t ra cá c ý tƣở ng cho phé p xây dƣ̣ng lên cá c hệ mã hoạt động theo cá c nguyên tắ c
mớ i gắn liề n vớ i cá c bên truyề n tin chƣ́ không gắn vớ i cá c cặp truyề n tin.
Nguyên tắ c hoạt động của cá c hệ mã là mỗi bên tham gia truyề n tin sẽ có 2 khóa,
một khó a gọi là khó a bí mật và một khó a đƣợc gọi là khó a công khai. Khóa bí mật là khóa
dùng để giải mã và đƣợc giữ bí mật (KS), khóa công khai là khóa dùng để sinh mã đƣợc
công khai hó a để bấ t cƣ́ ai cũng có thể sƣ̉ dụng khó a nà y gƣ̉ i tin cho ngƣờ i chủ của hệ
mã (KP). Ngày nay chúng ta có thể thấy rất rõ nguyên tắc này trong việc gửi email , mọi
ngƣờ i đều có thể gƣ̉ i email tớ i một đi ̣a chỉ email nà o đó , nhƣng chỉ có ngƣờ i chủ sở hƣ̃u
của địa chỉ email đó mới có thể đọc đƣợc nội dung của bức thƣ , còn những ngƣời khác
thì không. Vớ i cá c hệ mã khó a công khai việc phân phố i khó a sẽ trở nên dễ dà ng hơn
qua cá c kênh cung cấ p khó a công cộng , số lƣợng khó a hệ thố ng quản lý cũng sẽ ít hơn
(là n khóa cho n ngƣời dùng). Các dịch vụ mới nhƣ chữ ký điện tử, thỏa thuận khóa cũng
đƣợc xây dƣ̣ng dƣ̣a trên cá c hệ mã nà y.
Các yêu cầu của loại hệ mã này:
- Việc sinh KP, KS phải dễ dàng
- Việc tính E(KP, M) là dễ dàng
- Nế u có C = E(KP, M) và KS thì việc tìm bản rõ cũng là dễ
- Nế u biế t KP thì việc dò tìm KS là khó
- Việc khôi phục bả n rõ tƣ̀ bản mã là rấ t khó
Khi A muố n truyề n tin cho B , A sẽ sƣ̉ dụng khó a K P của B để mã hóa tin tức và
truyền bản mã tớ i cho B, B sẽ sƣ̉ dụng khó a bí mật của mình để giải mã và đọc tin:
Chƣơng IV: Các hệ mã mật khóa công khai
78
Hình 4.1: Mô hình sƣ̉ dụng 1 của các hệ mã khóa công khai PKC
Ciphertext = E(KP,Plaintext) ,Plantext = D(KS, E(KP,Plaintext)) (1)
Hình 4.2: Mô hình sƣ̉ dụng 2 của các hệ mã khóa công khai PKC
Ciphertext = D(KS, Plaintext), Plaintext = E(KP, D(KS, Plaintext)) (2)
Mô hình (2) đƣợc sƣ̉ dụng c ho cá c hệ chƣ̃ ký điện tƣ̉ cò n mô hình (1) đƣợc sƣ̉
dụng cho các hệ mã mật . Các hệ mã này đƣợc gọi là các hệ mã khóa công khai PKC
(Public Key Cryptosystems) hay cá c hệ mã bấ t đố i xƣ́ ng (Asymmetric Encryption
Scheme).
2. Nguyên tắc cấu tạo củ a cá c hệ mã mật khó a công khai
Các hệ mã khóa công khai đƣợc xây dựng dựa trên các hàm đƣợc gọi là các hàm 1
phía hay hàm 1 chiề u (one–way functions).
Hàm một chiều f : X  Y là m một hà m mà nếu biế t x  X ta có thể dễ dà ng tính
đƣợc y = f(x). Nhƣng vớ i y bấ t kỳ  Y việc tìm x  X sao cho y = f(x) là khó. Có nghĩa là
việc tìm hà m ngƣợc f-1
là rất khó.
Ví dụ nếu chúng ta có các số nguyên tố P 1, P2, ..., Pn thì việc tính N = P1 * P2 * ... *
Pn là dễ nhƣng nếu có N thì việc phân tích ngƣợc lại là một bài toán khó với N lớn.
Để thuận tiện cá c hà m một phía đƣợc sƣ̉ dụng trong c ác hệ mã PKC thƣờng đƣợc
trang bi ̣cá c cƣ̉ a bẫy (trapdoor) giúp cho việc tìm x thỏa mã y = f(x) là dễ dàng nếu chúng
ta biế t đƣợc cƣ̉ a bẫy nà y.
Hàm của bẫy (trapdoor function): là một hàm một chiều trong đó việc tính f -1
là rấ t
nhanh khi chú ng ta biết đƣợc cƣ̉ a bẫy của hà m . Ví dụ việc tìm nghiệm của bài toán xếp
balô 0/1 trong hệ mã xếp balô Knapsack mà chú ng ta sẽ học trong phầ n tiếp theo là một
hàm một phía (việc mã hó a rấ t nhanh và dễ d àng nhƣng tìm vectơ nghiệm tƣơng ứng là
khó) nhƣng nế u ta biế t cƣ̉ a bẫy (Vectơ xếp balô siêu tăng A‟ ) thì việc giải bài toán lại rất
dễ dà ng.
3. Một số hệ mã khó a công khai
3.1. Hệ mã knapsack
Bài toán xếp ba lô tổng quát:
Khóa công
khai (KP)
Khóa bí mật
(KS)
Mã hóa Giải mã
Plaintext Plaintext
Ciphertext
A B
Mã hóa Giải mã
Plaintext
Khóa bí mật
(KS)
Khóa công
khai (KP)
Plaintext
Signed Message
A B
Chƣơng IV: Các hệ mã mật khóa công khai
79
Cho M, N và A1, A2, ...., AN là các số nguyên dƣơng tìm các số xi không âm sao cho:
M =
1
*
N
i i
i
x A


Vecto A = (A1, A2, ..., AN) đƣợc gọi là vecto xế p balô cò n vectơ X = (x1, x2, …, xN) là
vectơ nghiệm.
Một trƣờ ng hợp riêng đá ng quan tâm của bà i toá n xếp ba lô tổng quá t là trƣờ ng
hợp mà xi  {0, 1}. Khi đó ta có bà i toá n xế p ba lô 0, 1.
Vecto xế p ba lô siêu tăng : Trong trƣờ ng hợp vecto (A1, A2, ..., AN) đƣợc sắp lại
thành (A‟1, A‟2, ..., A‟N) sao cho:
 i ta có :
'
j
j i
A

 < A‟i thì vecto (A1, A2, ..., AN) đƣợc gọi là vecto xế p balo siêu tăng.
Khi (A1, A2, ..., AN) là một vecto xếp balo siêu tăng ta có ngay tính chấ t: M >= A‟i  i.
Do đó việc giải bà i toá n xế p ba lô 0/1 trở nên dễ dà ng hơn rấ t nhiề u.
Hệ mã knapsack do Merkle và Hellman đƣa ra và o năm 1978.
Cách xây dựng:
1. Chọn 1 vecto siêu tăng A‟
= (a‟
1, a‟
2, ..., a‟
N), chọn 1 số M > 2 * a‟
N, chọn ngẫu
nhiên 1 số u < M và (u, M) = 1
2. Xây dƣ̣ng Vecto A = (a1, a2, ..., aN) trong đó ai = (a‟
i * u) mod M
3. Khóa: KP = (A, M), KS = (u, u-1
)
4. Không gian cá c bản rõ là không gian mọi dãy N bit
P = (x1, x2, ..., xn).
Mã hóa: C = (
1
*
N
i i
i
a x

 )mod M
Giải mã: tính C‟
= C * u-1
mod M sau đó giải bài toán xếp ba lô 0/1 vớ i A‟
, C‟
tƣ̀ đó
tìm đƣợc P = (x1, x2, ..., xn).
Ví dụ 1: Cho hệ mã Knapsack có A‟
= (2, 3, 6, 12, 25), N = 5, M = 53, u = 46, u-1
=
15.
a) Hãy tìm các khóa của hệ mã trên
b) Mã hóa và giải mã bản mã tƣơng ứng của bản rõ M = 01001.
3.2. Hệ mã RSA
Hệ mã RSA đƣợc đặt tên dƣ̣a theo cá c chƣ̃ cá i đầ u của 3 tác giả của hệ mã là
Rivest, Shamir và Adleman. Đây là thuật toán mã hóa nổi tiếng nhất và cũng là thuật toán
đƣợc ứng dụng thực tế nhất.
Để cài đặt RSA ban đầu mỗi ngƣời dùng sinh khóa công khai và khóa bí mật của
mình bằng cách:
Chƣơng IV: Các hệ mã mật khóa công khai
80
 chọn hai số nguyên tố lớn ngẫu nhiên (cỡ gần 100 chữ số) khác nhau p và q
 tính N = p*q
 chọn một số e nhỏ hơn N và (e, (N)) = 1, e đƣợc gọi là số mũ lập mã
 tìm phần tử ngƣợc của e trên vành module (N), d là số mũ giải mã
 khóa công khai là KP = (e, N)
 khóa bí mật là KS = K-1
P = (d, p, q)
Việc thiết lập khóa này đƣợc thực hiện 1 lần khi một ngƣời dùng thiết lập (thay thế)
khóa công khai của họ. Mũ e thƣờng là khá nhỏ (đễ mã hóa nhanh), và phải là nguyên tố
cùng nhau với (N). Các giá trị thƣờng đƣợc chọn cho e là 3 hoặc 216
– 1 = 65535. Tuy
nhiên khi e nhỏ thì d sẽ tƣơng đố i lớ n . Khoá bí mật là (d, p, q). Các số p và q thƣờng có
giá trị xấp xỉ nhau nhƣng không đƣợc bằng nhau . Chú ý là việc để lộ một trong các thành
phần trên sẽ làm cho hệ mã hóa trở thành không an toà n.
Sử dụng RSA
 để mã hóa một thông điệp M: C = Me
(mod N) (0<= M < N)
 giải mã: M = Cd
(mod N)
Thuật toán mã hóa RSA làm việc đƣợc bởi vì nó dựa trên cơ sở toán học là sự tổng
quát định lý Ferma nhỏ của Ơclit: X(N)
= 1 (mod N). Trong thuật toán RSA chúng ta chọn
e và d là nghịch đảo của nhau trên vành Z(N) với e đƣợc chọn trƣớc.
Do đó chúng ta sẽ có e.d  1 mod (N), suy ra:
M = Cd
= M e.d
= M1+q.(N)
= M . (M(N)
)q
= M mod N
Công thức này đảm bảo việc giải mã sẽ cho kết quả đúng là bản rõ ban đầu (chú ý
là điều này chỉ đúng khi p khác q).
Ví dụ 1: Cho hệ mã RSA có N = p*q = 11 * 47 = 517, e = 3.
 Hãy tìm các khóa công khai và bí mật của hệ mã trên
 Mã hóa bản rõ M = 26.
Đầu tiên ta tính đƣợc (N) = 460 = 10 * 46, do (3,460) = 1 nên áp dụng thuật toá n
Ơclit mở rộng ta tìm đƣợc d = 307.
Vậy khóa công khai của hệ mã KP = (e, N) = (3, 517), khóa bí mật là KS = (d, p, q) =
(307, 11, 47).
Mã hóa M = 26 ta có C = Me
mod N = 263
mod 517 = 515.
Độ an toàn của RSA
Độ an toàn của RSA phụ thuộc vào độ khó của việc tính (N) và điều này đòi hỏi
chúng ta cần phân tích N ra thừa số nguyên tố. Thuật toán phân tích số nguyên tố hiệu
quả nhất hiện nay là Brent-Pollard, chúng ta hãy xem xét bảng thống kê sau để thấy đƣợc
tốc độ hoạt động của nó:
Số chữ số trong hệ thập phân của N Số các thao tác Bit để phân tích N
Chƣơng IV: Các hệ mã mật khóa công khai
81
20 7.20e+03
40 3.11e+06
60 4.63e+08
80 3.72e+10
100 1.97e+12
120 7.69e+13
140 2.35e+15
160 5.92e+16
180 1.26e+18
200 2.36e+19
Bảng 4.1: Tố c độ của thuật toá n Brent-Pollard
Các nghiên cứu về vấn đề phân tích các số nguyên lớn hiện nay tiến triển rất chậm,
các tiến bộ lớn nhất cũng chỉ là các cải tiến về thuật toán và có thể nói rằng trừ khi có các
đột phá trong việc phân tích các số 1024 bit, RSA là an toàn trong thời điểm hiện nay.
Các nhà mật mã học phát minh ra hệ mã RSA đã đƣa ra một giải thƣởng trị giá 100
$ vào năm 1977. Đó là một hệ mã với số N có 129 chữ số, thách thức này đã đƣợc phá.
Trên thực tế để cài đặt RSA cần phải thực hiện các thao tác modulo với các số 300
chữ số (hay 1024 bit) mà hiện nay các máy tính mới chỉ thao tác với các số nguyên 64 bit,
điều này dẫn đến nhu cầu cần các thƣ viện số học nhân chính xác để làm việc với các số
nguyên lớn này. Ngoài ra việc sử dụng RSA cần tới các số nguyên tố lớn nên chúng ta
cũng phải có một cơ sở dữ liệu các số nguyên tố.
Để tăng tốc cho RSA chúng ta có thể sử dụng một số phƣơng pháp khác chẳng hạn
nhƣ cải tiến các phép tính toán nhân hai số lớn hoặc tăng tốc việc tìm bản mã, bản rõ.
Đối với phép nhân 2 số n bit thông thƣờng chúng ta cần thực hiện O(n2
) phép tính
bit. Thuật toán nhân các số nguyên Schonhage – Strassen cho phép chúng ta thực hiện
phép nhân 2 số với độ phức tạp là O(n log n) với các bƣớc nhƣ sau:
 Chia mỗi số nguyên thành các khối, sử dụng các khối này nhƣ các hệ số của
một đa thức.
 Tính các đa thức này tại một số các điểm thích hợp, và nhân các kết quả thu
đƣợc.
 Nội suy các kết quả này hình thành các hệ số của đa thức tích
 Kết hợp các hệ số để hình thành nên tích của hai số ban đầu
 Biến đổi Fourier rời rạc, và lý thuyết chặp có thể đƣợc sử dụng để tăng tốc độ
của quá trình nội suy.
Chƣơng IV: Các hệ mã mật khóa công khai
82
Một cách khác nữa để tăng tốc việc nhân các số lớn trong hệ mã RSA là sử dụng
các phần cứng chuyên dụng với các thuật toán song song.
Nhƣ đã trình bày ở phần trƣớc khi mã hóa chúng ta thƣờng chọn e nhỏ để đẩy
nhanh quá trình mã hóa nhƣng điều này cũng đồng nghĩa là việc giải mã sẽ chậm do số
mũ lớn. Một cải tiến đáng kể trong tốc độ giải mã RSA có thể nhận đƣợc bằng cách sử
dụng định lý phần dƣ Trung Hoa làm việc với modulo p và q tƣơng ứng thay vì N. Vì p và
q chỉ bằng một nửa của N nên tính toán sẽ nhanh hơn nhiều.
Định lý phần dƣ Trung Hoa đƣợc sử dụng trong RSA bằng cách tạo ra hai phƣơng
trình từ việc giải mã M = Cd
(mod N) nhƣ sau:
M1 = M mod p = (C mod p)d mod (p-1)
M2 = M mod q = (C mod q)d mod (q-1)
Sau đó ta giải hệ:
M = M1 mod p
M = M2 mod q
Hệ này có nghiệm duy nhất theo định lý phần dƣ Trung Hoa
M = [(M2 + q – M1)u mod q] p + M1
Trong đó p.u mod q = 1
Việc sử dụng định lý phần dƣ Trung Hoa là một phƣơng pháp đƣợc sử dụng rộng
rãi và phổ biến để tăng tốc độ giải mã của RSA.
Hiện tƣợng lộ bả n rõ
Một hiện tƣợng cầ n lƣu ý kh i sƣ̉ dụng cá c hệ mã RSA là hiện tƣợng lộ bản rõ . Ta
hãy xét hệ mã RSA có N = p*q = 5*7, e = 17, khi đó vớ i M = 6 ta có C = 617
mod N = 6.
Tƣơng tƣ̣ vớ i hệ mã RSA có N = p*q = 109*97, e = 865, vớ i mọi M ta đề u có M e
mod N = M.
Theo tính toá n thì vớ i một hệ mã RSA có N = p*q và e bấ t kỳ , số lƣợng bản rõ sẽ bi ̣
lộ khi mã hó a sẽ là (1 + (e-1, p-1))*(1 + (e-1, q-1)).
Trong số cá c hệ mã khó a công khai thì có lẽ hệ mã RSA (cho tớ i thờ i điểm hiện tại)
là hệ mã đƣợc sử dụng rộng rãi nhất.Tuy nhiên do khi là m việc vớ i dƣ̃ liệu đầ u và o (thông
điệp mã hó a , bản rõ) lớ n thì khố i lƣợng tính toá n rấ t lớ n nên trên thƣ̣c tế ngƣờ i ta hay
dùng hệ mã này để mã hóa các dữ liệu c ó kích thƣớc nhỏ, hoặc có yêu cầ u bảo mật cao,
chẳng hạn nhƣ cá c khó a phiên (session key) trong cá c phiên truyề n tin . Khi đó hệ mã
RSA sẽ đƣợc sƣ̉ dụng kế t hợp vớ i một hệ mã khố i khá c , chẳng hạn nhƣ AES , theo mô
hình lai ghép nhƣ sau:
Chƣơng IV: Các hệ mã mật khóa công khai
83
B - ngƣời nhận
RSA
Khóa công
khai của B
Khóa
phiên K
C1
RSA
Khóa bí mật
của B
C1
Khóa
phiên K
AESP
C2
AES
C2
P
A - ngƣời gửi
Hình 4.3: Mô hình ƣ́ ng dụng lai ghép RSA vớ i cá c hệ mã khố i
3.3. Hệ mã El Gamal
Hệ mã El Gamal là một biến thể của sơ đồ phân phối khoá Diffie – Hellman. Hệ mã
này đƣợc El Gamal đƣa ra vào năm 1985. Giống nhƣ sơ đồ phân phối khóa Diffie –
Hellman tính an toàn của nó dựa trên tính khó giải của bài toán logarit rời rạc. Nhƣợc
điểm chính của nó là kích thƣớc thông tin sau khi mã hóa gửi đi sẽ tăng gấp đôi so với
thông tin gốc.
Tuy nhiên so với RSA, El Gamal không có nhiều rắc rối về vấn đề bản quyền sử
dụng.
Ban đầu ngƣời ta sẽ chọn một số nguyên tố lớn p và hai số nguyên tuỳ ý nhỏ hơn p
là a (a là một phầ n tƣ̉ nguyên thủy của Z*
P) và x (x là của ngƣời nhận, bí mật) sau đó tính:
y = ax
mod p
Để mã hóa một thông điệp M (là một số nguyên trên ZP) thành bản mã C ngƣời gửi
chọn một số ngẫu nhiên k nhỏ hơn p và tính khóa mã hóa K:
K = yk
mod p
Sau đó tính cặp bản mã:
 C1 = ak
mod p
 C2 = K.M mod p
Và gửi bản mã C = (C1, C2) đi (chú ý là sau đó k sẽ bị huỷ).
Để giải mã thông điệp đầu tiên ta cần tính lại khóa mã hóa thông điệp K:
K = C1
x
mod p = ak.x
mod p
Sau đó tính M bằng cách giải phƣơng trình sau đây:
M = C2 . K-1
mod p
Việc giải mã bao gồm việc tính lại khóa tạm thời K (rất giống với mô hình của Diffie
– Hellman đƣa ra). Khóa công khai của hệ mã là (p, a, y), khóa bí mật là x.
Ví dụ: Cho hệ mã El Gamal có P = 97, a = 5, x = 58.
Chƣơng IV: Các hệ mã mật khóa công khai
84
 Tìm khóa của hệ mã trên.
 Mã hóa bản rõ M = 3 với k đƣợc chọn bằng 36.
Trƣớc hết ta tính y = 558
mod 97 = 44, từ đó suy ra KP = (P, a, y) = (97, 5, 44) và KS
= (58).
Để mã hóa thông điệp M = 3 ta tính khóa K = 4436
mod 97 = 75 sau đó tính:
 C1 = 536
= 50 mod 97
 C2 = 75.3 mod 97 = 31 mod 97
Vậy bản mã thu đƣợc là C = (50, 31).
Vấn đề đối với các hệ mã khóa công khai nói chung và El Gamal nói riêng là tốc độ
(do phải làm việc với các số nguyên lớn), bên cạnh đó dung lƣợng bộ nhớ dành cho việc
lƣu trữ các khóa cũng lớn. Với hệ mã El Gamal chúng ta cần gấp đôi bộ nhớ để chứa bản
mã so với các hệ mã khác. Ngoài ra do việc sử dụng các số nguyên tố nên việc sinh khóa
và quản lý khóa cũng khó khăn hơn với các hệ mã khối. Trên thực tế các hệ mã khóa
công khai thƣờng đƣợc sử dụng kết hợp với các hệ mã khối (mã hóa khóa của hệ mã)
hoặc để mã hóa các thông tin có dung lƣợng nhỏ và là một phần quan trọng của một
phiên truyền tin nào đó.
Thám mã đối với hệ mã El Gamal
Để thƣ̣c hiện thá m mã hệ mã El Gamal chú ng ta cầ n giải bà i toá n Logaritm rờ i rạc .
Ở đây chúng ta sẽ xem xét hai thuật toán có thể áp d ụng để giải bài toán này , vớ i độ
phƣ́ c tạp và khả năng á p dụng khá c nhau.
Thuật toá n Shank
Thuật toá n nà y cò n có tên khá c là thuật toá n cân bằ ng thờ i gian – bộ nhớ (Time-
Memory Trade Off), có nghĩa là nếu chúng ta có đủ bộ nhớ thì có thể sƣ̉ dụng bộ nhớ đó
để làm giảm thời gian thực hiện của thuật toán xuống.
Input: số nguyên tố p, phầ n tƣ̉ nguyên thủy a của *
pZ , số nguyên y.
Output: cầ n tìm x sao cho ax
mod p = y.
Thuật toán:
Gọi m = [(p-1)1/2
] (lấ y phầ n nguyên).
Bƣớ c 1: Tính amj
mod p vớ i 0 ≤ j ≤ m-1.
Bƣớ c 2: Sắp xếp cá c cặp (j, amj
mod p) theo amj
mod p và lƣu và o danh sá ch L1.
Bƣớ c 3: Tính ya-i
mod p vớ i 0 ≤ i ≤ m-1.
Bƣớ c 4: Sắp xếp cá c cặp (i, ya-i
mod p) theo amj
mod p và lƣu và o danh sá ch L2.
Bƣớ c 5: Tìm trong hai danh sách L1 và L2 xem có tồ n tại cặp (j, amj
mod p) và (i, ya-i
mod p) nào mà amj
mod p = ya-i
mod p (tọa độ thứ hai của hai cặp bằng nhau).
Bƣớ c 6: x = (mj + i) mod (p-1). Kế t quả nà y có thể kiểm chƣ́ ng tƣ̀ công thƣ́ c amj
mod
p = ya-i
mod p => amj + i
mod p = y mod p => x = (mj + i) mod (p-1).
Chƣơng IV: Các hệ mã mật khóa công khai
85
Độ phức tạp của thuật toán phụ thuộc vào m = [(p-1)1/2
], vớ i giá tri ̣của m, chúng ta
cầ n tính cá c phầ n tƣ̉ thuộc hai danh sá ch L 1 và L2, đều là các phép toán lũy thừa phụ
thuộc và o j và i , i và j lại phụ thuộc và o m nên có thể nhận thấ y là thuật toá n nà y chỉ có
thể á p dụng trong nhƣ̃ng trƣờ ng hợp mà p nhỏ.
Thuật toán Pohlig-Hellman
Có những trƣờng hợp đặc biệt mà bài toán Logarithm rời rạc có thể giải quyết với
độ phƣ́ c tạp nhỏ hơn O(p1/2
), chẳng hạn nhƣ khi p – 1 chỉ có các ƣớc nguyên tố nhỏ. Một
thuật toá n là m việc vớ i cá c trƣờ n g hợp nhƣ vậy đã đƣợc Pohlig và Hellman đƣa ra và o
năm 1978.
Giả sử p – 1 = 2n
.
Gọi a là phần tử nguyên thủy của *
pZ , p là một số lẻ và a (p-1)/2
mod p = -1. Gọi m là
số nguyên thuộc khoảng [0, p-2] mà chúng ta cầ n tìm để y = am
mod p. Giả sử m đƣợc
biểu diễn thà nh dạng nhi ̣phân m = m0 + 2m1 + 4m2 + … + 2n-1
mn-1. Khi đó :
2 1 0
0 1 2 1
1 1 1 1
02 2 ... 22 2 2 2
0
1 0
( ) ( )
1 1
nÕu m
nÕu m
n
n
p p p p
m
m m m mm
y a a a


   
   

    
 
Việc tính y(p-1)/2
mấ t nhiều nhấ t 2[log2p] bƣớ c và sẽ cho ta m 0. Khi xá c đi ̣nh đƣợc y 1
= ya-m
0, ta lặp lại thao tá c tƣơng tƣ̣ để tính m1:
2 1
1 2 1
1 1 1
12 ... 24 2 2
1
1
1 0
( )
1 1
nÕu m
nÕu m
n
n
p p p
m
m m m
c a a


  
  

   
 
Quá trình tính toán cứ thể tiếp diễn cho tới khi chúng ta tìm đƣợc m i. Độ phức tạp
của thuật toán là: n(2[log2p] + 2) ~ O((log2p)2
).
3.4. Các hệ mã mật dựa trên cá c đƣờ ng cong Elliptic
Hầ u hết cá c sản phẩm và cá c chuẩn sƣ̉ dụng cá c hệ mã khó a công khai để mã hó a
và chữ ký điện tử hiện nay đều sử dụng hệ mã RSA . Tuy nhiên vớ i sƣ̣ phá t triển của
ngành thám mã và năng lực ngày càng tăng nhanh chóng của các hệ thống máy tính , độ
dài khóa để đảm bảo an toàn cho hệ mã RSA cũng ngày càng tăng nhanh chóng , điề u
này làm giảm đáng kể hiệu năng của các hệ thống sử dụng hệ mã RSA , đặc biệt là vớ i
các ứng dụng thƣơng mại điện tử trực tuyến hay các hệ thống realtime đòi hỏi thời gian
xƣ̉ lý nhanh chó ng . Gầ n đây một hệ mã mớ i đã xuấ t hiện và có khả năng thay thế cho
RSA, đó là cá c hệ mã khó a công khai dƣ̣a trên c ác đƣờng cong Elliptic – ECC (Elliptic
Curve Cryptography).
Điểm hấ p dẫn nhấ t của cá c hệ mã dƣ̣a trên cá c đƣờ ng cong Elliptic là nó cho
phép đạt đƣợc tính an toàn tƣơng đƣơng với RSA trong khi kích thƣớc khóa sử dụng lại
nhỏ hơn rấ t nhiề u, làm giảm số phép tính sử dụng khi mã hóa, giải mã và do đó đạt đƣợc
hiệu năng và tố c độ cầ n thiế t. Trên lý thuyế t tính an toà n của ECC không cao bằ ng so vớ i
RSA và cũng khó giải thích một cá ch dễ hiểu hơn so vớ i RSA hay Diffie -Hellman. Cơ sở
toán học đầy đủ của các hệ mã dựa trên đƣờng cong Elliptic vƣợt ra ngoài phạm vi của
tài liệu này , trong phầ n nà y chú ng ta sẽ chỉ xem xét cá c vấ n đề cơ bản của cá c đƣờ ng
cong Elliptic và các hệ mã ECC.
Chƣơng IV: Các hệ mã mật khóa công khai
86
3.4.1. Nhóm Abel
Nhóm Abel G, thƣờ ng đƣợc ký hiệu là {G, •} là một tập hợp với một phép toán hai
ngôi ký hiệu là •, kế t qủa thƣ̣c hiện của phé p toá n vớ i hai phầ n tƣ̉ a , b  G, ký hiệu là (a •
b) cũng là một phầ n tƣ̉ thuộc G, tính chất này gọi là đóng đối với tập G. Đối với phép toán
• cá c mệnh đề sau đều thỏa mãn:
(A1):  a, b  G thì (a • b) G, tính đóng (Closure)
(A2):  a, b, c  G thì a • (b • c) = (a • b) • c, tính kết hợp (Associate)
(A3): Tồ n tại e  G: e • a = a • e = a  a  G, e đƣợc gọi là phầ n tƣ̉ đơn vi ̣của tập
G.
(A4):  a  G, luôn  a‟  G: a • a‟ = a‟ • a = e, a‟ là phần tử nghịch đảo của a.
(A5):  a, b  G: a • b = b • a, tính giao hoán (Commutative).
Rấ t nhiề u cá c hệ mã khó a công khai dƣ̣a trên cá c nhó m Abel. Chẳng hạn, giao thƣ́ c
trao đổi khó a Diffie -Hellman liên quan tớ i việc nhân cá c cặp số nguyên khá c không theo
modulo q (nguyên tố ). Các khóa đƣợc sinh ra bởi phép tính lũy thƣ̀ a trên nhó m.
Đối với các hệ mã ECC, phép toán cộng trên các đƣờng cong Elliptic đƣợc sử dụng
là phép toán cơ bản. Phép nhân đƣợc định nghĩa là sự lặp lại của nhiều phép cộng : a x k
= (a + a + … + a). Việc thá m mã liên quan tới việc xác định giá trị của k với các thông tin
công khai là a và (a x k).
Một đƣờ ng cong Elliptic là một phƣơng trình vớ i hai biế n và cá c hệ số . Các đƣờng
cong sƣ̉ dụng cho cá c hệ mã mật có cá c biến và cá c hệ thố ng là cá c phầ n tƣ̉ thuộc về
một trƣờ ng hƣ̃u hạn, điề u nà y tạo thà nh một nhó m Abel . Trƣớ c hế t chú ng ta sẽ xem xét
các đƣờng cong Elliptic trên trƣờng số thực.
3.4.2. Các đƣờng cong Elliptic trên trƣờ ng số thƣ̣c
Các đƣờn g cong Elliptic không phải là cá c đƣờ ng Ellipse . Tên gọi đƣờ ng cong
Elliptic đƣợc đặt vì loại đƣờ ng cong nà y đƣợc mô tả bở i cá c phƣơng trình bậc ba , tƣơng
tƣ̣ nhƣ cá c phƣơng trình đƣợc dù ng để tính chu vi của một Ellipse . Ở dạng chung nhấ t
phƣơng trình bậc 3 biểu diễn một đƣờ ng cong Elliptic có dạng:
y2
+ axy + by = x3
+ cx2
+ dx + e.
Trong đó a, b, c, d, e là cá c số thƣ̣c , x và y là cá c biế n thuộc trƣờ ng số thƣ̣c . Vớ i
mục đích để hiểu về các hệ mã EC C chú ng ta chỉ xét cá c dạng đƣờ ng cong Elliptic có
dạng:
y2
= x3
+ ax + y (phƣơng trình 1)
Các phƣơng trình này đƣợc gọi là các phƣơng trình bậc ba , trên cá c đƣờ ng cong
Elliptic chú ng ta đi ̣nh nghĩa một điểm đặc biệt gọi là điể m O hay điểm tại vô cù ng (point at
infinity). Để vẽ đƣờ ng cong Elliptic chú ng ta cầ n tính cá c giá tri ̣theo phƣơng trình:
3
y x ax b  
Vớ i mỗi giá tri ̣cụ thể của a và b , sẽ cho chúng ta hai giá trị của y (một âm và một
dƣơng) tƣơng ƣ́ ng vớ i một giá tri ̣của x , các đƣờng cong dạng này luôn đối xứng qua
đƣờ ng thẳng y = 0. Ví dụ về hình ảnh của một đƣờng cong Elliptic:
Chƣơng IV: Các hệ mã mật khóa công khai
87
Hình 4.4: Các đƣờng cong Elliptic trên trƣờng số thực
Chúng ta xem xét tập điểm E (a, b) chƣ́ a tấ t cả các điểm (x, y) thỏa mãn phƣơng
trình 1, cùng với điểm O. Sƣ̉ dụng cá c cặp (a, b) khác nhau chúng ta có các tập E (a, b)
khác nhau. Sƣ̉ dụng ký hiệu nà y ta có hình vẽ minh họa trên là biểu diễn của hai tập hợp
E(1, 0) và E(1, 1) tƣơng ƣ́ ng.
3.4.3. Mô tả hình học củ a phé p cộng trên cá c đƣờ ng cong Elliptic
Vớ i mỗi cặp (a, b) cụ thể chúng ta có thể thành lập một nhóm trên tập E (a, b) vớ i
các điều kiện sau:
3 2
4 27 0a b  (điề u kiện 1).
Chƣơng IV: Các hệ mã mật khóa công khai
88
Vớ i điề u kiện bổ sung nà y ta đi ̣nh nghĩa phé p cộng trên đƣờ ng cong Elliptic , mô tả
về mặt hình học nhƣ sau: nế u ba điểm trên một đƣờ ng cong Elliptic tạo thà nh một đƣờ ng
thẳng thì tổng của chúng bằng O. Vớ i đi ̣nh nghĩa nà y cá c luật của phé p cộng trên đƣờ ng
cong Elliptic nhƣ sau:
1. O là phần tử trung hòa của phép cộng.  P  E(a, b): P + O= P. Trong cá c
mệnh đề sau chú ng ta giả sƣ̉ P, Q ≠ O.
2. P = (x, y) thì phầ n tƣ̉ đố i của P, ký hiệu là P, sẽ là (x, -y) và P + (P) = P P =
O. P và P nằm trên một đƣờ ng thẳng đƣ́ ng
3. Để cộng hai điểm P và Q không có cù ng hoà ng độ x , vẽ một đƣờng thẳng
nố i chú ng và tìm giao điểm R. Dễ dà ng nhận thấy chỉ có một điểm R nhƣ vậy, tổng của P
và Q là điểm đối xứng với R qua đƣờng thẳng y = 0.
4. Giao điểm của đƣờ ng thẳng nố i P vớ i đố i của P , tƣ́ c P, đƣợc xem nhƣ cắt
đƣờ ng cong tại điểm vô cƣ̣c và đó chính là O.
5. Để nhân đôi một điểm Q, ta vẽ một tiế p tuyế n tại Q vớ i đƣờ ng cong và tìm
giao điểm S: Q + Q = 2Q = S.
Vớ i 5 điề u kiện nà y E(a, b) là một nhóm Abel.
3.4.4. Mô tả đại số về phép cộng
Trong phầ n nà y chú ng ta sẽ trình bà y một số kế t quả cho phé p tính toá n trên cá c
đƣờ ng cong Elliptic. Vớ i hai điểm phân biệt P = (xP, yP) và Q = (xQ, yQ) không phải là đố i
của nhau, độ dố c của đƣờ ng nố i l giƣ̃a chú ng là Ä = (yQ, yP). Có chính xác một điểm
khác mà l giao với đƣờn g cong, và đó chính là đối của tổng giữa P và Q . Sau một số
phép toán đại số chúng ta có thể tính ra R = P + Q nhƣ sau:
2
R P Qx y x   
( )R P P Ry y x y    
Phép toán nhân đôi đối với P đƣợc tính nhƣ sau:
2
23
( ) 2
2
P
R P
P
x a
x x
y

 
2
3
( )( )
2
P
R P R P
P
x a
y x x y
y

  
3.4.5. Các đƣờng cong Elliptic trên ZP
Các hệ mã ECC sử dụng các đƣờng cong Elliptic với các biến và các hệ số giới hạn
thuộc về một trƣờ ng hƣ̃u hạn . Có hai họ các đƣờng cong Elliptic có thể sử dụng với các
hệ mã ECC: các đƣờng cong nguyên tố trên ZP và các đƣờng cong nhị phân trên GF(2m
).
Một đƣờ ng cong nguyên tố trên Z P, chúng ta sử dụng phƣơng trình bậc ba mà các biến
và các hệ số của nó đều là các giá trị nguyên nằm từ 0 tớ i p-1 và các phép tính đƣợc
thƣ̣c hiện theo modulo P . Trên đƣờ ng cong nhi ̣phân, các biến và các hệ số là các giá trị
trên GF(2n
). và các tính toán đƣợc thực hiện trên GF (2n
). Các nghiên cứu về lý thuyết đã
cho thấ y cá c đƣờ ng cong nguyên tố là phù hợp nhấ t cho cá c ƣ́ ng dụng phầ n mề m vì
nhƣ̃ng phƣ́ c tạp trong tính toá n đố i vớ i cá c đƣờ ng cong nhi ̣phân , nhƣng đố i vớ i cá c ƣ́ ng
dụng phần cứng thì việc sử dụng các đƣờng cong nhi ̣phân lại tố t hơn vì cơ chế là m việc
của các mạch, các con chíp rất phù hợp với các tính toán trên trƣờng nhị phân.
Chƣơng IV: Các hệ mã mật khóa công khai
89
Vớ i cá c đƣờ ng cong Elliptic trên Z P chúng ta định nghĩa lại phƣơng trình biểu diễn
nhƣ sau:
y2
mod p = (x3
+ ax + y) mod p. (phƣơng trình 2)
Chẳng hạn cá c giá tri ̣a = 1, b = 1, x = 9, y = 9, y = 7, p = 23 thỏa mãn phƣơng trình
trên.
Các giá trị hệ số a, b và cá c biế n số x , y đều thuộc ZP. Tập EP(a, b) gồ m tấ t cả cá c
cặp (x, y) thỏa mãn phƣơng trình phƣơng trình 2.
Ví dụ với p = 23, a = b = 1, ta có tập E23(1, 1):
(0, 1) (6, 4) (12, 19)
(0, 22) (6, 19) (13, 7)
(1, 7) (7, 11) (13, 16)
(1, 16) (7, 12) (17, 3)
(3, 10) (9, 7) (17, 20)
(3, 13) (9, 16) (18, 3)
(4, 0) (11, 3) (18, 20)
(5, 4) (11, 20) (19, 5)
(5, 19) (12, 4) (19, 18)
Bảng 4.2: Biểu diễn của tập E23(1, 1)
Chƣơng IV: Các hệ mã mật khóa công khai
90
Các qui tắc về phép cộng cũng đƣợc định nghĩa tƣơng tự đối với các đƣờng cong
Elliptic nguyên tố :
Điều kiện: (4a3
+ 27b2
) mod p ≠ 0.
1. P + O = P
2. Nế u P = (xP, yP) thì P +(xP, yP) = O, điểm (xP, yP) đƣợc gọi là đố i của P , ký
hiệu là P. Chẳng hạn trên E23(1, 1), P = (13, 7) ta có P = (13, 7) nhƣng 7 mod 23 = 16 nên
P = (13, 16), cũng thuộc E23(1, 1).
3. Vớ i hai điểm phân biệt P = (xP, yP) và Q = (xQ, yQ), R = P + Q = (xR, yR)
đƣợc đi ̣nh nghĩa nhƣ sau:
2
( )mod
( ( ) )mod
R P Q
R P R P
x x x p
y x x y p


  
  
Trong đó:
2
( )mod ,( )
3
( )mod ,() )
2
Q P
Q P
P
P
y y
p P Q
x x
x a
p p Q
y




 
 

4. Phép nhân đƣợc định nghĩa là tổng của các phép cộng , chẳng hạn 4P = P
+ P + P + P. Ví dụ với P = (3, 10) và Q = (9, 7) trên E23(1, 1) ta có :
7 10 3 1
( )mod23 ( )mod23 ( )mod23 11
9 3 6 2

  
   

nên
xR = (112
- 3 - 9 ) mod 23 = 17
yR = (11(3 - 17) - 10) mod 23 = 20. Nên P + Q = (17, 20).
Để tìm 2P ta tính:
2
3(3 ) 1 5 1
( )mod 23 ( )mod 23 ( )mod 23 6
2 10 20 4


   

Chú ý là để thực hiện phép tính cuối cùng ta lấy phần tử nghịch đảo của 4 trên Z23
sau đó nhân vớ i tƣ̉ số là 1.
xR=(62
(3 - 7) - 10) mod 23 = 30 mod 23 = 7
yR = (6(3 - 7) - 10) mod 23 = 34 mod 23 = 12
Kế t luận: 2P = (7, 12).
Để xá c đi ̣nh độ an toà n của cá c hệ mã mật dƣ̣a trên cá c đƣờ ng cong Elliptic , ngƣờ i
ta thƣờ ng dƣ̣a trên một con số là số phầ n điểm trên một nhó m Abel hƣ̃u hạn , gọi là N ,
đƣợc đi ̣nh nghĩa trên một đƣờ ng cong Elliptic . Trong trƣờ ng hợp nhó m hƣ̃u hạn EP(a, b),
ta có cá c cận của N là :
1 2 1 2p p N p p      , con số nà y xấ p xỉ bằ ng số phầ n tƣ̉ của ZP (bằ ng p).
3.4.6. Các đƣờng cong Elliptic dựa trên các trƣờng hữu hạn GF(2m
)
Số phầ n tƣ̉ của trƣờ ng hƣ̃u hạn GF (2m
) là 2m
, các phép toán đƣợc trang bị trên
GF(2m
) là phép toán cộng và phép toán nhân đƣợc thực hiện với các đa thức . Đối với các
đƣờ ng cong Elliptic dƣ̣a trên GF (2m
), chúng ta sử dụng một phƣơng trình bậc ba với các
biế n và cá c tham số có giá tri ̣thuộc GF (2m
), các phép tính đƣợc thực hiện tuân theo các
phép toán trên GF(2m
).
1. Phƣơng trình biểu diễn
Chƣơng IV: Các hệ mã mật khóa công khai
91
So vớ i cá c hệ mã mật dƣ̣a trên cá c đƣờ ng cong trên Z P, dạng biểu diễn của các hệ
mã dựa trên GF(2m
) tƣơng đố i khá c:
y2
+ xy = x3
+ ax2
+ b (phƣơng trình 3)
Trong đó cá c biến x, y và cá c hệ số a, b là cá c phầ n tƣ̉ của GF(2m
) và các phép tính
toán đƣợc thực hiện tuân theo các qui tắc trên GF(2m
).
Chúng ta ký hiệu E2
m
(a, b) là tất cả các cặp số nguyên (x, y) thỏa mãn phƣơng trình
phƣơng trình 3 và điểm vô cùng O.
Ví dụ: chúng ta có thể sử dụng GF(24
) vớ i đa thƣ́ c bấ t khả qui f(x) = x4
+ x + 1. Phầ n
tƣ̉ sinh của GF(24
) là g thỏa mãn f(g) = 0, g4
= g + 1, hay ở dạng nhi ̣phân là 0010. Chúng
ta có bảng lũy thƣ̀ a của g nhƣ sau:
g0 = 0001 g4 = 0011 g8 = 0101 g12 = 1111
g1 = 0010 g5 = 0110 g9 = 1010 g13 = 1101
g2 = 0100 g6 = 1100 g10 = 0111 g14 = 1001
g3 = 1000 g7 = 1011 g11 = 1110 g15 = 0001
Chẳng hạn g5
= g4
g = (g+1)g = g2
+ g = 0110.
Xét đƣờng cong Elliptic y 2
+ xy = x3
+ g4
x2
+ 1, trong trƣờ ng hợp nà y a = g4
và b =
g0
= 1. Một điểm nằ m trên đƣờ ng cong là (g5
, g3
):
(g3
)2
+ (g5
)(g3
) = (g5
)3
+ (g4
)(g5
)2
+ 1
 g6
+ g8
= g15
+ g14
+ 1
 1100 + 0101 = 0001 + 1001 + 0001
 1001 = 1001
Bảng sau là các điểm trên E2
4
(g4
, 1):
(0, 1) (g5
, g3
) (g9
, g13
)
(1, g6
) (g5
, g11
) (g10
, g)
(1, g13
) g6
, g8
) (g10
, g8
)
(g3
, g8
) (g6
, g14
) (g12
,0)
(g3
, g13
) (g9
, g10
) (g12
, g12
)
Hình biểu diễn tƣơng đƣơng:
Chƣơng IV: Các hệ mã mật khóa công khai
92
Hình 4.5: Hình biểu diễn E2
4
(g4
, 1)
Một nhó m Abel có thể đi ̣nh nghĩa dƣ̣a trên E2
m
(a, b) vớ i điề u kiện b≠0. Các luật thực
hiện vớ i phé p cộng,  a, b E2
m
(a, b):
1. P + O = P
2. Nế u P = (xP, yP) thì P + (xP, xP + yP) = O. Điểm (xP, xP + yP) là điểm đối của
P, ký hiệu là P.
3. Nế u P = (xP, yP) và Q = (xQ, yQ) và P≠Q, P≠Q thì R = P + Q = (xR, yR) đƣợc
xác định bằng các công thức sau:
2
( )
R
R
P Q
P R R P
x x x a
y x x x y a
 

    
    
Trong đó:
Q P
Q P
y y
x x




4. Nế u P = (xP, yP) thì R = 2P = (xR, yR) đƣợc xá c đi ̣nh bằ ng cá c công thƣ́ c
sau:
2
2
( 1)
R
R P R
x a
y x x
 

  
  
Trong đó:
P
P
P
y
x
x
  
Chƣơng IV: Các hệ mã mật khóa công khai
93
3.4.7. Hệ mã mật dƣ̣a trên các đƣờ ng cong Elliptic
Phép toán cộng trên đƣờng cong Elliptic tƣ ơng ƣ́ ng vớ i phé p nhân theo modulo
trong hệ mã RSA , còn phép toán nhân (cộng nhiều lầ n ) trên đƣờ ng cong Elliptic tƣơng
ứng với phép lũy thừa theo modulo trong hệ mã RSA . Tƣơng tƣ̣ nhƣ bà i toá n cơ sở của
hệ mã RSA là bà i toá n phân tích ra dạng thừa số nguyên tố của một số nguyên lớn , các
hệ mã dƣ̣a trên cá c đƣờ ng cong Elliptic cũng có cá c bà i toá n cơ sở là một bà i toá n khó
giải, gọi là bài toán Logarithm trên đƣờng cong Elliptic:
Xét phƣơng trình Q = kP trong đó P, Q  EP(a, b) và k < p. Việc tính Q nế u biết P và
k là một bà i toá n dễ (thƣ̣c hiện theo cá c công thƣ́ c). Nhƣng việc xá c đi ̣nh k vớ i giá tri ̣P, Q
cho trƣớ c lại là bà i toá n khó .
Chúng ta xem xét ví dụ (Certicom Website www.certicom.com): E23(9, 17) đƣợc xá c
đi ̣nh bở i phƣơng trình y2
mod 23 = (x3
+ 9x + 17) mod 23.
Vớ i Q = (4, 5) và P = (16, 5) thì k thỏa mãn Q = kP sẽ bằ ng bao nhiêu ? Phƣơng
pháp đơn giản nhất là nhân P lên nhiề u lầ n cho tớ i khi bằng Q:
P = (16, 5), 2P = (20, 20), 3P = P = (16, 5); 2P = (20, 20); 3P = (14, 14); 4P = (19,
20); 5P = (13, 10); 6P = (7, 3); 7P = (8, 7); 8P (12, 17); 9P = (4, 5).
Nhƣ vậy k = 9. Trên thƣ̣c tế cá c hệ mã sẽ đảm bảo giá trị k là đủ lớn để phƣơng
pháp vét cạn nhƣ trên là không thể thực hiện đƣợc.
3.4.8. Phƣơng phá p trao đổ i khó a Diffie-Hellman dƣ̣a trên các đƣờ ng cong Elliptic
Ban đầ u ngƣờ i ta chọn một số nguyên lớ n q , có thể là một số nguyên tố p hay có
dạng 2m
tƣơng ƣ́ ng vớ i cá c phƣơng trình biểu diễn và cá c tham số a , b. Việc lƣ̣a chọn
này cho chúng ta tập hợp Eq(a, b). Tiế p theo chọn một điểm G = (x1, y1)  EP(a, b) có bậc
n rấ t lớ n, bậc n của điểm G là số nguyên nhỏ nhấ t thỏa mãn nG = O. Eq(a, b) và G là các
tham số công khai cho hệ mã mật dƣ̣a trên đƣờ ng cong Elliptic tƣơng ƣ́ ng vớ i cá c tham
số p, a, b.
Phƣơng phá p trao đổi khó a giƣ̃a hai ngƣờ i dù ng A và B có thể thƣ̣c hiện nhƣ sau:
1. A chọn một số nguyên nA nhỏ hơn n. Đó chính là khó a riêng của A. Sau đó
sinh khó a công khai PA = nA x G, khóa này là một điểm trên Eq(a, b).
2. Tƣơng tƣ̣ B cũng chọn một khó a riêng nB và tính khóa công khai PB.
3. A sinh một khó a bí mật K = nA x PB. B sinh khó a bí mật K = nB x PA.
Dễ dà ng kiểm chƣ́ ng cá c khó a bí mật của A và B tính đƣợc đề u bằ ng nhau : nA x PB
= nA x (nB x G) = nB x (nA x G) = nB x PA.
Hình minh họa các bƣớc:
Chƣơng IV: Các hệ mã mật khóa công khai
94
Hình 4.6: Phƣơng phá p trao đổi khó a Diffie-Hellman dƣ̣a trên ECC
Để tấ n công phƣơng phá p trao đổi khó a trên , kẻ tấn công cần phải tính đƣợc giá trị
k vớ i cá c giá tri ̣công khai là G và kG, và đây chính là bài toán Logarithm trên đƣờng cong
Elliptic, một bà i toá n khó .
Ví dụ: p = 211, E211(0, 4) tƣơng ƣ́ ng vớ i phƣơng trình biểu diễn y 2
= x3
+ 4, ta chọn
G = (2, 2). Do 240G = O nên n = 240. A chọn khó a riêng là n A = 121, khóa công khai
tƣơng ƣ́ ng của A sẽ là PA = 121(2, 2) = (115, 48). Khóa riêng của B là nB = 203 nên khó a
công khai cù a B là P B = 203(2, 2) = ( 130, 203). Khóa bí mật (chia sẻ ) giƣ̃a A và B là
121(130, 203) = 203(115, 48) = (161, 69).
3.4.9. Thuật toá n mã hó a và giả i mã
Có nhiều cách mã hóa/giải mã đã đƣợc nghiên cứu với các hệ mã trên các đƣờng
cong Elliptic, ở đây chúng ta sẽ xem xét cách đơn giản nhất . Thuật toá n mã hó a ban đầ u
sẽ thực hiện phép biến đổi tiền xử lý từ input là một bản rõ m thành dạng một điểm P m.
Điểm Pm sẽ đƣợc mã hóa thành bản mã và sau đó giải mã . Thƣ̣c chấ t việc tiề n xƣ̉ lý nà y
không đơn giản vì không phải tấ t cả cá c tọa độ có dạng (x, y) đều thuộc E P(a, b). Có
Chƣơng IV: Các hệ mã mật khóa công khai
95
nhiề u cá ch khá c nhau cho việc tiề n xƣ̉ lý nà y , chúng ta không bàn kỹ tới chúng ở đây
nhƣng thƣ̣c tế là có một và i cá ch dễ hiểu để thƣ̣c hiện việc đó .
Giố ng nhƣ đố i vớ i hệ trao đổi khó a , chúng ta cần một điểm G và một nhóm Elliptic
Eq(a, b) làm tham s ố. Mỗi ngƣờ i dù ng A lƣ̣a chọn một khó a riêng n A và sinh một khóa
công khai PA = nA x G.
Để mã hó a một thông điệp P m để gửi tới cho B , A sẽ chọn một số nguyên dƣơng
ngẫu nhiên k và sinh bản mã Cm gồ m một cặp điểm:
Cm = {kG, Pm + kPB}.
Chú ý là ở đây A sử dụng khóa công khai của B . Để giải mã bản mã , B sẽ nhân
điểm thƣ́ nhấ t vớ i khó a bí mật của B và lấ y kế t quả nhận đƣợc trƣ̀ đi điểm thƣ́ hai:
Pm + kPB nB(kG) = Pm + k(nBG) nB(kG) = Pm.
A đã che đi giá trị của Pm bằng cá ch cộng kPB vào Pm. Chỉ có duy nhất A biết giá trị
k, nên thậm chí biế t khó a công khai P B, không ai có thể loại bỏ mặt nạ kP B để tìm ra Pm.
Tuy nhiên giá tri ̣của C m cũng gồm một đầu mối để B (ngƣờ i duy nhấ t giƣ̃ khó a riêng n B)
có thể dựa vào đầu mối đó mà tìm ra Pm.
Ví dụ: p = 751, EP(1, 188) tƣơng ƣ́ ng vớ i phƣơng trình y 2
= x3
+ x + 188, G = (0,
376). Giả sử A muốn gửi một thông điệp tƣơng ứng với Pm = (562, 201) và A lựa chọn k =
386, khóa công khai của B là PB = (201, 5). Chúng ta có 386(0, 376) = (676, 558) và (562,
201) + 386(201, 5) = (385, 328). Bản mã sẽ là Cm = {(676, 558), (385, 328)}.
3.4.10. Độ an toàn của các hệ mã mật dựa trên các đƣờng cong Elliptic
Độ an toàn của các hệ mã ECC phụ thuộc vào việc xác định đƣợc giá trị của k dựa
trên cá c giá tri ̣kP và P. Bài toán này đƣợc gọi là bài toán Logarithm trên các đƣờng cong
Elliptic. Thuật toá n nhanh nhấ t để giải bà i toán này là thuật toán của Pollard . Bảng sau
cho chú ng ta sƣ̣ so sá nh tƣơng quan giƣ̃a cá c hệ mã:
Symmetric Scheme
(key size in bits)
ECC-Based Scheme
(size of n in bits)
RSA/DSA (modulus
size in bits)
56 112 512
80 160 1024
112 224 2048
128 256 3072
92 384 7680
256 512 15360
Nguồ n: Certicom
Bảng 4.3: Bảng so sánh các hệ mã ECC với hệ mã RSA
Chƣơng IV: Các hệ mã mật khóa công khai
96
Có thể thấy là so với RSA , các hệ mã ECC có ƣu thế hơn về độ dài khóa sử dụng ,
đặc biệt là khi chú ng ta sƣ̉ dụng cá c khó a có độ dà i nhỏ thì ECC cò n có ƣu thế về tố c độ
(số phé p tính) xƣ̉ lý trong mã hó a và giải mã.
4. Bài tập
Bài tập 4.1: Cho N = 1517. Hãy tính 131435
mod N.
Bài tập 4.2: Trong hệ mã RSA có N = p * q = 103 * (219
– 1) thì có thể sử dụng tối đa là
bao nhiêu gía trị của e để làm khóa mã hóa, giải thích.
Bài tập 4.3: Trong hệ mã RSA có N = p*q = 103 * 113 sẽ có bao nhiêu trƣờng hợp lộ bản
rõ.
Bài tập 4.4: Trong hệ chữ ký điện tử ElGamma có p = 231
– 1 khi ký lên một văn bản có
thể sử dụng tối đa bao nhiêu gía trị k, giải thích.
Bài tập 4.5: Cho hệ mã ElGamma có p = 31, a = 11 và x = 6. Để mã hóa M = 18 ngƣời ta
chọn k = 7. Hãy thực hiện tính toán và đƣa ra bản mã kết quả.
Bài tập 4.6: Cho hệ RSA có n = 1363, biết phi(n) = 1288 hãy mã hóa bản rõ M = 2007.
Bài tập 4.7: Tƣơng tự Câu 1 với n = 215629 và phi(n) = 214684 hãy giải mã bản mã M =
2007.
Bài tập 4.8: Giả sử có 4 tổ chức sử dụng 4 hệ mã RSA để truyền thông với nhau. Gọi N1,
N2, N3, N4 lần lƣợt là các tham số tƣơng ứng mà họ sử dụng và (Ni, Nj) = 1  i  j và i, j 
Z5/{0}. Cả bốn hệ RSA này đều có số mũ lập mã là e = 3. Một thông điệp m sau khi mã
hóa bằng 4 hệ mã trên nhận đƣợc 4 bản mã tƣơng ứng là C1, C2, C3, C4. Hãy tìm m.
Bài tập 4.9: Cho hệ mã Knapsack có A = {11, 15, 30, 60}, M = 150 và u = 77.
a) Hãy tìm khóa công khai KP, và khóa bí mật KS của hệ mã trên.
b) Để mã hóa các thông điệp viết bằng tiếng Anh ngƣời ta dùng một hàm chuyển
đổi từ các ký tự thành các xâu nhị phân nhƣ sau:
Ký tự Xâu bít Ký tự Xâu bít Ký tự Xâu bít Ký tự Xâu bít
A 00000 H 00111 O 01110 V 10101
B 00001 I 01000 P 01111 W 10110
C 00010 J 01001 Q 10000 X 10111
D 00011 K 01010 R 10001 Y 11000
E 00100 L 01011 S 10010 Z 11001
F 00101 M 01100 T 10011
G 00110 N 01101 U 10100
Khi đó ví dụ xâu ABCD sẽ đƣợc chuyển thành 00000 00001 00010 00011 và cắt
thành các xâu có độ dài 4 để thực hiện mã hóa. Kết quả thu đƣợc bản mã là một dãy các
số  ZM. Hãy thực hiện mã hóa xâu P = “ANTI”.
c) Giả sử bản mã thu đƣợc là C = <120, 105, 105, 0, 60, 75, 30, 22, 22, 30>. Hãy
thực hiện giải mã bản mã trên để thu đƣợc thông điệp ban đầu.
Bài tập 4.10: Cho hệ mã Knapsack có A = {7, 13, 31, 53}, M = 173 và u = 97.
a) Hãy tìm khóa công khai KP, và khóa bí mật KS của hệ mã trên.
Chƣơng IV: Các hệ mã mật khóa công khai
97
b) Để mã hóa các thông điệp viết bằng tiếng Anh ngƣời ta dùng một hàm chuyển
đổi từ các ký tự thành các xâu nhị phân nhƣ sau:
Ký tự Xâu bít Ký tự Xâu bít Ký tự Xâu bít Ký tự Xâu bít
A 00000 H 00111 O 01110 V 10101
B 00001 I 01000 P 01111 W 10110
C 00010 J 01001 Q 10000 X 10111
D 00011 K 01010 R 10001 Y 11000
E 00100 L 01011 S 10010 Z 11001
F 00101 M 01100 T 10011
G 00110 N 01101 U 10100
Khi đó ví dụ xâu ABCD sẽ đƣợc chuyển thành 00000 00001 00010 00011 và cắt
thành các xâu có độ dài 4 để thực hiện mã hóa. Kết quả thu đƣợc bản mã là một dãy các
số  ZM. Hãy thực hiện mã hóa xâu P = “AUNT”.
c) Giả sử bản mã thu đƣợc là C = < 67,160, 66, 66, 0, 116, 4, 111, 0, 17>. Hãy
thực hiện giải mã bản mã trên để thu đƣợc thông điệp ban đầu.
Bài tập 4.11: Cho hệ mã Knapsack có A = {2, 3, 7, 13, 29, 57}, M = 151 và u = 71.
a) Hãy tìm khóa công khai KP, và khóa bí mật KS của hệ mã trên.
b) Để mã hóa các thông điệp viết bằng tiếng Anh ngƣời ta dùng một hàm chuyển
đổi từ các ký tự thành các xâu nhị phân nhƣ sau:
Ký tự Xâu bít Ký tự Xâu bít Ký tự Xâu bít Ký tự Xâu bít
A 00000 H 00111 O 01110 V 10101
B 00001 I 01000 P 01111 W 10110
C 00010 J 01001 Q 10000 X 10111
D 00011 K 01010 R 10001 Y 11000
E 00100 L 01011 S 10010 Z 11001
F 00101 M 01100 T 10011
G 00110 N 01101 U 10100
Khi đó ví dụ xâu ABCDEF sẽ đƣợc chuyển thành 00000 00001 00010 00011
00100 00101 và cắt thành các xâu có độ dài 6 để thực hiện mã hóa. Kết quả thu đƣợc
bản mã là một dãy các số  ZM. Hãy thực hiện mã hóa xâu P = “ANSWER”.
c) Giả sử bản mã thu đƣợc là C = <44, 40, 121, 104, 0>. Hãy thực hiện giải mã
bản mã trên để thu đƣợc thông điệp ban đầu.
Bài tập 4.12: Cho hệ mã RSA có p = 31, q = 41, e = 271.
a) Hãy tìm khóa công khai KP, và khóa bí mật KS của hệ mã trên.
b) Để mã hóa các thông điệp đƣợc viết bằng tiếng Anh ngƣời ta dùng một hàm
chuyển đổi các ký tự thành các số thập phân có hai chữ số nhƣ sau:
Ký tự A B C D E F G H I J K L M
Mã hóa 00 01 02 03 04 05 06 07 08 09 10 11 12
Ký tự N O P Q R S T U V W X Y Z
Mã hóa 13 14 15 16 17 18 19 20 21 22 23 24 25
Chƣơng IV: Các hệ mã mật khóa công khai
98
Khi đó ví dụ xâu ABC sẽ đƣợc chuyển thành 00 01 02 và sau đó cắt thành các số
có 3 chữ số 000 (bằng 0) và 102 để mã hóa. Bản mã thu đƣợc là một tập các số  ZN.
Hãy thực hiện mã hóa xâu P = ”SERIUS”.
c) Giả sử bản mã thu đƣợc là C = <201, 793, 442, 18> hãy thực hiện giải mã để
tìm ra thông điệp bản rõ ban đầu.
Bài tập 4.13: Cho hệ mã RSA có p = 29, q = 43, e = 11.
a) Hãy tìm khóa công khai KP, và khóa bí mật KS của hệ mã trên.
b) Để mã hóa các thông điệp đƣợc viết bằng tiếng Anh ngƣời ta dùng một hàm
chuyển đổi các ký tự thành các số thập phân có hai chữ số nhƣ sau:
Ký tự A B C D E F G H I J K L M
Mã hóa 00 01 02 03 04 05 06 07 08 09 10 11 12
Ký tự N O P Q R S T U V W X Y Z
Mã hóa 13 14 15 16 17 18 19 20 21 22 23 24 25
Khi đó ví dụ xâu ABC sẽ đƣợc chuyển thành 00 01 02 và sau đó cắt thành các số
có 3 chữ số 000 (bằng 0) và 102 để mã hóa. Bản mã thu đƣợc là một tập các số  ZN.
Hãy thực hiện mã hóa xâu P = ”TAURUS”.
c) Giả sử bản mã thu đƣợc là C = <1, 169, 1206, 433> hãy thực hiện giải mã để
tìm ra thông điệp bản rõ ban đầu.
Bài tập 4.14: Cho hệ mã RSA có n = 1363, e = 57.
a) Hãy tìm khóa công khai KP, và khóa bí mật KS của hệ mã trên.
b) Giả sử bản rõ P = 102 hãy mã hóa và đƣa ra bản mã C.
c) Giả sử hệ mã trên đƣợc dùng làm hệ chữ ký điện tử, hãy tính chữ ký với thông
điệp M = 201.
Bài tập 4.15: Cho hệ mã ElGamma có p = 83, a = 5 là một phần tử nguyên thuỷ của ZP
*
,
x = 37.
a) Hãy tìm khóa công khai KP, và khóa bí mật KS của hệ mã trên.
b) Để mã hóa bản rõ P = 72 ngƣời ta chọn k = 23, hãy mã hóa và đƣa ra bản mã.
c) Hãy tìm tất cả các phần tử nguyên thuỷ của ZP
*
.
Bài tập 4.16: Cho hệ mã mật ElGamma có p = 1187, a = 79 là một phần tử nguyên thuỷ
của ZP
*
, x = 113.
a) Hãy tìm khóa công khai KP, và khóa bí mật KS của hệ mã trên.
b) Để mã hóa các thông điệp đƣợc viết bằng tiếng Anh ngƣời ta dùng một hàm
chuyển đổi các ký tự thành các số thập phân có hai chữ số nhƣ sau:
Ký tự A B C D E F G H I J K L M
Mã hóa 00 01 02 03 04 05 06 07 08 09 10 11 12
Ký tự N O P Q R S T U V W X Y Z
Mã hóa 13 14 15 16 17 18 19 20 21 22 23 24 25
Chƣơng IV: Các hệ mã mật khóa công khai
99
Khi đó ví dụ xâu ABC sẽ đƣợc chuyển thành 00 01 02 và sau đó cắt thành các số
có 3 chữ số 000 (bằng 0) và 102 để mã hóa. Bản mã thu đƣợc là một tập các cặp số (C1,
C2)  ZP. Hãy thực hiện mã hóa xâu m = ”TAURUS” với các giá trị 13 < k < 19.
c) Giả sử thu đƣợc bản mã là một tập các cặp (C1, C2) là <(358, 305), (1079,
283), (608, 925),(786, 391)>. Hãy giải mã và đƣa ra thông điệp ban đầu.
Bài tập 4.17: Cho bản mã nhận đƣợc bằng cá ch sƣ̉ dụng một hệ mã RSA nhƣ sau:
11437 6198 16611 2405 18636 2679 12205 24142 6375 2134
16611 2405 9529 7260 7834 15094 4667 24027 762 5878
5206 16683 5359 10888 4168 3536 23229 20351 15580 6704
7977 374 6525 4287 14402 527 12887 21628 11884 9402
15470 1339 10420 18051 23125 7747 135 22007 20049 9984
13199 15176 1379 8313 19574 7989 22869 406 10057 21758
3918 23991 14237 7989 3947 19529 15728 5601 3527 7200
7601 13282 21160 6291 15994 7785 8982 3045 6596 16796
4663 2405 20302 11929 17125 14533 21001 8351 11571 22082
11040 8687 6704 3330 5630 19650 13024
Khóa công khai có n = 24637 và e = 3.
a) Hãy xác định p, q và d.
b) Giải mã bản mã để nhận đƣợc bản rõ (là các số trên Z24637).
c) Chuyển bản rõ nhận đƣợc thà nh dạng văn bản tiếng Anh , biết rằ ng mỗi số
nguyên trên Z24637 biểu diễn một bộ 3 chƣ̃ cá i theo qui tắ c sau:
DOG 3 × 262
+ 14× 26 + 6 = 2398
CAT 2 × 262
+ 0× 26 + 19 = 1371
ZZZ 25 × 262
+ 25× 26 + 25 = 17575
Bài tập 3.18: Cho hệ mã ElGamal có p = 71 và a = 7.
a) Giả sử khóa công khai của B là YB = 3 và A chọn số ngẫu nhiên k = 2, hãy xác
đi ̣nh bản mã tƣơng ƣ́ ng vớ i bản mã M = 30.
b) Giả sử A chọn một giá trị ngẫu nhiên k khác và bản mã tƣơng ứng với M = 30
bây giờ là C = (59, C2). Hãy xác định C2?
Bài tập 3.19: Cho hệ mã dƣ̣a trên đƣờ ng cong Elliptic có cá c tham số là E 11(1, 6) và G =
(2, 7). Khóa bí mật của B là nB = 7.
a) Hãy xác định khóa công khai của B?
b) Giả sử cần mã hóa bản rõ P m = (10, 9) và số ngẫu nhiên k = 3. Hãy xác định
bản mã Cm.
c) Minh họa quá trình giải mã vớ i Cm nhận đƣợc ở phầ n b.
Sƣ̉ dụng một trong cá c ngôn ngƣ̃ lập trình C, C++, Java hoặc C# để làm các bài tập sau:
Chƣơng IV: Các hệ mã mật khóa công khai
100
Bài tập 3.20: Viế t chƣơng trình cà i đặt thuật toá n mã hó a và giải mã của hệ mã
Knapsack.
Bài tập 3.21: Viế t chƣơng trình cà i đặt thuật toá n mã hóa và giải mã của hệ mã RSA.
Bài tập 3.22: Viế t chƣơng trình cà i đặt thuật toá n mã hó a và giải mã của hệ mã El
Gammal.
Bài tập 3.23: Viế t chƣơng trình mã hó a và giải mã File vớ i thuật toá n mã hó a và giải mã
RSA.
Bài tập 3.24: Viế t chƣơng trình truyền file qua hệ thố ng mạng sƣ̉ dụng thuật toá n mã hó a
RSA.
Bài tập 3.25: Viế t chƣơng trình chia sẻ file trên mạng cục bộ sƣ̉ dụng hệ mã RSA.
Bài tập 3.26: Viế t chƣơng trình phân phố i khó a dƣ̣a trên hệ mã RSA.
Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm
101
CHƢƠNG V: CHƢ̃ KÝ ĐIỆN TƢ̉ VÀ HÀ M BĂM
1. Chƣ̃ ký điện tƣ̉
1.1. Khái niệm về chữ ký điện tử
Kể từ khi con ngƣời phát minh ra chữ viết, các chữ ký thƣờng luôn đƣợc sử dụng
hàng ngày, chẳng hạn nhƣ ký một biên nhận trên một bức thƣ nhận tiền từ ngân hàng, ký
hợp đồng hay một văn bản bất kỳ nào đó. Chữ ký viết tay thông thƣờng trên tài liệu
thƣờng đƣợc dùng để xác định ngƣời ký nó.
Sơ đồ chữ ký điện tử là một phƣơng pháp ký một văn bản hay lƣu bức điện dƣới
dạng điện tử. Chẳng hạn một bức điện có chữ ký đƣợc lƣu hành trên mạng máy tính.
Chữ ký điện tử từ khi ra đời đã có nhiều ứng dụng rộng rãi trong các giao dịch thƣơng
mại, từ việc xác minh chữ ký cho đến các thẻ tín dụng, các sơ đồ định danh và các sơ đồ
chia sẻ bí mật ... Sau đây, chúng ta sẽ tìm hiểu một số sơ đồ chữ ký quan trọng. Song
trƣớc hết, chúng ta sẽ thảo luận một vài điểm khác biệt cơ bản giữa chữ ký thông thƣờng
và chữ ký điện tử.
Đầu tiên là vấn đề ký một tài liệu. Với chữ ký thông thƣờng nó là một phần vật lý
của tài liệu. Tuy nhiên, một chữ ký điện tử không gắn theo kiểu vật lý vào bức điện nên
thuật toán đƣợc dùng phải là “không nhìn thấy” theo cách nào đó trên bức điện.
Thứ hai là vấn đề kiểm tra. Chữ ký thông thƣờng đƣợc kiểm tra bằng cách so sánh
nó với các chữ ký xác thực khác. Ví dụ, ai đó ký một tấm séc để mua hàng, ngƣời bán sẽ
so sánh chữ ký trên mảnh giấy đó với chữ ký nằm ở mặt sau thẻ tín dụng để kiểm tra.
Mặt khác, chữ ký số có thể kiểm tra bằng một thuật toán kiểm tra một cách công khai.
Nhƣ vậy, bất kỳ ai cũng có thể kiểm tra đƣợc chữ ký điện tử. Việc sử dụng một sơ đồ ký
an toàn có thể ngăn chặn đƣợc khả năng giả mạo.
Sự khác biệt cơ bản giữa chữ ký điện tử và chữ ký thông thƣờng là ở chỗ: một bản
copy tài liệu có chữ ký đƣợc đồng nhất với bản gốc. Nói cách khác, tài liệu có chữ ký trên
giấy thƣờng có thể khác biệt với bản gốc điều này để ngăn chặn một bức điện đƣợc ký
khỏi bị dùng lại. Ví dụ, nếu B ký một bức điện xác minh cho A rút 100$ từ tài khoản của
mình, anh ta chỉ muốn A có khả năng làm điều đó một lần. Vì thế, bản thân bức điện phải
chứa thông tin để khỏi bị dùng lại, chẳng hạn nhƣ dùng dịch vụ gán nhãn thời gian (Time
Stamping Service).
Một sơ đồ chữ ký điện tử thƣờng chứa hai thành phần: thuật toán ký sig() và thuật
toán xác minh ver(). B có thể ký một bức điện x dùng thuật toán ký an toàn (bí mật). Kết
quả chữ ký y = sig(x) nhận đƣợc có thể đƣợc kiểm tra bằng thuật toán xác minh công
khai ver(y). Khi cho trƣớc cặp (x, y), thuật toán xác minh cho giá tri TRUE hay FALSE tuỳ
thuộc vào việc chữ ký đƣợc xác thực nhƣ thế nào.
Vậy thế nào là chữ ký điện tử? Chúng ta có một số định nghĩa nhƣ sau:
 Là một định danh điện tử đƣợc tạo ra bởi máy tính đƣợc các tổ chức sử dụng
nhằm đạt đƣợc tính hiệu quả và có hiệu lực nhƣ là các chữ ký tay.
 Là một cơ chế xác thực hóa cho phép ngƣời tạo ra thông điệp đính kèm một mã
số vào thông điệp giống nhƣ là việc ký một chữ ký lên một văn bản bình
thƣờng.
Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm
102
Các chữ ký điện tử đƣợc sinh và sử dụng bởi các hệ chữ ký (sơ đồ) điện tử, dƣới
đây là định nghĩa một hệ chữ ký điện tử.
Định nghĩa:
Một sơ đồ chữ ký điện tử là bộ 5 (P, A, K, S, V) thoả mãn các điều kiện dưới
đây:
1) P là tập hữu hạn các bức điện (thông điệp, bản rõ) có thể.
2) A là tập hữu hạn các chữ ký có thể.
3) K là tập không gian khoá (tập hữu hạn các khoá có thể).
4) Với mỗi khoá K  K tồn tại một thuật toán ký sigK  S và một thuật toán xác
minh verK  V. Mỗi sigk: P → A và verK: P x A → {TRUE, FALSE} là những hàm sao cho
mỗi bức điện x  P và mỗi chữ ký y  A thoả mãn phương trình dưới đây:
Ver (x, y) =


 TRUE nếu y = sig(x)
FALSE nếu y ≠ sig(x). [5]
Với mỗi K  K, hàm sigK và verK là các hàm đa thức thời gian. Hàm verK sẽ là hàm
công khai còn hàm sigK là bí mật. Không thể dễ dàng tính toán để giả mạo chữ ký của B
trên bức điện x, nghĩa là với x cho trƣớc chỉ có B mới có thể tính đƣợc y để ver(x, y) =
TRUE. Một sơ đồ chữ ký không thể an toàn vô điều kiện vì một ngƣời C nào đó có thể
kiểm tra tất cả chữ số y trên bức điện x nhờ dùng thuật toán ver() công khai cho tới khi
anh ta tìm thấy chữ ký đúng. Vì thế, nếu có đủ thời gian, C luôn có thể giả mạo chữ ký
của B. Nhƣ vậy mục đích của chúng ta là tìm các sơ đồ chữ ký điện tử an toàn về mặt
tính toán.
Chú ý rằng ai đó có thể giả mạo chữ ký của B trên một bức điện “ngẫu
nhiên” x bằng cách tính x = eK(y) với y nào đó; khi đó y = sigK(x). Một biện pháp
xung quanh vấn đề khó khăn này là yêu cầu các bức điện chứa đủ phần dƣ để
chữ ký giả mạo kiểu này không phù hợp với toàn bộ nội dung của bức điện x trừ
một xác suất rất nhỏ. Có thể dùng các hàm Băm (hash function) nhƣ MD4, MD5
trong việc tính kết nối các sơ đồ chữ ký điện tử sẽ loại trừ phƣơng pháp giả mạo
này (sẽ trình bày trong các phần sau của tài liệu).
1.2. Hệ chữ ký RSA
Dựa vào ƣu điểm của hệ mã RSA, nếu thiết lập đƣợc sơ đồ chữ ký dựa trên bài
toán phân tích ra thừa số nguyên tố thì độ an toàn của chữ ký sẽ rất cao. Việc thiết lập sơ
đồ xác thực chữ ký RSA rất đơn giản, ta chỉ cần đảo ngƣợc hàm mã hoá và giải mã. Sau
đây là sơ đồ chữ ký RSA.
Cho n = p*q, trong đó p, q là các số nguyên tố. Đặt P = A = Zn và định nghĩa:
K = {(n, p, q, a, b): n=p*q, p và q là các số nguyên tố, ab ≡ 1 (mod  (n))}.
Các giá trị n và b là công khai; còn p, q, a là bí mật.
Với K = (n, p, q, a, b), ta xác định:
Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm
103
sigK(x) = xa
mod n
và
verK(x,y) = TRUE  x ≡ yb
(mod n) với x, y  Zn. [5]
Thông thƣờng, chữ ký đƣợc kết hợp với hàm mã hoá công khai. Giả sử A muốn gửi
một bức điện đã đƣợc mã hoá và đã đƣợc ký đến cho B. Với bản rõ x cho trƣớc, A sẽ
tính toán chữ ký của mình y = sigA(x) và sau đó mã hoá cả x và y sử dụng khoá công khai
eB của B, kết quả nhận đƣợc là z = eB(x, y). Bản mã z sẽ đƣợc gửi tới B, khi B nhận đƣợc
z, đầu tiên anh ta giải mã với hàm giải mã dB của mình để nhận đƣợc (x, y). Sau đó anh
ta dùng hàm xác minh công khai của A để kiểm tra xem verA(x,y) = TRUE hay không.
Song nếu đầu tiên A mã hoá x , rồi sau đó mới ký lên bản mã nhận đƣợc thì sao?
Khi đó, A sẽ tính:
y = sigA(eB(x))
A sẽ truyền cặp (z, y) tới B, B sẽ giải mã z và nhận đƣợc x, sau đó xác minh chữ ký
y trên x nhờ dùng verA. Một vấn đề nảy sinh nếu A truyền (x, y) kiểu này thì một ngƣời thứ
ba C có thể thay chữ ký y của A bằng chữ ký của chính mình:
y‟ = sigC(eB(x))
Chú ý rằng, C có thể ký lên bản mã eB(x) ngay cả khi anh ta không biết bản rõ x. Khi
đó nếu C truyền (z, y‟) đến B, chữ ký của C đƣợc B xác minh bằng verC và do đó, B cho
rằng bản rõ x xuất phát từ C. Do khó khăn này, hầu hết ngƣời sử dụng đƣợc khuyến nghị
“ký trƣớc khi mã”.
1.3. Hệ chữ ký ElGammal
Hệ chữ ký ElGammal đƣợc đƣa ra vào 1985. Một phiên bản sửa đổi hệ này đƣợc
Học viện Quốc gia tiêu chuẩn và kỹ thuật (NIST) đƣa ra nhƣ một chuẩn của chữ ký điện
tử. Hệ chữ ký ElGammal đƣợc thiết kế riêng biệt cho mục đích chữ ký, trái ngƣợc với
RSA thƣờng đƣợc sử dụng cho cả mục đích mã hoá công khai và chữ ký. Hệ chữ ký
ElGammal là không xác định, nghĩa là có rất nhiều giá trị chữ ký cho cùng một bức điện
cho trƣớc. Thuật toán xác minh phải có khả năng nhận bất kỳ giá trị chữ ký nào nhƣ là
việc xác thực. Sơ đồ chữ ký ElGammal đƣợc miêu tả nhƣ sau:
Cho p là một số nguyên tố như là bài toán logarit rời rạc trong Zp, α  Zp
*
là một
phần tử nguyên tử và P = Zp
*
, A = (Zp
*
)*Zp-1, và định nghĩa:
K = {(p, α, a, β) : β ≡ αa
(mod p)}
trong đó giá trị p, α và β là công khai, còn a là bí mật.
Với K = (p, α, a, β) và chọn một số ngẫu nhiên k  Zp-1
*
, định nghĩa:
sigK(x, k) = (, )
trong đó:  = αk
mod p
 = (x - a*)k-1
mod (p – 1).
Với x,   Zp
*
và   Zp-1, định nghĩa:
ver(x, , ) = TRUE  β

≡ αx
(mod p). [5]
Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm
104
Nếu chữ ký là đúng thì việc xác nhận thành công khi:
β

≡ αa
αk
(mod p)
≡ αx
(mod p).
trong đó: a + k ≡ x (mod p -1).
B sẽ tính toán chữ ký bằng việc sử dụng cả giá trị bí mật a (một phần của khoá) và
số bí mật ngẫu nhiên k (giá trị để ký bức điện). Việc xác minh có thể thực hiện đƣợc chỉ
với các thông tin đƣợc công khai:
Ví dụ:
Chúng ta chọn p = 467, α = 2, a = 127. Ta tính: β = αa
mod p = 2127
mod 467 = 132.
Bây giờ B muốn ký lên bức điện x = 100 và anh ta chọn một giá trị ngẫu nhiên k =
213 (chú ý là UCLN(213, 466) = 1 và 213-1
mod 466 = 431). Sau đó tính:
 = 2213
mod 467 = 29
 = (100 – 127*29)431 mod 466 = 51.
Bất cứ ai cũng có thể kiểm tra chữ ký này bằng cách tính:
13229
2951
≡ 189 (mod 467)
2100
≡ 189 (mod 467).
Giả sử kẻ thứ ba C muốn giả mạo chữ ký của B trên bức điện x mà không biết số bí
mật a. Nếu C chọn một giá trị  và cố gắng tìm , anh ta phải tính một hàm logarit rời rạc
logαx
-
. Mặt khác, nếu đầu tiên anh ta chọn  để cố gắng tìm  thì anh ta phải tính 

=
αx
(mod p). Cả hai việc này đều không thể thực hiện đƣợc.
Tuy nhiên có một lý thuyết mà C có thể ký lên một bức điện ngẫu nhiên bằng cách
chọn đồng thời ,  và x. Cho i, j là số nguyên với 0 ≤ i, j ≤ p - 2, và UCLN(j, p - 1) = 1. Sau
đó tính:
 = αi
βj
mod p
 = - j-1
(mod p-1)
x = - ij-1
(mod p-1).
Nhƣ vậy, ta xem (, ) là giá trị chữ ký cho bức điện x. Việc xác minh sẽ thực hiện
nhƣ sau:
β

≡ )(mod)(
1
pjji jiji 
 

≡ )(mod
1
p
jijiji
ij 
  
≡ )(mod
1
p
ji
ij 



≡ )(mod
1
pij


≡ αx
(mod p).
Ví dụ:
Nhƣ ví dụ trên, ta chọn p = 467, α = 2, β = 132. Kể thứ ba C sẽ chọn i = 99 và j =
179. Anh ta sẽ tính:
Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm
105
 = 299
132179
mod 467 = 117
 = -117*151 mod 466 = 41
x = 99*44 mod 466 = 331
Cặp giá trị (117, 41) là giá trị chữ ký cho bức điện 331. Việc xác minh đƣợc thực
hiện nhƣ sau:
132117
11741
≡ 303 (mod 467)
2331
≡ 303 (mod 467).
Một phƣơng pháp thứ hai có thể giả mạo chữ ký là sử dụng lại chữ ký của bức điện
trƣớc đó, nghĩa là với cặp (, ) là giá trị chữ ký của bức điện x, nó sẽ đƣợc C ký cho
nhiều bức điện khác. Cho h, i và j là các số nguyên, trong đó 0≤ i, j, h ≤ p-2 và UCLN(h -
j, p-1) = 1.
λ = h
αi
βj
mod p
μ = λ(h - j)-1
mod (p-1)
x‟ = λ(hx + i)(h - j)-1
mod (p-1).
Ta có thể kiểm tra: βλ
λμ
= αx‟
mod p. Và do đó, (λ, μ) là cặp giá trị chữ ký của bức
điện x‟.
Điều thứ ba là vấn đề sai lầm của ngƣời ký khi sử dụng cùng một giá trị k trong việc
ký hai bức điện khác nhau. Cho (, 1) là chữ ký trên bức điện x1 và (, 2) là chữ ký trên
bức điện x2. Việc kiểm tra sẽ thực hiện:
β
 1
≡ α 1x
(mod p)
β
 2
≡ α 2x
(mod p).
Do đó: )(mod2121
pxx 
 
 .
Đặt  = αk
, khi đó: x1 - x2 = k(1 - 2) (mod p-1).
Bây giờ đặt d = UCLN(1 - 2, p - 1). Vì d | (1 - 2) và d | (p - 1) nên nó cũng chia hết
cho (x1 - x2). Ta đặt tiếp:
x‟ =
d
x21x 
‟ =
d
21  
p‟ =
d
p 1
Cuối cùng, ta đƣợc: x‟ ≡ k‟ (mod p‟). Vì UCLN(‟, p‟) = 1 nên ta có:
 = (‟)-1
mod p‟
Nhƣ vậy, giá trị k sẽ đƣợc xác định nhƣ sau:
Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm
106
k = x‟ (mod p‟) = x‟ + ip‟ (mod p)
Với 0 ≤ i ≤ d-1, ta có thể tìm đƣợc giá trị k duy nhất bằng hàm kiểm tra:
 ≡ αk
mod p.
1.4. Chuẩn chữ ký điện tử (Digital Signature Standard)
1.4.1. Thuật toán chữ ký điện tử (Digital Signature Algorithm)
Tháng 8/1991, NIST đã đƣa ra thuật toán chữ ký điện tử (DSA) là cơ sở cho chuẩn
chữ ký điện tử. Đây là một biến thể của thuật toán ElGammal.
1) Chọn một số nguyên tố q với 2159
< q < 2160
.
2) Chọn t sao cho 0 ≤ t ≤ 8 và chọn một số nguyên tố p, trong đó 2511+64t
< p <
2512+64t
và q phải chia hết (p-1) (hay q là một ướ c nguyên tố củ a p-1).
3) Bây giờ, tạo ra một số α duy nhất cho q trong trường Zp
*
.
- Chọn một giá trị g  Zp
*
và tính α = g(p-1)/q
mod p.
- Nếu α = 1 thì quay lại bước trên. (chọn lại giá trị g cho phù hợp)
4) Chọn một số nguyên ngẫu nhiên a để 1 ≤ a ≤ q-1.
5) Tính y = αa
mod p.
6) Như vậy , khoá để ký là (p, q, α, y) được công khai và a là khoá bí mật.
1.4.2. Chuẩn chữ ký điện tử
Chuẩn chữ ký điện tử (DSS) đƣợc sửa đổi từ hệ chữ ký ElGammal. Nó đƣợc công
bố tại hội nghị Tiêu chuẩn xử lý thông tin Liên Bang (FIPS) vào 19/05/1994 và trở thành
chuẩn vào 01/12/1994. DSS sử dụng một khoá công khai để kiểm tra tính toàn vẹn của
dữ liệu nhận đƣợc và đồng nhất với dữ liệu của ngƣời gửi. DSS cũng có thể sử dụng bởi
ngƣời thứ ba để xác định tính xác thực của chữ ký và dữ liệu trong nó. Đầu tiên chúng ta
hãy tìm hiểu động cơ của sự thay đổi này, sau đó sẽ tìm hiểu thuật toán của DSS.
Trong rất nhiều trƣờng hợp, một bức điện có thể đƣợc mã hoá và giải mã một lần,
vì vậy nó đáp ứng cho việc sử dụng của bất kỳ hệ thống bảo mật nào đƣợc biết là an
toàn lúc bức điện đƣợc mã hoá. Nói cách khác, một bức điện đƣợc ký đảm nhiệm chức
năng nhƣ một văn bản hợp pháp, chẳng hạn nhƣ các bản hợp đồng, vì vậy nó cũng
giống nhƣ việc cần thiết để xác minh chữ ký sau rất nhiều năm bức điện đƣợc ký. Điều
này rất quan trọng cho việc phòng ngừa về độ an toàn của chữ ký đƣợc đƣa ra bởi một
hệ thống bảo mật. Vì hệ chữ ký ElGammal không đảm nhận đƣợc điều này, việc thực
hiện này cần một giá trị lớn modulo p. Tất nhiên p nên có ít nhất 512-bit, và nhiều ngƣời
cho rằng độ dài của p nên là 1024-bit nhằm chống lại việc giả mạo trong tƣơng lai.
Tuy nhiên, ngay cả một thuật toán modulo 512-bit dùng để ký cũng phải thực hiện
việc tính toán đến 1024-bit. Cho ứng dụng tiềm năng này, có rất nhiều card thông minh
đƣợc đƣa ra, nhằm thực hiện một chữ ký ngắn hơn nhƣ mong muốn. DSS đã sửa đổi hệ
chữ ký ElGammal cho phù hợp theo cách này một cách khéo léo, để mỗi 160-bit bức điện
đƣợc ký sử dụng một chữ ký 320-bit, nhƣng việc tính toán đƣợc thực hiện với 512-bit
modulo p. Cách này đƣợc thực hiện nhờ việc chia nhỏ Zp
*
thành các trƣờng có kích
thƣớc 2160
. Việc thay đổi này sẽ làm thay đổi giá trị :
Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm
107
 = (x + α)k-1
mod(p - 1).
Điều này cũng làm cho giá trị kiểm tra cũng thay đổi:
αx
β
≡ 
(mod p). (1.4.2.1)
Nếu UCLN(x + α, p - 1) = 1 thì sẽ tồn tại -1
mod (p - 1), do đó (6.1) sẽ biến đổi
thành:
11 

x
≡  (mod p). (1.4.2.2)
Đây chính là sự đổi mới của DSS. Chúng ta cho q là một số nguyên tố 160-bit sao
cho q | (p-1), và α là một số thứ q của 1 mod p, thì β và  cũng là số thứ q của 1 mod p.
Do đó α, β và  có thể đƣợc tối giản trong modulo p mà không ảnh hƣởng gì đến việc xác
minh chữ ký. Sơ đồ thuật toán nhƣ sau:
Cho p là một số nguyên tố 512-bit trong trường logarit rời rạc Zp; q là một số nguyên
tố 160-bit và q chia hết (p-1). Cho α  Zp
*
; P = Zp
*
, A = Zq*Zq, và định nghĩa:
K = {(p, q, α, a, β) : β ≡ αa
(mod p)}
trong đó giá trị p, q, α và β là công khai, còn a là bí mật.
Với K = (p, α, a, β) và chọn một số ngẫu nhiên k (1 ≤ k ≤ q-1), định nghĩa:
sigK(x, k) = (, )
trong đó:  = (αk
mod p) mod q
 = (x + a*)k-1
mod q.
Với x  Zp
*
và ,   Zq, việc xác minh được thực hiên bằng cách tính:
e1 = x-1
mod q
e2 = -1
mod q
ver(x, , ) = TRUE  ( 21 ee
 mod p) mod q = . [5]
Chú ý rằng, với DSS thì   0 (mod q) vì giá trị: -1
mod q cần cho việc xác minh chữ
ký (điều này cũng tƣơng tự nhƣ việc yêu cầu UCLN(, p-1) = 1 để (1.4.2.1) → (1.4.2.2)).
Khi B tính một giá trị  ≡ 0 (mod q) trong thuật toán ký, anh ta nên bỏ nó đi và chọn một số
ngẫu nhiên k mới.
Ví dụ:
Chúng ta chọn q = 101 và p = 78*q + 1 = 7879 và g = 3 là một nguyên tố trong
Z7879. Vì vậy , ta có thể tính:
α = 378
mod 7879 = 170.
Chọn a = 75, do đó: β = αa
mod 7879 = 4567.
Bây giờ, B muốn ký một bức điện x = 1234, anh ta chọn một số ngẫu nhiên k = 50.
Vì vậy :
k-1
mod 101 = 99.
Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm
108
Tiếp đó:  = (17050
mod 7879) mod 101 = 2518 mod 101 = 94
 = (1234 + 75*94)99 mod 101 = 97.
Cặp chữ ký (94, 97) cho bức điện 1234 đƣợc xác thƣc nhƣ sau:
-1
= 97-1
mod 101 = 25
e1 = 1234*25 mod 101 = 45
e2 = 94*25 mod 101 = 27
(17045
456727
mod 7879) mod 101 = 2518 mod 101 = 94.
Kể từ khi DSS đƣợc đề xuất vào năm 1991, đã có nhiều phê bình đƣa ra. Chẳng
hạn nhƣ kích cỡ của moduloe p bị cố định 512-bit, điều mà nhiều ngƣời không muốn. Vì
vậy, NIST đã thay đổi chuẩn này để có thể thay đổi kích thƣớc moduloe (chia bởi 64)
thành một dãy từ 512 đến 1024-bit.
Ngoài ra, một sự phê bình khác về DSS là chữ ký đƣợc tạo ra nhanh hơn so với
việc xác minh nó. Trái ngƣợc với hệ chữ ký RSA thì việc xác minh công khai là rất nhanh
chóng (mà ta biết trong thƣơng mại điện tử việc xác minh là rất quan trọng và đòi hỏi thời
gian thực hiện phải nhanh chóng).
1.5. Mô hình ƣ́ ng dụng củ a chƣ̃ ký điện tƣ̉
Khác với chữ ký thông thƣờ ng trên thƣ̣c tế , các chữ ký điện tử là một thông tin ở
dạng số hóa đƣợc tạo ra từ văn bản sử dụng hệ chữ ký điện tử và không phải là một
phầ n của văn bản . Do đó sau khi đƣợc tạo ra , chƣ̃ ký điện tƣ̉ sẽ đƣợc gƣ̉ i đi cù ng vớ i
thông điệp, ngƣờ i nhận nhận đƣợc thông điệp và chƣ̃ ký tƣơng ƣ́ ng sẽ thƣ̣c hiện thuật
toán kiểm tra xem chữ ký có đúng là chữ ký của ngƣời gửi lên văn bản nhận đƣợc hay
không. Mô hình ƣ́ ng dụng nà y có thể đƣợc minh họa qua hình vẽ sau:
B - ngƣời nhận
RSA
Khóa công
khai của B
Khóa
phiên K
C1
RSA
Khóa bí mật
của B
C1 Khóa
phiên K
AESP, S
C2
AES
C2
P, S
A - ngƣời gửi
KýP S
Khóa bí mật
của A
Kiểm tra
chữ ký
P
Khóa công
khai của B
Hình 5.1: Mô hình ƣ́ ng dụng của chƣ̃ ký điện tƣ̉
Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm
109
2. Hàm Băm (Hash Function)
2.1. Khái niệm
Ta thấy rằng các hệ chữ ký đƣợc miêu tả ở trên chỉ cho phép ký các bức điện ngắn.
Ví dụ nhƣ trong DSS, 160-bit bức điện đƣợc ký với 320-bit. Nhƣ vậy với những bức điện
hàng Megabyte thì chúng ta phải làm thế nào!
Một cách đơn giản để giải quyết vấn đề này là chia bức điện lớn thành những đoạn
nhỏ 160-bit, và sau đó ký lên mỗi đoạn nhỏ đó, điều này cũng tƣơng tự nhƣ mã hoá một
chuỗi dài bản rõ bằng việc mã hoá từng ký tự bản rõ sử dụng cùng một khoá.
Nhƣng có một vài vấn đề trong việc tạo chữ ký điện tử. Đầu tiên là với một bức điện
dài, chúng ta sẽ kết thúc với một lƣợng chữ ký khổng lồ. Ngoài ra, điều bất tiện là hầu hết
các hệ chữ ký đều rất chậm. Nghiêm trọng hơn là với rất nhiều đoạn đƣợc ký nhƣ vậy sẽ
dẫn đến khi sắp xếp lại và có thể một vài đoạn bị bỏ đi (mất đi tính toàn vẹn).
Để giải quyết tất cả các rắc rối này, ngƣời ta sử dụng hàm Băm (hash function).
Định nghĩa:
Một hàm Băm H sẽ lấy ở đầu vào một thông tin X có kích thƣớc biến thiên và sinh
kết quả là một chuỗi có độ dài cố định, đƣợc gọi là cốt của bức điện (message digest).
Ví dụ nhƣ khi B muốn ký một bức điện x (độ dài bất kỳ), đầu tiên anh ta tính cốt của
bức điện z = h(x) (độ dài cố định) và sau đó ký y = sigK(z). Anh ta phát cặp (x,y) lên kênh
truyền, bây giờ việc kiểm tra có thể thực hiện bằng việc tính lại cốt của bức điện z = h(x),
sau đó kiểm tra verK(z,y) có bằng TRUE hay không.
Hình 5.2: Sơ đồ chữ ký sử dụng hàm Băm
2.2. Đặc tính của hàm Băm
Một vấn đề cần bàn ở đây là tính đụng độ của hàm Băm. Theo nguyên lý Diricle:
nếu có n+1 con thỏ được bỏ vào n cái chuồng thì phải tồn tại ít nhất một cái chuồng mà
trong đó có ít nhất là hai con thỏ ở chung [9]. Rõ ràng với không gian giá trị Băm nhỏ hơn
rất nhiều so với không gian tin về mặt kích thƣớc thì chắc chắn sẽ tồn tại đụng độ, nghĩa
là có hai tin x  x‟ mà giá trị Băm của chúng là giống nhau, tức h(x) = h(x‟).
Sau đây chúng ta sẽ xét các dạng tấn công có thể có, từ đó rút ra các tính chất của
hàm Băm:
z = h(x) y = sigK(z)x
x.y
verK(y)
z = h(x)
0: true
1: false
x.y
Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm
110
Dạng tấn công thứ nhất là ngƣời C bắt đầu với một bức điện đƣợc ký có giá trị (x,
y), trong đó y = sigK(h(x)) (cặp (x, y) có thể là bất kỳ bức điện trƣớc đó mà B đã ký). Sau
đó, C tính z = h(x) và cố gắng tìm x‟  x để h(x‟) = h(x). Nếu C làm đƣợc điều này thì cặp
(x‟, y) sẽ là một bức điện đƣợc ký có giá trị (một bức điện giả mạo có giá trị). Để ngăn cản
việc này, hàm Băm h phải thoả mãn tính chất sau:
Tính chất 1:
Một hàm Băm h có tính phi đụng độ cao khi với một bức điện x cho trước , không
tìm ra một bức điện x’  x sao cho h(x’) = h(x). [5]
Một dạng tấn công khác mà ngƣời C có thể làm là: đầu tiên anh ta tìm 2 bức điện x
 x‟ sao cho h(x) = h(x‟). Sau đó C đƣa bức điện x cho B và thuyết phục B ký vào cốt bức
điện h(x); và vì vậy, anh ta tìm đƣợc y. Nhƣ vậy, cặp (x‟, y) là một cặp chữ ký giả có giá
trị. Điều này là nguyên nhân mà việc thiết kế hàm Băm phải thoả mãn tính chất 2 nhƣ
sau:
Tính chất 2:
Một hàm Băm h có tính đụng độ cao khi không thể tìm ra những bức điện x và x’
sao cho x’  x và h(x’) = h(x). [5]
Dạng tấn công thứ 3 là chọn một giá trị cốt z ngẫu nhiên. Ngƣời C sẽ tính một chữ
ký với một giá trị ngẫu nhiên z, sau đó anh ta tìm một bức điện x sao cho z = h(x). Nếu
anh ta làm đƣợc điều này thì cặp (x, y) là cặp chữ ký giả có giá trị. Nhƣ vậy một tính chất
nữa mà h cần thoả mãn là tính một chiều:
Tính chất 3:
Một hàm Băm h có tính một chiều khi với cốt của một bức điện z cho trước không
thể tìm được một bức điện x sao cho h(x) = z. [5]
2.3. Birthday attack
Nhƣ đã biết, một dạng tấn công có khả năng đối với các hệ chữ ký điện tử có dùng
hàm Băm là tìm cách tạo ra những văn bản x và x‟ có nội dung khác nhau (một có lợi và
một là bất lợi cho bên ký) mà giá trị Băm giống nhau. Kẻ địch có thể tìm cách tạo ra một
số lƣợng rất lớn các văn bản có nội dung không thay đổi nhƣng khác nhau về biểu diễn
nhị phân (đơn giản là việc thêm bớt khoảng trắng hay dùng nhiều từ đồng nghĩa để thay
thế ...), sau đó sử dụng một chƣơng trình máy tính để tính giá trị Băm của các văn bản đó
và đem so sánh với nhau để hi vọng tìm ra một cặp văn bản đụng độ (sử dụng phƣơng
pháp thống kê).
Nhƣng việc này đòi hỏi số văn bản cần đƣợc tính giá trị Băm phải lớn hơn kích
thƣớc không gian Băm rất nhiều. Chẳng hạn nhƣ nếu hàm Băm có không gian Băm 64-
bit thì số lƣợng văn bản cần đƣợc đem ra nạp vào chƣơng trình phải ít nhất 264
(với một
máy tính có thể thực hiện việc Băm 1 triệu bức điện trong 1 giây, thì phải mất 6000.000
năm tính toán [6])
Tuy nhiên nếu kẻ địch thử với lƣợng văn bản ít hơn nhiều, trong phạm vi có thể tính
đƣợc thì xác suất để tìm đƣợc đụng độ sẽ nhƣ thế nào? Câu trả lời là “có thể thực hiện
đƣợc”. Bản chất của hiện tƣợng này đƣợc minh hoạ rõ thông qua phát biểu sau, thƣờng
đƣợc gọi là nghịch lý ngày sinh (birthday paradox):
Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm
111
Trong một nhóm có 23 người bất kỳ , xác suất để có hai người có cùng ngày sinh
nhật ít nhất là ½. [5]
Một cách tổng quát, giả sử một hàm Băm có n giá trị Băm khác nhau, nếu chúng ta
có k giá trị Băm từ k thông tin khác nhau đƣợc chọn ngẫu nhiên, thì xác suất để không
xảy ra đụng độ là:
(1-
n
1
)(1-
n
2
) ... (1-
n
k 1
) = 



1
1
)1(
k
i n
i
.
Với 1
n
i
, thì 



1
1
)1(
k
i n
i n
kkk
i
n
i
ee 2
)1(1
1



  . Do đó, xác suất để xảy ra đụng độ ít
nhất là n
kk
e 2
)1(
1

 . Giả sử gọi xác suất trên là  ta có :
( 1)
2
1
k k
n
e 
 
  (*)
Suy ra :
2 1
2 log
1
k k n

 

, suy ra:
1
2 log
1
k n


 (**)
Theo công thƣ́ c (**) này khi giá trị e rất gần với 1 thì
1
log
1 
vẫn khá nhỏ nên k là
tỉ lệ với n . Vớ i ε = 0.5 ta có k≈1.1774 n (***).
Ví dụ:
Vớ i k = 23 là số ngƣời, n = 365 là số ngày trong năm thì xác xuất tồn tại hai ngƣời
có cùng sinh nhật sẽ là  = 1 – 2,7-0,7
 0,5075. Và đây chính là nghịch lý ngày sinh đã
phát biểu ở trên. Hoặc chú ng ta có thể thay n = 365 vào công thức (***) sẽ nhận đƣợc k =
22.49 ≈23.
Nghịch lý ngày sinh hay công thƣ́ c (*) cho phé p chú ng ta dƣ̣ đoá n đƣợc chặn dƣớ i
của số lƣợng phép thử cần thực hiện để tìm ra đụng độ của một hà m băm . Một hà m băm
40-bit sẽ là không an toà n vì chỉ cầ n thƣ̉ 220
(khoảng 1 tỉ) phép thử chúng ta đã có xác
suấ t đụng độ là 50%.
Tƣơng tƣ̣, với một hàm Băm có không gian Băm 64-bit nêu trên thì số phé p thƣ̉ để
có xác suất đụng độ là 50% sẽ là 232
, điều này là có khả năng thức hiện đƣợc. Ví dụ với
loại máy tính nêu trên chỉ mất khoảng 1 giờ tính toán.
Hàm băm đƣợc coi là an toàn là các hàm băm 128 bit (nhƣ MD5 ..) vì khi đó s ố
lƣợng phép thƣ̉ sẽ là 264
. Tuy nhiên hiện nay vớ i sƣ̣ phá t triển của cá c thuật toá n thá m
mã hàm băm mới đƣợc phát hiện các hàm băm 128 cũng đƣợc khuyến nghị là không nên
sƣ̉ dụng trong cá c hệ thố ng bảo mật mớ i . Các hàm băm đƣợc khuyế n nghi ̣thay thế cho
MD5 là các hàm băm 164 bit nhƣ DSS, SHA2.
2.4. Một số hàm Băm nổi tiếng
2.4.1. MD5 (Message Digest)
Ronald Rivest là ngƣời đã phát minh ra các hàm Băm MD2, MD4 (1990) và MD5
(1991). Do tính chất tƣơng tự của các hàm Băm này, sau đây chú ng ta sẽ xem xét hàm
Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm
112
Băm MD5, đây là một cải tiến của MD4 và là hàm Băm đƣợc sử dung rộng rãi nhất,
nguyên tắ c thiế t kế của hà m băm nà y cũng là nguyên tắ c chung cho rấ t nhiề u cá c hà m
băm khá c.
a. Miêu tả MD5:
Đầu vào là những khối 512-bit, đƣợc chia cho 16 khối con 32-bit. Đầu ra của thuật
toán là một thiết lập của 4 khối 32-bit để tạo thành một hàm Băm 128-bit duy nhất.
Đầu tiên, ta chia bức điện thành các khối 512-bit, với khối cuối cùng (đặt là x và x <
512-bit) của bức điện, chúng ta cộng thêm một bit 1 vào cuối của x, theo sau đó là các bit
0 để đƣợc độ dài cần thiết (512 bit). Kết quả là bức điện vào là một chuỗi M có độ dài
chia hết cho 512; vì vậy ta có thể chia M ra thành các N word 32-bit (N word này sẽ chia
hết cho 16).
Bây giờ, ta bắt đầu tìm cốt của bức điện với 4 khối 32-bit A, B, C và D (đƣợc xem
nhƣ thanh ghi) :
A = 0x01234567
B = 0x89abcdef
C = 0xfedcba98
D = 0x76543210.
ngƣời ta thƣờng gọi A, B, C, D là các chuỗi biến số (chaining variables).
Bức điện đƣợc chia ra thành nhiều khối 512-bit, mỗi khối 512-bit lại đƣợc chia ra 16
khối 32-bit đi vào bốn vòng lặp của MD5. Giả sử ta đặt a, b, c và d thay cho A, B, C và D
đối với khối 512-bit đầu tiên của bức điện. Bốn vòng lặp trong MD5 đều có cấu trúc giống
nhau. Mỗi vòng thực hiện 16 lần biến đổi: thực hiện với một hàm phi tuyến của 3 trong 4
giá trị a, b, c và d; sau đó nó cộng kết quả đến giá trị thứ 4, tiếp đó cộng với một khối con
32-bit và một hằng số. Sau đó, nó dịch trái một lƣợng bit thay đổi và cộng kết quả vào
một trong 4 giá trị a, b, c hay d. Kết quả cuối cùng là một giá trị mới đƣợc thay thế một
trong 4 giá trị a, b, c hay d.
Hình 5.3: Sơ đồ vòng lặp chính của MD5
A
B
C
D
Vòng
1
Vòng
2
Vòng
3
Vòng
4
A
B
C
D
Khối của bức
điện
Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm
113
Hình 5.4: Sơ đồ một vòng lặp MD5
Có bốn hàm phi tuyến, mỗi hàm này đƣợc sử dụng cho mỗi vòng:
F(X,Y,Z ) = (X  Y) ((X)  Z)
G(X,Y,Z ) = ((X  Z) (Y  (Z)))
H(X,Y,Z ) = X  Y  Z
I(X,Y,Z ) = Y  (X (Z)).
trong đó:  là XOR,  là AND, là OR, và  là NOT.
Những hàm này đƣợc thiết kế sao cho các bit tƣơng ứng của X, Y và Z là độc lập
và không ƣu tiên, và mỗi bit của kết quả cũng độc lập và ngang bằng nhau.
Nếu Mj là một biểu diễn của khối con thứ j (j = 16) và <<<s là phép dịch trái của s
bit, thì các vòng lặp có thể biểu diễn nhƣ sau:
FF(a,b,c,d,Mj,s,ti) đƣợc biểu diễn a = b + ((a + F(b,c,d) + Mj + ti) <<< s)
GG(a,b,c,d,Mj,s,ti) đƣợc biểu diễn a = b + ((a + G(b,c,d) + Mj + ti) <<< s)
HH(a,b,c,d,Mj,s,ti) đƣợc biểu diễn a = b + ((a + H(b,c,d) + Mj + ti) <<< s)
II(a,b,c,d,Mj,s,ti) đƣợc biểu diễn a = b + ((a + I(b,c,d) + Mj + ti) <<< s).
Bốn vòng (64 bƣớc) sẽ thực hiện nhƣ sau:
Vòng 1:
FF (a, b, c, d, M0, 7, 0x76aa478)
FF (d, a, b, c, M1, 12, 0xe8c7b756)
FF (c, d, a, b, M2, 17, 0x242070db)
FF (b, c, d, a, M3, 22, 0xc1bdceee)
FF (a, b, c, d, M4, 7, 0xf57c0faf)
FF (d, a, b, c, M5, 12, 0x4787c62a)
FF (c, d, a, b, M6, 17, 0xa8304613)
FF (b, c, d, a, M7, 22, 0xfd469501)
FF (a, b, c, d, M8, 7, 0x698098d8)
FF (d, a, b, c, M9, 12, 0x8b44f7af)
a
b
c
d
Hàm phi
tuyến
<<< s
Mj ti
Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm
114
FF (c, d, a, b, M10, 17, 0xffff5bb1)
FF (b, c, d, a, M11, 22, 0x895cd7be)
FF (a, b, c, d, M12, 7, 0x6b901122)
FF (d, a, b, c, M13, 12, 0xfd987193)
FF (c, d, a, b, M14, 17, 0xa679438e)
FF (b, c, d, a, M15, 22, 0x49b40821).
Vòng 2:
GG (a, b, c, d, M1, 5, 0x61e2562)
GG (d, a, b, c, M6, 9, 0xc040b340)
GG (c, d, a, b, M11, 14, 0x265e5a51)
GG (b, c, d, a, M0, 20, 0xe9b6c7aa)
GG (a, b, c, d, M5, 5, 0xd62f105d)
GG (d, a, b, c, M10, 9, 0x02441453)
GG (c, d, a, b, M15, 14, 0xd8a1e681)
GG (b, c, d, a, M4, 20, 0xe7d3fbc8)
GG (a, b, c, d, M9, 5, 0x21e1cde6)
GG (d, a, b, c, M14, 9, 0xc33707d6)
GG (c, d, a, b, M3, 14, 0xf4d50d87)
GG (b, c, d, a, M8, 20, 0x455a14ed)
GG (a, b, c, d, M13, 5, 0xa9e3e905)
GG (d, a, b, c, M2, 9, 0xfcefa3f8)
GG (c, d, a, b, M7, 14, 0x676f02d9)
GG (b, c, d, a, M12, 20, 0x8d2a4c8a).
Vòng 3:
HH (a, b, c, d, M5, 4, 0xfffa3942)
HH (d, a, b, c, M8, 11, 0x8771f681)
HH (c, d, a, b, M11, 16, 0x6d9d6122)
HH (b, c, d, a, M14, 23, 0xfde5380c)
HH (a, b, c, d, M1, 4, 0xa4beea44)
HH (d, a, b, c, M4, 11, 0x4bdecfa9)
HH (c, d, a, b, M7, 16, 0xf6bb4b60)
HH (b, c, d, a, M10, 23, 0xbebfbc70)
HH (a, b, c, d, M13, 4, 0x289b7ec6)
HH (d, a, b, c, M0, 11, 0xeaa127fa)
HH (c, d, a, b, M3, 16, 0xd4ef3085)
HH (b, c, d, a, M6, 23, 0x04881d05)
HH (a, b, c, d, M9, 4, 0xd9d4d039)
HH (d, a, b, c, M12, 11, 0xe6db99e5)
HH (c, d, a, b, M15, 16, 0x1fa27cf8)
HH (b, c, d, a, M2, 23, 0xc4ac5665).
Vòng 4:
II (a, b, c, d, M0, 6, 0xf4292244)
II (d, a, b, c, M7, 10, 0x432aff97)
Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm
115
II (c, d, a, b, M14, 15, 0xab9423a7)
II (b, c, d, a, M5, 21, 0xfc93a039)
II (a, b, c, d, M12, 6, 0x655b59c3)
II (d, a, b, c, M3, 10, 0x8f0ccc92)
II (c, d, a, b, M10, 15, 0xffeff47d)
II (b, c, d, a, M1, 21, 0x85845dd1)
II (a, b, c, d, M8, 6, 0x6fa87e4f)
II (d, a, b, c, M15, 10, 0xfe2ce6e0)
II (c, d, a, b, M6, 15, 0xa3013414)
II (b, c, d, a, M13, 21, 0x4e0811a1)
II (a, b, c, d, M4, 6, 0xf7537e82)
II (d, a, b, c, M11, 10, 0xbd3af235)
II (c, d, a, b, M2, 15, 0x2ad7d2bb)
II (b, c, d, a, M9, 21, 0xeb86d391).
Những hằng số ti đƣợc chọn theo quy luật sau: ở bƣớc thứ i giá trị ti là phần nguyên
của 232
*abs(sin(i)), trong đó i = [0..63] đƣợc tính theo radian.
Sau tất cả những bƣớc này a, b, c và d lần lƣợt đƣợc cộng với A, B, C và D để cho
kết quả đầu ra; và thuật toán tiếp tục với khối dữ liệu 512-bit tiếp theo cho đến hết bức
điện. Đầu ra cuối cùng là một khối 128-bit của A, B, C và D, đây chính là hàm Băm nhận
đƣợc.
b. Tính bảo mật trong MD5:
Ron Rivest đã phác hoạ những cải tiến của MD5 so với MD4 nhƣ sau:
 Vòng thứ 4 đƣợc thêm vào (còn MD4 chỉ có 3 vòng).
 Mỗi bƣớc đƣợc cộng thêm một hằng số duy nhất.
 Hàm G ở vòng 2 thay đổi từ ((X  Y) (X  Z) (Y  Z)) thành ((X  Z) (Y 
(Z))) nhằm giảm tính đối xứng của G (giảm tính tuyến tính).
 Mỗi bƣớc đƣợc cộng kết quả của bƣớc trƣớc nó, làm các quá trình có tính liên
kết, phụ thuộc lẫn nhau.
 Việc các khối con bị thay đổi khi vào vòng 2 và vòng 3 làm cho khuôn dạng
cấu trúc vòng lặp thay đổi theo.
 Số lƣợng lƣợng bit dịch trái của mỗi vòng đƣợc tối ƣu và các bƣớc dịch ở mỗi
vòng là khác nhau.
Năm 1993, den Boer và Bosselaers đã tìm ra đụng độ trong việc sử dụng hàm nén
(vòng 2 và 3) của MD5. Điều này phá vỡ quy luật thiết kế MD5 là chống lại sự đụng độ,
nhƣng MD5 vẫn là hàm Băm đƣợc sử dụng rộng rãi hiện nay.
2.4.2. SHA (Secure Hash Algorithm)
Năm 1995, tổ chức NIST cùng NSA đã thiết kế ra thuật toán hàm Băm an toàn
(SHA) sử dụng cho chuẩn chữ ký điện tử DSS. SHA đƣợc thiết kế dựa trên những
nguyên tắc của MD4/MD5, tạo ra 160-bit giá trị Băm.
a. Miêu tả SHA:
Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm
116
Cũng giống với MD5, bức điện đƣợc cộng thêm một bit 1và các bit 0 ở cuối bức
điện để bức điện có thể chia hết cho 512. SHA sử dụng 5 thanh ghi dịch:
A = 0x67452301
B = 0xefcdab89
C = 0x98badcfe
D = 0x10325476
E = 0xc3d2e1f0
Bức điện đƣợc chia ra thành nhiều khối 512-bit. Ta cũng đặt là a, b, c, d và e thay
cho A, B, C, D và E đối với khối 512-bit đầu tiên của bức điện. SHA có bốn vòng lặp chính
với mỗi vòng thực hiện 20 lần biến đổi: bao gồm thực hiện với một hàm phi tuyến của 3
trong 5 giá trị a, b, c, d và e; sau đó cũng đƣợc cộng và dịch nhƣ trong MD5.
SHA xác lập bốn hàm phi tuyến nhƣ sau:
ft(X,Y,Z) = (X  Y) ((X)  Z) với 0 ≤ t ≤ 19
ft(X,Y,Z) = X  Y  Z với 20 ≤ t ≤ 39
ft(X,Y,Z) = (X  Y) (X  Z) (Y  Z) với 40 ≤ t ≤ 59
ft(X,Y,Z) = X  Y  Z với 60 ≤ t ≤ 79.
Bốn hằng số sử dụng trong thuật toán là:
Kt = 21/2
/4 = 0x5a827999 với 0 ≤ t ≤ 19
Kt = 31/2
/4 = 0x6ed9eba1 với 20 ≤ t ≤ 39
Kt = 51/2
/4 = 0x8f1bbcdc với 40 ≤ t ≤ 59
Kt = 101/2
/4 = 0xca62c1d6 với 60 ≤ t ≤ 79.
Các khối bức điện đƣợc mở rộng từ 16 word 32-bit (M0 đến M15) thành 80 word 32-
bit (W0 đến W79) bằng việc sử dụng thuật toán mở rộng:
Wt = Mt với 0 ≤ t ≤ 15
Wt = (Wt-3  Wt-8  Wt-14  Wt-16) với 16 ≤ t ≤ 79.
Ta có thể miêu tả một vòng lặp của SHA nhƣ sau:
Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm
117
Hình 5.5: Sơ đồ một vòng lặp của SHA
Nếu gọi Wt là biểu diễn của khối con thứ t của bức điện đƣợc mở rộng, và <<<s là
biểu diễn dịch trái s bit, thì vòng lặp chính của SHA nhƣ sau:
a = A, b = B, c = C, D = D, e = E,
for t = 0 to 79
{
TEMP = (a <<< 5) + ft(b, c, d) + e +Wt + Kt,
e = d,
d = c,
c = b <<< 30,
b = a,
a = TEMP,
}
A = A + a, B = B + b, C = C + c, D = D + d, E = E + e,
Thuật toán tiếp tục với khối 512-bit tiếp theo cho tới khi hết bức điện, và kết quả sau
cùng trong 4 thanh ghi A, B, C, D và E chính là hàm Băm SHA 160-bit.
b. Tính bảo mật trong SHA:
Để hiểu rõ hơn về tính bảo mật của SHA, ta hãy so sánh SHA với MD5 để có thể
tìm ra những điểm khác nhau của hai hàm Băm này:
 MD5 và SHA đều cộng thêm các bit “giả” để tạo thành những khối chia hết cho
512-bit, nhƣng SHA sử dụng cùng một hàm phi tuyến f cho cả bốn vòng.
ei-1
di-1
ci-1
bi-1
ai-1
ei
di
ci
bi
ai
Hàm phi
tuyến
<<< 30
<<< 5
Wt Kt
Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm
118
 MD5 sử dụng mỗi hằng số duy nhất cho mỗi bƣớc biến đổi, SHA sử dụng mỗi
hằng số cho mỗi vòng biến đổi, hằng số dịch này là một số nguyên tố đối với độ
lớn của word (giống với MD4).
 Trong hàm phi tuyến thứ 2 của MD5 có sự cải tiến so với MD4, SHA thì sử dụng
lại hàm phi tuyến của MD4, tức (X  Y) (X  Z) (Y  Z).
 Trong MD5 với mỗi bƣớc đƣợc cộng kết quả của bƣớc trƣớc đó. Sự khác biệt
đối với SHA là cột thứ 5 đƣợc cộng (không phải b, c hay d nhƣ trong MD5), điều
này làm cho phƣơng pháp tấn công của Boer-Bosselaers đối với SHA bị thất bại
(den Boer và Bosselaers là hai ngƣời đã phá thành công 2 vòng cuối trong
MD4).
Cho đến nay, chƣa có một công bố nào đƣợc đƣa ra trong việc tấn công SHA, bởi
vì độ dài của hàm Băm SHA là 160-bit, nó có thể chống lại phƣơng pháp tấn công bằng
vét cạn (kể cả birthday attack) tốt hơn so với hàm Băm MD5 128-bit.
2.5. Một số ƣ́ ng dụng củ a hàm Băm
Nhƣ đã trình bà y ở phầ n đầ u chƣơng , ứng dụng chính của các hàm băm là sƣ̉
dụng với các hệ chữ ký điện tử , trong đó thay vì ký trƣ̣c tiế p lên cá c văn bản , thông điệp
(mà trong đa số trƣờng hợp là rất lớn, tố c độ chậm) ngƣờ i ta sẽ ký lên giá tri ̣băm đại diện
cho toà n bộ văn bản đó . Điề u nà y đặc biệt quan trọng và hiệu quả bở i vì chú ng ta biết
rằng cá c hệ chƣ̃ ký điện tƣ̉ đề u là m việc vớ i cá c phép tính số học số lớ n nên bản thân
chúng đã tƣơng đối chậm, việc sƣ̉ dụng giá tri ̣băm thay cho toà n bộ v ăn bản là giải phá p
toàn diện khắc phục đƣợc yếu điểm này của các hệ chữ ký điện tử . Ngoài việc xử dụng
vớ i cá c hệ chƣ̃ ký điện tƣ̉ hà m băm cò n đƣợc sƣ̉ dụng và o cá c mục đích khá c nhƣ : xác
thƣ̣c hó a thông điệp, xác thƣ̣c hó a ngƣờ i dù ng.
Đối với các ứng dụng không cần giữ bí mật thông điệp mà chỉ cần đảm bảo thông
điệp không bi ̣thay đổi trên đƣờ ng truyền ngƣờ i ta sẽ sƣ̉ dụng hà m băm cho mục đích xá c
thƣ̣c tính nguyên vẹn của thông điệ p đó . Chẳng hạn chú ng ta có một phầ n mềm mã
nguồ n mở ở dạng setup muố n phân phố i cho ngƣờ i dù ng , rõ ràng việc gửi phần mềm đó
tớ i má y tính của ngƣờ i dù ng là không cầ n phải mã hó a , tuy nhiên nếu nhƣ phầ n mề m đó
bị thay đổi trên đƣờ ng truyề n (chẳng hạn nhƣ bi ̣gắ n thêm cá c spyware , virus …) thì sẽ
rấ t nguy hiểm . Để đảm bảo chú ng ta sẽ cung cấ p giá tri ̣băm của phầ n mề m đó (khi đó
phầ n mềm chính là thông điệp ). Ngƣờ i dù ng sẽ download cả ph ần mềm và giá trị băm
nhận đƣợc , sau đó tiế n hà nh băm lại , đố i sá nh giá tri ̣băm nhận đƣợc vớ i giá tri ̣băm
đƣợc cung cấ p cù ng vớ i phầ n mề m , nế u hai giá tri ̣nà y khớ p nhau thì có thể đảm bảo
phầ n mềm không bi ̣sƣ̉ a đổi trên đƣờ ng truyề n. Hiện nay đa số cá c phầ n mềm mã nguồ n
mở đề u đƣợc phân phố i theo cá ch nà y.
Trong cá c hệ thố ng yêu cầ u có xá c thƣ̣c ngƣờ i dù ng nhƣ cá c hệ quản tri ̣cơ sở dƣ̃
liệu, hệ điề u hà nh , các ứng dụng web , ứng dụng dạng desktop application , để lƣu mật
khẩu ngƣờ i dù ng ngƣờ i ta cũng sƣ̉ dụng cá c hà m băm hoặc cá c hệ mã trong cá c vai trò
của hàm băm (không sƣ̉ dụng khó a ). Khi đó mỗi tà i khoản của ngƣờ i dù ng thay vì lƣu
dƣớ i dạng tên truy c ập (username) và mật khẩu (password) sẽ đƣợc lƣu dƣới dạng : tên
ngƣờ i dù ng, giá trị băm của mật khẩu . Khi một ngƣờ i dù ng đăng nhập và o hệ thố ng , hệ
thố ng sẽ lấ y tên truy cập , mật khẩu họ nhập và o , kiểm tra xem có tên truy cập nà o nhƣ
vậy hay không . Nế u có sẽ tiế n hà nh băm giá tri ̣mật khẩu do ngƣờ i dù ng nhập và o , đố i
Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm
119
sánh với giá trị băm tƣơng ứng lƣu trong cơ sở dữ liệu (có thể ở dạng file text , xml, hay
file cơ sở dƣ̃ liệu của một hệ quản trị cơ sở dữ liệu nào đó). Nế u kế t quả đố i sá nh là khớ p
thì ngƣời dùng đó là hợp lệ , ngƣợc lại nếu không khớ p có nghĩa là sai mật khẩu . Hiện
nay tấ t cả cá c hệ quản tri ̣cơ sở dƣ̃ liệu đều đƣợc trang bi ̣cá c hà m băm để cho phép
ngƣờ i dù ng tạo ra cá c giá tri ̣băm của mật khẩu ngƣờ i dù ng và lƣu lại cá c giá tri ̣băm nà y.
Việc lƣu cá c giá tri ̣băm đảm bảo chú ng ta không bi ̣lộ mật khẩu do mật khẩu đƣợc lƣu ở
dạng nguyên bản trên má y tính hoặc khi truyền qua hệ thố ng mạng . Hệ điề u hà nh Unix
sƣ̉ dụng nguyên tắc lƣu mật khẩu nhƣ trên vớ i hà m băm là hệ mã DES đƣợc lặp lại 25
lầ n, mật khẩu của ngƣờ i dù ng đƣợc sƣ̉ dụng nhƣ khó a của hệ mã, bản rõ đem mã hóa là
xâu 64 bit 0.
Ngày nay với sự phát triển mạnh mẽ của thƣơng mại điện tử , các giao dịch đều
đƣợc thƣ̣c hiện tƣ̀ xa, trên cá c hệ thố ng mạng nên việc ƣ́ ng dụng của cá c hệ chƣ̃ ký điện
tƣ̀ và đi kè m vớ i đó là cá c hà m băm ngà y cà ng trở nên quan trọng . Mọi thông tin trong
các giao dịch thƣơng mại điện tử đều cần đƣợc bảo vệ bằng các chữ ký , hàm băm. Vì
thế có thể nó i rằ ng đôi khi cá c hà m băm cò n quan trọng hơn cả cá c hệ mã mật.
3. Bài tập
Bài tập 5.1: Cho hệ chữ ký điện tử ElGamma có p = 1019, a = 191 là một phần tử
nguyên thuỷ của ZP
*
, x = 37.
a) Hãy tìm khóa công khai KP, và khóa bí mật KS của hệ chữ ký trên.
b) Để ký lên bản rõ M = 102 ngƣời ta chọn k = 143, hãy thực hiện ký đƣa ra chữ ký
tƣơng ứng.
c) Kiểm tra xem cặp (K, S) = (251, 507) có là chữ ký lên văn bản M = 127 hay
không.
Bài tập 5.2: Cho hệ chƣ̃ ký điện tƣ̉ RSA có p = 31, q = 41, e = 271.
a) Hãy tìm khóa công khai KP, và khóa bí mật KS của hệ mã trên.
b) Hãy tính chữ ký cho thông điệp M = 100.
Bài tập 5.3: Cho thuật toá n chƣ̃ ký điện tƣ̉ DSA có q = 11, p = 67, α = 9, β = 62, khóa bí
mật a = 4, để ký lên văn bản M = 8, ngƣờ i ta chọn k = 2. Hãy xác định chữ ký lên văn bản
M.
Bài tập 5.4: Cho hệ chƣ̃ ký điệ n tƣ̉ RSA có p = 47, q = 71, e= 79. Hãy xác định chữ ký
của hệ mã lên thông điệp M = 688.
Sƣ̉ dụng một trong cá c ngôn ngƣ̃ lập trình C, C++, Java hoặc C# để làm các bài tập sau:
Bài tập 5.5: Cài đặt hệ chữ ký điện tử RSA.
Bài tập 5.6: Cài đặt hệ chữ ký điện tử El Gammal.
Bài tập 5.7: Cài đặt hàm băm MD5.
Bài tập 5.8: Cài đặt hàm băm SHA.
Gợi ý : Có thể sử dụng các thƣ viện số lớn nhƣ MIRACL hoặc cá c thƣ viện mã nguồ n mở
nhƣ Crypto++ (chi tiế t tại địa chỉ website: http://www.cryptopp.com/), Cryptolib ( chi tiết tại
đi ̣a chỉ website http://www.cs.auckland.ac.nz/~pgut001/cryptlib).
Chƣơng VI: Quản lý khóa
120
CHƢƠNG VI: QUẢN LÝ KHÓA
1. Quản lý khoá trong các mạng truyền tin
Trong các chƣơng trƣớc, ta đã làm quen với các phƣơng pháp lập mã và các bài
toán quan trọng khác liên quan đến việc truyền tin bảo mật trên các mạng truyền tin công
cộng nói chung. Ta cũng đã thấy rằng các hệ mật mã khoá công khai công khai có nhiều
ƣu việt hơn các hệ mật mã đối xứng trong việc làm nền tảng cho các giải pháp an toàn
thông tin, và đặc biệt đối với các hệ mã khoá đối xứng thì việc thực hiện đồi hỏi những
kênh bí mật để chuyển khoá hoặc trao đổi khoá giữa các đối tác, thì về nguyên tắc, đối
với các hệ mã hoá với khoá công khai không cần có những kênh bí mật nhƣ vậy, vì các
khoá công khai có thể đƣợc truyền hay trao đổi cho nhau một cách công khai qua các
kênh truyền tin công cộng. Tuy nhiên, trên thực tế, để bảo đảm cho các hoạt động thông
tin đƣợc thật sự an toàn, không phải bất cứ thông tin nào về các khoá công khai của một
hệ mã, của một thuật toán kiểm tra chữ ký, của một giao thức xác nhận thông báo hay
xác nhận danh tính … cũng phát công khai một cách tràn lan trên mạng công cộng, mặc
dù là công khai nhƣng ngƣời ta cũng muốn là những ai cần biết thì mới nên biết mà thôi.
Do đó, mặc dù sử dụng các hệ có khoá công khai, ngƣời ta cũng muốn có những giao
thức thực hiện việc trao đổi khoá giữa các đối tác thực sự có nhu cầu giao lƣu thông tin
với nhau, kể cả trao đổi khoá công khai. Việc trao đổi khoá giữa các chủ thể trong một
cộng đồng nào đó có thể đƣợc thiết lập một cách tự do giữa bất cứ hai ngƣời nào khi có
nhu cầu trao đổi thông tin, hoặc có thể đƣợc thiết lập một cách tƣơng đối lâu dài trong
thời gian nào đó trong cả cộng đồng với sự điều phối của một cơ quan đƣợc uỷ thác TA.
Việc trao đổi khoá trong trƣờng hợp thứ nhất ta gọi đơn giản là thoả thuận khoá, còn
trong trƣờng hợp thứ hai ta gọi là phân phối khoá; TA là nơi thực hiện việc phân phối,
cũng là nơi quản lý khoá. Việc thoả thuận khoá nói chung không cần có sự tham gia của
một TA nào và chỉ có thể xảy ra khi các hệ bảo mật mà ta sử dụng là hệ có khoá công
khai, còn việc phân phối khoá thì có thể xảy ra đối với các trƣờng hợp sử dụng các hệ
khoá đối xứng cũng nhƣ các hệ có khoá công khai. Việc phân phối khoá với vai trò quản
trị khoá của một TA là một việc bình thƣờng, đã tồn tại rất lâu trƣớc khi có các hệ mật mã
khoá công khai . Ta sẽ bắt đầu vớ i một vài hệ phân phối khoá nhƣ vậy, sau đó sẽ giới
thiệu một số hệ phân phối hoặc trao đổi khoá khi dùng các sơ đồ an toàn và bảo mật với
khoá công khai.
2. Một số hệ phân phối khoá
2.1. Sơ đồ phân phối khoá Blom
Giả sử ta có một mạng gồm có n ngƣời dùng và mỗi ngƣời dùng đó đều có nhu cầu
trao đổi thông tin bí mật với mọi ngƣời trong mạng. Giả sử sơ đồ mật mã đƣợc sử dụng
là một sơ đồ mật mã khoá đối xứng (chẳng hạn nhƣ DES). Toàn bộ mạng cần có
2
)1( nn
khoá khác nhau cho chừng ấy cặp ngƣời dùng khác nhau trong mạng. Một cơ
quan uỷ thác TA quản lý chừng ấy khoá và phải chuyển cho mỗi ngƣời dùng (n-1) khoá
chung với (n-1) ngƣời còn lại trong mạng; nhƣ vậy TA phải truyền bằng những kênh bí
mật tất cả là n(n-1) lƣợt khoá đến tất cả n ngƣời dùng.
Chƣơng VI: Quản lý khóa
121
Năm 1985, Blom đề nghi ̣một sơ đồ phân phố i khoá , mà sau đây ta gọi là sơ đồ
Blom, trong trƣờ ng hợp đơn giản nhấ t đƣợc mô tả nhƣ sau:
 TA chọn một số nguyên tố p ≥ n, và chọn cho mỗi ngƣời dùng A một số
pA Zr  . Số p và các số rA đƣợc công bố công khai.
 Sau đó, TA chọn ba số ngẫu nhiên a, b, c pZ và lập đa thức:
pcxyyxbayxf mod)(),( 
 Với mỗi ngƣời dùng A, TA tính pxbarxfxg AAAA mod),()(  , trong đó
pbraa A modA  , pcrbb AA mod . TA chuyển bí mật cặp số (aA, bA) cho
A. Nhƣ vậy, A biết xbaxg AA  A)( .
So với việc TA phải truyền bí mật n(n-1) lƣợt khoá trên thì với sơ đồ Blom, TA chỉ
phải truyền n lƣợt các cặp số (aA, bA) mà thôi.
Sau khi đã thực hiện xong các công việc chuẩn bị đó, bây giờ nếu hai ngƣời dùng A
và B muốn tạo khoá chung để truyền tin bằng mật mã cho nhau thì khoá chung KA,B đó sẽ
là:
),,()()(, BAABBABA rrfrgrgK 
mà mỗi ngƣời A và B tính đƣợc bằng những thông tin mình đã có.
Nhƣ vậy, theo sơ đồ phân phối này, TA phân phối cho mọi ngƣời dùng một phần bí
mật của khoá, hai ngƣời dùng bất kỳ phối hợp phần bí mật của riêng mình với phần công
khai của ngƣời kia để cùng tạo nên khoá bí mật chung cho hai ngƣời. Sơ đồ này là an
toàn theo nghĩa sau đây: bất kỳ một ngƣời thức ba C nào (kể cả C là một ngƣời tham gia
trong mạng) có thể đƣợc phát hiện đƣợc khoá bí mật riêng của hai ngƣời A và B. Thực
vậy, dù C có là ngƣời tham gia trong mạng đi nữa, thì cái mà C biết nhiều lắm là hai số
aC, bC do TA cấp cho. Ta chứng minh rằng với những gì mà C biết thì bất kỳ giá trị pZ
nào cũng có thể đƣợc chấp nhận là KA,B. Những gì mà C biết , kể cả chấp nhận BAK , ,
đƣợc thể hiện thành:
CC
CC
BABA
bcrb
abra
rcrrrba


 )(
Nếu xem a, b, c là ẩn số, ta có định thức các hệ số ở vế phải là:
),)((
10
01
1
BCAC
C
C
BABA
rrrr
r
r
rrrr


Theo giả thiết chọn các số r, định thức đó khác 0, do đó hệ phƣơng trình luôn có
nghiệm (a, b, c), tức việc chấp nhận  là giá trị của KA,B là hoàn toàn có thể. Bất kỳ giá trị
Chƣơng VI: Quản lý khóa
122
pZ nào cũng có thể đƣợc C chấp nhận là KA,B, điều đó đồng nghĩa với việc C không
biết KA,B là số nào.
Tuy nhiên, nếu có hai ngƣời tham gia C và D (khác A, B) liên minh với nhau để phát
hiện KA,B thì lại rất dễ dàng, vì cả C và D biết:
DD
D
C
C
b
a
b
a




crb
bra
crb
bra
D
C
C
bốn phƣơng trình đó đủ để xác định (a, b, c) từ đó tìm đƣợc KA,B.
Ta có thể mở rộng sơ đồ Blom nói trên để đƣợc một sơ đồ Blom tổng quát, trong đó
mọi khoá chung KA,B của hai ngƣời dùng A và B là bí mật hoàn toàn đối với bất kỳ liên
minh nào gồm k ngƣời ngoài A và B, nhƣng không còn là bí mật đối với mọi liên minh
gồm k+1 ngƣời tham gia trong mạng. Muốn vậy, ta chỉ cần thay đa thức f(x, y) nói trên
bằng một đa thức đối xứng bậc 2k sau đây:
 

k
i
k
j
ji
ij pyxayxf
0 0
,mod),(
trong đó jiijpij aakjiZa  ,,0, với mọi i, j.
2.2. Hệ phân phối khoá Kerberos
Kerberos là tên của một hệ dịch vụ phân phối (hay cấp phát) khoá phiên (sesion
key) cho từng phiên truyền tin bảo mật theo yêu cầu của ngƣời dùng trong một mạng
truyền tin. Hệ mật mã đƣợc sử dụng thƣờng là hệ có khoá đối xứng chẳng hạn nhƣ DES.
Để thực hiện hệ này, trƣớc hết cơ quan đƣợc uỷ thác (hay trung tâm điều phối) TA
cần chia sẻ một khoá DES bí mật KA với mỗi thành viên A trong mạng. Sau đó, mỗi lần A
có nhu cầu truyền tin bảo mật với một thành viên khác B thì yêu cầu TA cấp một khoá
phiên cho cả A và B. Việc cấp phát đó sẽ đƣợc thực hiện bằng một giao thức phân phối
khoá nhƣ sau:
1) TA chọn ngẫu nhiên một khoá phiên K, xác định một tem thời gian T và thời
gian sống L (nhƣ thế có nghĩa là khoá phiên K có giá trị sử dụng trong khoảng thời gian
từ T đến T+L).
2) TA tính ),,),(,(1 LTBIDKem AK ),),(,(2 LTAIDKem BK và gửi (m1, m2) đến
A.
3) A dùng hàm giải mã AKd cho m1 để thu đƣợc K, T, L, ID(B). Sau đó tính
),),((3 TAIDem K và gửi (m3, m2) cho B.
4) B dùng các hàm giải mã BKd cho m2 và dK cho m3 để thu đƣợc K, T, L, ID(A)
và ID(A), T. Nếu thấy hai giá trị của ID(A) và của T trùng nhau thì B tính tiếp m4 = eK(T +
1) và gửi m4 cho A.
Chƣơng VI: Quản lý khóa
123
5) A dùng hàm giải mã dK cho m4 và thử xem kết quả thu đƣợc có đúng là T+1
hay không.
Trong giao thức nói trên, các ký hiệu ID(A) và ID(B) là chỉ danh tính của A và của B,
các thông tin đó là công khai.
Hoàn thành giao thức gồm 5 bƣớc nói trên, TA (cùng với A và B) đã thực hiện xong
việc cấp phát một khoá phiên K cho hai ngƣời dùng A và B để truyền tin mật mã cho
nhau. Tất cả các việc trao đổi các thông tin trong giao thức đó đều đƣợc thực hiện trên
các kênh công cộng, dù khoá K vẫn là bí mật (chỉ A, B và TA là đƣợc biết mà thôi). Ngoài
việc cấp phát khoá, giao thức đó còn thực hiện đƣợc việc xác nhận khoá: B và A đều tin
chắc đƣợc rằng đối tác của mình đã thực sự có khoá K do kết quả của việc thực hiện các
phép thử ở bƣớc 4 và 5. Thêm nữa, cả A và B còn biết đƣợc thời hạn có hiệu lực của
khoá.
Phân phối khoá bí mật theo giao thức Kerberos có độ tin cậy cao, tuy nhiên trong
thực tế, việc sử dụng nó cũng đòi hỏi tốn nhiều thời gian nên ngày nay cũng chỉ đƣợc
dùng trong những trƣờng hợp hạn chế.
2.3. Hệ phân phối khó a Diffe-Hellman
Hệ phân phối khoá Diffe-Hellman không đòi hỏi TA phải biết và chuyển bất kỳ thông
tin mật nào về khoá của các ngƣời tham gia trong mạng để họ thiết lập đƣợc khoá chung
bí mật cho việc truyền tin với nhau.
Trong một hệ phân phối khoá Diffe-Hellman, TA chỉ việc chọn một số nguyên tố lớn
p và một phần tử nguyên thuỷ  theo mod p sao cho bài toán tính loga trong *
pZ là rất
khó. Các số p và  đƣợc công bố công khai cho mọi ngƣời tham gia trong mạng. Ngoài
ra, TA có một sơ đồ chữ ký với thuật toán ký bí mật sigTA và thuật toán kiểm tra công khai
verTA.
Một thành viên bất kỳ A với danh tính ID(A) tuỳ ý chọn một số aA (0 ≤ aA ≤ p-2) và
tính pb a
A modA
 . A giữ bí mật aA và đăng ký các thông tin (ID(A), bA) với TA. TA cấp
cho A chứng chỉ:
C(A) = (ID(A), bA, sigTA(ID(A), bA)).
Các chứng chỉ của các thành viên trong mạng có thể đƣợc lƣu giữ trong một cơ sở
dữ liệu công khai hoặc uỷ thác cho TA lƣu giữ và cung cấp công khai cho các thành viên
mỗi khi cần đến.
Khi hai thành viên A và B trong mạng cần có một khoá bí mật chung để truyền tin
bảo mật cho nhau thì A dùng thông tin công khai bB có trong C(B) kết hợp với số bí mật
của mình là aA để tạo nên khoá.
.modmodA
, ppbK ABaaa
BBA 
Khoá chung đó B cũng tạo ra đƣợc từ các thông tin công khai bA của A và số bí mật
aB của mình:
.modmodB
, ppbK BAaaa
BBA 
Chƣơng VI: Quản lý khóa
124
Để bảo đảm đƣợc các thông tin về bB và bA là chính xác, A và B có thể dùng thuật
toán verTA để kiểm tra chữ ký xác nhận của TA trong các chứng chỉ C(B) và C(A) tƣơng
ứng.
Cơ sở lý thuyết đảm bảo cho sƣ̣ an toà n của cá c phƣơng phá p trao đổi khó a dƣ̣a
trên hệ phân phố i khó a Diffie -Hellman là bà i toá n Logarithm rờ i rạc , có thể tham khảo
thêm trong phầ n 3.3 chƣơng IV để biế t thêm.
3. Trao đổi khoá và thoả thuận khoá
3.1. Giao thức trao đổi khoá Diffie-Hellman
Hệ phân phối khoá Diffie-Hellman nói trong mục trƣớc có thể dễ dàng biến đổi
thành một giao thức trao đổi (hay thoả thuận) khoá trực tiếp giữa các ngƣời sử dụng mà
không cần có sự can thiệp của một TA làm nhiêm vụ điều hành hoặc phân phối khoá. Một
nhóm bất kỳ ngƣời sử dụng có thể thoả thuận cùng dùng chung một số nguyên tố lớn p
và một phần tử nguyên thuỷ  theo mod p, hai ngƣời bất kỳ trong nhóm A và B mỗi khi
muốn truyền tin bảo mật cho nhau có thể cùng thực hiện giao thức sau đây để trao đổi
khoá:
1) A chọn ngẫu nhiên số aA (0 ≤ aA ≤ p-2) bí mật, tính pb a
A modA
 và gửi bA
cho B .
2) Tƣơng tự, B chọn ngẫu nhiên số aB (0 ≤ aB ≤ p-2) bí mật, tính pb a
B modB

và gửi bB cho A.
3) A và B cùng tính đƣợc khoá chung:
).mod(modmod AA
, ppbpbK BB aaa
A
a
BBA 
Giao thức trao đổi khoá Diffie-Hellman có các tính chất sau:
 Giao thức là an toàn đối với việc tấn công thụ động, nghĩa là một ngƣời thứ ba
dù biết bA và bB sẽ khó mà biết đƣợc KA,B.
Chúng ta biết rằng bài toán “biết bA và bB tìm KA,B” chính là bài toán Diffie-Hellman,
bài toán này tƣơng đƣơng với bài toán phá mã ElGammal. Bây giờ ta sẽ chứng minh điều
này.
Phép mật mã ElGammal với khoá K = (  ,,, ap ), trong đó pa
mod  cho ta từ
một bản rõ x và một số ngẫu nhiên 1 pZk lập đƣợc mật mã eK(x, k) = (y1, y2) với
py k
mod1  , .mod2 pxy k
 Và phép giải mã đƣợc cho bởi py k
mod1  .
Giả sử ta có thuật toán A giải bài toán Diffie-Hellman. Ta sẽ dùng A để phá mã
ElGammal nhƣ sau:
Cho mật mã (y1, y2). Trƣớc tiên, dung A cho py k
mod1  và ,mod pa
  ta
đƣợc pByA kka
mod),( 1   . Sau đó, ta thu đƣợc bản rõ x từ k
 và y2 nhƣ sau:
.mod)( 1
2 pyx k 
 
Chƣơng VI: Quản lý khóa
125
Ngƣợc lại, giả sử có một thuật toán khác là B dùng để phá mã ElGammal, tức
.mod)(),,,,( 1
1221 pyyxyypB a 
 Áp dụng B cho Ab , y1 = bB, y2 =1, ta đƣợc
,mod)).(1()1,,,,( AA 111
pbbbpB Baaa
BBA   
tức giải đƣợc bài toán Diffie-Hellman.
 Giao thức là không an toàn đối với việc tấn công chủ động bằng cách đánh
tráo giữa đƣờng.
Nghĩa là một ngƣời thứ ba C có thể đánh tráo các thông tin trao đổi giữa A và B.
Chẳng hạn, C thay Aa
 mà A định gửi cho B bởi Aa'
 và thay Ba
 mà B định gửi cho A
bởi Ba'
 . Nhƣ vậy, sau khi thực hiện giao thức trao đổi khoá, A đã lập một khoá chung
Baa 'A
 với C mà vẫn tƣởng là với B; đồng thời B cũng lập một khoá chung BA aa'
 với C
mà vẫn tƣởng là với A. C có thể giả mã mọi thông báo mà A tƣởng nhầm là mình gửi đến
B cũng nhƣ mọi thông báo mà B tƣởng nhầm là mình gửi đến A.
Một cách khắc phục kiểu tấn công này là làm sao để A và B có kiểm thử để xác
nhận tính đúng đắn của các khoá công khai bA và bB. Ngƣời ta đƣa vào giao thức trao đổi
khoá Diffie-Hellman thêm vai trò điều phối của một TA để đƣợc một hệ phân phối khoá
Diffie-Hellman nhƣ một cách khắc phục nhƣợc điểm này. Trong hệ phân phối khoá Diffie-
Hellman, sự can thiệp của TA là rất yếu, thực ra TA chỉ làm mỗi việc là cấp chứng chỉ xác
nhận khoá công khai cho từng ngƣời dùng chứ không đòi hỏi biết thêm bất cứ một bí mật
nào của ngƣời dùng. Tuy nhiên, nếu chƣa thoả mãn với vai trò hạn chế đó của TA thì có
thể cho TA một vai trò xác nhận yếu hơn, không liên quan gì đến khoá, chẳng hạn nhƣ
xác nhận thuật toán kiểm thử chữ ký của ngƣời dùng, còn bản thân các thông tin về khoá
(cả bí mật lẫn công khai) thì do các ngƣời dùng trao đổi trực tiếp với nhau. Với cách khắc
phục có vai trò hết sức hạn chế đó của TA, ta đƣợc giao thức sau đây:
3.2. Giao thức trao đổi khoá Diffie-Hellman có chứng chỉ xác nhận
Mỗi ngƣời dùng A có một danh tính ID(A) và một sơ đồ chữ ký với thuật toán ký sigA
và thuật toán kiểm thử verA. TA cũng có một vai trò xác nhận, nhƣng không phải xác nhận
bất kỳ thông tin nào liên quan đến việc tạo khoá mật mã của ngƣời dùng (dù là khoá bí
mật hay khoá công khai), mà chỉ là xác nhận một thông tin ít quan hệ khác nhƣ thuật toán
kiểm thử chữ ký của ngƣời dùng. Còn bản thân các thông tin liên quan đến việc tạo khoá
mật mã thì các ngƣời dùng sẽ trao đổi trực tiếp với nhau. TA cũng có một sơ đồ chữ ký
của mình, gồm một thuật toán ký sigTA và một thuật toán kiểm thử công khai verTA. Chứng
chỉ mà TA cấp cho mỗi ngƣời A sẽ là:
C(A) = (ID(A), verA, sigTA(ID(A), verA)).
Rõ ràng trong chứng chỉ đó TA không xác nhận bất kỳ điều gì liên quan đến việc tạo
khoá của A cả. Việc trao đổi khoá giữa hai ngƣời dùng A và B đƣợc thực hiện theo giao
thức sau đây:
1) A chọn ngẫu nhiên số aA (0 ≤ aA ≤ p-2), tính pb a
A modA
 và gửi bA cho B.
2) B chọn ngẫu nhiên số aB (0 ≤ aB ≤ p-2), tính pb Ba
B mod tính tiếp
,mod pbK Ba
A ),,( ABBB bbsigy  và gửi (C(A), bB, yB) cho A.
Chƣơng VI: Quản lý khóa
126
3) A tính ,mod pbK Aa
B dùng verB để kiểm thử yB, dùng verTA để kiểm thử C(B),
sau đó tính yA = sigA(bA, bB) và gửi (C(A), yA) cho B.
4) B dùng verA để kiểm thử yA và dùng verTA để kiểm thử C(A).
Nếu tất cả các bƣớc đó đƣợc thực hiện và các phép kiểm thử đều cho kết quả đúng
đắn thì giao thức đƣợc kết thúc, và cả A và B đều có đƣợc khoá chung K. Do việc dùng
các thuật toán kiểm thử nên A biết chắc giá trị bB là của B và B biết chắc giá trị bA của A,
loại trừ khả năng một ngƣời C nào khác đánh tráo các giá trị đó giữa đƣờng.
3.3. Giao thức trao đổi khoá Matsumoto-Takashima-Imai
Giao thức trình bày trong mục trên dùng ba lần chuyển tin qua lại để thiết lập một
khoá chung. Các tác giả Nhật Matsumoto, Takashima và Imai đề nghị một cải tiến để chỉ
dùng một giao thức gồm hai lần chuyển tin (một từ A đến B và một từ B đến A) để thoả
thuận khoá nhƣ sau:
Ta giả sử rằng trƣớc khi thực hiện giao thức, TA đã ký cấp chứng chỉ cho mỗi
ngƣời dùng A theo cách trong giao thức trao đổi DH:
C(A) = (ID(A), bA, sigTA(ID(A), bA)).
và thuật toán kiểm thử chữ ký verTA là công khai. Trong giao thức này, các bA không
trực tiếp tạo nên các khoá mật mã cho truyền tin, mà với mỗi phiên truyền tin bảo mật,
khoá phiên (sesion key) sẽ đƣợc tạo ra cho từng phiên theo giao thức.
Giao thức trao đổi khoá phiên MTI gồm ba bƣớc (trong đó có hai lần chuyển tin)
nhƣ sau:
1) A chọn ngẫu nhiên số rA (0 ≤ rA ≤ p-2), tính ,mod ps Ar
A  và gửi (C(A), sA)
cho B.
2) B chọn ngẫu nhiên số rB (0 ≤ rB ≤ p-2), tính ,mod ps Br
B  và gửi (C(B), sB)
cho A.
3) A tính ,mod.A
pbsK Ar
B
a
B với giá trị bB thu đƣợc từ C(B)
B tính ,mod. pbsK BB r
B
a
A với giá trị bB thu đƣợc từ C(A).
Hai cách tính đó cho cùng một giá trị .modA
pK arar BBA 
 
Giao thức này cũng có khả năng giữ bí mật khoá K nhƣ đối với giao thức Diffie-
Hellman trƣớc sự tấn công thụ động. Tuy nhiên, vì không có chứng chỉ đối với các giá tri
sA, sB nên vẫn có nguy cơ của sự tấn công tích cực bằng việc đánh tráo giữa đƣờng bởi
một ngƣời C nào đó theo kiểu sau đây:
Lẽ ra A gửi đến B cặp (C(A), sA) thì C đánh tráo bằng cách (C(A), sA) và gửi đến B
giá trị (C(A), s‟A) với ps Ar
A mod' '
 . Và ngƣợc lại, đáng lẽ B gửi đến A giá trị (C(B), sB)
C(A), Ar'

A C B
C(A), Ar

C(B), Br'
 C(B), Br

Chƣơng VI: Quản lý khóa
127
thì C đánh trao bằng cách nhận (C(B), sB) và gửi đến A giá trị (C(B), s‟B) với
ps Br
B mod' '
 . Khi đó A tính đƣợc khoá:
,modA'
1 pK arar BBA 
 
và B tính đƣợc khoá:
.modA'
2 pK arar BBA 
 
Hai giá trị K1 và K2 này khác nhau nên không giúp A và B truyền tin đƣợc cho nhau,
nhƣng C không có khả năng tính đƣợc giá trị nào trong hai giá trị đó (vì không biết aA và
aB) nên khác với giao thức Diffie-Hellman, ở đây C chỉ có thể phá rối, chứ không thể đánh
cắp thông tin đƣợc.
3.4. Giao thức Girault trao đổi khoá không chứng chỉ
Giao thức Girault đƣợc đề xuất năm 1991. Trong giao thức này, ngƣời sử dụng A
không cần dùng chứng chỉ C(A) mà thay bằng một khoá công khai tự chứng thực đƣợc
cấp trƣớc bởi một TA. Phƣơng pháp này sử dụng kết hợp các đặc tính của bài toán RSA
và logarit rời rạc.
Giả sử n là tích của hai số nguyên tố lớn p và q, n = p*q, p và q có dạng p = 2p1+1,
q = 2q1+1, trong đó p1 và q1 cũng là các số nguyên tố. Nhóm nhân *
nZ đẳng cấu với tích
**
qp xZZ . Cấp cao nhất của một phần tử trong *
nZ là bội chung bé nhất của p-1 và q-1, tức
là bằng 2p1q1. Giả sử  là một phần tử cấp 2p1q1 của *
nZ . Nhóm tuần hoàn sinh bởi 
đƣợc ký hiệu là G, bài toán tính logarit rời rạc theo cơ số  trong G đƣợc giả thiết là rất
khó.
Các số n và  là công khai. Chỉ TA biết p, q. TA chọn số mũ công khai e với
UCLN(e, )(n ) = 1, và giữ bí mật ).(mod1
ned 

Mỗi ngƣời dùng A có một danh tính ID(A), chọn ngẫu nhiên một số Ga A , giữ bí
mật aA và tính nb a
A modA
 , rồi gửi aA, bA cho TA. TA thử lại điều kiện
nb a
A modA
 , rồi cấp cho A một khoá công khai tự chứng thực pA = (bA-ID(A))d
mod n.
Trong khoá công khai pA không có thông tin về aA nhƣng TA cần biết aA để thử điều kiện
nb a
A modA
 .
Giao thức Girault trao đổi khoá giữa hai ngƣời dùng A và B đƣợc thực hiện bởi các
bƣớc sau đây:
1) A chọn ngẫu nhiên GrA  , tính ns Ar
A mod và gửi cho B các giá trị (ID(A),
pA, sA).
2) B chọn ngẫu nhiên GrB  , tính ns Br
B mod và gửi cho B các giá trị (ID(B),
pB, sB).
3) A tính khoá ,mod))((A
nVIDpsK Are
B
a
B 
B tính khoá .mod))((B
nAIDpsK Bre
A
a
A 
Chƣơng VI: Quản lý khóa
128
Cả hai giá trị đó của K đều bằng nhau và bằng .modA
nK arar BBA 
  .
Bằng các lập luận tƣơng tự nhƣ ở mục trƣớc, ta dễ thấy rằng một ngƣời thứ ba C
khó mà tạo ra các thông tin giả mạo để gửi đến A hoặc B, nếu tấn công bằng cách đánh
tráo giữa đƣờng thì có thể phá rối để ngăn cản A và B tạo lập khoá chung nhƣng không
thể đánh cắp thông tin trao đổi giữa A và B.
Còn lại vấn đề: tại sao TA cần biết aA và thử điều kiện nb a
A modA
 trƣớc khi
cấp pA cho A! Ta giả sử rằng TA không biết aA và cấp pA = (bA-ID(A))d
mod n cho A , và
thử xem có thể xảy ra chuyện gì?
Một ngƣời thứ ba C có thể chọn một giá trị a‟A và tính nb a
A mod' A'
 , rồi tính b‟C =
b‟A - ID(A) – ID(C) và đƣa (ID(C), b‟C) cho TA. TA sẽ cấp cho C một “khoá công khai tự
chứng thực”:
p‟C = (b‟C – ID(C))d
mod n.
Vì b‟C – ID(C) = b‟A – ID(A) nên thực tế C đã đƣợc cấp:
p‟C = p‟A = (b‟A – ID(A))d
mod n.
Bây giờ giả sử A và B thực hiện giao thức trao đổi khoá và C xen vào ở giữa. Nhƣ
vậy, A gửi cho B )mod,),(( npAID Ar
A  , nhƣng do C đánh tráo nên B sẽ nhận đƣợc
)mod,'),(( '
npAID Ar
A  . Do đó, B và C tính đƣợc cùng một khoá:
,mod))((mod' '''' A
nBIDpsnK AABBA re
B
a
B
arar
 

còn A tính đƣợc khoá .modA
nK arar BBA 
 
B và C có cùng một khoá khác với khoá của A nhƣng B vẫn nghĩ rằng mình có
chung khoá với A. Vì thế, C có thể giải mã mọi thông báo mà B gửi cho A, tức đánh cắp
thông tin từ B đến A. Việc TA biết aA và thử điều kiện nb a
A modA
 trƣớc khi cấp pA
cho A là để loại trừ khả năng đánh tráo nhƣ vậy của một kẻ tấn công C.
4.Bài tập
Bài tập 6.1: Giả sử A và B sƣ̉ dụng kỹ thuật phân phố i khó a Diffie -Hellman để truyền tin
cho nhau vớ i số nguyên tố đƣợc chọn là p = 71 và phần tử nguyên thủy α = 7.
a) Nế u khó a bí mật của A là XA = 5 thì khóa công khai của A là gì?
b) Nế u khó a bí mật của B là XB = 12 thì khóa công khai của B là gì?
c) Cho biế t khó a bí mật dù ng để truyề n tin?
Bài tập 6.2: A và B sƣ̉ dụng kỹ thuật phân phố i khó a Diffie-Hellman để truyề n tin cho
nhau vớ i p = 11 và phần tử nguyên thủy α = 2.
a) Hãy chứng minh rằ ng α = 2 đú ng là phầ n tƣ̉ nguyên thủy của Z*
11.
b) Nế u khó a công khai của A là YA = 9 thì khóa bí mật của A là bao nhiêu?
(ID)A, p'A, Ar'

A C B
(ID)A, pA, Ar

(ID)B, pB, Br
 (ID)B, pB, Br

Chƣơng VI: Quản lý khóa
129
c) Giả sử B có khóa công khai là Y B = 3, hãy tìm khóa bí mật dùng để truyền tin
giƣ̃a A và B.
Chƣơng VII: Giao thƣ́ c mật mã
130
CHƢƠNG VII: GIAO THƢ́ C MẬT MÃ
1. Giao thức
Định nghĩa:
Một giao thức (protocol) chỉ đơn giản là một chuỗi các bước thực hiện trong đó có ít
nhất 2 bên tham dự, được thiết kế để thực hiện một nhiệm vụ nào đó.[2]
Định nghĩa này đơn giản nhƣng chặt chẽ: “một chuỗi các bƣớc” nghĩa là một dãy
các bƣớc có thứ tự, có đầu có cuối, bƣớc trƣớc phải đƣợc kết thúc trƣớc khi thực hiện
bƣớc sau. “Có ít nhất hai bên tham gia” nghĩa là có thể có nhiều ngƣời cùng tham gia
thực hiện chuỗi bƣớc này, do đó nếu một ngƣời thực hiện một chuỗi các bƣớc thì không
thể gọi là một giao thức đƣợc. Và cuối cùng một giao thức phải đƣợc thiết kế nhằm đạt
đƣợc tới một kết quả nào đó.
Một giao thức có những đặc tính nhƣ sau:
 Các bên tham gia phải hiểu cách thức và các bƣớc thực hiện một giao thức khi
tham gia thực hiện.
 Các bên phải đồng ý tuyệt đối tuân thủ các bƣớc.
 Giao thức phải rõ ràng, tất cả các bƣớc phải đƣợc viết tƣờng minh, không có
chỗ nào gây nên khả năng hiểu nhầm.
 Giao thức phải đầy đủ, tất cả các tình huống biến đổi đều phải đƣợc đƣa ra.
Giao thức mật mã là một giao thức có vận dụng các kiến thức của lý thuyết mật mã
để đạt đƣợc các mục tiêu về mặt an toàn và bảo mật cho hệ thống. Các thành phần tham
gia có thể là bạn bè tin tƣởng lẫn nhau, nhƣng cũng có thể là những kẻ địch của nhau.
Một giao thức mật mã có liên quan đến các thuật toán của mật mã nhƣng thông thƣờng
mục đích của nó đi xa hơn là tính bảo mật thuần tuý. Các bên có thể tham dự vào việc
chia sẻ các phần của một bí mật đƣợc dùng để chiết xuất ra một thông tin nào đó, có thể
cùng kết hợp phát ra một chuỗi số ngẫu nhiên, có thể chứng minh danh tính của mình
cho bên kia hay đồng thời ký vào một văn bản hợp đồng. Toàn bộ vấn đề của lý thuyết
mật mã ở đây là làm sao dò ra và chống lại các khả năng nghe trộm hay lừa dối.
Nguyên tắc để thiết kế giao thức: phải làm sao để không ai, không bên nào có thể
thu đƣợc nhiều hơn, biết đƣợc nhiều hơn những gì mà thiết kế ban đầu giả định.
2. Mục đích của các giao thức
Ngày nay, với sự phát triển vũ bão của hệ thống máy tính toàn cầu đi đến từng hộ
gia đình, việc đƣa các nghi thức thủ tục làm ăn bình thƣờng của ngƣời ta thực hiện qua
mạng cũng là không bao xa. Nhƣ vậy cần phải thiết kế những thủ tục làm việc tƣơng ứng
cho máy tính để có thể thay thế cho các thủ tục trong đời thƣờng. Điểm khác biệt đặc
trƣng ở đây là bây giờ ngƣời làm việc với nhau thông qua các máy tính mà không cần
thấy mặt nhau nữa. Hơn nữa máy tính không phải là ngƣời, nó không thể dễ dàng thích
nghi với thay đổi nhƣ chúng ta đây. Vì vậy cần tính đến mọi tình huống, mọi khả năng có
thể của giao thức.
Chƣơng VII: Giao thƣ́ c mật mã
131
Rất nhiều các thủ tục làm ăn hàng ngày của chúng ta đƣợc tin tƣởng dựa trên sự
có mặt cùng nhau của các bên đối tác, chính vì thế nên việc xây dựng những giao thức
trên máy tính là không còn đơn giản nhƣ các thủ tục đời thƣờng mà nó thay thế. Bạn cứ
tự hỏi xem ngƣời ta có thể trao một chồng tiền mặt cho một ngƣời lạ để nhờ mua hàng có
đƣợc không? Hay thử hỏi xem bạn có dám gửi thƣ cho chính phủ với phiếu bầu của bạn
mà không có các thủ tục đảm bảo về việc giấu tên. Thật là ngây thơ nếu tin rằng mọi
ngƣời làm việc trên mạng máy tính đều trung thực. Và cũng thật là cả tin nếu cho rằng
các nhà quản trị mạng, hay thậm chí ngay cả các nhà thiết kế ra các mạng này là trung
thực đến cùng. Dù hầu hết là nhƣ thế nhƣng chỉ cần một thiểu số những ngƣời không
trung thực cũng đủ ngây ra thiệt hại nếu chúng ta không có các biện pháp đảm bảo.
Với phƣơng pháp hình thức hoá, chúng ta có thể thử thiết kế các giao thức rồi tìm
hiểu, kiểm tra khả năng của nó có vững hay không trƣớc mọi kiểu xâm phạm của các kẻ
không trung thực; từ đó mà cải tiến, phát triển lên để chống lại các kiểu tấn công đó. Bằng
cách đó mà ngƣời ta đã xây dựng các giao thức cho các máy tính giải quyết đƣợc các
nhiệm vụ, các bài toán đời sống hàng ngày.
Hơn nữa giao thức máy tính là một hình thức trừu tƣợng hoá và không quan tâm
đến việc cài đặt cụ thể. Một giao thức là giống nhau dù nó đƣợc cài đặt trên bất cứ hệ
điều hành nào. Vì thế một khi chúng đã có thể khẳng định đƣợc độ tin cậy của giao thức
ta có thể áp dụng nó ở bất cứ đâu, dù là cho máy tính, cho điện thoại hay cho một lò vi
sóng thông minh ...
3. Các bên tham gia vào giao thức (the players in protocol)
Để có thể tiếp cận thống nhất với tất cả các giao thức thì một điều cần thiết là có
một qui định thống nhất cách gọi tên tất cả các bên tham gia và dính líu có thể có trong
giao thức: [6]
Alice bên thứ nhất trong các giao thức.
Bob bên thứ hai trong các giao thức.
Carol bên tham gia thứ ba trong các giao thức.
Dave bên tham gia thứ tƣ trong các giao thức.
Eve kẻ nghe trộm (eavesdropper).
Mallory
kẻ tấn công chủ động có nhiều quyền lực trên mạng và rất nguy hiểm
(malicious active attacker).
Trent trọng tài (trusted arbitrator).
Walter
ngƣời canh gác (warden), có thể đứng canh gác Alice và Bob trong một
số giao thức .
Peggy ngƣời chứng minh (prover).
Victor
ngƣời thẩm tra (verifier), Peggy cần phải chứng minh với Victor về một
quyền sở hữu nào đó chẳng hạn nhƣ danh tính của anh ta khai là đúng
hay anh ta đúng là kẻ có thẩm quyền để đƣợc truy nhập vào một nơi
quan trọng ...
Chƣơng VII: Giao thƣ́ c mật mã
132
4. Các dạng giao thức
4.1. Giao thức có trọng tài
Ngƣời trọng tài là ngƣời thoả mãn các điều kiện sau:
 Không có quyền lợi riêng trong giao thức và không thiên vị cho một bên nào.
 Các bên tham gia có quyền lợi trong giao thức đều tin tƣởng vào trọng tài rằng
bất kỳ cái gì mà anh ta nói và làm đều là đúng và chính xác, đồng thời tin tƣởng anh ta sẽ
hoàn thành trách nhiệm của mình trong giao thức.
Nhƣ vậy trọng tài có thể đứng ra để giúp hoàn thành các giao thức giữa những bên
tham gia không tin tƣởng lẫn nhau.
Ví dụ 1:
Alice muốn bán một chiếc xe cho một ngƣời lạ là Bob. Bob muốn trả bằng séc, tuy
nhiên Alice lại không có cách nào để biết đƣợc séc đó có giá trị thật sự hay không. Do
vậy, cô ta chỉ muốn đƣợc chuyển séc trƣớc khi giao xe cho Bob và đấy chính là mâu
thuẩn bế tắc vì Bob cũng chẳng tin gì Alice nên anh ta sẽ không đƣa séc trƣớc khi nhận
đƣợc chiếc xe.
Cách giải quyết sẽ thông qua Trent (ngƣời mà cả Bob và Alice đều tin tƣởng) và
một giao thức sẽ diễn ra nhƣ sau để đảm bảo tính trung thực:
 Alice chuyển vật cần bán cho Trent
 Bob đƣa tờ séc cho Alice.
 Alice chuyển séc vào tài khoản của cô ta ở ngân hàng.
 Đợi một khoảng thời gian nhất định đến khi séc đã chuyển xong, Trent sẽ giao
hàng cho Bob. Nếu tờ séc không hợp lệ thì Alice sẽ báo cho Trent biết với bằng chứng cụ
thể và Trent sẽ giao trả lại hàng cho cô ta.
Trong giao thức này:
 Alice tin tƣởng rằng Trent sẽ không trao hàng cho Bob trừ khi séc đƣợc
chuyển xong và sẽ chuyển lại hàng cho cô ta nếu séc không có giá trị.
 Bob tin tƣởng Trent sẽ giữ hàng trong thời gian séc đƣợc chuyển và sẽ giao
nó cho anh ta một khi đƣợc chuyển xong.
 Trent không quan tâm đến việc tờ séc có giá trị thật sự và có chuyển đƣợc hay
không, anh ta làm phần việc của mình trong cả hai trƣờng hợp có thể xảy ra đúng nhƣ
giao thức qui định, đơn giản vì anh ta sẽ đƣợc trả tiền công trong cả hai trƣờng hợp.
Ví dụ 2:
Nhà băng cũng có thể đứng ra làm trọng tài cho ALice và Bob. Bob sử dụng một cái
séc có chứng nhận của nhà băng để mua bán với Alice:
 Bob viết một séc và chuyển cho nhà băng.
 Sau khi cầm một số tiền từ tài khoản của Bob bằng giá trị của tờ séc, nhà băng
ký chứng nhận lên séc và chuyển trả lại cho Bob.
Chƣơng VII: Giao thƣ́ c mật mã
133
 Alice giao xe cho Bob cùng lúc Bob đƣa Alice tờ séc có chứng nhận của nhà
băng.
 Alice chuyển séc vào nhà băng.
Giao thức này thực hiện đƣợc bởi vì Alice tin tƣởng vào chứng nhận của nhà băng,
tin rằng nhà băng cầm giữ số tiền của Bob cho cô ta mà không sử dụng nó vào đầu tƣ ở
bất cứ đâu.
Tƣ tƣởng này đƣợc đem áp dụng vào thế giới máy tính, tuy nhiên ở đây xuất hiện
một số vấn đề nhất định đối với hệ thống máy tính:
 Có thể dễ dàng tìm thấy và đặt lòng tin vào một bên thứ ba trung gian (trọng
tài) nếu ta biết và có thể nhìn tận mặt họ. Tuy nhiên nếu hai bên tham gia giao thức đã
nghi ngờ nhau thì việc cùng đặt lòng tin vào một bên thứ ba nào đó nằm đâu đó khuất
diện trên mạng máy tính cũng trở nên có thể đáng ngờ.
 Mạng máy tính phải tốn thêm chi phí để quản lý và bảo trì máy tính trọng tài.
 Luôn luôn có những khoảng trễ vốn gắn liền với bất kỳ một giao thức có trọng
tài nào.
 Trọng tài phải tham gia vào mọi giao dịch trên mạng, điều đó có nghĩa ở đó sẽ
trở nên một điểm thắt nút cổ chai (bottleneck), dễ tắc trên mạng một khi giao thức đã
đƣợc triễn khai cho một ứng dung rộng rãi. Tăng cƣờng số trọng tài có thể giúp tránh bế
tắc này nhƣng lại làm tăng thêm chi phí để quản lý bảo trì những máy tính có trọng tài đó.
 Bởi vì tất cả mọi ngƣời trên mạng đều tin trọng tài, dễ gây ra ở đây một điểm
nhạy cảm chịu áp lực tấn công tập trung từ các kẻ rình rập để phá hệ thống.
4.2. Giao thức có ngƣời phân xử
Để yên tâm giao dịch, Alice và Bob cần mời một trọng tài có uy tín cao, tuy nhiên ở
đây sẽ nảy sinh vấn đề về việc phải trả số tiền xứng đáng cho ngƣời này, rõ ràng là
không phải không đáng kể. Vì vậy ngƣời ta đã nảy sinh ý nghĩ chia giao thức có trọng tài
tham dự (arbitrated protocol) thành hai phân giao thức (subprotocol) ở hai cấp dƣới:
 Một là một giao thức không cần đến trọng tài, thực hiện bất kỳ khi nào muốn
tiến hành giao dịch.
 Hai là một arbitrated giao thức chỉ đƣợc sử dụng khi Alice và Bob cãi nhau và
muốn có ngƣời phân xử.
Vì thế trong trƣờng hợp này ta không dùng khái niệm ngƣời trọng tài (arbitrated) với
nghĩa là ngƣời phải trực tiếp tham gia vào giao thức, mà sử dụng ngƣời phân xử
(adjudicator), bao hàm ý nghĩa ngƣời này không cần phải có mặt khi Alice và Bob tiến
hành giao dịch mà chỉ đƣợc mời đến khi Alice và Bob yêu cầu giải quyết tranh cãi.
Cũng giống nhƣ trọng tài, ngƣời phân xử phải không có quyền lợi liên can đến giao
dịch của Alice và Bob, và đƣợc cả hai ngƣời này tin tƣởng. Anh ta không tham gia trực
tiếp vào giao dịch nhƣ trọng tài nhƣng sẽ đứng ra để xác định xem là giao dịch có đƣợc
tiến hành đúng không và xác định bên sai bên đúng nếu nhƣ có tranh cãi.Nhƣng điểm
khác biệt giữa trọng tài và ngƣời phân xử là ngƣời phân xử không phải luôn luôn cần
thiết, nếu có tranh cãi thì mới cần ngƣời phân xử (không có tranh cãi thì thôi).
Chƣơng VII: Giao thƣ́ c mật mã
134
Các thẩm phán là những ngƣời phân xử chuyên nghiệp. Khác với công chứng viên,
một thẩm phán - ngƣời mà sẽ chỉ đƣợc biết đến hợp đồng này khi nào một trong hai
ngƣời Alice hay Bob lôi ngƣời kia ra toà. Giao thức dùng cho ký kết hợp đồng này có thể
đƣợc hình thức hoá nhƣ sau:
Ví dụ:
Tại mọi thời điểm:
 Alice và Bob thoả thuận các điều khoản trong hợp đồng.
 Alice ký hợp đồng.
 Bob ký hợp đồng.
Khi có tranh cãi cần giải quyết:
 Alice và Bob đến gặp quan toà nhờ phân xử.
 Alice đƣa ra chứng cớ của cô ta.
 Bob trình bày các chứng cớ của anh ta.
 Quan toà xem xét các chứng cớ và phán quyết.
Ý tƣởng dùng ngƣời phân xử này có thể đem vào áp dụng trên máy tính. Trong
những giao thức thế này nếu có một bên tham gia mà không trung thực thì dữ liệu lƣu
đƣợc từ giao thức sẽ cho phép ngƣời phân xử sau này phát hiện đƣợc ai là ngƣời đã lừa
dối. Nhƣ vậy thay vì ngăn chặn trƣớc sự lừa đảo, giao thức ngƣời phân xử sẽ phát hiện
đƣợc lừa dối nếu xảy ra, thực tế này khi đƣợc phổ biến rộng rãi sẽ có tác dụng ngăn
chặn, làm lùi bƣớc những kẻ có ý định lừa đảo.
4.3. Giao thức tƣ̣ phân xƣ̉
Giao thức tƣ̣ phân xƣ̉ là loại tốt nhất trong số các giao thức. Loại giao thức này tự
bản thân nó có thể đảm bảo đƣợc tính công bằng, không cần đến trọng tài hay một thẩm
phán để phân xử khi tranh cãi. Nghĩa là giao thức loại này đƣợc chế ra sao cho không thể
có các kẽ hở cho tranh cãi nảy sinh. Nếu có bên nào cố ý sai luật thì tiến trình sẽ cho
phép phía bên kia phát hiện ra ngay và giao thức dừng lại ngay lập tức. Điều mong muốn
cho tất cả các giao thức đều nên chế tạo nhƣ thế, nhƣng đáng tiếc là không phải lúc nào
cũng có giao thức loại này cho mọi tình huống.
5. Các dạng tấn công đối với giao thức
Nếu nhƣ giao thức đƣợc coi nhƣ một nghi thức giao tiếp để các bên làm việc với
nhau thì đối với cryptography giao thức, bên dƣới cái vỏ “ngoại giao” đó là các kỹ thuật,
các thuật toán mật mã đƣợc vận dụng, cài đặt trong các bƣớc cụ thể của giao thức. Các
tấn công của kẻ phá hoại nhằm phá hoại tính an ninh của hệ thống cũng nhƣ xâm phạm
tính bí mật riêng tƣ của thông tin, có thể hƣớng vào một trong các yếu tố sau: các xử lý
kỹ thuật, các thuật toán mật mã hay là chính bản thân giao thức.
Trong phần này, chúng ta hãy gác lại khả năng thứ nhất - giả sử rằng các kỹ thuật
và thuật toán mật mã đều là an toàn; chúng ta chỉ xem xét khả năng thứ hai, tức là phân
tích các dạng tấn công có thể, trong đó kẻ thù lợi dụng các kẻ hở logic để kiếm lợi hay
phá hoại. Các dạng tấn công có thể phân thành hai loại chính nhƣ sau:
Chƣơng VII: Giao thƣ́ c mật mã
135
 Với dạng tấn công thụ động: kẻ địch chỉ đứng ngoài nghe trộm chứ không can
thiệp hay ảnh hƣởng gì đến giao thức. Mục đích của nó là cố gắng quan sát và thu lƣợm
thông tin. Tuy nhiên thông tin nghe trộm đƣợc chỉ ở dạng mã hoá, do đó kẻ địch cần phải
biết cách phân tích, giải mã thì mới dùng đƣợc (cipher only attack). Mặc dù hình thức tấn
công này không mạnh nhƣng rất khó phát hiện vì kẻ địch không gây động.
 Với dạng tấn công chủ động (active attack): kẻ địch là một thế lực trong mạng,
nắm nhiều khả năng và phƣơng tiện để có thể chủ động tấn công can thiệp, gây ảnh
hƣởng phức tạp đến giao thức. Nó có thể đóng giả với một cái tên khác can thiệp vào
giao thức bằng những thông báo kiểu mới, xoá bỏ những thông báo đang phát trên
đƣờng truyền, thay thế thông báo thật bằng thông báo giả, ngắt ngang các kênh thông tin
hay sửa chửa vào các kho thông tin trên mạng. Các khả năng khác nhau này là phụ thuộc
vào tổ chức mạng và vai trò của kẻ địch trên mạng.
Kẻ tấn công trong tấn công thụ động (Eve) chỉ cố gắng thu lƣợm thông tin từ các
bên tham gia giao thức, thông qua thu nhập các thông báo truyền tin giữa các bên để
phân tích giải mã. Trong khi đó, kẻ tấn công chủ động (Mallory) có thể gây ra các tác hại
rất phức tạp đa dạng. Kẻ tấn công có thể có mục đích đơn thuần là tóm đƣợc tin mà nó
quan tâm, nhƣng ngoài ra nó có thể gây ra các phá hoại khác nhƣ phá hoại đƣờng truyền
truy nhập vào những hệ thống thông tin mà chỉ dành cho những ngƣời có đủ thẩm quyền.
Kẻ địch trong tấn công chủ động thật sự rất nguy hiểm, đặc biệt là trong các giao
thức mà các bên khác nhau không nhất thiết phải tin nhau. Hơn nữa phải nhớ rằng kẻ
địch không phải chỉ có thể là những kẻ xa lạ bên ngoài mà nó có thể là một cá nhân hợp
pháp trong hệ thống, thậm chí ngay chính là ngƣời quản trị mạng. Ngoài ra còn có thể có
nhiều cá nhân liên kết với nhau thành một nhóm kẻ địch, làm tăng lên sự nguy hiểm cho
giao thức.
Một điều cũng có thể xảy ra là Mallory lại chính là đối tác trong giao thức. Anh ta có
thể có hành động lừa dối hoặc là không chịu tuân theo giao thức. Loại kẻ địch này đƣợc
là kẻ lừa đảo (cheater). Kẻ lừa đảo thuộc loại thụ động thì có thể làm đúng theo giao thức
nhƣng lại cố tình thu nhặt thêm thông tin từ các bên đối tác hơn là đƣợc phép theo qui
định. Kẻ lừa đảo chủ động thì phá vỡ giao thức trong một cố gắng lừa dối. Rất khó để giữ
an toàn cho một giao thức nếu nhƣ phần lớn các bên tham gia đều là những kẻ lừa đảo
chủ động, tuy nhiên đôi khi ngƣời ta cũng có các biện pháp để các bên hợp pháp có thể
dò ra đƣợc sự lừa đảo đang diễn ra. Tất nhiên các giao thức cũng cần phải đƣợc bảo vệ
để chống lại những kẻ lừa đảo loại thụ động.
Tài liệu tham khảo
136
TÀI LIỆU THAM KHẢO
[1] Nik Goots, Boris Izotov, Alex Moldovyan and Nik Moldovyan, “Modern Cryptography-
Protect Your Data with Fast Block Ciphers”, A-LIST Publishing , 2003.
[2] Whitfield Diffie, Martin E. Hellman, “New Directions in Cryptography”, IEEE
transactions on information theory, Vol. IT-22, No. 6, November 1976.
[3] Randy Nichols (LANAKI), “Classical cryptography course”, 1995.
http://www.forturecity.com/course/LANAKI.html
[4] A.Menezes, P. van Oorchot, and S.Vanstone, “Hand book of Applied Cryptography”,
CRC Press, 1996. http://www.cacr.math.uwaterloo.ca/hac
[5] Douglas R.Stinson, “Cryptography: theory and practice”, CRC Press,
1995.http://www.mindspring.com/~pate/stinson/
[6] Bruce Schneier, “Applied Cryptography, Second Edition: Protocols, Algorthms, and
Source Code in C (cloth)”, MIST Press, 1996.
[7] Gil Held, “Learn Encryption Techniques with BASIC and C++”, CRC Press, 1998.
[8] FIPS 186 - (DSS)http://www.itl.nist.gov/fipspubs/fip186.htm
[9] Jean Berstel, Dominique, “Theory of code”, Academic Press Inc, 1985.
[10] C. Shannon, “Communication theory of secret systems” (tạp chí khoa học), 1949.
[11] RSA library. www.fpt.rsa.org/PKI
[12] “System and Network Security”. http://www.cs.ncl.ac.uk/old/modules/2000-
01/csc331/notes/
[13] “Cryptography and Computer Security”.
http://www.cs.adfa.edu.au/teaching/studinfo/csc/lectures/
[14] http://www.securitydynamics.com/rsalabs/changelenges/factoring/rsa155.html.
[15] “Data security and cryptography”. http://www.islab.oregonestate.edu/koc/ece575
[16] “OPT8 Advanced Cryptography”.
http://www.isg.rhul.ac.uk/msc/teaching/opt8/macs.pdf

More Related Content

DOCX
Do a nfinal
DOCX
Do a nfinal (1)
PDF
Suggestions after-vna-attack
PDF
Những vấn đề về an toàn thông tin và tội phạm tin học
PDF
Snm ptoantap diep_thanhnguyen_-chuong1
PDF
MẠNG NƠRON VÀ QUÁ TRÌNH HỌC CỦA MẠNG NƠRON
PDF
Dự Đoán Lỗ Hổng Phần Mềm Dựa Trên Kỹ Thuật Khai Phá Dữ Liệu
PPTX
Tiempo metorologuico
Do a nfinal
Do a nfinal (1)
Suggestions after-vna-attack
Những vấn đề về an toàn thông tin và tội phạm tin học
Snm ptoantap diep_thanhnguyen_-chuong1
MẠNG NƠRON VÀ QUÁ TRÌNH HỌC CỦA MẠNG NƠRON
Dự Đoán Lỗ Hổng Phần Mềm Dựa Trên Kỹ Thuật Khai Phá Dữ Liệu
Tiempo metorologuico

Viewers also liked (20)

PPSX
Dwyane wade
PPTX
Hodgkin's Lymphoma
PPT
Marcelle poirier
PDF
Filosofia medieval -_Alfredo_Storck
PPTX
L'aparell de golgi
PDF
Krill yağının kireçleme ve artrit üzerinde etkileri
PDF
Ali turnbull-shellfish-futures-2012
PPTX
Fortune data it_group
PPTX
Ahead of the game
PDF
Инструкция по настройке сервиса Daas на базе мини пк
PPTX
Git ritesh venture_pact
PPSX
άλμπουμ φωτογραφιών1
PPTX
Give Your Business a 2017 Sales Tax Checkup
PPTX
Portafolio diagnóstico
PPTX
íDolos
PDF
Listes applications balais charbons aeg atlas copco
PPTX
Event photographers las vegas nv
PPT
Georgi chapkanov-2013-1
PPT
Zrejúce syry
Dwyane wade
Hodgkin's Lymphoma
Marcelle poirier
Filosofia medieval -_Alfredo_Storck
L'aparell de golgi
Krill yağının kireçleme ve artrit üzerinde etkileri
Ali turnbull-shellfish-futures-2012
Fortune data it_group
Ahead of the game
Инструкция по настройке сервиса Daas на базе мини пк
Git ritesh venture_pact
άλμπουμ φωτογραφιών1
Give Your Business a 2017 Sales Tax Checkup
Portafolio diagnóstico
íDolos
Listes applications balais charbons aeg atlas copco
Event photographers las vegas nv
Georgi chapkanov-2013-1
Zrejúce syry
Ad

Similar to Giao an attt use (20)

PDF
Giao trinh an toan bao mat thong tin
PDF
Luận văn Nghiên cứu giải thuật Advances Encryption Standard mã hóa văn bản mậ...
PDF
GT Co so mat ma .pdf
PDF
Luận văn: Đề xuất thuật toán mã hóa văn bản có độ bảo mật cao
PDF
Luận văn: Thuật toán mã hóa văn bản có độ bảo mật cao, HOT
PPT
Anninhmang K13 Mtt
PPT
Anninhmangk13mtt
PDF
Giáo trình bảo mật thông tin
PDF
Đề tài: Nghiên cứu khả năng bảo mật thông tin tại tầng vật lý, HAY
PDF
Bài giảng mật mã học cơ sở PTIT
PDF
Luận văn: Ứng dụng mã xyclic cục bộ xây dựng hệ mật, HAY
PPT
Bai giang atbmtt
PDF
Luận văn: Ứng dụng chữ số trong quá trình gửi nhận tài liệu điện tử
PPT
Slide bai giang_an_toan_va_bao_mat_thong_tin
PDF
giai-phap-an-ninh-trong-kien-truc-quan-tri-mang-snmp
PDF
Bài giảng mật mã học cơ sở PTIT
PDF
Luận văn Kỹ thuật giấu tin trong ảnh 2D và ứng dụng bảo mật dữ liệu văn bản
DOCX
Báo Cáo Bảo Mật Và An Toàn Thông Tin (1).docx
PPT
Baigiang atbmttl
PPTX
Chương 0. GIỚI THIỆUuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu.pptx
Giao trinh an toan bao mat thong tin
Luận văn Nghiên cứu giải thuật Advances Encryption Standard mã hóa văn bản mậ...
GT Co so mat ma .pdf
Luận văn: Đề xuất thuật toán mã hóa văn bản có độ bảo mật cao
Luận văn: Thuật toán mã hóa văn bản có độ bảo mật cao, HOT
Anninhmang K13 Mtt
Anninhmangk13mtt
Giáo trình bảo mật thông tin
Đề tài: Nghiên cứu khả năng bảo mật thông tin tại tầng vật lý, HAY
Bài giảng mật mã học cơ sở PTIT
Luận văn: Ứng dụng mã xyclic cục bộ xây dựng hệ mật, HAY
Bai giang atbmtt
Luận văn: Ứng dụng chữ số trong quá trình gửi nhận tài liệu điện tử
Slide bai giang_an_toan_va_bao_mat_thong_tin
giai-phap-an-ninh-trong-kien-truc-quan-tri-mang-snmp
Bài giảng mật mã học cơ sở PTIT
Luận văn Kỹ thuật giấu tin trong ảnh 2D và ứng dụng bảo mật dữ liệu văn bản
Báo Cáo Bảo Mật Và An Toàn Thông Tin (1).docx
Baigiang atbmttl
Chương 0. GIỚI THIỆUuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu.pptx
Ad

Giao an attt use

  • 1. BỘ GIAO THÔNG VẬN TẢI TRƯỜNG ĐẠI HỌC HÀNG HẢI BỘ MÔN: KHOA HỌC MÁ Y TÍNH KHOA: CÔNG NGHỆ THÔNG TIN Giáo trình AN TOÀN VÀ BẢO MẬT THÔNG TIN TÊN HỌC PHẦN : An toàn và bảo mật Thông tin MÃ HỌC PHẦN : 17212 TRÌNH ĐỘ ĐÀO TẠO : ĐẠI HỌC CHÍNH QUY DÙNG CHO SV NGÀNH : CÔNG NGHỆ THÔNG TIN HẢI PHÒNG - 2008
  • 2. Tên học phần: An toàn bảo mâ ̣t thông tin Loại học phần: II Bộ môn phụ trách giảng dạy: Khoa học máy tính. Khoa phụ trách: Công nghệ thông tin Mã học phần: Tổng số TC: 3 TS tiết Lý thuyết Thực hành/ Xemina Tự học Bài tập lớn Đồ án môn học 75 45 30 0 0 0 Điều kiện tiên quyết: Sinh viên cần học xong các học phần: - Lâ ̣p trình hướng đối tượng - Cấu trúc dữ liê ̣u - Phân tích, thiết kế và đánh giá thuâ ̣t toán. Mục đích của học phần: Truyền đạt cho sinh viên những kiến thức cơ bản về các lĩnh vực riêng trong an toàn bảo mật máy tính: - Các giải thuật mã hóa trong truyền tin. - Các thuật toán tạo hàm băm và chữ ký điện tử. - Các mô hình trao chuyển khóa. - Các mô hình chứng thực và các giao thức mật mã. Nội dung chủ yếu: Gồm 2 phần: -Phần lý thuyết: cung cấp các lý thuyết về thuâ ̣t toán mã hóa, các giao thức. -Phần lâ ̣p trình: cài đặt các hệ mã, viết các ứ ng dụng sử dụng các hê ̣mã mâ ̣t Nội dung chi tiết của học phần: Tên chương mục Phân phối số tiết TS LT Xemine BT KT Chương I. Giới thiệu nhiệm vụ của an toàn và bảo mật thông tin. 4 3 1 0 0 1.1. Các khái niệm mở đầu. 1.1.1. Thành phần của một hệ thống thông tin 1.1.2. Những mối đe dọa và thiệt hại đối với hệ thống thông tin. 1.1.3. Giải pháp điều khiển kiểm soát an toàn bảo mật 1.2. Mục tiêu và nguyên tắc chung của ATBM. 1.2.1. Ba mục tiêu. 1.2.2. Hai nguyên tắc 1.3. Giới thiệu chung về các mô hình mật mã. 1.3.1. Mô hình cơ bản trong truyền tin và luật Kirchoff. 1.3.2. Những giai đoạn phát triển của lý thuyết mã hóa. 1 1 1 1
  • 3. Chương II. Một số phương pháp mã hóa cổ điển. 13 5 5 2 1 2.1. Phương pháp mã đơn giản. 2.1.1. Mã hoán vị trong bảng Alphabet. 2.1.2. Mật mã cộng tính. 2.2.3. Mật mã nhân tính. 2.1.4. Phân tích mã theo phương pháp thống kê. 2.2. Phương pháp mã bằng phẳng đồ thị tần xuất. 2.2.1. Mã với bảng thế đồng âm. 2.2.2. Mã đa bảng thế: giải thuật mã Vigenre và One time pad. 2.2.3. Lý thuyết về sự bí mật tuyệt đối. 2.2.4. Đánh giá mức độ bảo mật của một phương pháp mã hóa. Kiểm tra 2 3 2 3 1 1 1 Chương III. Mật mã khối. 16 8 7 1 0 3.1. Khái niệm. 3.1.1. Điều kiện an toàn cho mật mã khối 3.1.2. Nguyên tắc thiết kế. 3.2. Chuẩn mã hóa dữ liê ̣u DES 3.2.1. Lịch sử của DES 3.2.2. Cấu trúc vòng lặp DES. 3.2.3. Thuật toán sinh khóa con 3.2.4. Cấu trúc hàm lặp. 3.2.5. Thuật toán giải mã DES. 3.2.6. Đánh giá mức độ an toàn bảo mật của DES. 3.2.7. TripleDES 3.3. Chuẩn mã hóa cao cấp AES 3.3.1. Giới thiê ̣u về AES 3.3.2. Thuâ ̣t toán mã hóa 3.3.3. Thuâ ̣t toán giải mã 3.3.4. Cài đặt AES 3.4 Một số chế độ sử dụng mã khối. 3.4.1. Chế độ bảng tra mã điện tử 3.4.2. Chế độ mã móc xích 3.4.3. Chế độ mã phản hồi 1 3 3 1 3 3 1 0,5 0,5 Chương IV. Hệ thống mã với khóa công khai. 16 6 7 2 1 4.1. Khái niệm khóa công khai. 4.1.1. Đặc trưng và ứng dụng của hệ mã khóa công khai. 4.1.2. Nguyên tắc cấu tạo hệ khóa công khai 4.2. Giới thiệu một số giải thuật PKC phổ biến. 4.1.1. Hệ mã Trapdoor Knapsack. 4.1.2. Hệ mã RSA 1 1 2 1 3 2
  • 4. 4.1.3. Hệ mã ElGamal Kiểm tra 2 3 1 Chương V. Chữ ký điện tử và hàm băm. 12 7 5 0 0 5.1. Chữ ký điện tử. 5.1.1. Định nghĩa. 5.1.2. Ứng dụng của chữ ký điện tử 5.2. Giới thiê ̣u một số hê ̣chữ ký điê ̣n tử 5.2.1. Hê ̣chữ ký điê ̣n tử RSA 5.2.2. Hê ̣chữ ký điê ̣n tử ElGamal 5.2.3. Chuẩn chữ ký điê ̣n tử DSA 5.3. Hàm băm. 5.3.1. Định nghĩa. 5.3.2. Sinh chữ ký điện tử với hàm băm 5.4. Một số hàm băm thông dụng 5.4.1. Hàm băm MD5 5.4.2. Hàm băm SHA1 0,5 3 0,5 3 2 1,5 1,5 Chương VI. Quản lý khóa trong hệ thống mật mã 8 5 3 0 0 6.1. Quản lý khóa đối với hệ SKC 6.1.1. Giới thiệu phương pháp quản lý khóa. 6.2. Quản lý khóa trong các hệ PKC 6.2.1. Giao thức trao chuyển khóa Needham – Schoeder 6.2.2. Giao thứ c trao đổi khóa Diffie-Hellman 6.2.3. Giao thứ c Kerberos 1 1 1 1 1 1 2 Chương VII. Giao thức mật mã 6 3 2 0 1 7.1. Khái niệm giao thức mật mã 7.1.1. Định nghĩa giao thức mật mã 7.1.2. Mục đích giao thức mật mã. 7.1.3. Các bên tham gia vào giao thức mật mã 7.2. Tìm hiểu thiết kế các giao thức mật mã điển hình 7.2.1. Một số dạng tấn công đối với giao thức mật mã. 7.2.2. Giới thiệu một số giao thức mật mã. 7.3. Kiểm tra. 1 2 2 1 Nhiệm vụ của sinh viên: Lên lớp đầy đủ và chấp hành mọi quy định của Nhà trường. Tài liệu học tập: 1. Phan Đình Diệu. Lý thuyết mật mã và An toàn thông tin. Đại học Quốc Gia Hà Nội. 2. Douglas R. Stinson. Cryptography Theory and practice. CRC Press. 1995. 3. A. Menezes, P. VanOorschot, and S. Vanstone. Handbook of Applied Cryptography. CRC Press. 1996.
  • 5. 4. William Stallings. Cryptography and Network Security Principles and Practices, Fourth Edition. Prentice Hall. 2005. 5. MichaelWelschenbach. Cryptography in C and C++. Apress. 2005. Hình thức và tiêu chuẩn đánh giá sinh viên: - Sinh viên phải làm các bài kiểm tra trong quá trình học và thực hành. Thi vấn đáp. - Sinh viên phải bảo đảm các điều kiện theo Quy chế của Nhà trường và của Bộ. Thang điểm : Thang điểm 10. Điểm đánh giá học phần: Z = 0,3 X + 0,7 Y.
  • 6. MỤC LỤC LỜ I NÓ I ĐẦ U....................................................................................................................1 CHƢƠNG I: GIỚ I THIỆU..................................................................................................2 1. An toà n bảo mật thông tin và mật mã học .................................................................2 2. Khái niệm hệ thố ng và tà i sản của hệ thố ng ..............................................................2 3. Các mối đe doạ đối với một hệ thống và các biện pháp ngăn chặn ...........................2 4. Mục tiêu và nguyên tắc chung của an toàn bảo mật thông tin ...................................3 5. Mật mã học (cryptology) ............................................................................................4 6. Khái niệm hệ mã mật (CryptoSystem) .......................................................................4 7. Mô hình truyề n tin cơ bản của mật mã học và luật Kirchoff .......................................5 8. Sơ lƣợc về li ̣ch sƣ̉ mật mã học..................................................................................6 9. Phân loại cá c thuật toá n mật mã học.........................................................................8 10. Một số ƣ́ ng dụng của mật mã học ...........................................................................8 CHƢƠNG II: CƠ SỞ TOÁN HỌC................................................................................... 10 1. Lý thuyết thông tin ................................................................................................... 10 1.1. Entropy............................................................................................................. 10 1.2. Tố c độ của ngôn ngƣ̃. (Rate of Language) ....................................................... 11 1.3. Tính an toàn của hệ thống mã hoá ................................................................... 11 1.4. Kỹ thuật lộn xộn và rƣờ m rà (Confusion and Diffusion)..................................... 12 2. Lý thuyết độ phức tạp.............................................................................................. 13 2.1. Độ an toàn tính toán ......................................................................................... 14 2.2. Độ an toàn không điều kiện .............................................................................. 14 3.3. Hệ mật tích ....................................................................................................... 16 3. Lý thuyết toán học ................................................................................................... 17 3.1. Modulo số học .................................................................................................. 17 3.2. Số nguyên tố .................................................................................................... 17 3.3. Ƣớc số chung lớn nhất..................................................................................... 17 3.4. Vành ZN (vành đồng dƣ module N)................................................................... 18 3.5. Phầ n tƣ̉ nghi ̣ch đảo .......................................................................................... 18 3.6. Hàm phi Ơle ..................................................................................................... 19 3.7. Thặng dƣ bậc hai.............................................................................................. 19 3.8. Thuật toá n lũy thƣ̀ a nhanh................................................................................ 20 3.9. Thuật toá n Ơclit mở rộng.................................................................................. 21 3.10. Phƣơng trình đồ ng dƣ bậc nhấ t 1 ẩn.............................................................. 22 3.11. Đi ̣nh lý phầ n dƣ Trung Hoa............................................................................. 22 4. Các thuật toán kiểm tra số nguyên tố. ..................................................................... 23 4.1. Một số ký hiệu toá n học.................................................................................... 23 4.2. Thuật toá n Soloway-Strassen........................................................................... 25 4.3. Thuật toá n Rabin-Miller..................................................................................... 26 4.4. Thuật toá n Lehmann......................................................................................... 26 5. Bài tập..................................................................................................................... 26 CHƢƠNG III: CÁC HỆ MÃ KHÓA BÍ MẬT...................................................................... 28 1. Các hệ mã cổ điển................................................................................................... 28 1.1. Hệ mã hoá thay thế (substitution cipher)........................................................... 28 1.2. Hệ mã Caesar .................................................................................................. 28 1.3. Hệ mã Affine..................................................................................................... 29 1.4. Hệ mã Vigenere................................................................................................ 30 1.5. Hệ mã Hill......................................................................................................... 30 1.6. Hệ mã đổi chỗ (transposition cipher)................................................................. 32 2. Các hệ mã khối ....................................................................................................... 34 2.1. Mật mã khối...................................................................................................... 34 2.2. Chuẩn mã hoá dữ liệu DES (Data Encryption Standard) .................................. 35 2.3. Các yếu điểm của DES..................................................................................... 51
  • 7. 2.4. Triple DES (3DES)............................................................................................ 52 2.5. Chuẩn mã hó a cao cấ p AES............................................................................. 54 2.6. Các cơ chế, hình thức sử dụng của mã hóa khối (Mode of Operation) ............. 68 3. Bài tập..................................................................................................................... 72 CHƢƠNG IV: CÁC HỆ MÃ MẬT KHÓA CÔNG KHAI ..................................................... 77 1. Khái niệm hệ mã mật khóa công khai...................................................................... 77 2. Nguyên tắ c cấ u tạo của cá c hệ mã mật khó a công khai.......................................... 78 3. Một số hệ mã khó a công khai.................................................................................. 78 3.1. Hệ mã knapsack............................................................................................... 78 3.2. Hệ mã RSA....................................................................................................... 79 3.3. Hệ mã El Gamal ............................................................................................... 83 3.4. Các hệ mã mật dựa trên các đƣờng cong Elliptic............................................. 85 4. Bài tập..................................................................................................................... 96 CHƢƠNG V: CHƢ̃ KÝ ĐIỆN TƢ̉ VÀ HÀ M BĂM............................................................ 101 1. Chƣ̃ ký điện tƣ̉ ....................................................................................................... 101 1.1. Khái niệm về chữ ký điện tử ........................................................................... 101 1.2. Hệ chữ ký RSA............................................................................................... 102 1.3. Hệ chữ ký ElGammal...................................................................................... 103 1.4. Chuẩn chữ ký điện tử (Digital Signature Standard)......................................... 106 1.5. Mô hình ƣ́ ng dụng của chƣ̃ ký điện tƣ̉ ................................................................ 108 2. Hàm Băm (Hash Function) .................................................................................... 109 2.1. Khái niệm ....................................................................................................... 109 2.2. Đặc tính của hàm Băm ................................................................................... 109 2.3. Birthday attack................................................................................................ 110 2.4. Một số hàm Băm nổi tiếng .............................................................................. 111 2.5. Một số ƣ́ ng dụng của hàm Băm...................................................................... 118 3. Bài tập................................................................................................................... 119 CHƢƠNG VI: QUẢN LÝ KHÓA..................................................................................... 120 1. Quản lý khoá trong các mạng truyền tin ................................................................ 120 2. Một số hệ phân phối khoá ..................................................................................... 120 2.1. Sơ đồ phân phối khoá Blom ........................................................................... 120 2.2. Hệ phân phối khoá Kerberos .......................................................................... 122 2.3. Hệ phân phối khó a Diffe-Hellman ................................................................... 123 3. Trao đổi khoá và thoả thuận khoá ......................................................................... 124 3.1. Giao thức trao đổi khoá Diffie-Hellman ........................................................... 124 3.2. Giao thức trao đổi khoá Diffie-Hellman có chứng chỉ xác nhận....................... 125 3.3. Giao thức trao đổi khoá Matsumoto-Takashima-Imai...................................... 126 3.4. Giao thức Girault trao đổi khoá không chứng chỉ............................................ 127 4.Bài tập.................................................................................................................... 128 CHƢƠNG VII: GIAO THƢ́ C MẬT MÃ ........................................................................... 130 1. Giao thức .............................................................................................................. 130 2. Mục đích của các giao thức................................................................................... 130 3. Các bên tham gia vào giao thức (the players in protocol) ...................................... 131 4. Các dạng giao thức ............................................................................................... 132 4.1. Giao thức có trọng tài ..................................................................................... 132 4.2. Giao thức có ngƣời phân xử........................................................................... 133 4.3. Giao thức tƣ̣ phân xƣ̉ ..................................................................................... 134 5. Các dạng tấn công đối với giao thức ..................................................................... 134 TÀI LIỆU THAM KHẢO ................................................................................................. 136
  • 8. Danh mục hình vẽ DANH MỤC HÌNH VẼ Hình 1.1: Mô hình cơ bản của truyền tin bảo mật..............................................................5 Hình 3.1: Chuẩn mã hó a dƣ̃ liệu DES ............................................................................. 35 Hình 3.2: Sơ đồ mã hoá DES.......................................................................................... 38 Hình 3.3: Sơ đồ một vòng DES ....................................................................................... 39 Hình 3.4: Sơ đồ tạo khoá con của DES.......................................................................... 41 Hình 3.5: Sơ đồ hàm f ..................................................................................................... 43 Hình 3.6: Sơ đồ hàm mở rộng (E) ................................................................................... 44 Hình 3.7: Triple DES ....................................................................................................... 53 Hình 3.8: Các trạng thái của AES.................................................................................... 56 Hình 3.9: Thuật toán mã hóa và giải mã của AES ........................................................... 59 Hình 3.10: Hàm ShifftRows()........................................................................................... 62 Hình 3.11: Hàm MixColumns của AES............................................................................ 63 Hình 3.12: Hàm AddRoundKey của AES......................................................................... 63 Hình 3.13: Hàm InvShiftRows() của AES ........................................................................ 66 Hình 3.14: Cơ chế ECB................................................................................................... 69 Hình 3.15: Chế độ CBC................................................................................................... 70 Hình 3.16: Chế độ CFB................................................................................................... 71 Hình 4.1: Mô hình sƣ̉ dụng 1 của các hệ mã khóa công khai PKC.................................. 78 Hình 4.2: Mô hình sƣ̉ dụng 2 của các hệ mã khóa công khai PKC.................................. 78 Hình 4.3: Mô hình ƣ́ ng dụng lai ghép RSA vớ i cá c hệ mã khố i ....................................... 83 Hình 4.4: Các đƣờng cong Elliptic trên trƣờng số thực................................................... 87 Hình 4.5: Hình biểu diễn E2 4 (g4 , 1) .................................................................................. 92 Hình 4.6: Phƣơng phá p trao đổi khó a Diffie-Hellman dƣ̣a trên ECC ............................... 94 Hình 5.1: Mô hình ƣ́ ng dụng của chƣ̃ ký điện tƣ̉ ........................................................... 108 Hình 5.2: Sơ đồ chữ ký sử dụng hàm Băm ................................................................... 109 Hình 5.3: Sơ đồ vòng lặp chính của MD5...................................................................... 112 Hình 5.4: Sơ đồ một vòng lặp MD5 ............................................................................... 113 Hình 5.5: Sơ đồ một vòng lặp của SHA......................................................................... 117
  • 9. Danh mục bảng DANH MỤC BẢ NG Bảng 2.1: Bảng bậc của các phần tử trên Z* 21 ................................................................. 19 Bảng 2.2: Bảng lũy thừa trên Z13 ..................................................................................... 20 Bảng 3.1: Bảng đá nh số cá c chƣ̃ cá i tiế ng Anh............................................................... 29 Bảng 3.2: Mã hoá thay đổi vị trí cột ................................................................................. 32 Bảng 3.3: Mã hóa theo mẫu hình học.............................................................................. 32 Bảng 3.4: Ví dụ mã hóa theo mẫu hình học .................................................................... 33 Bảng 3.5: Mã hóa hoán vị theo chu kỳ ............................................................................ 33 Bảng 3.6: Bảng hoán vị IP............................................................................................... 39 Bảng 3.7: Bảng hoán vị ngƣợc IP-1 ................................................................................. 39 Bảng 3.8: Bảng PC-1 ...................................................................................................... 41 Bảng 3.9: Bảng dịch bit tại các vòng lặp của DES........................................................... 42 Bảng 3.10: Bảng PC-2 .................................................................................................... 42 Bảng 3.11: Bảng mô tả hàm mở rộng E.......................................................................... 44 Bảng 3.12: Hộp S1........................................................................................................... 45 Bảng 3.13: Hộp S2........................................................................................................... 45 Bảng 3.14: Hộp S3........................................................................................................... 45 Bảng 3.15: Hộp S4........................................................................................................... 46 Bảng 3.16: Hộp S5........................................................................................................... 46 Bảng 3.17: Hộp S6........................................................................................................... 46 Bảng 3.18: Hộp S7........................................................................................................... 46 Bảng 3.19: Hộp S8........................................................................................................... 46 Bảng 3.20: Bảng hoán vị P.............................................................................................. 47 Bảng 3.21: Ví dụ về các bƣớc thực hiện của DES .......................................................... 50 Bảng 3.22: Các khóa yếu của DES ................................................................................. 51 Bảng 3.23: Các khóa nửa yếu của DES.......................................................................... 51 Bảng 3.24: Qui ƣớ c một số tƣ̀ viế t tắ t và thuật ngƣ̃ của AES.......................................... 54 Bảng 3.25: Bảng biểu diễn các xâu 4 bit ......................................................................... 56 Bảng 3.26: Bảng độ dài khóa của AES............................................................................ 57 Bảng 3.27: Bảng thế S-Box của AES .............................................................................. 61 Bảng 3.28: Bảng thế cho hàm InvSubBytes().................................................................. 66 Bảng 4.1: Tố c độ của thuật toá n Brent-Pollard................................................................ 81 Bảng 4.2: Biểu diễn của tập E23(1, 1)............................................................................. 89 Bảng 4.3: Bảng so sánh các hệ mã ECC với hệ mã RSA................................................ 95
  • 10. Lờ i nói đầu 1 LỜ I NÓ I ĐẦ U Từ trƣớc công nguyên con ngƣời đã phải quan tâm tới việc làm thế nào để đảm bảo an toàn bí mật cho các tài liệu, văn bản quan trọng, đặc biệt là trong lĩnh vực quân sự, ngoại giao. Ngày nay với sự xuất hiện của máy tính, các tài liệu văn bản giấy tờ và các thông tin quan trọng đều đƣợc số hóa và xử lý trên máy tính, đƣợc truyền đi trong một môi trƣờng mà mặc định là không an toàn. Do đó yêu cầu về việc có một cơ chế, giải pháp để bảo vệ sự an toàn và bí mật của các thông tin nhạy cảm, quan trọng ngày càng trở nên cấp thiết. Mật mã học chính là ngành khoa học đảm bảo cho mục đích này. Khó có thể thấy một ứng dụng Tin học có ích nào lại không sử dụng các thuật toán mã hóa thông tin. Tài liệu này dựa trên những kinh nghiệm và nghiên cứu mà tác giả đã đúc rút, thu thập trong quá trình giảng dạy môn học An toàn và Bảo mật Thông tin tại khoa Công nghệ Thông tin, Đại học Hàng hải Việt nam. Với bảy chƣơng đƣợc chia thành các chủ đề khác nhau từ cơ sở toán học của mật mã học cho tới các hệ mã, các giao thức mật mã, hy vọng sẽ cung cấp cho các em sinh viên, các bạn độc giả một tài liệu bổ ích. Mặc dù đã rất cố gắng song vẫn không tránh khỏi một số thiếu sót, hy vọng sẽ đƣợc các bạn bè đồng nghiệp, các em sinh viên, các bạn độc giả góp ý chân thành để tôi có thể hoàn thiện hơn nữa cuố n sá ch này. Xin gửi lời cảm ơn chân thành tới các bạn bè đồng nghiệp , nhƣ̃ng ngƣờ i thân đã luôn động viên , góp ý cho tôi trong quá trình biên soạn . Xin gƣ̉ i lờ i cảm ơn tớ i Thạc sỹ Nguyễn Đình Dƣơng, ngƣờ i đã đọc và cho nhƣ̃ng nhận xét , góp ý quí báu cho phần viết về hệ mã khó a công khai dƣ̣a trên cá c đƣờ ng cong Elliptic. Xin gƣ̉ i lờ i cảm ơn sâu sắc tớ i Thạc sỹ Phạm Tuấn Đạt, ngƣờ i đã hiệu đính một cá ch kỹ cà ng và cho rấ t nhiề u nhận xét có giá trị cho bản thảo của cuốn sách này . Cuố i cù ng xin gƣ̉ i lờ i cảm ơn tớ i Ban chủ nhiệm khoa Công nghệ Thông tin, đặc biệt là Tiế n sỹ Lê Quố c Đi ̣nh – chủ nhiệm khoa, đã luôn tạo điều kiện tố t nhấ t, giúp đỡ để cuố n sá ch này có thể hoàn thành. Hải phòng, tháng 12 năm 2007 Tác giả Nguyễn Hữu Tuân
  • 11. Chƣơng I: Giớ i thiệu 2 CHƢƠNG I: GIỚ I THIỆU 1. An toà n bả o mật thông tin và mật mã học Trải qua nhiều thế kỷ hàng loạt các giao thức (protocol) và các cơ chế (mechanism) đã đƣợc tạo ra để đá p ƣ́ ng nhu cầ u an toà n bảo mật thông tin kh i mà nó đƣợc truyền tải trên cá c phƣơng tiện vật lý (giấ y, sách, báo …). Thƣờ ng thì cá c mục tiêu của an toà n bảo mật thông tin không thể đạt đƣợc nế u chỉ đơn thuầ n dƣ̣a và o cá c thuật toá n toá n học và các giao thức, mà để đạt đƣợc điề u nà y đò i hỏi cầ n có cá c kỹ thuật mang tính thủ tục và sƣ̣ tôn trọng cá c điề u luật . Chẳng hạn sƣ̣ bí mật của cá c bƣ́ c thƣ tay là do sƣ̣ phân phá t các lá thƣ đã có đóng dấu bởi một dịch vụ thƣ tín đã đƣợ c chấ p nhận . Tính an toàn về mặt vật lý của cá c lá thƣ là hạn chế (nó có thể bị xem trộm ) nên để đảm bảo sƣ̣ bí mật của bức thƣ pháp luật đã đƣa ra qui định : việc xem thƣ mà không đƣợc sƣ̣ đồ ng ý của chủ nhân hoặc nhữ ng ngƣờ i có thẩm quyề n là phạm phá p và sẽ bi ̣trƣ̀ ng phạt . Đôi khi mục đích của an toàn bảo mật thô ng tin lại đạt đƣợc nhờ chí nh phƣơng tiện vật lý mang chúng, chẳng hạn nhƣ tiền giấ y đò i hỏi phải đƣợc in bằ ng loại mƣ̣c và giấ y tố t để không bị làm giả. Về mặt ý tƣở ng việc lƣu giƣ̃ thông tin là không có nhiề u thay đổi đá ng kể qua thờ i gian. Ngày xƣa thông tin thƣờng đƣợc lƣu và vận chuyển trên giấy tờ , trong khi giờ đây chúng đƣợc lƣu dƣới dạn g số hó a và đƣợc vận chuyển bằ ng cá c hệ thố ng viễn thông hoặc cá c hệ thố ng không dây . Tuy nhiên sƣ̣ thay đổi đá ng kể đến ở đây chính là khả năng sao ché p và thay đổi thông tin. Ngƣờ i ta có thể tạo ra hà ng ngà n mẩu tin giố ng nhau và không thể phân biệt đƣợc nó với bản gốc . Vớ i cá c tà i liệu lƣu trƣ̃ và vận chuyển trên giấ y điề u nà y khó khăn hơn nhiề u . Và điều cần thiết đối với một xã hội mà thông tin hầu hế t đƣợc lƣu trƣ̃ và vận chuyển trên các phƣơng tiện điện tử chính là các phƣơng tiện đảm bảo an toà n bảo mật thông tin độc lập vớ i cá c phƣơng tiện lƣu trƣ̃ và vận chuyển vật lý của nó . Phƣơng tiện đó chính là mật mã học , một ngà nh khoa học có li ̣ch sƣ̉ lâ u đờ i dƣ̣a trên nền tảng cá c thuật toá n toá n học, số học, xác suất và các môn khoa học khác. 2. Khái niệm hệ thống và tài sản của hệ thống Khái niệm hệ thống : Hệ thố ng là một tập hợp cá c má y tính gồ m cá c thà nh phầ n phấ n cƣ́ ng, phầ n mềm và dƣ̃ liệu là m việc đƣợc tích luỹ qua thờ i gian. Tài sản của hệ thống bao gồm:  Phầ n cƣ́ ng  Phầ n mề m  Dƣ̃ liệu  Các truyền thông giữa các máy tính của hệ thống  Môi trƣờ ng là m việc  Con ngƣờ i 3. Các mối đe doạ đố i vớ i một hệ thố ng và cá c biện pháp ngăn chặn Có 3 hình thức chủ yếu đe dọa đối với hệ thống:
  • 12. Chƣơng I: Giớ i thiệu 3  Phá hoại: kẻ thù phá hỏng thiết bị phần cứng hoặc phần mềm hoạt động trên hệ thố ng.  Sƣ̉ a đổi: Tài sản của hệ thố ng bi ̣sƣ̉ a đổi trá i phép. Điều nà y thƣờ ng là m cho hệ thố ng không là m đú ng chƣ́ c năng của nó . Chẳng hạn nhƣ thay đổi mật khẩu , quyền ngƣờ i dù ng trong hệ thố ng là m họ không thể truy cập và o hệ thố ng để làm việc.  Can thiệ p: Tài sản bị truy cập bởi những ngƣời không có thẩm quyền . Các truyề n thông thƣ̣c hiện trên hệ thố ng bi ̣ngăn chặn, sƣ̉ a đổi. Các đe dọa đối với một hệ thống thông tin có thể đến từ nhiều nguồn và đƣợc thực hiện bở i cá c đố i tƣợng khá c nhau . Chúng ta có thể chia thành 3 loại đối tƣợng nhƣ sau : các đối tƣợng từ ngay bên trong hệ thống (insider), đây là nhƣ̃ng ngƣờ i có quyền truy cập hợp phá p đố i vớ i hệ thố ng , nhƣ̃ng đố i tƣợng bên ngoà i hệ th ống (hacker, cracker), thƣờ ng cá c đố i tƣợng nà y tấ n công qua nhƣ̃ng đƣờ ng kế t nố i vớ i hệ thố ng nhƣ Internet chẳng hạn, và thứ ba là các phần mềm (chẳng hạn nhƣ spyware, adware …) chạy trên hệ thố ng. Các biện pháp ngăn chặn: Thƣờng có 3 biện phá p ngăn chặn:  Điề u khiển thông qua phầ n mềm : dƣ̣a và o cá c cơ chế an toà n bảo mật của hệ thố ng nền (hệ điề u hà nh), các thuật toán mật mã học  Điề u khiển thông qua phầ n cƣ́ ng : các cơ chế bảo mật , các thuật toán mật mã học đƣợc cứng hóa để sử dụng  Điề u khiển thông qua cá c chính sá ch của tổ chƣ́ c : ban hà nh cá c qui đi ̣nh của tổ chƣ́ c nhằ m đảm bảo tính an toà n bảo mật của hệ thố ng. Trong môn học nà y chú ng ta tập trung xem xé t các thuật toán mật mã học nhƣ là một phƣơng tiện cơ bản, chủ yếu để đảm bảo an toàn cho hệ thống. 4. Mục tiêu và nguyên tắc chung của an toàn bảo mật thông tin Ba mục tiêu của an toà n bảo mật thông tin:  Tính bí mật: Tài sản của hệ thống chỉ đƣợc truy cập bởi những ngƣời có thẩm quyề n. Các loại truy cập gồm có : đọc (reading), xem (viewing), in ấ n (printing), sƣ̉ dụng chƣơng trình, hoặc hiểu biế t về sƣ̣ tồ n tại của một đố i tƣợng trong tổ chƣ́ c.Tính bí mật có thể đƣợc bảo vệ nhờ việc kiểm soá t truy cập (theo nhiề u kiểu khá c nhau ) hoặc nhờ cá c thuật toá n mã hó a dƣ̃ liệu. Kiế m soá t truy cập chỉ có thể đƣợc thƣ̣c hiện vớ i cá c hệ thố ng phầ n cƣ́ ng vật lý . Còn đố i vớ i cá c dƣ̃ liệu công cộng thì thƣờ ng phƣơng phá p hiệu quả là các phƣơng pháp của mật mã học.  Tính toàn vẹn dữ liệu: tài sản của hệ thống chỉ đƣợc thay đổi bởi những ngƣời có thẩm quyền.  Tính sẵn dùng: tài sản luôn sẵn sà ng đƣợc sƣ̉ dụng bở i nhƣ̃ng ngƣờ i có thẩm quyề n. Hai nguyên tắc của an toà n bảo mật thông tin:
  • 13. Chƣơng I: Giớ i thiệu 4  Việc thẩm đi ̣nh về bảo mật phả i là khó và cầ n tính tớ i tấ t cả cá c tình huố ng , khả năng tấn công có thể đƣợc thực hiện.  Tài sản đƣợc bảo vệ cho tới khi hết gía trị sử dụng hoặc hết ý nghĩa bí mật. 5. Mật mã học (cryptology) Mật mã học bao gồ m hai lĩnh vƣ̣c : mã hóa (cryptography) và thám mã (cryptanalysis-codebreaking) trong đó:  Mã hóa: nghiên cƣ́ u cá c thuật toá n và phƣơng thƣ́ c để đảm bả o tính bí mật và xác thực của thông tin (thƣờ ng là dƣớ i dạng cá c văn bản lƣu trƣ̃ trên má y tính ). Các sản phẩm của lĩnh vƣ̣c nà y là cá c hệ mã mật , các hàm băm , các hệ chƣ̃ ký điện tƣ̉ , các cơ chế phân phố i, quản lý khóa và các giao thức mật mã.  Thám mã: Nghiên cƣ́ u cá c phƣơng phá p phá mã hoặc tạo mã giả . Sản phẩm của lĩnh vực này là các phƣơng pháp thám mã , các phƣơng pháp giả mạo c hƣ̃ ký , các phƣơng phá p tấ n công cá c hà m băm và cá c giao thƣ́ c mật mã. Trong giớ i hạn của môn học nà y chú ng ta chủ yế u tập trung và o tìm hiểu cá c vấ n đề mã hóa với các hệ mã mật, các hàm băm, các hệ chữ ký điện tử, các giao thức mật mã. Mã hóa (cryptography) là một ngành khoa học của các phương pháp truyền tin bảo mật. Trong tiếng Hy Lạp, “Crypto” (krypte) có nghĩa là che dấu hay đảo lộn, còn “Graphy” (grafik) có nghĩa là từ. [3] Ngƣời ta quan niệm rằng: những từ, những ký tự của bản văn bản gốc có thể hiểu đƣợc sẽ cấu thành nên bản rõ (P-Plaintext), thƣờ ng thì đây là cá c đoạn văn bản trong một ngôn ngƣ̃ nà o đó ; còn những từ, những ký tự ở dạng bí mật không thể hiểu đƣợc thì đƣợc gọi là bản mã (C-Ciphertext). Có 2 phƣơng thức mã hoá cơ bản: thay thế và hoán vị:  Phƣơng thức mã hoá thay thế là phƣơng thức mã hoá mà từng ký tự gốc hay một nhóm ký tự gốc của bản rõ đƣợc thay thế bởi các từ, các ký hiệu khác hay kết hợp với nhau cho phù hợp với một phƣơng thức nhất định và khoá.  Phƣơng thức mã hoá hoán vị là phƣơng thức mã hoá mà các từ mã của bản rõ đƣợc sắp xếp lại theo một phƣơng thức nhất định. Các hệ mã mật thƣờ ng sƣ̉ dụng kết hợp cả hai kỹ thuật nà y. 6. Khái niệm hệ mã mật (CryptoSystem) Một hệ mã mật là bộ 5 (P, C, K, E, D) thoả mãn các điều kiện sau: 1) P là không gian bản rõ: là tập hữu hạn các bản rõ có thể có. 2) C là không gian bản mã: là tập hữu hạn các bản mã có thể có. 3) K là kkhông gian khoá: là tập hữu hạn các khoá có thể có. 4) Đối với mỗi k  K, có một quy tắc mã hoá ek  E và một quy tắc giải mã tương ứng dk  D. Với mỗi ek: P →C và dk: C →P là những hàm mà dk(ek(x)) = x cho mọi bản rõ x  P. Hàm giải mã dk chính là ánh xạ ngược của hàm mã hóa ek [5]
  • 14. Chƣơng I: Giớ i thiệu 5 Thƣờ ng thì không gian cá c bản rõ và không gian cá c bản mã là cá c văn bản đƣợc tạo thành từ một bộ chữ cái A nào đó. Đó có thể là bộ chƣ̃ cá i tiế ng Anh, bộ mã ASCII, bộ mã Unicode hoặc đơn giản nhất là các bit 0 và 1. Tính chất 4 là tính chất quan trọng nhất của mã hoá. Nội dung của nó nói rằng nếu mã hoá bằng ek và bản mã nhận đƣợc sau đó đƣợc giải mã bằng hàm dk thì kết quả nhận đƣợc phải là bản rõ ban đầu x. Rõ ràng trong trƣờng hợp này, hàm ek(x) phải là một đơn ánh, nếu không thì ta sẽ không giải mã đƣợc. Vì nếu tồn tại x1 và x2 sao cho y = ek(x1) = ek(x2) thì khi nhận đƣợc bản mã y ta không biết nó đƣợc mã từ x1 hay x2. Trong một hệ mật bất kỳ ta luôn có |C| ≥ |P| vì mỗi quy tắc mã hoá là một đơn ánh. Khi |C| = |P| thì mỗi hàm mã hoá là một hoán vị. 7. Mô hình truyề n tin cơ bả n củ a mật mã học và luật Kirchoff Mô hình truyề n tin thông thƣờ ng : Trong mô hình truyề n tin thông thƣờ ng thông tin đƣợc truyề n (vận chuyển) tƣ̀ ngƣờ i gƣ̉ i đến ngƣờ i nhận đƣợc thƣ̣c hiện nhờ một kênh vật lý (chẳng hạn nhƣ việc gƣ̉ i thƣ) đƣợc coi là an toà n. Mô hình truyề n tin cơ bản của mật mã học: Hình 1.1: Mô hình cơ bản của truyền tin bảo mật Đây là mô hình cơ bản của truyền tin bảo mật. Khác với truyền tin thông thƣờng, có các yếu tố mới đƣợc thêm vào nhƣ khái niệm kẻ địch (E-Enemy), các khoá mã hoá và giải mã K để đảm bảo tính bảo mật của thông tin cần truyền đi. Trong mô hình nà y ngƣời gƣ̉ i S (Sender) muốn gửi một thông điệp X (Message – là một bản rõ ) tới ngƣời nhận R (Receiver) qua một kênh truyền không an toà n (Insecured Channel), kẻ địch E (Enemy) có thể nghe trộm, hay sửa đổi thông tin X. Vì vậy, S sử dụng phép biến đổi, tức mã hoá (E-Encryption) lên thông tin X ở dạng đọc đƣợc (Plaintext) để tạo ra một đoạn văn bản đƣợc mã hoá Y (C-Ciphertext) không thể hiểu đƣợc theo một quy luật thông thƣờ ng sƣ̉ dụng một thông tin bí mật đƣợc gọi là khoá K1 (Key), khoá K1 chính là thông số điều khiển cho phép biến đổi từ bản rõ X sang bản mã Y (chỉ các bên tham gia truyền tin S và R mớ i có thể biết khó a nà y). Giải mã (D-Decryption) là quá trình ngƣợc lại cho phép ngƣời nhận thu đƣợc thông tin X ban đầu từ đoạn mã hoá Y sƣ̉ dụng khóa giải mã K2 (chú ý là khóa giải mã và khóa mã hóa có thể khác nhau hoặc là một tùy thuộc và o hệ mã sƣ̉ dụng). Các phép biến đổi đƣợc sử dụng trong mô hình truyền tin trên thuộc về một hệ mã mật (Cryptosytem) nào đó. XYYX Sender Encrypt Insecured Channel Decrypt Receiver K1 K2 Enemy
  • 15. Chƣơng I: Giớ i thiệu 6 Quá trình mã hóa và giải mã yêu cầu các quá trình biến đổi dữ liệu từ dạng nguyên thuỷ thành in put cho việc mã hóa và chuyển output của q uá trình giải mã thành bản rõ . Các quá trình này là các quá trình biến đổi không khóa và đƣợc gọi là các quá trình encode và decode. Theo luật Kirchoff (1835 - 1903) (một nguyên tắ c cơ bản trong mã hoá ) thì: toàn bộ cơ chế mã/giải mã trừ khoá là không bí mật đối với kẻ địch [5]. Rõ ràng khi đối phƣơng không biết đƣợc hệ mã mật đang sử dụng thuật toá n mã hó a gì thì việc thá m mã sẽ rất khó khăn. Nhƣng chúng ta không thể tin vào độ an toàn của hệ mã mật chỉ dựa vào một giả thiết không chắc chắn là đối phƣơng không biết thuật toá n đang sử dụng . Vì vậy, khi trình bày một hệ mật bất kỳ , chúng ta đều giả thiết hệ mật đó đƣợc trình bày dƣới luật Kirchoff. Ý nghĩa của luật Kirchoff : sƣ̣ an toà n của cá c hệ mã mật không phải dựa vào sự phƣ́ c tạp của thuật toá n mã hó a sƣ̉ dụng. 8. Sơ lƣợc về li ̣ch sƣ̉ mật mã học Mật mã học là một ngà nh khoa học có một li ̣ch sƣ̉ khoảng 4000 năm. Các cổ vật của ngành khảo cổ học thu đƣợc đã cho thấ y điề u nà y. Nhƣ̃ng ngƣờ i Ai cập cổ đại đã sƣ̉ dụng các chữ tƣợng hình nhƣ là một dạng mã hóa đơn giản nhất trên các bia mộ của họ . Các tài liệu viết tay khác cũng cho thấy các phƣơng pháp mã hóa đơn giản đầu tiên mà loài ngƣời đã sử dụng là của ngƣời Ba Tƣ cổ và ngƣời Do Thái cổ. Tuy vậy có thể chia li ̣ch sƣ̉ mật mã học thà nh hai thờ i kỳ nhƣ sau: Thờ i kỳ tiền khoa học : Tƣ̀ trƣớ c công nguyên cho tớ i năm 1949. Trong giai đoạn này mật mã học đƣợc coi là một nghệ thuật nhiề u hơn là một môn khoa học mặc dù đã đƣợc ƣ́ ng dụng trong thƣ̣c tế. Lịch sử của mật mã học đƣợc đánh dấu vào năm 1949 khi Claude Shannon đƣa ra lý thuyết thông tin . Sau thờ i kỳ nà y một loạt cá c nghi ên cƣ́ u quan trọng của nghà nh mật mã học đã đƣợc thực hiện chẳng hạn nhƣ các nghiên cứu về mã khối , sƣ̣ ra đờ i của cá c hệ mã mật khó a công khai và chƣ̃ ký điện tƣ̉ . Qua nhiề u thế kỷ phá t triển của mật mã học chủ yế u đƣ ợc phục vụ cho các mục đích quân sƣ̣ (gián điệp , ngoại giao, chiế n tranh …). Một ví dụ điển hình là 2000 năm trƣớ c đây hoà ng đế La mã Julius Caesar đã tƣ̀ ng sƣ̉ dụng một thuật toá n thay thế đơn giản mà ngày nay đƣợc mang tên ông trong cuộc chiế n tranh Gallic. Tác phẩm “A manuscript on Deciphering Cryptography Messages” của Abu al -Kindi đƣợc viết vào thế kỷ thứ 9 đƣợc tìm thấ y tại Istabul và o năm 1987 đã cho thấ y nhƣ̃ng nhà khoa học Ả rập là nhƣ̃ng ngƣờ i đầ u tiên đã phá t triển cá c phƣơng phá p thá m mã dƣ̣a và o phân tích tầ n số xuấ t hiện của cá c ký tƣ̣ đố i vớ i cá c hệ mã thay thế đơn âm (một phƣơng pháp đƣợc sử dụng rộng rãi trong thời kỳ Trung cổ do đơn giản và khá hiệu quả). Ở châu Âu thờ i kỳ Trung cổ là một khoảng thờ i gian u á m và tăm tố i của li ̣ch sƣ̉ nên không có nhiề u phá t triển mạnh về văn hó a nó i chung và mật mã học nó i riêng . Một vài sự kiện đƣợc ghi lại bởi các vị linh mục nhƣng chỉ có Roger Bacon là ngƣời thực sự đã viết về mật mã học trong tác phẩm “Secret Work of Art and the Nullity of Magic” vào giữa những năm 1200. Vào thời Trung cổ một trong những cái tên nổi tiếng nhất là Chaucer, ngƣờ i đã đƣa ra các công trình nghiên cứu nghiêm túc đầu tiên về mật mã học trong các
  • 16. Chƣơng I: Giớ i thiệu 7 tác phẩm của mình chẳng hạn nhƣ “Treatise on the Astrolabe”. Trong thờ i kỳ Trung cổ ở phƣơng Tây cuốn sách của Blaise De Vegenere (ngƣờ i phá t minh ra thuật toá n mã hó a thay thế đa âm tiế t ) đƣợc xem nhƣ là một tổng kết các kiến thức về mật mã học cho tới thời điểm bấy giờ, bao gồm cả thuật toán thay thế đa âm tiết và một vài sơ đồ khóa tự động. Blaise De Vegenere cũng là tá c giả của hệ mã mang tên ông , hệ mã nà y đã tƣ̀ ng đƣợc xem là an toà n tuyệt đố i và đƣợc sƣ̉ dụng trong một thờ i gian dà i, tuy nhiên Charles Babbages đã thực hiện thám mã thành công vào năm 1854 nhƣng điều này đƣợc giữ bí mật. Một thuật toán thám mã đƣợc phát hiện độc lậ p bởi một nhà khoa học ngƣời Phổ (thuộc nƣớ c Đƣ́ c ngà y nay) có tên là Friedrich Kasiski . Tuy vậy do việc thiếu các thiết bị cải tiến nên các biến thể của thuật toán mã hóa này vẫn còn đƣợc sử dụng trong những năm đầu của thế kỷ 20 mà tiêu biểu nhất là việc thám mã thành công máy điện tín Zimmermann của quân Đƣ́ c (một trong cá c sƣ̣ kiện tiêu biểu của mật mã học ) trong thế chiến thứ nhất và kết quả là sự tham gia của Mỹ vào cuộc chiến. Vớ i sƣ̣ xuấ t hiện của cá c hệ thố ng má y tính cá nhân và mạng má y tính cá c thông tin văn bản ngà y cà ng đƣợc lƣu trƣ̃ và xƣ̉ lý nhiều hơn trên cá c má y tính do đó nảy sinh yêu cầ u về an toà n bảo mật đố i vớ i cá c thông tin đƣợc lƣu trƣ̃ , xƣ̉ lý và truyề n giƣ̃a cá c má y tính. Vào đầu những năm 1970 là sự phát triển của các thuật toán mã hóa khối đầu tiên: Lucipher và DES . DES sau đó đã có một sƣ̣ phá t triển ƣ́ ng dụng rƣ̣c rỡ cho tớ i đầ u nhƣ̃ng năm 90. Vào cuối những năm 1970 chứng kiến sự phát triển của các thuật toán mã hóa khóa công khai sau khi Whitfield Diffie và Martin Hellman công bố bà i bá o “New Directions in Cryptography” làm nền tảng cho sự ra đời của các hệ mã khóa công khai và các hệ chƣ̃ ký điện tƣ̉ . Do nhƣợc điểm của cá c hệ mã mật khó a công khai là chậm nên cá c hệ mã khố i vẫn tiếp tục đƣợc phát triển với các hệ mã khối mới ra đời để thay thế cho DES và o cuố i thế kỷ 20 nhƣ IDEA, AES hoặc 3DES (một cải tiế n của DES). Gầ n đây nhấ t là các sự kiện liên quan tới các hàm băm MD5 (một hà m băm thuộc họ MD d o Ron Rivest phá t triển ) và SHA 1. Một nhó m cá c nhà khoa học ngƣời Trung Quố c (Xiaoyun Wang, Yiqun Lisa Yin, Hongbo Yu) đã phá t triển các phƣơng pháp cho phép phát hiện ra các đụng độ của các hàm băm đƣợc sử dụng rộng rãi nhất trong số cá c hàm băm này. Đây là một sƣ̣ kiện lớ n đố i vớ i ngà nh mật mã học do sƣ̣ ƣ́ ng dụng rộng rãi và có thể xem là còn quan trọng hơn bản thân các hệ mã mật của các hàm băm . Do sƣ̣ kiện nà y cá c hãng viết phầ n mề m lớ n (nhƣ Microsoft) và các nhà mật mã học đã khuyến cáo các lập trình viên sử dụng các hàm băm mạnh hơn (nhƣ SHA-256, SHA-512) trong các ứng dụng. Bruce Schneier (một trong nhƣ̃ng nhà mật mã học hà ng đầ u , tác giả của hệ mã Blowfish) đã tƣ̀ ng nó i rằ ng cá c hình thƣ́ c tấ n công đố i vớ i cá c hệ mã mật nó i riêng và tấ n công đố i vớ i cá c hệ thố ng má y tính nó i chung sẽ ngà y cà ng trở nên hoà n thiện hơn “Attacks always get better ; they never get worse .” và li ̣ch sƣ̉ phá t triển của mật mã học chính là lịch sử phát triển của các hình thức tấn công đối với các hệ mã mật đang đƣợc sƣ̉ dụng.
  • 17. Chƣơng I: Giớ i thiệu 8 9. Phân loại cá c thuật toán mật mã học Có nhiều cách khác nhau để chúng ta có thể phâ n loại cá c thuật toá n mật mã học sẽ đƣợc học trong chƣơng trình. Ở đây chúng ta sẽ phân loại các thuật toán mật mã học dƣ̣a và o hai loại tiêu chí. Tiêu chí thƣ́ nhấ t là dƣ̣a và o cá c di ̣ch vụ an toà n bảo mật mà cá c thuật toán cung cấ p, dƣ̣a và o số lƣợng khó a sƣ̉ dụng (0, 1, 2) chúng ta có các thuật toán mã hóa sau: 1. Các thuật toán mã hóa khóa bí mật tƣơng ứng với các hệ mã mật khóa bí mật hay khó a đố i xƣ́ ng SKC (Symmetric Key Cryptosytems), do vai trò của ngƣờ i nhận và ngƣờ i gƣ̉ i là nhƣ nhau , cả hai đều có thể mã hóa và giải mã thông điệp , nhƣ Caesar, DES, AES … Khó a sƣ̉ dụng cho cá c thuật toá n nà y là 1 khóa cho cả việc mã hóa và giải mã. 2. Các thuật toán mã hóa khóa công khai tƣơng ứng với các hệ mã khóa công khai PKC (Public Key Cryptosystems). Đôi khi cá c hệ mã nà y cò n đƣợc gọi là cá c hệ mã khóa bất đối xứng (Asymmetric Key Cryptosytems). Khóa sử dụng cho các thuật toán này là 2 khóa, một cho việc mã hó a và một cho việc giải mã , khóa mã hóa đƣợc công khai hóa. 3. Các thuật toán tạo chữ ký điện tử (Digital Signature Algorithms). Các thuật toán tạo chữ ký điện tử tạo thành các hệ chữ ký điện tử . Thông thƣờ ng mỗi hệ chƣ̃ ký điện tƣ̉ có cù ng cơ sở lý thuyế t vớ i một hệ mã mật khó a công khai nhƣng vớ i cá ch á p dụng khác nhau. Trong chƣơng trình học chú ng ta sẽ học một số hệ chƣ̃ ký điện tƣ̉ phổ biế n là RSA, ElGammma… 4. Các hàm băm (Hash functions). Các hàm băm là các thuật toán mã hóa không khóa hoặc có khóa và thƣờng đƣợc sử dụng trong các hệ chữ ký điện tử hoặc các hệ mã khóa công khai. Tiêu chí thƣ́ hai phân loại cá c thuật toá n mã hóa dựa trên cách thức xử lý input của thuật toá n (tƣ́ c là bản rõ ), dƣ̣a trên tiêu chí nà y chú ng ta có hai loại thuật toá n mã hó a sau: 1. Các thuật toán mã hóa khối (chẳng hạn nhƣ DES , AES …) xƣ̉ lý bản rõ dƣớ i các đơn vị cơ bản là các khối có kích thƣớc giống nhau. 2. Các thuật toán mã hóa dòng (RC4 …) coi bản rõ là một luồ ng bit, byte liên tục. 10. Một số ƣ́ ng dụng củ a mật mã học Ngày nay khó có thể tìm thấy các ứng dụng trên máy tính lại không sƣ̉ dụng tớ i cá c thuật toá n và cá c giao thƣ́ c mật mã học . Tƣ̀ cá c ƣ́ ng dụng cho cá c má y tính cá nhân (Desktop Applications ) cho tớ i cá c chƣơng trình hệ thố ng nhƣ cá c hệ điều hà nh (Operating Systems) hoặc cá c ƣ́ ng dụng mạng nhƣ Yahoo Messenger hoặc cá c hệ cơ sở dƣ̃ liệu đều có sƣ̉ dụng cá c thuật toá n mã hó a mật khẩu ngƣờ i dù ng bằ ng một hệ mã hoặc một hà m băm nà o đó . Đặc biệt với sự phát triển mạnh mẽ của thƣơng mại điện tử các mô hình chƣ̃ ký điện tƣ̉ ngà y cà ng đó ng vai trò tích cƣ̣c cho một môi trƣờ ng an toà n cho ngƣờ i dù ng. Tuy vậy chú ng ta vẫn có thể chia cá c lĩnh vực ứng dụng của mật mã học thành các lĩnh vực nhỏ nhƣ sau:
  • 18. Chƣơng I: Giớ i thiệu 9  Bảo mật (Confidentiality): che dấ u nội dung của cá c thông điệp đƣợc trao đổi trong một phiên truyề n thông hoặc giao di ̣ch hoặc cá c thông điệp trên một hệ thố ng má y tính (các file, các dữ liệu trong một cơ sở dữ liệu …).  Xác thực hóa (Authentication): đảm bảo nguồ n gố c của một thông điệp , ngƣờ i dùng.  Toàn vẹn (Integrity): đảm bảo chỉ có cá c tổ chƣ́ c đã đƣợc xá c thƣ̣c hó a mớ i có thể thay đổi cá c tà i sản của hệ thố ng cũng nhƣ cá c thông tin trên đƣờ ng truyề n.  Dịch vụ khôn g thể chố i tƣ̀ (Non-Repudiation): Các bên đã đƣợc xác thực không thể phủ nhận việc tham gia và o một giao di ̣ch hợp lệ.  Ngoài ra còn các dịch vụ quan trọng khác chẳng hạn nhƣ chữ ký điện tử , dịch vụ chứng thực danh tính (Identification) cho phé p thay thế hình thƣ́ c xá c thƣ̣c hó a ngƣờ i dùng dựa trên các mật khẩu bằng các kỹ thuật mạnh hơn hoặc di ̣ch vụ thƣơng mại điện tƣ̉ cho phé p tiế n hà nh cá c giao di ̣ch an toà n trên cá c kênh truyề n thông không an t oàn nhƣ Internet.
  • 19. Chƣơng II: Cơ sở toán học 10 CHƢƠNG II: CƠ SỞ TOÁN HỌC Để hiểu đƣợc nhƣ̃ng thuật toá n sƣ̉ dụng trong cá c hệ mã mật , trong cá c hệ chƣ̃ ký điện tƣ̉ cũng nhƣ cá c giao thƣ́ c mật mã , chúng ta phải có những kiến thức nề n tảng cơ bản về toán học, lý thuyết thông tin … đƣợc sƣ̉ dụng trong mật mã học. Chƣơng nà y trình bày nhƣ̃ng khá i niệm cơ bản về lý thuyế t thông tin nhƣ Entropy , tố c độ của ngôn ngƣ̃ (Rate of Language), độ phƣ́ c tạp của thuật toá n , độ an toà n của thuật toá n, và một số kiế n thƣ́ c toán học: đồ ng dƣ số học (modulo), số nguyên tố , đi ̣nh lý phầ n dƣ trung hoa , đi ̣nh lý Fermat . . . và các thuật toán kiểm tra số nguyên tố . Nhƣ̃ng vấ n đề chính sẽ đƣợc trình bày trong chƣơng này gồ m :  Lý thuyết thông tin  Lý thuyết độ phức tạp  Lý thuyết số học. 1. Lý thuyết thông tin Nhƣ̃ng khá i niệm mở đầ u của lý thuyết thông tin đƣợc đƣa ra lầ n đầ u tiên và o năm 1948 bở i Claude Elmwood Shannon (một nhà khoa học đƣ ợc coi là cha để của lý thuyết thông tin). Trong phầ n nà y chú ng ta chỉ đề cập tớ i một số chủ đề quan trọng của lý thuyế t thông tin. 1.1. Entropy Lý thuyết thông tin định nghĩa khố i lƣợng thông tin trong một thông bá o là số bít nhỏ nhấ t cầ n thiết để mã hoá tấ t cả nhƣ̃ng nghĩa có thể của thông bá o đó . Ví dụ, trƣờ ng ngay_thang trong một cơ sở dƣ̃ liệu chƣ́ a không quá 3 bít thông tin, bở i vì thông tin ngà y có thể mã hoá với 3 bít dữ liệu: 000 = Sunday 001 = Monday 010 = Tuesday 011 = Wednesday 100 = Thursday 101 = Friday 110 = Saturday 111 is unused Nế u thông tin nà y đƣợc biểu diễn bở i chuỗi ký tƣ̣ ASCII tƣơng ƣ́ ng , nó sẽ chiếm nhiề u không gian nhớ hơn , nhƣng cũng không chƣ́ a nhiề u thông tin hơn . Tƣơng tƣ̣ nhƣ trƣờ ng gioi_tinh của một cơ sở dƣ̃ liệu chỉ chứa 1 bít thông tin, nó có thể lƣu trữ nhƣ một trong hai xâu ký tƣ̣ ASCII : Nam, Nƣ̃. Khố i lƣợng thông tin trong một thông bá o M đo bở i Entropy củ a thông bá o đó , ký hiệu là H(M). Entropy của thông bá o gioi _tinh là 1 bít, ký hiệu H (gioi_tinh) = 1, Entropy của thông báo số ngày trong tuần là nhỏ hơn 3 bits.
  • 20. Chƣơng II: Cơ sở toán học 11 Trong trƣờ ng hợp tổng quát, Entropy của một thông báo là log 2n, vớ i n là số khả năng có thể (ý nghĩa) của thông báo. 1.2. Tố c độ củ a ngôn ngƣ̃. (Rate of Language) Đối với một ngôn ngữ, tố c độ thƣ̣c tế (actual rate) của ngôn ngữ là: r = H(M)/N trong trƣờ ng hợp nà y N là độ dà i của thông bá o và M là một thông điệp có độ dài N. Tố c độ của tiế ng Anh bình thƣờ ng là 0.28 do đó mỗi chƣ̃ cá i tiế ng Anh có 1.3 bit nghĩa. Tố c độ tuyệt đố i (absolute rate) của một ngôn ngƣ̃ là số bits lớ n nhấ t cầ n thiết để mã hóa các ký tƣ̣ của ngôn ngƣ̃ đó . Nế u có L ký tƣ̣ trong một ngôn ngƣ̃ , thì tốc độ tuyệt đố i là : R = log2L Đây là số Entropy lớ n nhấ t của mỗi ký tƣ̣ đơn lẻ . Đối với tiếng Anh gồm 26 chƣ̃ cá i, tố c độ tuyệt đố i là log 226 = 4.7bits/chƣ̃ cái. Sẽ không có điều gì là ngạc nhiên đối với tất cả mọi ngƣời rằng thực tế tốc độ của tiếng Anh nhỏ hơn nhiề u so vớ i tố c độ tuyệt đố i , và chúng ta vẫn thấy rằng đối với một thông báo bằng tiếng Anh có thể loại bỏ một số chƣ̃ cái nhƣng ngƣời đọc vẫn có thể hiểu đƣợc . Hiện tƣợng nà y đƣợc gọi là độ dƣ thƣ̀ a củ a ngôn ngƣ̃ (Redundancy) tƣ̣ nhiên. Không chỉ đố i vớ i tiếng Anh mà vớ i hầ u hế t cá c ngôn ngƣ̃ tƣ̣ nhiên , do cấ u trú c của ngôn ngƣ̃ , do việc sƣ̉ dụng ngôn ngƣ̃ dẫn tớ i có một số chƣ̃ cá i đƣợc sƣ̉ dụng vớ i tầ n suấ t không đồ ng đề u hoặc chỉ có thể xuấ t hiện vớ i một cấ u trú c nà o đó là m cho chú ng ta vẫn có thể đoá n đƣợc nghĩa của cá c thông bá o nếu loại bỏ cá c chƣ̃ cá i nà y. Độ dƣ thừa (Redundancy) của một ngôn ngữ ký hiệu là D và D = R – r. Đối với tiếng Anh: D = 1 - .28 = .72 letters/letter D = 4.7 – 1.3 = 3.4 bits/letter Nhƣ vậy mỗi chƣ̃ cá i có 1.3 bit nghĩa và 3.4 bit dƣ thƣ̀ a (xấ p xỉ 72%). 1.3. Tính an toà n củ a hệ thố ng mã hoá Shannon đi ̣nh nghĩa rấ t rõ rà ng , tỉ mỉ các mô hình toán học để đánh giá độ an toà n của các hệ mã mật sử dụng . Mục đích của ngƣời thám mã là phát hiện ra khoá sƣ̉ dụng của hệ mã (K-Key), bản rõ (P-PlainText), hoặc cả hai . Hơn nƣ̃a họ có thể hà i lò ng vớ i một và i thông tin có khả năng về bản rõ P chẳng hạn nhƣ đó là âm thanh dạng số , hoặc là một văn bản tiế ng Đƣ́ c, hoặc là một bảng tính dữ liệu, v. v . . . Trong hầ u hế t cá c lầ n thám mã, ngƣờ i thám mã thƣờ ng cố gắ ng thu thập một số thông tin có khả năng về bản rõ P trƣớ c khi bắ t đầ u. Họ có thể biết ngôn ngữ đã đƣợc sƣ̉ dụng để mã hoá. Ngôn ngƣ̃ nà y chắ c chắn có sƣ̣ dƣ thƣ̀ a kết hợp vớ i chính ngôn ngƣ̃ đó . Nếu nó là một thông bá o gƣ̉ i tớ i Bob, nó có thể bắt đầu với "Dear Bob". Đoạn văn bản H(M) = log2n
  • 21. Chƣơng II: Cơ sở toán học 12 "Dear Bob" sẽ là một khả năng có thể hơn là một chuỗi không mang ý nghĩa gì chẳng hạn "tm*h&rf". Mục đích của việc thám mã là sửa những tập hợp khả năng có thể có của bản mã (C-CipherText) vớ i mỗi khả năng có thể của bản rõ. Shannon phá t triển lý thuyế t cho rằ ng , hệ thố ng mã hoá chỉ an toà n tuy ệt đối nếu nế u số khoá có thể sƣ̉ dụng ít nhất phải bằ ng số thông bá o có thể . Hiểu theo một nghĩa khác, khoá tối thiểu của hệ mã phải dài bằng thông báo của hệ mã đó . Ngoại trừ các hệ mã an toà n tuyệt đố i , các bản mã thƣờ ng chƣ́ a một số thông tin đú ng vớ i bản rõ , điề u nà y là không thể trá nh đƣợc . Một thuật toá n mật mã tố t giƣ̃ cho thông tin bị tiết lộ ở mức nhỏ nhất và một ngƣờ i thá m mã giỏi sẽ khai thá c tố t nhƣ̃ng thông tin nà y để phá t hiện ra bản rõ. Ngƣờ i thám mã sử dụng sự dƣ thừa tự nhiên của ngôn ngữ để làm giảm số khả năng có thể có của bản rõ. Nhiề u thông tin dƣ thƣ̀ a của ngôn ngƣ̃ , sẽ dễ dàng hơn cho quá trình thám mã. Chính vì lý do nà y mà nhiều mô hình mã hó a sƣ̉ dụng thuật toá n nén bản rõ để giảm kích thƣớc văn bản trƣớc khi mã hoá chúng. Vì quá trình nén làm giảm sự dƣ thƣ̀ a của thông bá o . Entropy của một hệ mã mật là kích thƣớc của không g ian khoá (Keyspace). H(K) = log2(number of keys ) Shannon cũng đƣa ra một khá i niệm gọi là Unicity Distance (ký hiệu là U ) để đánh giá độ an toàn của một hệ mã mật. Đối với một hệ mã mật U của nó là: U = H(K)/D Đây là số nhỏ nhấ t cá c bản mã cầ n thiế t để có thể tiế n hà nh thá m mã theo cá ch thƣ̉ tấ t cả cá c khó a có thể (brute-force attack) thành công. Chẳng hạn đố i vớ i hệ mã thay thế đơn âm (nhƣ Caesar) trên bảng chƣ̃ cá i tiế ng Anh ta sẽ có: H(K)= log226! = 87. D = 3.4 suy ra U = 25.5. Điều nà y có nghĩa là nếu chú ng ta có khoảng 25 chƣ̃ cá i bản mã chú ng ta chỉ có thể thƣ̉ để khớ p vớ i một bản rõ. Khái niệm Unicity Distance là một khái niệm mang tính xác suất nó cho ch úng ta biế t số lƣợng ít nhấ t cá c bản mã cầ n có để có thể xá c đi ̣nh duy nhấ t 1 bản mã chứ không phải là số bản mã đủ để tiến hành thám mã (chắ c chắn thà nh công). Nế u chú ng ta có số bản mã ít hơn số U thì không thể nói là dự đoán (phép thử) của chúng ta là đúng . Dƣ̣a vào công thức này chúng ta thấy nếu nhƣ độ dƣ thừa của ngôn ngữ càng gần 0 thì càng khó thám mã mặc dù đó có thể là một hệ mã rất đơn giản . Cũng dựa vào công thứ c nà y suy ra để tăng tính an toà n của hệ mã có thể tăng không gian khó a của nó . 1.4. Kỹ thuật lộn xộn và rƣờ m rà (Confusion and Diffusion) Theo Shannon, có hai kỹ thuật cơ bản để che dấu sự dƣ thừa thông tin trong thông báo gốc, đó là : sƣ̣ lộn xộn và sƣ̣ rƣờ m rà. Kỹ thuật lộn xộn (Confusion): che dấ u mố i quan hệ giƣ̃a bản rõ và bản gố c . Kỹ thuật nà y là m thấ t bại các cố gắng nghiên cƣ́ u bản mã để tìm kiếm thông tin dƣ thừa và thố ng kê mẫu. Phƣơng phá p dễ nhấ t để thƣ̣c hiện điề u nà y là thông qua kỹ thuật thay thế . Một hệ mã hoá thay thế đơn giản , chẳng hạn hệ mã di ̣ch vò ng Caesar , dƣ̣a trên nền
  • 22. Chƣơng II: Cơ sở toán học 13 tảng của sự thay thế các chƣ̃ cá i của bản rõ, nghĩa là chữ cái này đƣ ợc thay thế bằng chƣ̃ cá i khá c Kỹ thuật rƣờm rà (Diffusion): làm mất đi sự dƣ thừa của bản rõ bằng cách tăng sự phụ bản mã vào bản rõ (và khóa). Công việc tìm kiếm sƣ̣ dƣ thƣ̀ a của ngƣờ i thá m mã sẽ rất mất thời gian và phức tạp. Cách đơn giản nhất tạo ra sự rƣờm rà là thông qua việc đổi chỗ (hay cò n gọi là kỹ thuật hoán vị). Thông thƣờ ng cá c hệ mã hiện đại thƣờ ng kế t hợp cả hai kỹ thuật thay thế và hoá n vị để tạo ra các thuật toán mã hóa có độ an toàn cao hơn. 2. Lý thuyết độ phức tạp Lý thuyết độ phức tạp cung cấp một phƣơng pháp để phân tích độ phức tạp tính toán của thuật toán và các kỹ thuật mã hoá khác nhau . Nó so sánh các thuật toán mã hoá, kỹ thuật và phát hiện ra độ an toàn của các thuật toán đó . Lý thuyết thông tin đã cho chúng ta biết rằng một thuật toán mã hoá có thể bị bại lộ . Còn lý thuyết độ phứ c tạp cho biế t khả năng bi ̣thá m mã củ a một hệ mã mật. Độ phức tạp thời gian của thuật toán là một hà m của kích thƣớ c dƣ̃ liệu input của thuật toá n đó . Thuật toá n có độ phƣ́ c tạp thờ i gian f (n) đố i vớ i mọi n và kích thƣớc input n, nghĩa là số bƣớc thƣ̣c hiện của thuật toán lớn hơn f(n) bƣớ c. Độ phức tạp thời gian thuật toán phụ thuộc vào mô hình của các thuật toán , số cá c bƣớ c nhỏ hơn nếu cá c hoạt động đƣợc tập trung trong một bƣớ c (chẳng hạn nhƣ cá c vòng lặp, các lời gọi hàm …). Các lớp của thuật toán, vớ i độ phƣ́ c tạp thờ i gian là một hàm mũ đố i vớ i kích thƣớ c input đƣợc coi là "không có khả năng thƣ̣c hiện ". Các thuật toán có độ phức tạp giống nhau đƣợc phân loại và o trong cá c lớ p tƣơng đƣơn g. Ví dụ tất cả các thuật toán có độ phƣ́ c tạp là n 3 đƣợc phân và o trong lớ p n 3 và ký hiệu bởi O(n3 ). Có hai lớp tổng quát sẽ đƣợc là lớ p P (Polynomial) và lớp NP (NonPolynomial). Các thuật toán thuộc lớp P có độ phức tạ p là hà m đa thƣ́ c của kích thƣớc input . Nếu mỗi bƣớ c tiếp theo của thuật toá n là duy nhấ t thì thuật toá n gọi là đơn đi ̣nh . Tấ t cả thuật toá n thuộc lớ p P đơn đi ̣nh có thờ i gian giớ i hạn là P _time, điều nà y cho biế t chú ng sẽ thực hiện trong thời gian đa thức , tƣơng đƣơng vớ i độ phƣ́ c tạp đa thƣ́ c của kích thƣớ c input. Thuật toán mà ở bƣớc tiếp theo việc tính toán phải lựa chọn giải pháp từ những giớ i hạn giá tri ̣của hoạt động gọi là không đơn đi ̣nh. Lý thuyết độ phức tạp sử dụng các máy đặc biệt mô tả đặc điểm bằng cách đƣa ra kết luận bởi các chuẩn . Máy Turing là một má y đặc biệt , máy hoạt động trong thời gian rời rạc , tại một thời điểm nó nằm trong khoảng trạng thái đầy đủ số của tất cả các trạng thái có thể là hữu hạn . Chúng ta có thể đi ̣nh nghĩa hà m độ phƣ́ c tạp thờ i gian kết hợp vớ i má y Turing A. fA(n) = max{m/A kế t thú c sau m bƣớ c vớ i đầ u và o w = n3 } Ở đây chúng ta giả sử rằng A là trạng thái kết thúc đối với tất cả các đầu vào , vấ n đề sẽ trở nên khó khăn hơn nếu các trạng thái không nằm trong P . Máy Turing k hông đơn đi ̣nh hoạt động vớ i thuật toá n NP. Máy Turing không đơn định có thể có một và i trạng
  • 23. Chƣơng II: Cơ sở toán học 14 thái chính xác. S(w) là trạng thái đo sự thành công ngắn nhất của thuật toán, (Nghĩa là sự tính toán dẫn đến trạng thái cuối cùng) Hàm số độ phức tạp thời gian của máy Turing không đơn định A đƣợc đi ̣nh nghĩa : fA(n)=max{1,m/s(w) có m bƣớc đối với w/w=n} ở mỗi bƣớc máy Turing không đơn định bố trí nhiều bản sao của chính nó nhƣ có một và i giải phá p và tính toá n độc lập vớ i mọi lờ i giải. Các thuật toán thuộc lớ p NP là không đơn đi ̣nh và có thể tính toá n trên má y Turing không đơn đi ̣nh trong thờ i gian P. Tuy nhiên không phải thuật toá n mã hó a cà ng có độ phƣ́ c tạp lớ n thì hệ mã mật sƣ̉ dụng thuật toán đó sẽ càng an toà n theo nhƣ phát biểu của luật Kierchoff. Vậy có thể đá nh giá độ an toà n của một hệ mã mật nhƣ thế nà o ? Vấ n đề này đã đƣợc Claude Shannon trả lờ i vớ i cá c khá i niệm về độ an toà n củ a cá c hệ mã mật trong một bài báo có tiêu đề “Lý thuyết thông tin của các hệ thống bảo mật” (1949). 2.1. Độ an toàn tính toán Định nghĩa: Một hệ mật được gọi là an toàn về mặt tính toán nếu có một thuật toán tốt nhất để phá nó thì cần ít nhất N phép toán, với N là một số rất lớn nào đó. [10] Tuy nhiên trong thực tế, không có một hệ mật nào chứng tỏ là an toàn theo định nghĩa trên. Vì vậy, trên thực tế, ngƣời ta gọi hệ mật là “an toàn tính toán” nếu có một thuật toán để phá nó nhƣng đòi hỏi thời gian lớn đến mức không chấp nhận đƣợc (thuật toán có độ phƣ́ c tạp hà m mũ hoặc thuộc lớ p cá c bà i toá n có độ phƣ́ c tạp NP). Một cách tiếp cận khác về độ “an toàn tính toán” là quy nó về một bài toán đã đƣợc nghiên cứu kỹ và đƣợc coi là khó. Ví dụ nhƣ bài toán “phân tích ra thừa số nguyên tố của một số n cho trƣớc” đƣợc coi là bài toán khó với n lớn, vì vậy ta có thể coi một hệ mật dựa trên bài toán “phân tích ra thừa số nguyên tố” là an toàn (tất nhiên đây chỉ là độ an toàn dựa vào chứng minh một bài toán khác chứ không phải chứng minh hoàn chỉnh về độ an toàn của hệ mật). 2.2. Độ an toàn không điều kiện Định nghĩa 1: Một hệ mật được coi là an toàn không điều kiện khi nó không thể bị phá ngay cả với khả năng tính toán không hạn chế. [10] Rõ ràng là “độ an toàn không điều kiện” không thể nghiên cứu theo quan điểm độ phức tạp tính toán vì thời gian tính toán là không hạn chế. Vì vậy, ở đây lý thuyết xác suất sẽ đƣợc đề cập để nghiên cứu về “an toàn không điều kiện”. Định nghĩa 2: Giả sử biến X và Y là các biến ngẫu nhiên. Ký hiệu xác suất để X nhận giá trị x là p(x) và để Y nhận giá trị y là p(y). Xác suất đồng thời p(x, y) là xác suất để đồng thời X nhận giá trị x và Y nhận giá trị y. Xác suất có điều kiện p(x/y) là xác suất để X nhận giá trị
  • 24. Chƣơng II: Cơ sở toán học 15 x với điều kiện Y nhận giá trị y. Các biến X và Y đƣợc gọi là độc lập nếu p(x, y) = p(x)p(y) với mọi giá trị có thể có của X và Y. Định lý Bayes: Nếu p(y) ≠ 0 thì ta có: ( ) ( / ) ( / ) ( ) p x p y x p x y p y  Hệ quả: X, Y là biến độc lập khi và chỉ khi p(x/y) = p(x) với mọi x, y. [5] Ở đây, ta giả thiết rằng một khoá cụ thể chỉ đƣợc dùng cho một bản mã. Ký hiệu xác suất tiên nghiệm để bản rõ xuất hiện là pp(x). Cũng giả thiết rằng khoá K đƣợc chọn theo một phân bố xác suất nào đó (thông thƣờng khoá K đƣợc chọn ngẫu nhiên nên các khoá sẽ đồng khả năng). Ký hiệu xác suất khoá K đƣợc chọn là pk(K). Giả thiết rằng khoá K và bản rõ x là các biến độc lập. Hai phân bố xác suất trên P và K sẽ tạo ra một phân bố xác suất trên C . Ký hiệu C(K) là tập các bản mã có thể nếu K là khoá. C (K) = { eK(x): xP } Khi đó với mỗi yC, ta có: C , ( ) ( ) ( ). ( ( ))K p K K y C K p y p K p d y    Và xác suất có điều kiện pC(y/x) là xác suất để y là bản mã với điều kiện bản rõ là x đƣợc tính theo công thức sau:   )(, )()/( ydxK KC K Kpxyp Bây giờ ta có thể tính xác suất có điều kiện pP(x/y) là xác suất để x là bản rõ khi bản mã là y theo định lý Bayes: , ( )C , ( ) ( ) ( ) ( ) ( / ) ( / ) ( ) ( ) ( ( )) K P K K x d yP P C K P K K y C K p x p K p x p y x p x y p y p K p d y       Lúc này, ta có thể định nghĩa khái niệm về độ mật hoàn thiện. Nói một cách không hình thức, độ mật hoàn thiện nghĩa là đối phƣơng với bản mã trong tay cũng không thể thu nhận đƣợc thông tin gì về bản rõ. Tuy nhiên ta sẽ nêu định nghĩa chính xác về độ mật hoàn thiện nhƣ sau: Định nghĩa: Một hệ mật hoàn thiện nếu pP(x/y) = pP(x) với mọi xP và mọi yC. Tức là xác suất hậu nghiệm để thu được bản rõ là x với điều kiện đã thu được bản mã là y đồng nhất với xác suất tiên nghiệm để bản rõ là x. [5]
  • 25. Chƣơng II: Cơ sở toán học 16 Hay nói cách khác, độ mật hoàn thiện cũng tƣơng đƣơng với pC(y/x)= pC(y)). Định lý Shannon: Giả sử (P, C, K, E, D) là một hệ mật, khi đó hệ mật đạt được độ mật hoàn thiện khi và chỉ khi |K| ≥ |C|. Trong trường hợp |K| = |C| = |P|, hệ mật đạt độ mật hoàn thiện khi và chỉ khi mỗi khoá K được dùng với xác suất bằng nhau, bằng 1/|K| và với mỗi xP, mỗi yC có một khoá K duy nhất sao cho eK(x) = y. [5] Nhƣ vậy ta thấy để đạt độ hoàn thiện đòi hỏi khoá phải rất dài, do vậy rất khó khăn trong việc chuyển giao khoá giữa hai bên truyền tin. Vì vậy trong thực tế, chúng ta không thể có an toàn không điều kiện mà chúng ta chỉ cần an toàn thực tế, tức là phụ thuộc vào thông tin và thời gian cần bảo mật bằng cách sử dụng các hệ mật khác nhau với độ bảo mật khác nhau. 3.3. Hệ mật tích Một ý tƣởng khác đƣợc Shannon đƣa ra là ý tƣởng tạo ra các hệ mật mới dựa trên các hệ mật cũ bằng cách tạo tích của chúng. Đây là một ý tƣởng quan trọng trong việc thiết kế các hệ mật hiện đại ngày nay. Để đơn giản, ở đây chúng ta chỉ xét các hệ mật trong đó C = P, các hệ mật loại này gọi là tự đồng cấu. Giả sử S1 = (P, C, K1, E1, D1) và S2 = (P, C, K2, E2, D2) là các hệ mật tự đồng cấu có cùng không gian bản rõ và bản mã. Khi đó hệ mật tích đƣợc định nghĩa là hệ mật S = (P, C, K1K2 ,E ,D). Khoá của hệ mật tích K = (K1, K2) trong đó K1  K1, K2  K2. Các hàm mã hoá và giải mã đƣợc xác định nhƣ sau: ))(()( 1221 ),( xeexe KKKK  ))(()( 2121 ),( xedxd KKKK  Nếu chúng ta lấy tích của S với chính nó, ta có hệ mật (S×S) (ký hiệu S2). Nếu lấy tích n lần thì kết quả là Sn. Ta gọi Sn là một hệ mật lặp. Nếu S2 = S thì ta gọi hệ mật là luỹ đẳng. Nếu S là luỹ đẳng thì không nên lấy tích lặp vì độ bảo mật không tăng lên mà không gian khoá lại lớn hơn. Đƣơng nhiên nếu S không luỹ đẳng thì ta có thể lặp lại S nhiều lần để tăng độ bảo mật. Ở đây nảy sinh một vấn đề là làm thế nào để có một hệ mật không luỹ đẳng? Ta biết rằng nếu S1 và S2 là luỹ đẳng và giao hoán thì S1×S2 cũng luỹ đẳng, đơn giản vì: (S1×S2)×(S1×S2) = S1×(S2×S1)×S2 = S1×(S1×S2)×S2 = (S1×S1)×(S2×S2) = (S1×S2) Vậy nếu muốn (S1×S2) không luỹ đẳng thì cần phải có S1 và S2 không giao hoán. Điều này có thể dễ dàng thực hiện bằng cách lấy tích của một hệ mật theo kiểu thay thế và một hệ mật theo kiểu hoán vị. Đây là kỹ thuật đƣợc dùng để thiết kế các hệ mã hiện đại nhƣ mã DES.
  • 26. Chƣơng II: Cơ sở toán học 17 3. Lý thuyết toán học 3.1. Modulo số học Về cơ bản a  b(mod n) nế u a = b+kn trong đó k là một số nguyên . Nế u a và b dƣơng và a nhỏ hơn n, chúng ta có thể gọi a là phầ n dƣ của b khi chia cho n. Nói chung a và b đều là phầ n dƣ khi chia cho n . Ngƣờ i ta cò n gọ b là thặng dƣ của a theo modulo n, và a là đồng dƣ của b theo modulo n. Modulo số học cũng giố ng nhƣ số học bình thƣờ ng , bao gồ m cá c phé p giao hoá n , kết hợp và phân phố i. Mặt khá c giảm mỗi giá tri ̣trung gian trong suố t quá trình tính toá n. (a+b) mod n = ((a mod n) + (b mod n)) mod n (a- b) mod n = ((a mod n) - (b mod n)) mod n (ab) mod n = ((a mod n)  (b mod n)) mod n (a(b + c)) mod n = (((a  b) mod n) + ((a  c) mod n)) mod n Các phép tính trong các hệ mã mật hầ u hế t đều thƣ̣c hiện đố i vớ i một modulo N nà o đó . 3.2. Số nguyên tố Số nguyên tố là một số lớ n hơn 1, nhƣng chỉ chia hế t cho 1 và chính nó , ngoài ra không cò n số nào nó có thể chia hết nữa . Số 2 là một số nguyên tố đầ u tiên và là số nguyên tố chẵn duy nhấ t . Do vậy 7, 17, 53, 73, 2521, 2365347734339 cũng là số nguyên tố . Số lƣợng số nguyên tố là vô tận. Hệ mật mã thƣờ ng sƣ̉ dụng số nguyên tố lớ n cỡ 512 bits và thậm chí lớ n hơn nhƣ vậy. 3.3. Ƣớc số chung lớn nhất Hai số a và n đƣợc gọi là hai số nguyên tố cùng nhau nếu chúng không có thừa số chung nà o khá c 1, hay nó i một cá ch khá c, nế u ƣớ c số chung lớ n nhấ t của a và n là bằng 1. Chúng ta có thể viết nhƣ sau : GCD(a,n)=1, (GCD-Greatest Common Divisor) Số 15 và 28 là hai số nguyên tố cù ng nhau, nhƣng 15 và 27 thì không phải là hai số nguyên tố cùng nhau do có ƣớ c số chung là 1 và 3, dễ dà ng thấ y 13 và 500 cũng là một cặp số nguyên tố cùng nhau. Một số nguyên tố sẽ là nguyên tố cù ng nhau vớ i tấ t cả cá c số nguyên khá c trƣ̀ cá c bội số của nó. Một cá ch dễ nhấ t để tính toá n ra ƣớ c số chung lớ n nhấ t của hai số là nhờ và o thuật toán Euclid. Knuth mô tả thuật toá n và một và i mô hình của thuật toá n đã đƣợc sƣ̉ a đổi. Dƣớ i đây là đoạn mã nguồ n trong ngôn ngƣ̃ C: /* Thuật toá n tìm ƣớ c số chung lớ n nhấ t của x và y, giả sử x,y>0 */ int gcd(int x, int y) { int g; if(x<0)
  • 27. Chƣơng II: Cơ sở toán học 18 x=-x; if(y<0) y= -y; g=y; while(x>0){ g=x; x=y%x; y=g; } return g; } 3.4. Vành ZN (vành đồng dƣ module N) Tập cá c số nguyên ZN = {0, 1, …, N-1} trong đó N là một số tƣ̣ n hiên dƣơng vớ i hai phé p toá n cộng (+) và nhân (.) đƣợc đi ̣nh nghĩa nhƣ sau tạo thà nh một vành đồng dƣ modulo N (hay cò n gọi là tập thặng dƣ đầ y đủ theo modulo N): Phép cộng:  a, b ZN: a+b = (a+b) mod N. Phép nhân:  a, b ZN: a . b = (a * b) mod N. Theo tính chấ t của modulo số học chú ng ta dễ dà ng nhận thấ y Z N là một vành giao hoán và kết hợp. Hầ u hế t cá c tính toá n trong cá c hệ mã mật đều đƣợc thƣ̣c hiện trên một vành ZN nào đó. Trên và nh ZN số 0 là phần tử trung hòa vì a + 0 = 0 + a = a,  a ZN, số 1 đƣợc gọi là phần tử đơn vị vì a . 1 = 1 . a = a  a ZN. 3.5. Phầ n tƣ̉ nghi ̣ch đả o Trên trƣờ ng số thƣ̣c R , số nghi ̣ch đảo của 5 là 1/5, bở i vì 5  1/5=1. Còn trên một vành số nguyên ZN ngƣờ i ta đƣa ra khá i niệm về số nghi ̣ch đảo của một số nhƣ sau: Giả sử a ZN và tồn tại b ZN sao cho a.b = (a*b) mod N = 1. Khi đó b đƣợc gọi là phầ n tƣ̉ nghi ̣ch đảo của a trên ZN và ký hiệu là a-1 = b. Việc tìm phần tử nghịch đảo của một số a ZN cho trƣớ c thƣ̣c chấ t tƣơng đƣơng vớ i việc tìm hai số b và k sao cho: a.b = k.N + 1 trong đó b, k ZN. Hay viế t gọn lại là : a-1  b (mod N ) Đi ̣nh lý về sƣ̣ tồ n tại củ a phầ n tƣ̉ nghi ̣ch đả o : Nế u GCD(a, N) = 1 thì tồn tại duy nhấ t 1 số b ZN là phần tử nghịch đảo của a, nghĩa là thỏa mãn a.b = (a*b) mod N = 1.
  • 28. Chƣơng II: Cơ sở toán học 19 3.6. Hàm phi Ơle Vớ i mỗi số nguyên N , giá trị của hàm phi Ơle của N là tổng số tất cả các số nguyên ZN và nguyên tố cùng nhau với N . Chẳng hạn nế u P là một số nguyên thì giá tri ̣ hàm phi Ơle của P: (P) = P – 1 hoặc nế u N = p*q trong đó p và q là hai số nguyên tố thì (N) = (p-1)*(q-1). Trong trƣờ ng hợp tổng quá t nế u dạng phân tích ra thừa số nguyên tố của N là: 1 2 1 2 ... k kN p p p    trong đó pi là các số nguyên tố còn i là các số nguyên dƣơng thì giá trị của hàm phi Ơle đƣợc tính nhƣ sau: 1 2 11 1 1 1 2 2( ) ( 1) ( 1) ...( 1) k k kN p p p p p p          Liên quan tớ i khá i niệm về hà m phi Ơle chú ng ta có đi ̣nh lý Ơle phá t biểu nhƣ sau:  a  Z* N = ZN – {0} và GCD(a, N) = 1 ta có ( ) 1(mod )N a N  . Có nghĩa là ( )N a chính là giá trị nghịch đảo của a trên ZN. Một trƣờ ng hợp riêng của đi ̣nh lý Ơle chính là đi ̣nh lý Fermat nhỏ : Nế u P là một số nguyên tố thì  a  Z* P ta có 1 1(mod )P a P  . Đây là một trong nhƣ̃ng đi ̣nh lý đẹp nhấ t của số học. Vớ i mỗi số nguyên N và nh Z * N gồ m cá c phầ n tƣ̉ thuộc Z N và nguyên tố cù ng nhau vớ i N, hay nó i cá ch khá c: Z* N = {x: xZN, (x, N) = 1} = {x: xZN, ( ) 1N x  }. Vớ i mỗi phầ n tƣ̉ a  ZN, bậc t của a (ký hiệu là ord(a)) là số nhỏ nhất sao cho : at = 1. Theo đi ̣nh lý Ơle ta suy ra (N) chia hết cho t. Cụ thể với N = 21 ta có bảng sau: aZ* 21 1 2 4 5 8 10 11 13 16 17 19 20 Ord(a) 1 6 3 6 2 6 6 2 3 6 6 2 Bảng 2.1: Bảng bậc của các phần tử trên Z* 21 Nếu bậc của a  Z* N bằ ng (N) thì a đƣợc g ọi là phần tử sinh hay phần tử nguyên thủy của tập Z* N. Và nếu tập Z* N chỉ có một phần tử sinh thì nó đƣợc gọi là một cyclic. 3.7. Thặng dƣ bậc hai Giả sử a  Z*N, khi đó a đƣợc gọi là thặng dƣ bậc 2 theo modulo N nế u tồ n tại x  Z*N sao cho x2 = a (mod N). Tập cá c phầ n tƣ̉ thặng dƣ theo modulo N đƣợc ký hiệu là QN, tập cá c phầ n tƣ̉ không thặng dƣ theo modulo N đƣợc gọi là bất thặng dƣ theo modulo N và ký hiệu là NQ .
  • 29. Chƣơng II: Cơ sở toán học 20 Đi ̣nh lý : nế u p là một số nguyên tố lẻ và  là một phần tử sinh của Z *N, khi đó a là một thặng dƣ bậc 2 theo modulo N khi và chỉ khi a = i mod p, trong đó i là số nguyên lẻ . Tƣ̀ đi ̣nh lý nà y suy ra ( 1)/ 2 NNQ p Q   . Ví dụ với p = 13,  = 6  Z13 ta có bảng sau: i 0 1 2 3 4 5 6 7 8 9 10 11 i mod 13 1 6 10 8 9 2 12 7 3 5 4 11 Bảng 2.2: Bảng lũy thừa trên Z13 Do đó Q13 = {1, 3, 4, 9, 10, 12} và 13Q = {2, 5, 6, 7, 8, 11}. Vớ i a  QN. Nế u x  Z*N thỏa mãn x2 = a (mod N) thì a đƣợc gọi là căn bậc hai của x theo modulo N. 3.8. Thuật toá n lũy thƣ̀ a nhanh Để có thể tìm phầ n tƣ̉ nghi ̣ch đảo của một số nguyên a trên một và nh Z N cho trƣớ c chúng ta có thể sƣ̉ dụng đi ̣nh lý Ơle để tính giá tri ̣lũy thƣ̀ a của a vớ i số mũ là giá tri ̣hà m phi Ơle của N . Tuy nhiên để có thể nhanh chó ng tính đƣợc giá tri ̣lũy thƣ̀ a nà y chú ng ta cầ n có một thuật toá n hiệu quả và một trong cá c thuật toá n đó (còn nhiều thuật toán khác phƣ́ c tạp hơn ) là thuật toán lũy thừa nhanh . Thuật toá n nà y do Chivers đƣa ra và o năm 1984. Các bƣớc của thuật toán nhƣ sau: Input: a, m, N. Output: am mod N. Begin Phân tích m thà nh dạng nhị phân m = bkbk-1…b0. j = 0, kq = a; while (k>=j) { if (bj==1) kq = (kq * a) mod N; a = (a * a) mod N; j = j + 1; } return kq; end Một cà i đặt khá c bằng ngôn ngƣ̃ C nhƣ sau: long modexp(long a, long x, long n) {
  • 30. Chƣơng II: Cơ sở toán học 21 long r = 1; while (x > 0){ if (x % 2 == 1) /* is x odd? */ r = (r * a) % n; a = (a*a) % n; x /= 2; } return r; } Thuật toá n nà y chạy không quá log2(m+1) bƣớ c. 3.9. Thuật toá n Ơclit mở rộng Trong phầ n 3.3 chúng ta đã biết thuật toán Ơclit đƣợc d ùng để tìm ƣớc số chung lớ n nhấ t của ha i số nguyên và trong phầ n 3.7 chúng ta đã biết cách tìm một phần tử nghịch đảo của một số bằ ng cá ch sƣ̉ dụng thuật toá n lũy thƣ̀ a nhanh tuy nhiên vẫn có một thuật toá n hiệu qu ả khác để tìm phầ n tƣ̉ nghịch đảo gọi là thuật tóan Ơclit mở rộng (do dƣ̣a trên thuật toá n Ơclit). Các bƣớc của thuật toán nhƣ sau: input: a, N vớ i GCD(a, N) = 1 output: a-1 begin g0=n, g1 = a, u0 = 1, u1 = 0, v0 = 0, v1 = 1, i = 1; while (gi <>0 ) { y = gi-1 div gi; gi+1 = gi-1 – y*gi; ui+1 = ui-1 – y*ui; vi+1 = vi-1 – v*ui; i = i + 1; } x = vi-1; if(x>0) then return x; else return (N+x); end;
  • 31. Chƣơng II: Cơ sở toán học 22 3.10. Phƣơng trình đồ ng dƣ bậc nhấ t 1 ẩn Phƣơng trình đồ ng dƣ bậc nhấ t 1 ẩn là phƣơng trình có dạng: ax  b (mod N) trong đó a, b  ZN là các hệ số còn x là ẩn số. Nế u nhƣ GCD(a, N) = 1 chúng ta có thể tìm a -1 sau đó nhân và o 2 vế của phƣơng trình và tìm ra nghiệm một cách dễ dàng tuy nhiên nếu g = GCD(a, N) là một giá trị khác 1 thì sao? Khi đó bà i toá n có thể vô nghiệm hoặc có nhiề u nghiệm . Chúng ta xét đi ̣nh lý sau: Giả sử g = GCD(a, N) và nếu b chia hết cho g thì phƣơng trình đồng dƣ bậc nhất 1 ẩn: ax  b (mod N) sẽ có g nghiệm có dạng x  ((b/g)x0 + t(n/g)) (mod N) trong đó t = 0, …, g-1, và x0 là nghiệm của phƣơng trình (a/g)x  1 (mod N/g). 3.11. Đi ̣nh lý phầ n dƣ Trung Hoa. Đi ̣nh lý phầ n dƣ Trung Hoa là m ột định lý quan trọng của số học đƣợc c ác nhà toán học Trung Quốc khám phá ra vào thế kỷ thứ nhất. Đi ̣nh lý phá t biểu nhƣ sau: Nế u d1, d2, …, dk là các số nguyên đôi một nguyên tố cùng nhau và N = d1d2…dk thì hệ phƣơng trình đồng dƣ: x  xi (mod di), i=1, 2, …, k sẽ có một nghiệm thuộc vào ZN. Nghiệm của hệ có tính theo công thƣ́ c sau: 1 ( / ) (mod ) k i i i i x N d y x N    trong đó yi là các nghiệm của các phƣơng trình đồng dƣ (N/di) yi  1(mod di). Dƣớ i đây là đoạn mã đi ̣nh lý phầ n dƣ trung hoa trong ngôn ngƣ̃ C : int chinese_remainder(int r, int *m, int *u) { int i; int modulus; int n; modulus = 1; for ( i=0; i<r:++i ) modulus *=m[i]; n=0; for ( i=0; i<r:++i )
  • 32. Chƣơng II: Cơ sở toán học 23 { n+=u[i]*modexp(modulus/m[i],totient(m[i]),m[i]); n%=modulus; } return n; } 4. Các thuật toán kiể m tra số nguyên tố . Hàm một phía (one-way functions) là một khái niệm cơ bản của mã hoá công khai. Việc nhân hai số nguyên tố là một ví dụ về hàm một phía , nhân cá c số nguyên tố lớ n để tạo thà nh một hợp số là dễ , nhƣng công việc ngƣợc lại phân tích một số nguyên lớ n thà nh dạng thƣ̀ a số nguyên tố lại là một bà i toá n khó (chƣa có một thuật toá n tố t). Các thuật toá n mã hoá khóa công khai đều cầ n phải sử dụng các số nguyên tố . Có một số phƣơng phá p để sinh ra số nguyên tố và hầu hết chúng đều dựa trên các thuật toán kiểm tra tính nguyên tố của một số nguyên . Tuy nhiên có một số vấ n đề đƣợc đặt ra đố i vớ i số nguyên tố nhƣ sau  Trong một hệ thố ng có thể đảm bảo hai ngƣờ i dù ng sẽ đƣợc sƣ̉ dụng hai số nguyên tố khá c nhau hay không ? Câu trả lờ i là có thể vì có tớ i 10150 số nguyên tố có độ dài 512 bits hoặc nhỏ hơn.  Khả năng hai ngƣời dùng sẽ lựa chọn cù ng một số nguyên tố là bao nhiêu. Vớ i sƣ̣ lƣ̣a chọn tƣ̀ 10150 số nguyên tố , điều kỳ xảy ra với xác xuất nhỏ hơn so với sự tự bốc cháy của máy tính. Các loại thuật toán kiểm tra số nguyên tố đƣợc chia làm hai loại : thuật toá n tấ t đi ̣nh và thuật toán xác suất. Các thuật toán tất định cho chúng ta biết chính xác câu trả lời một số nguyên có phải là một số nguyên tố hay không cò n một thuật toá n xác suất cho biết xác suất của một số ngu yên là một số nguyên tố là bao nhiêu . Trong phầ n nà y sẽ trình bày một số thuật toán kiểm tra số nguyên tố phổ biến. 4.1. Một số ký hiệu toán học 4.1.1. Ký hiệu Lagrăng (Legendre Symbol) Ký hiệu L(a,p) đƣợc đi ̣nh nghĩa vớ i a là một số nguyên và p là một số nguyên tố lớn hơn 2. Nó nhận ba giá trị 0, 1, -1 : L(a,p) = 0 nế u a chia hế t cho p. L(a,p) = 1 nế u a  QN (a là thặng dƣ bậc 2 modulo p). L(a,p) = -1 nế u a  NQ (a không là thặng dƣ bậc 2 modulo p). Một phƣơng phá p dễ dà ng để tính toá n ra L(a,p) là : L(a,p) = a (p-1)/2 mod p
  • 33. Chƣơng II: Cơ sở toán học 24 4.1.2. Ký hiệu Jacobi (Jacobi Symbol) Ký hiệu Jacobi đƣợc viết là J (a,n), nó là sự khái quát hoá của ký hiệu Lagrăng , nó đi ̣nh nghĩa cho bấ t kỳ cặp số nguyên a và n nào. Ký hiệu Jacobi là một chức năng trên tập hợp số thặng dƣ thấ p của ƣớ c số n và có thể tính toá n theo công thƣ́ c sau:  Nế u n là số nguyên tố , thì J(a,n) = 1 nế u a là thặng dƣ bậc hai modulo n .  Nế u n là số nguyên tố , thì J(a,n) = -1 nế u a không là thặng dƣ bậc hai modulo n .  Nế u n không phải là số nguyên tố thì Jacobi (a,n) sẽ đƣợc tính theo công thức sau:  J(a,n)=J(h,p1)  J(h,p2) . . .  J(h,pm) vớ i p1,p2. . .,pm là các thừa số lớn nhất của n. Thuật toá n nà y tính ra số Jacobi tuầ n hoà n theo công thƣ́ c sau : 1. J(1,k) = 1 2. J(ab,k) = J(a,k)  J(b,k) 3. J(2,k) =1 Nế u (k2 -1)/8 là chia hết và J(2,k) = -1 trong cá c trƣờ ng hợp khá c. 4. J(b,a) = J((b mod a),a) 5. Nế u GCD(a,b)=1 : a. J(a,b)  J(b,a) = 1 nế u (a-1)(b-1)/4 là chia hết. b. J(a,b)  J(b,a) = -1 nế u (a-1)(b-1)/4 là còn dƣ. Sau đây là thuật toá n trong ngôn ngƣ̃ C : int jacobi(int a,int b) { int a1,a2; if(a>=b) a%=b; if(a==0) return 0; if(a==1) return 1; if(a==2) if(((b*b-1)/8)%2==0) return 1; else return -1;
  • 34. Chƣơng II: Cơ sở toán học 25 if(a&b&1) (cả a và b đều là số dƣ) if(((a-1)*(b-1)/4)%2==0) return +jacobi(b,a); else return -jacobi(b,a); if(gcd(a,b)==1) if(((a-1)*(b-1)/4)%2==0) return +jacobi(b,a); else return -jacobi(b,a); return jacobi(a1,b) * jacobi(a2,b); } Trên thƣ̣c tế có thể tính đƣợc ký hiệu Jacobi một cá ch thuận lợi hơn nế u dƣ̣a và o 1 trong cá c tính chấ t sau, giả sử m, n là cá c số nguyên lẻ, a, b  Z: (i) J(a*b, n) = J(a, n) * J(b, n) do đó J(a2 , n) = 1. (ii) J(a, m*n) = J(a, m) * J(a, n). (iii) nế u a  b (mod n) thì J(a, n) = J(b, n). (iv) J(1, n) = 1. (v) J(-1, n) = (-1)(n-1)/2 (vi) J(m, n) = J(n, m) * (-1)(m-1)*(n-1)/4 4.2. Thuật toá n Soloway-Strassen Soloway và Strassen đã phá t triển thuật toá n có thể kiểm tra số nguyên tố . Thuật toán này sử dụng hàm Jacobi. Thuật toá n kiểm tra số p là số nguyên tố: 1. Chọn ngẫu nhiên một số a nhỏ hơn p. 2. Nế u ƣớ c số chung lớ n nhấ t gcd(a,p)  1 thì p là hợp số. 3. Tính j = a(p-1)/2 mod p. 4. Tính số Jacobi J(a,p). 5. Nế u j  J(a,p), thì p không phải là số nguyên tố. 6. Nế u j = J(a,p) thì nói p có thể là số nguyên tố với chắc chắn 50%. Lặp lại cá c bƣớ c nà y n lầ n, mỗi lầ n vớ i một giá trị ngẫu nhiên khác nhau của a . Phầ n dƣ của hợp số vớ i n phé p thƣ̉ là không quá 2n . Thƣ̣c tế khi thƣ̣c hiện chƣơng trình, thuật toá n chạy vớ i tố c độ khá nhanh.
  • 35. Chƣơng II: Cơ sở toán học 26 4.3. Thuật toá n Rabin-Miller Thuật toá n này đƣợc phát triển bởi Rabin , dƣ̣a trên một phầ n ý tƣở ng của Miller . Thƣ̣c tế nhƣ̃ng phiên bản của thuật toá n đã đƣợc giớ i thiệu tại NIST . (National Institute of Standards and Technology). Đầu tiên là chọn ngẫu nhiên một số p để kiểm tra. Viế t p dƣớ i dạng p = 1+2b m trong đó m là một số lẻ. Sau đây là thuật toá n : 1. Chọn một số ngẫu nhiên a, và giả sử a nhỏ hơn p. 2. Đặt j=0 và z=am mod p. 3. Nế u z=1, hoặc z=p-1 thì p đã qua bƣớc kiểm tra và có thể là số nguyên tố. 4. Nế u j > 0 và z=1 thì p không phải là số nguyên tố. 5. Đặt j = j+1. Nế u j < b và z  p-1 thì đặt z=z2 mod p và trở lại bƣớ c 4. 6. Nế u j = b và z  p-1, thì p không phải là số nguyên tố. 4.4. Thuật toá n Lehmann. Một phƣơng pháp đơn giản hơn kiểm tra số nguyên tố đƣợc phát triển độc lập bởi Lehmann. Sau đây là thuật toá n vớ i số bƣớ c lặp là 100. 1. Chọn ngẫu nhiên một số n để kiểm tra. 2. Chắ c chắn rằng n không chia hế t cho cá c số nguyên tố nhỏ nhƣ 2,3,5,7 và 11. 3. Chọn ngẫu nhiên 100 số a1, a2, . . . , a100 giƣ̃a 1 và n-1. 4. Tính ai (n-1)/2 (mod n) cho tấ t cả ai = a1. . . a100 . Dƣ̀ ng lại nế u bạn tìm thấ y ai sao cho phé p kiểm tra là sai. 5. Nế u ai (n-1)/2 = 1 (mod n) vớ i mọi i, thì n có thể là hợp số . Nế u ai (n-1)/2  1 hoặc -1 (mod n) vớ i i bấ t kỳ, thì n là hợp số. Nế u ai (n-1)/2 = 1 hoặc -1 (mod n) vớ i mọi i  1, thì n là số nguyên tố. 5. Bài tập Bài tập 2.1: hãy tính 1753 mod 29, hỏi cần dùng ít nhất là bao nhiêu phép nhân để tìm ra kết quả. Bài tập 2.2: Tính 876611 mod 899. Sƣ̉ dụng một trong cá c ngôn ngƣ̃ lập trình C, C++, Java hoặc C# để làm các bài tập sau: Bài tập 2.3: Viế t chƣơng trình cà i đặt thuật toá n tìm phầ n tƣ̉ nghịch đảo. Bài tập 2.4: Viế t chƣơng trình cà i đặt thuật toá n lũy thƣ̀ a nhanh. Bài tập 2.5: Viế t chƣơng trình giải hệ phƣơng trình đồ ng dƣ bậc nhấ t hai ẩn. Bài tập 2.6: Viế t chƣơng trình cà i đặt thuật toá n kiểm tra số nguyên tố vớ i input là một số nguyên nhỏ hơn 2000000000.
  • 36. Chƣơng II: Cơ sở toán học 27 Bài tập 2.7: Viế t chƣơng trình cà i đặt thƣ viện số nguyên lớ n vớ i cá c thao tá c tính toán cơ bản: nhân, chia, cộng trƣ̀ , lấ y modulo. Bài tập 2.8: Sƣ̉ dụng thƣ viện số lớ n (ở bài tập 2.5 hoặc một thƣ viện mã nguồ n mở ) cài đặt các thuật toán kiểm tra số nguyên tố đƣợc trình bày trong phần 4 của chƣơng 2.
  • 37. Chƣơng III: Các hệ mã khóa bí mật 28 CHƢƠNG III: CÁC HỆ MÃ KHÓA BÍ MẬT 1. Các hệ mã cổ điển 1.1. Hệ mã hoá thay thế (substitution cipher) Hệ mã hoá thay thế là hệ mã hoá 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). Có 4 kỹ thuật thay thế sau đây: 1. Thay thế đơ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ã đƣợc sử dụng để mã hoá toàn bộ thông điệp. 2. Thay thế đồ ng âm (A homophonic substitution cipher ): giố ng nhƣ hệ thố ng mã hoá 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 (one-to-many). 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. 3. Thay thế đa mẫu tƣ̣ (A polyalphbetic substitution cipher): đƣợc tạo nên tƣ̀ nhiều thuật toá n mã hoá 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ã hoá đơn khác nhau đƣợc sử dụng ; đặc biệt thuật toá n mã hoá đơn đƣợc sƣ̉ dụng thay đổi theo vi ̣trí của mỗi ký tƣ̣ trong bản rõ. 4. Thay thế đa sơ đồ (A polygram substitution cipher ): là thuật toán trong đó các khố i ký tƣ̣ đƣợc mã hoá 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. 1.2. Hệ mã Caesar Hệ mã Caesar là một hệ mã hoá thay thế đơn âm làm việc trên bảng chữ cái tiếng Anh 26 ký tự (A, B, ... , Z). Đây là hệ mã cổ điển và đơn giản nhấ t đã tƣ̀ ng đƣ ợc dùng trong thƣ̣c tế bở i hoà ng đế La mã Caesar nên đƣợc đặt theo tên của vi ̣hoà ng đế nà y. Không gian cá c bản rõ P là các thông điệp đƣợc tạo từ bảng chữ cái A (để tiện trình bày chúng ta xem đây là một bảng chữ cái tổ ng quá t). Tƣơng tƣ̣ không gian cá c bản mã C  P. Giả sử số phần tử của bảng chữ cái |A| = N. Để mã hó a ngƣờ i ta đá nh số cá c chƣ̃ cá i tƣ̀ 0 tớ i N-1. Không gian khó a K = ZN. Vớ i mỗi khó a K  K hàm mã hóa và giải mã một ký tự có số thứ tự là i sẽ đƣợc thực hiện nhƣ sau: Mã hóa: EK(i) = (i + k) mod N. Giải mã: DK(i) = (i – k) mod N. Hệ mã Caesar vớ i bảng chƣ̃ cá i tiế ng Anh sẽ có N = 26 chƣ̃ cá i, bảng chữ cái đƣợc đá nh số nhƣ sau:
  • 38. Chƣơng III: Các hệ mã khóa bí mật 29 A B C D ... L M N ... W X Y Z 0 1 2 3 ... 11 12 13 ... 22 23 23 25 Bảng 3.1: Bảng đánh số các chữ cái tiếng Anh Các phép tính toán số học đƣợc thƣ̣c hiện trên và nh Z 26, số khó a có thể sƣ̉ dụng là 26 nhƣng trên thƣ̣c tế chỉ có 25 khóa có ích. Ví dụ : vớ i k=3 (trƣờ ng hợp đã đƣợc hoà ng đế Caesar sƣ̉ dụng ), ký tự A đƣợc thay 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. 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 W X Y Z Bảng chữ cái dùng để mã hoá: 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 Do đó chẳng hạn xâu “ANGLES” sẽ đƣợc mã hó a thà nh “DQJOHV”. Hệ mã Caesar sƣ̉ dụ ng phƣơng phá p thay thế đơn âm nên có hiện tƣợng gọi là phụ thuộc tần suất xuất hiện của ngôn ngữ tự nhiên. Trong ngôn ngƣ̃ tƣ̣ nhiên một số chƣ̃ cái xuất hiện nhiều hơn so với các chữ cái khác (chẳng hạn trong tiế ng Anh cá c chƣ̃ cá i xuấ t hiện nhiề u là e, t, i, h …) nên cá c chƣ̃ cá i dù ng để thay thế cho chú ng cũng xuấ t hiện nhiề u. Điề u nà y có thể dẫn tớ i hệ quả là ngƣờ i thá m mã có thể sƣ̉ dụng phƣơng phá p thƣ̉ thay thế cá c ký t ự xuấ t hiện nhiều trong bản mã bằ ng cá c ký tƣ̣ xuấ t hiện nhiề u trên cá c văn bản thƣ̣c tế . Trên thƣ̣c tế hệ mã Caesar có số khó a ít nên hoà n toà n có thể thá m mã bằ ng cách thử tất cả các khóa có thể (kiểu tấ n công Brute force). 1.3. Hệ mã Affine Không gian cá c bản rõ và bản mã của hệ mã là cá c xâu đƣợc hình thà nh tƣ̀ một bảng chữ cái A, giả sử |A| = N. Khi đó không gian khó a của hệ mã đƣợc xá c đi ̣nh nhƣ sau: K = { (a, b): a, b  ZN, (a, N) = 1} Để mã hó a ngƣờ i ta đá nh số cá c chƣ̃ cá i của bảng chƣ̃ cá i tƣ̀ 0 tớ i N – 1 và tiến hành mã hóa, giải mã từng ký tự (thay thế ) theo cá c công thƣ́ c sau: Mã hóa: EK(x) = (a*x + b) mod N. Ký tự bản rõ có số thứ tự là x sẽ đƣợc chuyển th ành ký tự có số thứ tự là (a*x+b) mod N trong bảng chƣ̃ cá i. Để giải mã ta cầ n tìm a-1 (do (a, N) = 1 nên luôn tìm đƣợc) và tiến hành công thức giải mã sau:
  • 39. Chƣơng III: Các hệ mã khóa bí mật 30 DK(y) = a*(y - b) mod N. Ký tự bản mã có số thứ tự là y sẽ đƣợc thay thế bằ ng ký tƣ̣ có số thứ tự là a*(y - b) mod N trong bảng chƣ̃ cá i. Có thể thấy rằng đối với một hệ mã Affine thì số khóa có thể sử dụng sẽ là: |K| = (N) * N. Ví dụ với N = 26 tƣơng ƣ́ ng vớ i bảng chƣ̃ cá i tiế ng Anh chúng ta sẽ có (26) * 26 = 12 * 26 = 312 khóa. Con số nà y là tƣơng đố i nhỏ . 1.4. Hệ mã Vigenere Hệ mã này đƣợc đặt theo tên của một nhà mật mã học ngƣờ i Phá p Blaise de Vigenère (1523-1596). Đối với hệ mã này không gian các bản mã và bản rõ cũng là các thông điệp đƣợc tạo thành từ một bảng chữ cái A nhƣ trong hệ mã Caesar, các chữ cái đƣợc đanh số từ 0 tớ i N-1 trong đó N là số phầ n tƣ̉ của bảng chƣ̃ cá i. Không gian khó a K đƣợc xá c đi ̣nh nhƣ sau: Vớ i mỗi số nguyên dƣơng M , khóa có độ dài M là một xâu ký tự có độ dài M , K = k1k2…kM. Để mã hó a một bản rõ P ngƣờ i ta chia P thà nh cá c đoạn độ dà i M và chuyển thành số thƣ́ tƣ̣ tƣơng ƣ́ ng củ a chú ng trong bảng chƣ̃ c ái, chẳng hạn X = x1x2…xM. Khi đó việc mã hóa và giải mã đƣợc thực hiện nhƣ sau: EK(X) = (x1 + k1, x2 + k2, …, xM + kM) mod N DK(Y) = (y1 - k1, y2 - k2, …, yM - kM) mod N vớ i N là số phầ n tƣ̉ của bảng chƣ̃ cá i và Y = y1y2…yM là bản mã. Ví dụ: xét A là bảng chữ cái tiếng Anh , ta có N = 26 giả sử khóa có độ dài 6 và K = “CIPHER”, bản rõ P = “THIS CRYPTOSYSTEM IS NOT SECURE” . Ta có K = 2 8 15 7 4 17, P = 19 7 8 18 2 17 | 24 15 19 14 18 23 | 18 19 4 12 8 18 | 13 14 19 18 4 2 | 20 17 4. Quá trình mã hóa thực hiện nhƣ sau: P = 19 7 8 18 2 17 | 24 15 19 14 18 23 | 18 19 4 12 8 18 | 13 14 19 18 4 2 | 20 17 4 K = 2 8 15 7 4 17 | 2 8 15 7 4 17 | 2 8 15 7 4 17 | 2 8 15 7 4 17 | 2 8 15 C = 21 15 23 25 6 8 | 0 23 8 21 22 14 | 20 1 19 19 12 9 | 15 22 8 25 8 19 | 22 25 19 Vậy bản mã là C = “VPXZGI AXIVWO UBTTMJ PWIZIT WZT”. Về thƣ̣c chấ t hệ mã nà y là kế t hợp của nhiề u mã Caesar , trong hệ mã Caesar chúng ta thay thế từng ký tự đơn l ẻ thì trong hệ mã Vigenere này thay thế từng bộ M ký tƣ̣ liên tiế p. Vớ i mỗi M chú ng ta có số khó a có thể sƣ̉ dụng là N M , cụ thể là với bảng chữ cái tiếng Anh sẽ có 26M khóa có thể sử dụng. 1.5. Hệ mã Hill Hệ mã hoá n ày dựa trên lý thuyết về đại số tuyến tính do Lester S .Hill đƣa ra năm 1929. Cả không gian bản rõ và bản mã đều là các xâu đƣợc thành lập từ một bảng chữ cái A nhƣ trong hệ mã Vigenere.
  • 40. Chƣơng III: Các hệ mã khóa bí mật 31 Vớ i mỗi số nguyên M khó a của hệ mã là một ma trận K vuông kích thƣớc MxM gồm các phần tử là c ác số nguyên thuộc Z N trong đó N là số phầ n tƣ̉ của bảng chƣ̃ cá i . Điề u kiện để ma trận K có thể sƣ̉ dụng là m khó a của hệ mã là K phải là một ma trận không suy biế n trên ZN hay nó i cá ch khá c là tồ n tại ma trận nghi ̣ch đảo của ma trận K trên ZN. Các ký tự của bảng chữ cái cũng đƣợc đánh số từ 0 tớ i N-1. Để mã hó a một bản rõ ngƣờ i ta cũng chia bản rõ đó thà nh cá c xâu có độ dà i M, chuyển cá c xâu nà y thà nh số thƣ́ tƣ̣ của cá c chƣ̃ cá i trong bảng chƣ̃ cá i dƣớ i dạng một vectơ hà ng M chiề u và tiế n hà nh mã hó a, giải mã theo công thức sau: Mã hóa: C = P * K. Giải mã: P = C * K-1 . Ví dụ: cho hệ mã Hill có M = 2 (khóa là các ma trận vuông cấp 2) và bảng chữ cái là bảng chữ cái tiếng Anh, tƣ́ c là N = 26. Cho khó a K =       52 33 Hãy mã hóa xâu P = “HELP” và giải mã ngƣợc lại bản mã thu đƣợc. Để mã hó a chú ng ta chia xâu bản rõ thà nh hai vecto hà ng 2 chiề u “HE” (7 4) và “LP” (11 15) và tiến hành mã hóa lần lƣợt. Vớ i P1 = (7 4) ta có C1 = P1 * K =  7 4       52 33 =  3 15 =  D P Vớ i P2 = (11 15) ta có C2 = P2 * K =  11 15       52 33 =  11 4 =  L E Vậy bản mã thu đƣợc là C = “DPLE”. Để giải mã ta tính khó a giải mã là ma trận ngh ịch đảo của ma trận khóa trên Z 26 theo công thƣ́ c sau: Vớ i K = 11 12 21 22 k k k k       và det(K) = (k11*k22 – k21*k12) mod N là một phầ n tƣ̉ có phầ n tƣ̉ nghịch đảo trên ZN (ký hiệu là det(K)-1 ) thì khóa giải mã sẽ là K-1 = det(K)-1 * 22 12 21 11 k -k -k k       Áp dụng vào trƣờng hợp trên ta có det(K) = (15 - 6) mod 26 = 9. GCD(9, 26) =1 nên áp dụng thuật toán Ơclit mở rộng tìm đƣợc det (K)-1 = 3. Vậy K -1 = 3 * 5 23 24 3       =       920 1715 .
  • 41. Chƣơng III: Các hệ mã khóa bí mật 32 Quá trình giải mã tiến hành giống nhƣ quá trình mã hóa với khóa mã hóa thay bằng khóa giải mã. Giải mã C = “DP” = ( 3 15 ), P = C * K-1 = (3 15) *       920 1715 =  3 15 = “HE”. Tƣơng tự giải mã xâu C = “LE” kết quả sẽ đƣợc bản rõ P = “LP”. Chú ý là trong ví dụ trên chúng ta sử dụng khóa K có kích thƣớc nhỏ nên dễ dàng tìm đƣợc khóa để giải mã còn trong trƣờng hợp tổng quát điều này là không dễ dàng. 1.6. Hệ mã đổ i chỗ (transposition cipher) Một hệ mã hoá đổi chỗ là hệ mã hoá trong đó cá c ký tƣ̣ của bản rõ vẫn đƣợc giƣ̃ nguyên, nhƣng thƣ́ tƣ̣ của chú ng đƣợc đổi chỗ cho nhau. Ví dụ một hệ mã hoá đổi chỗ cột đơn giản , bản rõ đƣợc viết theo hà ng ngang trên trang giấ y vớ i độ dà i cố đi ̣nh, và bản mã đƣợc đọc theo hàng dọc. Bản rõ: COMPUTER GRAPHICS MAY BE SLOW BUT AT LEAST IT‟S EXPENSIVE COMPUTERGR APHICSMAYB ESLOWBUTAT LEASTITSEX PENSIVE Bản mã: CAELPOPSEEMHLANPIOSSUCWTITSBIUEMUTERATSGYAERBTX Bảng 3.2: Mã hoá thay đổi vị trí cột Phƣơng phá p nà y có cá c kỹ thuật sau: 1. Đả 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ã hoá đơ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ã hoá thành “REHPICNOITISOPSNART”. 2. Mã hoá 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 I E C H T E N S T E I N E R Bảng 3.3: Mã hóa theo mẫu hình học 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”.
  • 42. Chƣơng III: Các hệ mã khóa bí mật 33 Đổi chỗ cột: Đầu tiên đổi chỗ các ký tự trong bản rõ thành dạng hình chữ nhật theo cột, sau đó cá c cột đƣợc sắ p xế p lại và cá c chƣ̃ cá i đƣợc lấ y ra theo hà ng ngang Ví dụ: bản rõ gốc là “NGAY MAI BAT DAU CHIEN DICH XYZ” đƣợc viết dƣới dạng ma trận 55 theo cột nhƣ sau: Cột 1 2 3 4 5 Bản rõ N A D I C G I A E H A B U N X Y A C D Y M T H I Z Bảng 3.4: Ví dụ mã hóa theo mẫu hình học Vì có 5 cột nên chú ng có thể đƣợc sắ p lại theo 5!=120 cách khác nhau. Để tăng độ an toà n có thể chọn một trong cá c cá ch sắ p xếp lại đó . Nế u ta c huyển vi ̣cá c cột theo thƣ́ tƣ̣ 3, 5, 2, 4, 1 rồ i lấ y cá c ký tƣ̣ ra theo hà ng ngang ta sẽ đƣợc bản mã là “DCAINAHIEGUXBNACYADY HZTIM”. Lƣu ý rằ ng cá c ký tƣ̣ cách đƣợc bỏ đi. Hạn chế của phƣơng pháp này là toàn bộ các ma trận k ý tự phải đƣợc sinh để mã hoá và giải mã. 3. Hoán vị các ký tự của bản rõ theo chu kỳ cố định d : Nế u hà m f là một hoá n vị của một khối gồm d ký tự thì khoá mã hoá đƣợc biểu diễn bởi K(d,f). Do vậy, bản rõ: M = m1m2...mdmd+1...m2d Vớ i mi là các ký tự , và bản rõ sẽ đƣợc mã hoá thà nh Ek(M) = mf(1)mf(2)...mf(d)mf(d)+1...md+f(d) Trong đó mf(1)mf(2)...mf(d) là một hoán vị của m1m2...md. Ví dụ: giả sử d=5 và f hoán vị dãy i=12345 thành f(i)=35142 Vị trí đầu Vị trí hoán vị Tƣ̀ Mã hoá 1 3 G O 2 5 R P 3 1 O G 4 4 U U 5 2 P R Bảng 3.5: Mã hóa hoán vị theo chu kỳ Theo bảng trên, ký tự đầu trong khối 5 ký tự đƣợc chuyển tới vị trí thứ 3, ký tƣ̣ thƣ́ hai đƣợc chuyển tớ i vi ̣trí thƣ́ 5, ... Chẳng hạn tƣ̀ gố c GROUP đƣợc mã hoá thà nh
  • 43. Chƣơng III: Các hệ mã khóa bí mật 34 OPGUR. Bằng cá ch đó , bản rõ “I LOVE BEETHOVENS MUSIC” sẽ đƣợc chuyển thành “OEIVLEHBTEESONVSCMIU”. Hệ mã ADFGV của Đƣ́ c , đƣợc sƣ̉ dụng trong suố t chiế n tranh thế giớ i lầ n thƣ́ I , là một hệ mã hoá đổi chỗ (có sử dụng phƣơng phá p thay thế đơn giản). Nó đƣợc coi là một thuật toá n mã hoá phƣ́ c tạp và o thờ i ấ y nhƣng nó đã bi ̣phá bở i Georges Painvin , một nhà thám mã ngƣời Pháp . Trên thƣ̣c tế c ó rất nhiều hệ thống mã hoá sử dụng phƣơng pháp đổi chỗ, nhƣng chúng rấ t rắ c rố i vì thƣờng đòi hỏi không gian nhớ lớ n. 2. Các hệ mã khối Trong phầ n nà y chú ng ta sẽ học về cá c hệ mã k hố i điển hình là chuẩn mã hó a dƣ̃ liệu DES (Data Encryption Standard), một trong số cá c hệ mã khố i đƣợc sƣ̉ dụng rộng rãi nhấ t và là nề n tảng cho rấ t nhiề u cá c hệ mã khố i khá c. Chuẩn mã hó a dƣ̃ liệu DES là một chuẩn mã hoá đƣợc công bố bởi Uỷ ban Tiêu chuẩn quốc gia Hoa Kỳ vào 15/02/1977. Hệ mã nà y đƣợc xây dựng dựa trên một hệ mã khố i phổ biến có tên là LUCIFER và đƣợc phát triển bởi IBM. DES có nhiề u ƣu điểm (nhanh, thuật toá n công khai , dễ cà i đặt ) và đã tƣ̀ ng đƣợc sƣ̉ dụng trên thƣ̣c tế trong một thờ i gian rấ t dà i (cho đế n trƣớ c đầ u nhƣ̃ng năm 90) tuy nhiên theo thờ i gian năng lƣ̣c của cá c má y tính phá t triển cù ng vớ i cá c kỹ thuật thá m mã mớ i đƣợc đƣa ra đã cho thấ y nhu cầ u về một hệ mã khố i mạnh hơn và chuẩn mã hóa cao cấp AES đã ra đờ i . Chuẩn nà y ra đờ i dƣ̣a trên một cuộc thi về thiế t kế một hệ mã khố i an toà n hơn (vào năm 1997) thay thế cho DES của Ủ y ban Tiêu chuẩn quố c gia của Hoa Kỳ (NIST). Có rất nhiều hệ mã đã đƣợc gửi đến làm ứng cử viên cho AES nhƣng cuố i cù ng hệ mã Rijndael của hai tá c giả ngƣờ i Bỉ là tiế n sĩJoan Daemen và tiế n sĩ Vincent Rijmen (vào năm 2001). 2.1. Mật mã khối Các hệ mã cổ điển mà chúng ta xem xét ở phần đầu chƣơng này đều có đặc điểm chung là từng ký tự của bản rõ đƣợc mã hoá tách biệt. Điều này làm cho việc phá mã trở nên dễ dàng hơn. Chính vì vậy, trên thực tế ngƣời ta hay dùng một kiểu mật mã khác, trong đó từng khối ký tự của bản rõ đƣợc mã hoá cùng một lúc nhƣ là một đơn vị mã hoá đồng nhất. Trong kiểu mã hoá này, các tham số quan trọng là kích thƣớc (độ dài) của mỗi khối và kích thƣớc khoá. Điều kiện để mã hoá khối an toàn:  Kích thƣớc khối phải đủ lớn để chống lại phƣơng án tấn công bằng phƣơng pháp thống kê. Tuy nhiên điều này sẽ dẫn đến thời gian mã hoá sẽ tăng lên.  Không gian khoá, tức chiều dài khoá phải đủ lớn để chống lại phƣơng án tấn công bằng vét cạn. Tuy nhiên khoá phải đủ ngắn để việc tạo khoá, phân phối và lƣu trữ khoá đƣợc dễ dàng. Khi thiết kế một hệ mã khối, phải đảm bảo hai yêu cầu sau:  Sự hỗn loạn (confusion): sự phụ thuộc giữa bản rõ và bản mã phải thực sự phức tạp để gây khó khăn đối với việc tìm quy luật thám mã. Mối quan hệ này tốt nhất là phi tuyến.
  • 44. Chƣơng III: Các hệ mã khóa bí mật 35  Sự khuếch tán (diffusion): Mỗi bit của bản rõ và khóa phải ảnh hƣởng lên càng nhiều bit của bản mã càng tốt. Trong khi sự hỗn loạn (confusion) đƣợc tạo ra bằng kỹ thuật thay thế thì sự khuếch tán (diffusion) đƣợc tạo ra bằng các kỹ thuật hoán vị. Các hệ mã khối mà chúng ta xem xét trong phần này đều thỏa mãn các yêu cầu đó. Ngoài các hệ mã khối đƣợc trình bày trong phần này còn rất nhiều các hệ mã khối khác đã phát triển qua thời gian (tại các quốc gia khác nhau v à ứng dụng trong các lĩnh vƣ̣c khá c nhau), có thể kể ra đây một số hệ mã nổi tiếng nhƣ: Lucifer (1969), DES (1977), Madryga (1984), NewDES (1985), FEAL, REDOC, LOKI (1990), Khufu and Khafre (1990), RC2, RC4, IDEA (1990), MMB, CA-1.1, Shipjack, GOST, CAST, Blowfish, SAFER, 3- Way, Crab, SXAL8/MBAL, SAFER, RC5, RC6 ... Đặc điểm chung của các hệ mã khối là quá trình mã hóa làm việc với các khối dữ liệu (thƣờng ở dạng xâu bit) có kích thƣớc khác nhau (tối thiếu là 64 bit), khóa của hệ mã cũng là một xâu bit có độ dài cố định (56 bit với DES, các hệ mã khác là 128, 256, hoặc thậm chí 512 bit). Tất cả các hệ mã này đều dựa trên lý thuyết của Shannon đƣa ra năm 1949 và nếu mang mã hóa hai bản rõ giống nhau sẽ thu đƣợc cùng một bản mã. Hoạt động của các hệ mã khối thƣờng đƣợc thực hiện qua một số lần lặp, mỗi lần sẽ sử dụng một khóa con đƣợc sinh ra từ khóa chính. 2.2. Chuẩn mã hoá dữ liệu DES (Data Encryption Standard) Vào cuối thập niên 60, hệ mã Lucifer đã đƣợc đƣa ra bởi Horst Feistel. Hệ mã nà y gắ n liền với hãng IBM nổi tiế ng. Sau đó Uỷ ban Tiêu chuẩn Hoa Kỳ đã dà n xếp vớ i IBM để thuật toán mã hóa này thành miễn phí và phát triển nó thành chuẩn mã hóa dữ liệu và công bố và o ngà y 15/02/1977. 2.2.1. Mô tả sơ đồ mã hoá DES Mô tả tổng quan: DES là thuật toá n mã hó a vớ i input là khố i 64 bit, output cũng là khố i 64 bit. Khóa mã hóa có độ dài 56 bit, thƣ̣c ra chính xá c hơn phải là 64 bit vớ i cá c bit ở vi ̣trí chia hế t cho 8 có thể sử dụng là cá c bit kiểm tra tính chẵn lẻ . Số khó a của không gian khó a K là 256 . Hình 3.1: Chuẩn mã hó a dƣ̃ liệu DES Thuật toá n thƣ̣c hiện 16 vòng. Tƣ̀ khó a input K, 16 khóa con 48 bit Ki sẽ đƣợc sinh ra, mỗi khó a cho một vò ng thƣ̣c hiện trong quá trình mã hó a . Trong mỗi vò ng, 8 ánh xạ thay thế 6 bit thà nh 4 bit Si (còn gọi là hộp Si) đƣợc chọn lƣ̣a kỹ cà ng và cố đi ̣nh , ký hiệu chung là S sẽ đƣợc sƣ̉ dụng. Bản rõ 64 bit sẽ đƣợc sƣ̉ dụng chia thà nh hai nƣ̉ a L0 và R0. Các vòng có chức năng giống nhau , nhận input là L i-1 và Ri-1 tƣ̀ vò ng trƣớ c và sinh ra output là cá c xâu 32 bit Li và Ri nhƣ sau:
  • 45. Chƣơng III: Các hệ mã khóa bí mật 36 Li = Ri-1; (1) Ri = Li-1  f(Ri-1, Ki) trong đó f(Ri-1, Ki) = P( S( E(Ri-1)  Ki ) ); (2) Trong đó:   là ký hiệu của phép tuyển loại trừ (XOR) của hai xâu bit theo modulo 2.  Hàm f là một hàm phi tuyến.  E là hoá n vi ̣mở rộng á nh xạ R i-1 tƣ̀ 32 bit thà nh 48 bit (đôi khi tấ t cả cá c bit sẽ đƣợc sƣ̉ dụng hoặc một bit sẽ đƣợc sử dụng hai lần).  P là hoá n vi ̣cố đi ̣nh khá c của 32 bit. Một hoá n vi ̣bit khở i đầ u (IP) đƣợc sƣ̉ dụng cho vò ng đầ u tiên ; sau vò ng cuố i cù ng nƣ̉ a trá i và phải sẽ đƣợc đổi cho nhau và cuố i cù ng xâu kế t quả sẽ đƣợc hoá n vi ̣bit lầ n cuố i bở i hoá n vi ̣ngƣợc của IP (IP-1 ). Quá trình giải mã diễn ra tƣơng tự nhƣng với các khoá con ứng dụng vào các vòng trong theo thƣ́ tƣ̣ ngƣợc lại. Có thể hình dung đơn giản là phần bên p hải trong mỗi vòng (sau khi mở rộng input 32 bit thà nh 8 ký tự 6 bit – xâu 48 bit) sẽ thực hiện một tính toán thay thế phụ thuộc khó a trên mỗi một ký tƣ̣ trong xâu 48 bit, và sau đó sử dụng một phép chuyển bit cố định để phân bố lại cá c bit của cá c ký tƣ̣ kế t quả hình thành nên output 32 bit. Các khoá con Ki (chƣ́ a 48 bit của K) đƣợc tính bằ ng cá ch sƣ̉ dụng cá c bảng PC1 và PC2 (Permutation Choice 1 và 2). Trƣớ c tiên 8 bit (k8, k16,…,k64) của K bị bỏ đ i (áp dụng PC1). 56 bit cò n lại đƣợc hoá n vi ̣và gá n cho hai biến 28 bit C và D , và sau đó trong 16 vòng lặp cả C và D sẽ đƣợc quay 1 hoặc 2 bit, và các khóa con 48 bit Ki đƣợc chọn tƣ̀ kết quả của việc ghép hai xâu với nhau. Nhƣ vậy, ta có thể mô tả toàn bộ thuật toán sinh mã DES dƣới dạng công thức nhƣ sau: Y = IP-1  f16  T f15  T ...  f2  T f1  IP(x) Trong đó:  T mô tả phép hoán vị của các khối LiRi (1 ≤ i ≤ 15).  fi mô tả việc dùng hàm f với khoá Ki (1 ≤ i ≤ 16). Thuật toá n chi tiế t: Input: bản rõ M = m1m2…m64, khóa 64 bit K = k1k2…k64 (bao gồ m cả 8 bit chẵn lẻ , việc thêm bit chẵn lẻ sao cho cá c đoạn khó a 8 bit có số bit 1 là lẻ) Output: bản mã 64 bit C = c1c2…c64 1. Sinh khó a con. Tính các khóa con theo thuật toán sinh khóa con bên dƣới 2. (L0,R0)  IP(m1m2…m64) (Sƣ̉ dụng bảng hoá n vi ̣IP để hoá n vi ̣cá c bit , kế t quả nhận đƣợc chia thà nh hai nƣ̉ a là L0 = m58m50…m8, R0 = m57m49…m7.) 3. (16 vòng) for i = 1 to 16 Tính các Li và Ri theo cá c công thƣ́ c (1) và (2), việc tính
  • 46. Chƣơng III: Các hệ mã khóa bí mật 37 f(Ri-1, Ki) = P( S( E(Ri-1)  Ki ) ) đƣợc thƣ̣c hiện nhƣ sau: a) Mở rộng R i-1 = r1r2…r32 tƣ̀ 32 bit thà nh 48 bit bằ ng cá ch sƣ̉ dụng hoá n vi ̣mở rộng E. T  E(Ri-1). (Vì thế T = r32r1r2…r32r1) b) T’  T  Ki. Biểu diễn T’ nhƣ là cá c xâu gồ m 8 ký tự 6 bit T’ = (B1,…,B8) c) T’’  (S1(B1), S2(B2),…,S8(B8)). Trong đó Si(Bi) ánh xạ b1b2…b6 thành các xâu 4 bit của phầ n tƣ̉ thuộc hà ng r và cột c của cá c bảng S i (S box) trong đó r = 2 * b1 + b6 và c = b2b3b4b5 là một số nhị phân từ 0 tớ i 15. Chẳng hạn S 1(011011) sẽ cho r = 1 và c = 13 và kết quả là 5 biểu diễn dƣớ i dạng nhi ̣phân là 0101. d) T’’’  P(T’’) trong đó P là hoá n vi ̣cố đi ̣nh để hoá n vi ̣ 32 bit của T ’’ = t1t2…t32 sinh ra t16t7…t25. 4. b1b2…b64  (R16, L16) (đổi vi ̣trí cá c khố i cuố i cù ng L16, R16 5. C  IP-1 (b1b2…b64) (Biế n đổi sƣ̉ dụng IP-1 , C = b40b8…b25) Sơ đồ 16 vòng lặp của DES:
  • 47. Chƣơng III: Các hệ mã khóa bí mật 38 Hình 3.2: Sơ đồ mã hoá DES K16 (48 bit) K15 (48 bit) Bản rõ (64 bit) Bản mã (64 bit) IP IP-1 L0(32 bit) L1 = R0 R0(32 bit) R1 = L0  f(R0, K1) f K1 (48 bit) Li = Ri-1 L15 = R14 Ri = Li-1  f(Ri-1, Ki) R15 = L14  f(R14, K15) f f Ki (48 bit) L16 = L15  f(R15, K16) R16 = L15 f
  • 48. Chƣơng III: Các hệ mã khóa bí mật 39 2.2.2. Hoán vị IP và hoán vị ngƣợc IP-1 Bảng hoán vị IP đƣợc đƣa ra trong bảng dƣới đây: 58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4 62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8 57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3 61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7 Bảng 3.6: Bảng hoán vị IP Bảng hoán vị ngƣợc IP-1 : 40 8 48 16 56 24 64 32 39 7 47 15 55 23 63 31 38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29 36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27 34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25 Bảng 3.7: Bảng hoán vị ngƣợc IP-1 Hai hoán vị IP và IP-1 không có ý nghĩa gì về mặt mật mã mà hoàn toàn nhằm tạo điều kiện cho việc “chip hoá” thuật toán DES. Sơ đồ cấu trúc một vòng DES: Hình 3.3: Sơ đồ một vòng DES Li-1 Ri-1 Hàm mở rộng (E) S-Box P-Box RiLi Trật tự nén (PC-2) Khoá Khoá Vòng dịch Vòng dịch Hàm f Khoá K
  • 49. Chƣơng III: Các hệ mã khóa bí mật 40 2.2.3. Thuật toá n sinh khó a con Mƣờ i sá u vòng lặp của DES chạy cùng thuật toán nhƣ nhau nhƣng với 16 khoá con khác nhau. Các khoá con đều đƣợc sinh ra từ khoá chính của DES bằng một thuật toán sinh khoá con. Khoá chính K (64 bit) đi qua 16 bƣớc biến đổi, tại mỗi bƣớc biến đổi này một khoá con đƣợc sinh ra với độ dài 48 bit. Có thể mô tả thuật toán sinh các khóa con chi tiết nhƣ sau: Input: khóa 64 bit K = k1k2...k64 (bao gồ m cả 8 bit kiểm tra tính chẵn lẻ ) Output: 16 khóa con 48 bit Ki, 1  i  16. 1) Đi ̣nh nghĩa v i, 1  i  16 nhƣ sau: vi = 1 đố i vớ i i  {1,2,9,16}; vi = 2 cho cá c trƣờ ng hợp khá c (Đây là cá c giá tri ̣di ̣ch trá i cho cá c quay vò ng 28 bit bên dƣớ i). 2) T  PC1(K); biểu diễn T thà nh cá c nƣ̉ a 28 bit (C0, D0) (Sƣ̉ dụng bảng PC1 để chọn các bit từ K: C0 = k57k49...k36, D0 = k63k55...k4.) 3) For i from 1 to 16, tính các Ki nhƣ sau: Ci  (Ci-1  vi), Di  (Di-1  vi), Ki PC2(Ci, Di). (Sƣ̉ dụng bảng PC 2 để chọn 48 bit tƣ̀ xâu ghé p b 1b2...b56 của Ci và Di: Ki = b14b17...b32. ‟ „ là ký hiệu di ̣ch vò ng trá i.) Sơ đồ sinh cá c khó a con của DES:
  • 50. Chƣơng III: Các hệ mã khóa bí mật 41 Hình 3.4: Sơ đồ tạo khoá con của DES 64 bit đầu vào sẽ giảm xuống còn 56 bit bằng cách bỏ đi 8 bit (ở các vị trí chia hết cho 8), các bit này dùng để kiểm tra bit chẵn lẻ. Sau đó 56 bit này lại đƣợc trích lấy 48 bit để sinh ra cho 16 vòng khoá của DES. Bảng trật tự khoá (PC-1): 57 49 41 33 25 17 9 1 58 50 42 34 26 18 10 2 59 51 43 35 27 19 11 3 60 52 44 36 63 55 47 39 31 23 15 7 62 54 46 38 30 22 14 6 61 53 45 37 29 21 13 5 28 20 12 4 Bảng 3.8: Bảng PC-1 Đầu tiên 56 bit khó a đƣợc chia ra thành hai nƣ̉ a 28 bit. Sau đó, hai nƣ̉ a 28 bit này đƣợc dịch vòng trái hoặc 1 hoặc 2 bit phụ thuộc vào số bit di ̣ch tƣơng ƣ́ ng vớ i vòng đó. Số bit dịch của các vòng (LS): Vòng lặp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Khoá chính (64 bit) C0 (28 bit) D0 (28 bit) PC-1 C1 (28 bit) D1(28 bit) LS1 LS1 Ci (28 bit) Di (28 bit) LS2 LS2 C16 (28 bit) D16 (28 bit) LS1 LS1 PC-2 K1 (48 bit) PC-2 Ki (48 bit) PC-2 K16 (48 bit)
  • 51. Chƣơng III: Các hệ mã khóa bí mật 42 Số bit dịch 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1 Bảng 3.9: Bảng dịch bit tại các vòng lặp của DES Sau khi dịch vòng, một bảng chọn 48 bit đƣợc sƣ̉ dụng. Vì cá ch hoán vị này của các bit đƣợc chọn nhƣ một tổ hợp con của các bit nên đƣợc gọi là “hoán vị nén” hay “trật tự nén”. Bảng trật tự nén(PC-2): 14 17 11 24 1 5 3 28 15 6 21 10 23 19 12 4 26 8 16 7 27 20 13 2 41 52 31 37 47 55 30 40 51 45 33 48 44 49 39 56 34 53 46 42 50 36 29 32 Bảng 3.10: Bảng PC-2 Ví dụ nhƣ chúng ta có thể nhận thấ y bit ở vị trí 33 của khoá sẽ dịch sang vị trí 35 ra ngoài, còn bit ở vị trí 18 của khoá sẽ bị bỏ qua. Chính việc dịch vòng này, tạo nên một tập hợp con của khoá đƣợc sử dụng trong mỗi tổ hợp khoá. Mỗi bit đƣợc sử dụng khoảng 14 lần trong tổng số 16 tổ hợp khoá, dù không phải tất cả các bít đƣợc sử dụng một cách chính xác cùng một lúc trong mỗi lần sử dụng. 2.2.4. Mô tả hàm f Hàm f(Ri-1,Ki) là một hàm có hai biến vào: biến thứ nhất Ri-1 là một xâu bit có độ dài 32 bit, biến thứ hai khoá Ki là một xâu bít có độ dài 48 bit. Đầu ra của f là một xâu bit có độ dài 32 bit. Hàm f có thể là hàm bất kỳ tuy nhiên vì nguồn gốc “sức mạnh” của DES nằm trong hàm f nên việc chọn hàm f phải cẩn thận để tránh bị phá mã một cách dễ dàng. Thông thƣờng hàm f đƣợc chọn thƣờng là hàm có tính chất f = f-1 , tức f(f(x)) = x. Trong sơ đồ mô tả mã hoá của DES đƣợc công bố bởi Uỷ ban Tiêu chuẩn Quốc gia Hoa Kỳ (The Untied States Nation Bureau of Standard), hàm f thực hiện các việc sau:  Biến thứ nhất Ri-1 đƣợc mở rộng thành một xâu bit có độ dài 48 bit theo một hàm mở rộng cố định E. Thực chất hàm mở rộng E(Ri-1) là một hoán vị có lặp trong đó lặp lại 16 bit của Ri-1.  Tính E(Ri-1)  Ki và viết kết quả thành 8 xâu 6 bit B1B2B3B4B5B6B7B8.  Đƣa 8 khối Bi vào 8 bảng S1, S2, ..., S8 (đƣợc gọi là các hộp S-Box). Mỗi hộp S-Box là một bảng 4*16 cố định có các cột từ 0 đến 15 và các hàng từ 0 đến 3. Với mỗi xâu 6 bit Bi = b1b2b3b4b5b6, ta tính đƣợc Si(Bi) nhƣ sau: hai bit b1b6 xác định hàng r trong hộp Si, bốn bit b2b3b4b5 xác định cột c trong hộp Si. Khi đó, Si(Bi) sẽ xác định phần tử Ci = Si(r,c), phần tử này viết dƣới dạng nhị phân 4 bit. Nhƣ vậy, 8 khối 6 bit Bi (1 ≤ i ≤ 8) sẽ cho ra 8 khối 4 bit Ci với (1 ≤ i ≤ 8).  Xâu bit C = C1C2C3C4C5C6C7C8 có độ dài 32 bit đƣợc hoán vị theo phép hoán vị P (hộp P-Box). Kết quả P(C) sẽ là kết quả của hàm f(Ri-1, Ki), và cũng chính là Ri cho vòng sau. Hàm f cũng có thể mô tả bằng hình vẽ sau:
  • 52. Chƣơng III: Các hệ mã khóa bí mật 43 Hình 3.5: Sơ đồ hàm f 2.2.5. Hàm (ánh xạ) mở rộng (E) Hàm mở rộng (E) sẽ tăng độ dài của Ri từ 32 bit lên 48 bit bằng cách thay đổi các thứ tự của các bit cũng nhƣ lặp lại các bit. Việc thực hiện này nhằm hai mục đích:  Làm độ dài của Ri cùng cỡ với khoá K để thực hiện việc cộng modulo XOR.  Cho kết quả dài hơn để có thể đƣợc nén trong suốt quá trình thay thế. Tuy nhiên, cả hai mục đích này đều nhằm một mục tiêu chính là bảo mật dữ liệu. Bằng cách cho phép 1 bit có thể chèn vào hai vị trí thay thế, sự phụ thuộc của các bit đầu ra với các bit đầu vào sẽ trải rộng ra. DES đƣợc thiết kế với điều kiện là mỗi bit của bản mã phụ thuộc vào mỗi bit của bản rõ và khoá. Sơ đồ hàm mở rộng: 32 bit 32 bit 8×6 bit Ri-1 (32 bit) Hàm mở rộng (E) Khoá Ki (48 bit) S1 S2 S3 S4 S5 S6 S7 S8 P Ri (32 bit) 48 bit 8×4 bit 48 bit
  • 53. Chƣơng III: Các hệ mã khóa bí mật 44 Hình 3.6: Sơ đồ hàm mở rộng (E) Đôi khi nó đƣợc gọi là hàm E-Box, mỗi 4 bit của khối vào, bit thứ nhất và bit thứ tƣ tƣơng ứng với 2 bit của đầu ra, trong khi bit thứ 2 và 3 tƣơng ứng với 1 bit ở đầu ra. Bảng sau đây miêu tả vị trí của bit ra so với bit vào. Bảng mô tả hàm mở rộng (E): 32 1 2 3 4 5 4 5 6 7 8 9 8 9 10 11 12 13 12 13 14 15 16 17 16 17 18 19 20 21 20 21 22 23 24 25 24 25 26 27 28 29 28 29 30 31 32 1 Bảng 3.11: Bảng mô tả hà m mở rộng E Ví dụ nhƣ bit ở vị trí số 3 của khối vào sẽ di chuyển đến vị trí số 4 của khối ra và bit ở vị trí 21 ở đầu vào sẽ di chuyển đến vị trí 30 và 32 ở đầu ra. 2.2.6. Mô tả hộp S - Box Đối với sơ đồ mã hoá DES, mọi tính toán đều là tuyến tính, tức là việc tính phép tuyển loại trừ XOR của hai đầu ra cũng giống với phép tuyển loại trừ XOR của hai đầu vào rồi tính toán đầu ra. Chỉ duy nhất có các tính toán với hộp S là phi tuyến. Chính vì vậy các hộp S-Box (chứa đựng các thành phần phi tuyến của hệ mật) là quan trọng nhất đối với độ mật của hệ mã, chính các hộp S tạo nên sự hỗn loạn (confusion) và sự khuếch tán (diffusion) của DES. Năm 1976, NSA đã đƣa ra tiêu chuẩn thiết kế hộp S nhƣ sau:  Mỗi hàng trong mỗi hộp S là một hoán vị của các số nguyên từ 0 đến 15.  Không có hộp S nào là hàm Affine hay tuyến tính đối với các đầu vào của nó.  Sự thay đổi của một bit đầu vào sẽ dẫn đến sự thay đổi ít nhất hai bit đầu ra. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 4 5 6 7 8 9 8 9 10 11 12 1312 1314 15 16 1716 32 32
  • 54. Chƣơng III: Các hệ mã khóa bí mật 45  Đối với hộp S bất kỳ và với đầu vào x (một xâu bit có độ dài bằng 6) bất kỳ, thì S(x) và S(x 001100) phải khác nhau ít nhất là 2 bit. NSA cũng tiết lộ 3 thuộc tính của hộp S, những thuộc tính này đảm bảo tính confusion và diffusion của thuật toán:  Các bit vào luôn phụ thuộc không tuyến tính với các bit ra.  Sửa đổi ở một bit vào làm thay đổi ít nhất là hai bit ra.  Khi một bit vào đƣợc giữ cố định và 5 bit còn lại cho thay đổi thì hộp S thể hiện một tính chất đƣợc gọi là “phân bố đồng nhất”: so sánh số lƣợng bit số 0 và 1 ở các đầu ra luôn ở mức cân bằng. Tính chất này khiến cho việc phân tích theo lý thuyết thống kê để tìm cách phá hộp S là vô ích. Sau khi cộng modulo với khoá K, kết quả thu đƣợc chuỗi 48 bit chia làm 8 khối đƣa vào 8 hộp S-Box. Mỗi hộp S-Box có 6 bit đầu vào và 4 bit đầu ra (tổng bộ nhớ yêu cầu cho 8 hộp S-Box chuẩn DES là 256 bytes). Kết quả thu đƣợc là một chuỗi 32 bit tiếp tục vào hộp P-Box. Ta có thể xây dựng các hộp S của riêng mình, tuy nhiên cũng có thể dùng các hộp S chuẩn đã đƣợc công bố: 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13 Bảng 3.12: Hộp S1 15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10 3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5 0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15 13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9 Bảng 3.13: Hộp S2 10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8 13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1 13 6 4 9 8 15 3 0 11 1 2 12 15 10 14 7 1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12 Bảng 3.14: Hộp S3 7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15 13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
  • 55. Chƣơng III: Các hệ mã khóa bí mật 46 10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4 3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14 Bảng 3.15: Hộp S4 2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9 14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6 4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14 11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3 Bảng 3.16: Hộp S5 12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11 10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8 9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6 4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13 Bảng 3.17: Hộp S6 4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1 13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6 1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2 6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12 Bảng 3.18: Hộp S7 13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7 1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2 7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8 2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11 Bảng 3.19: Hộp S8 Ví dụ: Giả sử đầu vào của hộp S6 là chuỗi bit 110011 từ 31 đến 36 . Bit đầu tiên và bit cuối cùng kết hợp lại thành 11 tƣơng ứng với hàng 3 của hộp S6. Bốn bit giữa có giá trị 1001, tƣơng ứng với cột 9. Nhƣ vậy, giá trị nhận đƣợc là 14 (số đếm của cột, hàng bắt đầu từ 0) và giá trị 1110 đƣợc thay thế cho giá trị 110110 ở đầu ra. 2.2.7. Hộp P-Box Việc hoán vị này mang tính đơn ánh, nghĩa là một bit đầu vào sẽ cho một bit ở đầu ra, không bit nào đƣợc sử dụng hai lần hay bị bỏ qua. Hộp P-Box thực chất chỉ làm chức năng sắp xếp đơn thuần theo bảng sau:
  • 56. Chƣơng III: Các hệ mã khóa bí mật 47 Bảng mô tả hộp P-Box (P): 16 7 20 21 29 12 28 17 1 15 23 26 5 18 31 10 2 8 24 14 32 27 3 9 19 13 30 6 22 11 4 25 Bảng 3.20: Bảng hoán vị P Ví dụ nhƣ bit 21 sẽ dịch chuyển đến bit thứ 4, trong khi bit thứ 4 lại dịch chuyển đến bit 31. Kết quả cuối cùng của hộp P-Box lại đƣợc XOR với nƣ̉ a trái của khối 64 bit của chính nó (tức Li-1 để tạo ra Ri) và sau đó nƣ̉ a trái và nƣ̉ a phải đảo cho nhau và bắt đầu một vòng khác. 2.2.8. Ví dụ về mã hoá DES Để có thể hiểu rõ hơn về phƣơng pháp mã hoá DES, chúng ta hãy xét ví dụ sau:  Một bản rõ mang nội dung: “0123456789ABCDEF”.  Sử dụng khoá (ở dạng thập phân): “133457799BBCDFFI”. Khoá này ở dạng nhị phân là một chuỗi bit nhƣ sau (không có bit kiểm tra): 00010010011010010101101111001001101101111011011111111000  Chuyển đổi IP, chúng ta lấy ra L0 và R0: L0 = 11001100000000001100110011111111 L0 = R0 = 11110000101010101111000010101010  16 vòng mã hoá đƣợc thực hiện nhƣ sau: E(R0) = 011110100001010101010101011110100001010101010101 K1 = 000110110000001011101111111111000111000001110010 E(R0)  K1 = 011000010001011110111010100001100110010100100111 Đầu ra S-Box = 01011100100000101011010110010111 f(R0,K1) = 00100011010010101010100110111011 L2=R1 = 11101111010010100110010101000100 E(R1) = 011101011110101001010100001100001010101000001001 K2 = 011110011010111011011001110110111100100111100101 E(R1)  K2 = 000011000100010010001101111010110110001111101100 Đầu ra S-Box = 11111000110100000011101010101110 f(R1,K2) = 00111100101010111000011110100011 L3=R2 = 11001100000000010111011100001001
  • 57. Chƣơng III: Các hệ mã khóa bí mật 48 E(R2) = 111001011000000000000010101110101110100001010011 K3 = 010101011111110010001010010000101100111110011001 E(R2)  K3 = 101100000111110010001000111110000010011111001010 Đầu ra S-Box = 00100111000100001110000101101111 f(R2,K3) = 01001101000101100110111010110000 L4=R3 = 10100010010111000000101111110100 E(R3) = 010100000100001011111000000001010111111110101001 K4 = 011100101010110111010110110110110011010100011101 E(R3)  K4 = 001000101110111100101110110111100100101010110100 Đầu ra S-Box = 00100001111011011001111100111010 f(R3,K4) = 10111011001000110111011101001100 L5=R4 = 01110111001000100000000001000101 E(R4) = 101110101110100100000100000000000000001000001010 K5 = 011111001110110000000111111010110101001110101000 E(R4)  K5 = 110001100000010100000011111010110101000110100010 Đầu ra S-Box = 01010000110010000011000111101011 f(R4,K5) = 00101000000100111010110111000011 L6=R5 = 10001010010011111010011000110111 E(R5) = 110001010100001001011111110100001100000110101111 K6 = 011000111010010100111110010100000111101100101111 E(R5)  K6 = 101001101110011101100001100000001011101010000000 Đầu ra S-Box = 01000001111100110100110000111101 F(R5,K6) = 10011110010001011100110100101100 L7=R6 = 11101001011001111100110101101001 E(R6) = 111101010010101100001111111001011010101101010011 K7 = 111011001000010010110111111101100001100010111100 E(R6)  K7 = 000110011010111110111000000100111011001111101111 Đầu ra S-Box = 00010000011101010100000010101101 F(R6,K7) = 10001100000001010001110000100111
  • 58. Chƣơng III: Các hệ mã khóa bí mật 49 L8=R7 = 00000110010010101011101000010000 E(R7) = 000000001100001001010101010111110100000010100000 K8 = 111101111000101000111010110000010011101111111011 E(R7)  K8 = 111101110100100001101111100111100111101101011011 Đầu ra S-Box = 01101100000110000111110010101110 F(R7,K8) = 00111100000011101000011011111001 L9=R8 = 11010101011010010100101110010000 E(R8) = 011010101010101101010010101001010111110010100001 K9 = 111000001101101111101011111011011110011110000001 E(R8)  K9 = 100010100111000010111001010010001001101100100000 Đầu ra S-Box = 00010001000011000101011101110111 F(R8,K9) = 00100010001101100111110001101010 L10=R9 = 00100100011111001100011001111010 E(R9) = 000100001000001111111001011000001100001111110100 K10 = 101100011111001101000111101110100100011001001111 E(R9)  K10 = 101000010111000010111110110110101000010110111011 Đầu ra S-Box = 11011010000001000101001001110101 F(R9,K10) = 01100010101111001001110000100010 L11=R10 = 10110111110101011101011110110010 E(R10) = 010110101111111010101011111010101111110110100101 K11 = 001000010101111111010011110111101101001110000110 E(R10)  K11 = 011110111010000101111000001101000010111000100011 Đầu ra S-Box = 01110011000001011101000100000001 f(R10,K11) = 11100001000001001111101000000010 L12=R11 = 11000101011110000011110001111000 E(R11) = 011000001010101111110000000111111000001111110001 K12 = 011101010111000111110101100101000110011111101001 E(R11)  K12 = 000101011101101000000101100010111110010000011000
  • 59. Chƣơng III: Các hệ mã khóa bí mật 50 Đầu ra S-Box = 01111011100010110010011000110101 f(R11,K12) = 11000010011010001100111111101010 L13=R12 = 01110101101111010001100001011000 E(R12) = 001110101011110111111010100011110000001011110000 K13 = 100101111100010111010001111110101011101001000001 E(R12)  K13 = 101011010111100000101011011101011011100010110001 Đầu ra S-Box = 10011010110100011000101101001111 f(R12,K13) = 11011101101110110010100100100010 L14=R13 = 00011000110000110001010101011010 E(R13) = 000011110001011000000110100010101010101011110100 K14 = 010111110100001110110111111100101110011100111010 E(R13)  K14 = 010100000101010110110001011110000100110111001110 Đầu ra S-Box = 01100100011110011001101011110001 f(R13,K14) = 10110111001100011000111001010101 L15=R14 = 11000010100011001001011000001101 E(R14) = 111000000101010001011001010010101100000001011011 K15 = 101111111001000110001101001111010011111100001010 E(R14)  K15 = 010111111100010111010100011101111111111101010001 Đầu ra S-Box = 10110010111010001000110100111100 f(R14,K15) = 01011011100000010010011101101110 L16=R15 = 01000011010000100011001000110100 E(R15) = 001000000110101000000100000110100100000110101000 K16 = 110010110011110110001011000011100001011111110101 E(R15)  K16 = 111010110101011110001111000101000101011001011101 Đầu ra S-Box = 10100111100000110010010000101001 f(R15,K16) = 11001000110000000100111110011000 R16 = 00001010010011001101100110010101 Bảng 3.21: Ví dụ về các bƣớc thực hiện của DES  Cuối cùng, chuyển đổi IP-1 , ta thu đƣợc bản mã (ở dạng Hecxa): “85E813540F0AB405”.
  • 60. Chƣơng III: Các hệ mã khóa bí mật 51 2.3. Các yếu điểm của DES 2.3.1. Tính bù Nếu ta ký hiệu u là phần bù của u (ví dụ nhƣ: 0100101 là phần bù của 1011010) thì DES có tính chất sau: y = DES(x,k) → y = DES( x , k ) Cho nên nếu ta biết mã y đƣợc mã hoá từ thông tin x với khoá K thì ta suy ra đƣợc bản mã y đƣợc mã hoá từ bản rõ x với khoá k . Tính chất này chính là một yếu điểm của DES bởi vì qua đó đối phƣơng có thể loại bỏ đi một số khoá phải thử khi tiến hành thử giải mã theo kiểu vét cạn. 2.3.2. Khoá yếu Khoá yếu là các khoá mà theo thuật toán sinh khoá con thì tất cả 16 khoá con đều nhƣ nhau: K1 = K2 = ... = K15 = K16 Điều đó khiến cho việc mã hóa và giải mã đối với khoá yếu là giống hệt nhau. Có tất cả 4 khoá yếu sau: Khoá yếu (Hex) C0 D0 0101 0101 0101 0101 {0}28 {0}28 FEFE FEFE FEFE FEFE {1}28 {1}28 1F1F 1F1F 0E0E 0E0E {0}28 {1}28 E0E0 E0E0 F1F1 F1F1 {1}28 {0}28 Bảng 3.22: Các khóa yếu của DES Đồng thời còn có 6 cặp khoá nƣ̉ a yếu (semi-weak key) khác với thuộc tính nhƣ sau: y = DES(x,k1) và y = DES(x,k2) nghĩa là với 2 khoá khác nhau nhƣng mã hoá ra cùng một bản mã từ cùng một bản rõ: C0 D0 Semi-weak key (Hex) C0 D0 {01}14 {01}14 01FE 01FE 01FE 01FE FE01 FE01 FE01 FE01 {10}14 {10}14 {01}14 {10}14 1FE0 1FE0 0EF1 0EF1 E01F E01F F10E F10E {10}14 {01}14 {01}14 {0}28 01E0 01E0 01F1 01F1 E001 E001 F101 F101 {10}14 {0}28 {01}14 {1}28 1FFE 1FFE 0EFE 0EFE FE1F FE1F FE0E FE0E {10}14 {1}28 {0}28 {01}14 011F 011F 010E 010E 1F01 1F01 0E01 0E01 {0}28 {10}14 {1}28 {01}14 E0FE E0FE F1FE F1FE FEE0 FEE0 FEF1 FEF1 {1}28 {10}14 Bảng 3.23: Các khóa nửa yếu của DES
  • 61. Chƣơng III: Các hệ mã khóa bí mật 52 2.3.3. DES có cấu trúc đại số Với 64 bit khối bản rõ có thể đƣợc ánh xạ lên tất cả vị trí của 64 bit khối bản mã trong 264 cách. Trong thuật toán DES, với 56 bit khoá, có thể cho chúng ta 256 (khoảng 1017 ) vị trí ánh xạ. Với việc đa mã hoá thì không gian ánh xạ còn lớn hơn. Tuy nhiên điều này chỉ đúng nếu việc mã hoá DES là không có cấu trúc. Với DES có cấu trúc đại số thì việc đa mã hoá sẽ đƣợc xem ngang bằng với việc đơn mã hoá. Ví dụ nhƣ có hai khoá bất kỳ K1 và K2 thì sẽ luôn đƣợc khoá thứ K3 nhƣ sau: EK2(EK1(x)) = EK3(x) Nói một cách khác, việc mã hoá DES mang tích chất “nhóm”, đầu tiên mã hoá bản rõ bằng khoá K1 sau đó là khoá K2 sẽ giống với việc mã hoá ở khoá K3. Điều này thực sự quan trọng nếu sử dụng DES trong đa mã hoá. Nếu một “nhóm” đƣợc phát với cấu trúc hàm quá nhỏ thì tính an toàn sẽ giảm. 2.3.4. Không gian khó a K DES có 256 = 1017 khoá. Nếu chúng ta biết đƣợc một cặp “tin/mã” thì chúng ta có thể thử tất cả 1017 khả năng này để tìm ra khoá cho kết quả khớp nhất. Giả sử nhƣ một phép thử mất 10-6 s, thì chúng sẽ mất 1011 s, tức 7300 năm. Nhƣng với các máy tính đƣợc chế tạo theo xử lý song song. Chẳng hạn với 107 con chipset mã DES chạy song song thì bây giờ mỗi một con chipset chỉ phải chịu trách nhiệm tính toán với 1010 phép thử. Chipset mã DES ngày nay có thể xử lý tốc độ 4.5×107 bit/s tức có thể làm đƣợc hơn 105 phép mã DES trong một giây. Vào năm 1976 và 1977, Diffie và Hellman đã ƣớc lƣợng rằng có thể chế tạo đƣợc một máy tính chuyên dụng để vét cạn không gian khoá DES trong ½ ngày với cái giá 20 triệu đô la. Năm 1984, chipset mã hoá DES với tốc độ mã hoá 256000 lần/giây. Năm 1987, đã tăng lên 512000 lần/giây. Vào năm 1993, Michael Wiener đã thiết kế một máy tính chuyên dụng với giá 1 triệu đô la sử dụng phƣơng pháp vét cạn để giải mã DES trung bình trong vòng 3,5 giờ (và chậm nhất là 7 giờ). Đến năm 1990, hai nhà toán học ngƣời Do Thái - Biham và Shamir - đã phát minh ra phƣơng pháp phá mã vi sai (diferential cryptanalyis), đây là một kỹ thuật sử dụng những phỏng đoán khác nhau trong bản rõ để đƣa ra những thông tin trong bản mã. Với phƣơng pháp này, Biham và Shamir đã chứng minh rằng nó hiệu quả hơn cả phƣơng pháp vét cạn. Phá mã vi sai là thuật toán xem xét những cặp mã hoá khác nhau, đây là những cặp mã hoá mà bản rõ của chúng là khác biệt. Ngƣời ta sẽ phân tích tiến trình biến đổi của những cặp mã này thông qua các vòng của DES khi chúng đƣợc mã hoá với cùng một khoá K. Sau đó sẽ chọn hai bản rõ khác nhau một cách ngẫu nhiên hợp lý nhất. Sử dụng sự khác nhau của kết quả mã hoá và gán cho những khoá khác nhau một cách phù hợp nhất. Khi phân tích nhiều hơn những cặp bản mã, chúng ta sẽ tìm ra một khoá đƣợc xem là đúng nhất. 2.4. Triple DES (3DES) Nhƣ đã trình bà y ở cá c phầ n trên, hệ mã DES (hay chuẩn mã hó a dƣ̃ liệu ) vớ i không gian khó a vẻn vẹn có 254 khóa nên thƣ̣c tế hiện nay có thể bị thám mã trong
  • 62. Chƣơng III: Các hệ mã khóa bí mật 53 khoảng thời gian vài giờ đồng hồ. Vì vậy việc tìm kiếm các hệ mã khác thay thế cho D ES là một điều cần thiết. Một trong nhƣ̃ng cá ch thƣ́ c đƣợc xem xé t đầ u tiên là tận dụng DES nhƣng sƣ̉ dụng mã hó a nhiề u lầ n . Cách thứ nhất là sử dụng hai khóa để mã hóa hai lần nhƣ sau: C = EK2(EK1(P)) Cách này gọi là doubl e DES hay 2DES, khóa của hệ mã theo mô hình này là 112 bit, có vẻ an toàn hơn so với DES , ít nhất là trên nguyên tắc . Tuy nhiên cá c chƣ́ ng minh về mặt lý thuyế t (không nằ m trong phạm vi của tà i liệu nà y ) đã cho thấ y rằ ng hệ m ã này không hề an toà n hơn DES (thuật toá n thá m mã theo kiểu vét cạn brute -force yêu cầ u số phép tính gấp đôi để thám mã 2DES so vớ i DES). Cách thức thứ hai và hiện nay đang đƣợc sử dụng rộng rãi là mã hóa DES ba lần , cách nà y gọi là Triple DES (TDES) hay 3DES, hoặc một cá ch chuẩn mƣ̣c hơn là TDEA (Triple Data Encryption Algorithm). Mô hình sƣ̉ dụng đơn giản nhấ t của Triple DES là mã hóa 3 lầ n sƣ̉ dụng 3 khóa K1, K2, K3 nhƣ hình minh họa sau: Hình 3.7: Triple DES Bản mã C = DESK3(DESK2(DESK1(M)), mô hình nà y gọi là EEE vì cả ba bƣớ c sƣ̉ dụng ba khóa ở đây đều sử dụng thuật toán mã hóa chuẩn của DES , một biế n thể khá c của mô hình này gọi là EDE vớ i bƣớ c ở giƣ̃a sƣ̉ dụng thuật toá n giải mã của DES: C = DESK3( 1 2KDES (DESK1(M)). Việc lƣ̣a chọn mã hó a hay giải mã ở bƣớ c thƣ́ hai không là m thay đổi tính an toà n của Triple DES. Khóa của Triple DES là 168 bit, một số biế n thể của Triple DES sƣ̉ dụng khóa có độ dài 112 bit (K1=K3) nhƣng khá c vớ i double DES, khi đó phƣơng phá p nà y có tên gọi là Two key Triple DES . Các chứng minh về mặt lý thuyết và các tấn công đối với Triple DES cho thấ y hệ mã nà y vẫn sẽ cò n đƣợc sƣ̉ dụng trong một tƣơng lai dà i nƣ̃a mặc dù trên trên thƣ̣c tế nó chậm hơn so vớ i AES 6 lầ n.
  • 63. Chƣơng III: Các hệ mã khóa bí mật 54 2.5. Chuẩ n mã hó a cao cấp AES 2.5.1. Giớ i thiệu Chuẩn mã hó a dƣ̃ liệu cao cấ p AES là một hệ mã khóa bí mật có tên là Rijndael (Do hai nhà mật mã học ngƣờ i Bỉ là Joan Daemen và Vincent Rijmen đƣa ra và trở thà nh chuẩn tƣ̀ năm 2002) cho phé p xƣ̉ lý cá c khố i dƣ̃ liệu input có kích thƣớ c 128 bit sƣ̉ dụng các khóa có độ dài 128, 192 hoặc 256 bit. Hệ mã Rijndael đƣợc thiết kế để có thể là m việc vớ i cá c khó a và cá c khố i dƣ̃ liệu có độ dà i lớ n hơn tuy nhiên khi đƣợc chọn là một chuẩn do Ủ y ban tiêu chuẩn của Hoa Kỳ đƣa ra và o năm 2001, nó đƣợc qui đi ̣nh chỉ là m việc vớ i cá c khố i dƣ̃ liệu 128 bit và cá c khó a có độ dà i 128, 192 hoặc 256 bit (do đó cò n đặt cho nó cá c tên AES-128, AES-192, AES-256 tƣơng ƣ́ ng vớ i độ dà i khó a sƣ̉ dụng). 2.5.2. Các khái niệm và định nghĩa (Definitions) 2.5.2.1. Các khái niệm và ký hiệu Các khái niệm và định nghĩa đƣợc sử dụng để trình bày về chuẩn mã hóa cao cấp: AES Chuẩn mã hó a cao cấ p Biế n đổi Affine Phép biến đổi bao gồm một phép nhân với một ma tr ận sau đó là một phé p cộng của một vectơ Bit Một số nhi ̣phân nhận giá tri ̣0 hoặc 1 Block Một dãy cá c bit nhi ̣phân tạo thà nh input , output, trạng thái (state) và các khóa sử dụng tại các vòng lặp (Round Key) của hệ mã . Độ dài của dãy (khố i) là số lƣợng các bit mà nó chƣ́ a . Các khối cũng có thể đƣợc xem là một dãy các byte Byte Một nhó m 8 bit Cipher Thuật toá n mã hó a Cipher Key Khóa của hệ mã , có thể đƣợc biểu diễn dƣới dạng một mảng 2 chiề u gồ m 4 hàng và Nk cột Ciphertext Bản mã Inverse Cipher Thuật toá n giải mã Thủ tục sinh khóa (Key Expansion) Thủ tục đƣợc sử dụng để sinh ra các khóa sử dụng tại các vòng lặp của thuật toán mã hóa , giải mã từ khóa chính ban đầu Round Key Là các giá trị sinh ra từ khóa chính bằng cách sử dụng thủ tục sinh khóa . Các khóa này đƣợc sử dụng tại các vòng lặp của thuật toán Trạng thái (State) Các giá trị mã hóa trung gian có thể biểu diễn dƣớ i dạng một mảng 2 chiề u gồ m 4 hàng và Nb cột S-box Một bảng thế phi tuyến đƣợc sƣ̉ dụng trong thủ tục sinh khóa và trong các biến đổi thay thế các byte để thực hiện cá c thay thế 1-1 đố i vớ i một giá tri ̣1 byte Word Một nhó m 32 bit có thể đƣợc xem nhƣ 1 đơn vi ̣tính toá n độc lập hoặc là một mảng 4 byte Bảng 3.24: Qui ƣớ c một số tƣ̀ viế t tắ t và thuật ngƣ̃ của AES 2.5.2.2. Các hàm, ký hiệu và các tham số của thuật toán Các tham số thuật toán , các ký hiệu và các hàm đƣợc sử dụng trong mô tả thuật toán: AddRoundKey() Hàm biến đổi đƣợc sử dụng trong thuật toán mã hóa và giải mã trong đó thực hiện phép toán XOR bit giữa một trạng
  • 64. Chƣơng III: Các hệ mã khóa bí mật 55 thái trung gian (State) và một khóa của vòng lặp (Round Key). Kích thƣớc của một Round Key bằng kích thƣớc của trạng thái (chẳng hạn vớ i Nb = 4 độ dà i của một Round Key sẽ là 128 bit hay 16 byte) InvMixColumns() Hàm biế n đổi đƣợc sƣ̉ dụng trong thuật toá n giải mã, là hàm ngƣợc của hà m MixColumns() InvShiftRows() Hàm biến đổi trong thuật toán giải mã , là hàm ngƣợc của hàm ShiftRows() InvSubBytes() Hàm biến đổi trong thuật toán giải mã , là hàm ngƣợc của hàm SubBytes() K Khóa mã hóa MixColumns() Hàm biến đổi trong thuật toán mã hóa nhận tất cả các cột của một trạng thái (State) và trộn với dữ liệu của nó (không phụ thuộc lẫn nhau) để nhận đƣợc một cột mới Nb Số lƣợng cá c cột (là các word 32 bit) tạo thành một trạng thái, Nb = 4) Nk Số lƣợng cá c word 32 bit tạo thà nh khó a mã hó a K (Nk = 4, 6, hoặc 8) Nr Số lƣợng cá c vò ng lặp của thuật toá n , là một hàm của Nk và Nb (là các giá trị cố định ) (Nr = 10, 12 hoặc 14 tƣơng ứng với các giá trị khác nhau của Nk) Rcon[] Mảng word hằng số sử dụng trong các vòng lặp RotWord() Hàm sử dụng trong thủ tục sinh khóa nhận một word 4-byte và thực hiện một hoá n vi ̣vò ng ShiftRows() Hàm sử dụng trong quá trình mã hóa , xƣ̉ lý cá c trạng thá i bằ ng cá ch di ̣ch vò ng ba hà ng cuố i của trạng thá i vớ i số lầ n dịch khác nhau SubBytes() Hàm biến đổi sử dụng trong quá trình mã hó a, xƣ̉ lý một trạng thá i bằ ng cá ch sƣ̉ dụng một bảng thế phi tuyến cá c byte (S-box) thao tá c trên mỗi byte một cá ch độc lập SubWord() Hàm sử dụng trong thủ tục sinh khóa nhận một word input 4-byte và sƣ̉ dụng một S -box trên mỗi giá trị 4-byte nà y để thu đƣợc 1 word output XOR Phép or bit tuyệt đối  Phép or bit tuyệt đối  Phép nhân 2 đa thƣ́ c (bậc nhỏ hơn 4) theo modulo (x4 + 1)  Phép nhân trên trƣờng hữu hạn 2.5.3. Các ký hiệu và qui ƣớc 2.5.3.1. Input và Output Input và Output của chuẩn mã hó a cao cấ p đề u là cá c dãy 128 bit, còn gọi là các khố i (block), độ dà i của mỗi khố i nà y là số bit dƣ̃ liệu mà nó chứa. Khóa của chuẩn mã hóa cao cấp là một dãy có độ dà i 128, 192 hoặc 256 bit. Chuẩn mã hó a dƣ̃ liệu cao cấ p không là m việc vớ i cá c giá tri ̣input, output và khó a có cá c độ dà i khá c (mặc dù thuật toá n cơ sở của nó cho phép điề u nà y). Các bit của input, output và khó a của hệ mã đƣợc đánh số từ 0. 2.5.3.2. Đơn vi ̣Byte Đơn vi ̣cơ bản để xƣ̉ lý trong AES là một byte tƣ́ c là một dãy 8 bit đƣợc xem nhƣ là một đố i tƣợng đơn. Các giá trị input, output và khó a của hệ mã (đƣợc qui đi ̣nh trong phầ n 3.1) đƣợc xem là một mảng các byte. Các giá trị input, output và khó a của hệ mã đƣợc ký
  • 65. Chƣơng III: Các hệ mã khóa bí mật 56 hiệu bở i tên mảng a và biểu diễn dƣớ i dạng a n hoặc a[n] trong đó n nhận cá c giá tri ̣trong các khoảng sau: Nế u độ dà i khó a bằ ng 128 bit: 0 ≤ n < 16; Nế u độ dà i khó a bằ ng 192 bit: 0 ≤ n < 24; Nế u độ dà i khó a bằ ng 256 bit: 0 ≤ n < 32; Tấ t cả cá c giá tri ̣ Byte sƣ̉ dụng trong thuật toá n của AES đề u đƣợc biểu diễn dƣớ i dạng một dãy các bit 0 hoặc 1 theo đi ̣nh dạng {b7, b6, b5, b4, b3, b2, b1, b0}. Các Byte này sau đƣợc hiểu là cá c phầ n tƣ̉ trên trƣờ ng hƣ̃u hạn bằ ng cá ch sƣ̉ dụng biểu diễn thà nh dạng đa thức: b7x7 + b6x6 + b5x5 + b4x4 + b3x3 + b2x2 + b1x1 + b0x0 = 7 0 i i i b x   . Chẳng hạn giá tri ̣ {01100011} tƣơng đƣơng vớ i phầ n tƣ̉ trên trƣờ ng hƣ̃u hạn x 6 + x5 + x + 1. Để thuận tiện , các giá trị Byte đƣợc biểu diễn sử dụng các ký hiệu của hệ Hexa , sƣ̉ dụng 4 bit cho một ký tƣ̣ và hai ký tƣ̣ cho một Byte nhƣ bảng sau: Bit Ký tự Bit Ký tự Bit Ký tự Bit Ký tự 0000 0 0100 4 1000 8 1100 c 0001 1 0101 5 1001 9 1101 d 0010 2 0110 6 1010 a 1110 e 0011 3 0111 7 1011 b 1111 f Bảng 3.25: Bảng biểu diễn các xâu 4 bit Khi đó cá c Byte (8 bit) sẽ đƣợc biểu diển bằng hai ký tự , chẳng hạn {01100011} sẽ đƣợc biểu diễn thành {63}. 2.5.3.4. Trạng thái (State) Các thao tác bên trong của AES đƣợc thực hiện trên một mảng 2 chiề u cá c byte đƣợc gọi là trạng thá i. Một trạng thá i gồ m bố n hà ng cá c byte , mỗi hà ng có Nb byte trong đó Nb là kích thƣớ c của khố i chia cho 32. Mảng trạng thái ký hiệu là s trong đó mỗi byte của mảng có 2 chỉ số hàng r và cột c (0  r, c < 4). Tại thời điểm bắt đầu input của thuật toán – mảng các byte in 0, in1, …, in15 đƣợc copy và o mảng trạng thá i theo qui tắ c đƣợc minh họa bằ ng hình vẽ: Hình 3.8: Các trạng thái của AES trong đó cá c giá tri ̣của mảng s và mảng output đƣợc tính nhƣ sau: s[r, c] = in[r + 4c]  0  r, c < 4 input bytes in0 in4 in8 in12 in1 in5 in9 in13 in2 in6 in10 in14 in3 in7 in11 in15 State array S0,0 S0,1 S0,2 S0,3 S1,0 S1,1 S1,2 S1,3 S2,0 S2,1 S2,2 S2,3 S3,0 S3,1 S3,2 S3,3 output bytes out0 out4 out8 out12 out1 out5 out9 out13 out2 out6 out10 out14 out3 out7 out11 out15
  • 66. Chƣơng III: Các hệ mã khóa bí mật 57 out[r + 4c] = s[r, c]  0  r, c < 4 2.5.3.5. Biể u diễn củ a trạng thá i Bố n cột của mảng trạng thá i của thuật toá n tạo thà nh 4 word 32-bit w0, w1, …, w3 đƣợc biểu diễn nhƣ sau: w0 = s0,0 s1,0 s2,0 s3,0 w1 = s0,1 s1,1 s2,1 s3,1 w2 = s0,2 s1,2 s2,2 s3,2 w3 = s0,3 s1,3 s2,3 s3,3 2.5.4. Thuật toán Độ dài của input, output và cá c trạng thá i (state) của chuẩn mã hóa cao cấp AES là 128 bit tƣơng ƣ́ ng vớ i giá tri ̣của Nb = 4 (là số lƣợng các word 32-bit và cũng là số cột của mỗi trạng thái). Khóa của AES có độ dài là 128, 192 hoặc 256 bit tƣơng ƣ́ ng vớ i cá c giá trị của Nk là 4, 6, hoặc 8 và cũng là số cột của khóa mã hóa. Tƣơng ƣ́ ng vớ i độ dà i của khó a sƣ̉ dụng số vò ng lặp của thuật toá n Nr nhận cá c giá trị 10 (Nk = 4), 12 (Nk = 6) hoặc 14 (Nk = 8). Chúng ta có thể minh họa qua bảng sau: Độ dài khóa (Nk) Kích thƣớc khối (Nb) Số lầ n lặp (Nr) AES-128 4 4 10 AES-192 6 4 12 AES-256 8 4 14 Bảng 3.26: Bảng độ dài khóa của AES Cả quá trình mã hó a và giải mã AES sƣ̉ dụng một hà m lặp là kế t hợp của bố n hà m biế n đổi (đơn vi ̣xƣ̉ lý là byte) sau: 1) biến đổi thay thế byte sƣ̉ dụng một bảng thế (S-box), 2) dịch các hàng của mảng trạng thái với số lần dịch của mỗi hàng là khác nhau , 3) kế t hợp dƣ̃ liệu của mỗi cột trong mảng trạng thái và 4) cộng một khó a Round Key và o trạng thái. Các biến đối này (và các hàm ngƣợc của chúng ) đƣợc mô tả trong cá c phầ n 4.1.1- 4.1.4 và 4.3.1-4.3.4. 2.5.4.1. Thuật toá n mã hó a Bắ t đầ u thu ật toán bản rõ (input) đƣợc copy và o mảng trạng thá i sƣ̉ dụng cá c qui ƣớc đƣợc mô tả trong phần 3.4. Sau khi cộng vớ i khó a Round Key khở i tạo mảng trạng thái đƣợc biến đổi bằng các thực hiện một hàm vòng (round function) Nr lầ n (10, 12, hoặc 14 phụ thuộc vào độ dài khóa ) trong đó lầ n cuố i cù ng thƣ̣c hiện khá c cá c lầ n trƣớ c đó . Trạng thái sau lần lặp cuối cùng sẽ đƣợc chuyển thành output của thuật toán theo qui tắc đƣợc mô tả trong phầ n 3.4. Hàm vòng đƣợc tham số hóa sử dụng một (key schedule) dãy các khóa đƣợc biểu diễn nhƣ là một mảng 1 chiề u của cá c word 4-byte đƣợc sinh ra tƣ̀ thủ tục sinh khó a (Key Expansion) đƣợc mô tả trong phầ n 5.2. Chúng ta có thể thấy tấ t cả cá c vò ng đề u thƣ̣c hiện cá c công việc giố ng nhau dƣ̣a trên 4 hàm (theo thƣ́ tƣ̣ ) SubBytes(), ShiftRows(), MixColumns() và AddRoundKey() trƣ̀ vòng cuối cùng bỏ qua việc thực hiện hàm MixColumns(). Thuật toá n đƣợc mô tả chi tiết qua đoạn giả mã lệnh sau: Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])
  • 67. Chƣơng III: Các hệ mã khóa bí mật 58 begin byte state[4,Nb] state = in AddRoundKey(state, w[0, Nb-1]) // See Sec. 5.1.4 for round = 1 step 1 to Nr–1 SubBytes(state) // See Sec. 5.1.1 ShiftRows(state) // See Sec. 5.1.2 MixColumns(state) // See Sec. 5.1.3 AddRoundKey(state, w[round*Nb, (round+1)*Nb-1]) end for SubBytes(state) ShiftRows(state) AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1]) out = state end Sơ đồ thuật toá n:
  • 68. Chƣơng III: Các hệ mã khóa bí mật 59 Plaintext Substitute bytes Add round key Shift rows Mix Columns Add round key Round1 … Substitute bytes Shift rows Mix Columns Add round key Round9 Substitute bytes Shift rows Add round key Round10 Plaintext (a) Mã hóa Plaintext Add round key Inverse sub bytes Inverse shift row Ciphertext (b) Giải mã Key w[0, 3] Expand key w[4, 7] Inverse mix cols Add round key Inverse sub bytes Inverse shift row Round9Round10 Inverse mix cols Add round key Inverse sub bytes Inverse shift row Round1 w[40, 43] Add round key … w[36,39] Hình 3.9: Thuật toá n mã hó a và giải mã của AES 2.5.4.1.1 Hàm SubBytes() Hàm SubBytes() thƣ̣c hiện phé p thay thế cá c byte của mảng trạng thá i bằng cá ch sƣ̉ dụng một bảng thế S -box, bảng thế nà y là khả nghi ̣ch và đƣợc xây dƣ̣ng bằng cá ch kết hợp hai biế n đố i sau: 1. Nhân nghi ̣ch đảo trên trƣờ ng hƣ̃n hạn GF (28 ) (mô tả trong phầ n 4.2), phầ n tƣ̉ {00} đƣợc á nh xạ thà nh chính nó 2. Áp dụng biến đổi Affine sau (trên GF(2)):
  • 69. Chƣơng III: Các hệ mã khóa bí mật 60 ' ( 4)mod8 ( 5)mod8 ( 6)mod8 ( 7)mod8i i i i i i ib b b b b b c         trong đó 0  i <8 là bit thứ i của byte b tƣơng ứng và ci là bit thứ i của byte c với giá trị {63} hay {01100011}. Các phần tử biến đổi affine của S -box có thể đƣợc biểu diến dƣớ i dạng ma trận nhƣ sau: ' 0 0 ' 1 1 ' 2 2 ' 3 3 ' 4 4 ' 5 5 ' 6 6 ' 7 7 1 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 0 1 1 1 1 0 0 0 1 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 0 0 1 0 0 1 1 1 1 1 0 1 0 0 0 1 1 1 1 1 0 b b b b b b b b b b b b b b b b                                                                                           Hình sau minh họa kết quả của việc áp dụng hàm biến đổi SubBytes () đố i vớ i mảng trạng thái: 0,0S 0,1S 0,2S 0,3S 1,0S 1,2S 1,3S 2,0S 2,1S 2,2S 2,3S 3,0S 3,1S 3,2S 3,3S Bảng thế S -box đƣợc sƣ̉ dụng trong hà m SubBytes () có thể đƣợc biểu diễn dƣới dạng hexa nhƣ sau: ' 0,0S ' 0,1S ' 0,2S ' 0,3S ' 1,0S ' 1,2S ' 1,3S ' 2,0S ' 2,1S ' 2,2S ' 2,3S ' 3,0S ' 3,1S ' 3,2S ' 3,3S ,r cS ' ,r cS S-Box
  • 70. Chƣơng III: Các hệ mã khóa bí mật 61 Bảng 3.27: Bảng thế S-Box của AES trong đó chẳng hạn nếu s 1,1 = {53} có nghĩa là giá trị thay thế sẽ đƣợc xác định bằ ng giao của hà ng có chỉ số 5 vớ i cột có chỉ số 3 trong bảng trên điề u nà y tƣơng ƣ́ ng vớ i việc s‟1,1 = {ed}. 2.5.4.1.2. Hàm ShiftRows() Trong hà m nà y cá c byte trong 3 hàng cuối của mảng trạng thái sẽ đƣợc dịch vòng vớ i số lầ n di ̣ch (hay số byte bi ̣di ̣ch) khác nhau. Hàng đầu tiên r = 0 không bi ̣di ̣ch. Cụ thể hàm này sẽ tiến hành biến đổi sau: ' , ,( ( , ))mod ( 4)r c r c shift r Nb Nbs s Nb  trong đó giá tri ̣di ̣ch shift (r, Nb) phụ thuộc và o số hà ng r nhƣ sau: shift(1, 4) = 1, shift(2, 4) = 2, shift(3, 4) = 3. Thao tá c nà y sẽ chuyển cá c byte tớ i cá c vi ̣trí thấ p hơn trong cá c hà ng , trong khi các byte thấp nhất sẽ đƣợc chuyển lên đầu của hàng . Tấ t cá c cá c mô tả trên có thể minh họa qua hình vẽ sau: S 0,0S 0,1S 0,2S 0,3S 1,0S 1,1S 1,2S 1,3S 2,0S 2,1S 2,2S 2,3S 3,0S 3,1S 3,2S 3,3S 0,0S 0,1S 0,2S 0,3S0,0S 0,1S 0,2S 0,3S S’ 0,0S 0,1S 0,2S 0,3S 1,1S 1,2S 1,3S 1,0S 2,2S 2,3S 2,0S 2,31S 3,3S 3,0S 3,1S 3,2S ShiftRows()
  • 71. Chƣơng III: Các hệ mã khóa bí mật 62 Hình 3.10: Hàm ShifftRows() 2.5.4.1.3. Hàm MixColumns() Hàm này làm việc trên các cột của bảng trạng thái , nó coi mỗi cột của mảng trạng thái nhƣ là một đa thức gồm 4 hạng tử nhƣ đƣợc mô tả trong phần 4.3. Các cột sẽ đƣợc xem nhƣ là cá c đa thƣ́ c trên GF(28 ) và đƣợc nhân theo modulo x4 + 1 vớ i một đa thƣ́ c cố đi ̣nh a(x): a(x) = {03}x3 + {01}x2 + {01}x + {02} Nhƣ đã mô tả trong phầ n 4.3 điều nà y có thể biểu diễn bằng một phé p nhân ma trận: s‟(x) = a(x)s(x): ' 0, 0, ' 1, 1, ' 2, 2, ' 3, 3, 02 03 01 01 01 02 03 01 01 01 02 03 03 01 01 02 c c c c c c c c S S S S S S S S                                  vớ i mọi 0  c < Nb = 4. Kế t quả là bố n byte trong mỗi cột sẽ đƣợc thay thế theo công thƣ́ c sau: ' 0, 0, 1, 2, 3,({02} ) ({03} )c c c c cs s s s s      ' 1, 0, 1, 2, 3,({02} ) ({03} )c c c c cs s s s s      ' 2, 0, 1, 2, 3,({02} ) ({03} )c c c c cs s s s s      ' 3, 0, 1, 2, 3,({03} ) ({02} )c c c c cs s s s s      Có thể minh họa việc thực hiện của hàm này bằng hình vẽ sau:
  • 72. Chƣơng III: Các hệ mã khóa bí mật 63 Hình 3.11: Hàm MixColumns của AES 2.5.4.1.4. Hàm AddRoundKey() Trong hà m nà y một khó a vò ng (Round Key ) sẽ đƣợc cộng vào mảng trạng thái bằ ng một thao tá c XOR bit . Mỗi khó a vò ng gồ m Nb word đƣợc sinh ra bở i thủ tục sinh khóa (phầ n 5.2). Các word này sẽ đƣợc cộng vào mỗi cột của mảng trạng thái nhƣ sau:  ' ' ' ' 0, 1, 2, 3, 0, 1, 2, 3, *, , , , , , 0 4c c c c c c c c round Nb cs s s s s s s s w c Nb             trong đó [wi] là các word của khó a đƣợc mô tả trong phầ n 5.2 và round là lần lặp tƣơng ƣ́ ng vớ i qui ƣớ c 0  round  Nr. Trong thuật toá n mã hó a phép cộng khó a vò ng khở i tạo xảy ra vớ i round = 0 trƣớ c khi cá c vò ng lặp của thuật toá n đƣợc thƣ̣c hi ện. Hàm AddRoundKey() đƣợc thƣ̣c hiện trong thuật toá n mã hó a khi 1  round  Nr. Việc thƣ̣c hiện của hà m nà y có thể minh họa qua hình vẽ tring đó l = round * Nb. Đi ̣a chỉ byte trong cá c word của dãy khó a đƣợc mô tả trong phầ n 3.1. Hình 3.12: Hàm AddRoundKey của AES 2.5.4.2. Thuật toá n sinh khó a (Key Expansion) Thuật toá n sinh khó a của AES nhận mộ t khó a mã hó a K sau đó thƣ̣ c hiện một thủ tục sinh khóa để sinh một dãy các khóa cho việc mã hó a . Thủ tục này sẽ sinh tổng số Nb*(Nr+1) word, thủ tục sử dụng một tập khởi tạo Nb word và mỗi một lần lặp trong số Nr lầ n sẽ cầ n tớ i Nb word của dƣ̃ liệu khó a . Dãy khóa kết quả là một mảng tuyến tính c ác word 4-byte đƣợc ký hiệu là [wi] trong đó 0  i < Nb(Nr+1). Sƣ̣ mở rộng khó a thà nh dãy khó a đƣợc mô tả qua đoạn giả mã sau: KeyExpansion(byte key[4*Nk], word w[Nb*(Nr+1)], Nk) begin word temp i = 0 while (i < Nk)
  • 73. Chƣơng III: Các hệ mã khóa bí mật 64 w[i] = word(key[4*i], key[4*i+1], key[4*i+2], key[4*i+3]) i = i+1 end while i = Nk while (i < Nb * (Nr+1)] temp = w[i-1] if (i mod Nk = 0) temp = SubWord(RotWord(temp)) xor Rcon[i/Nk] else if (Nk > 6 and i mod Nk = 4) temp = SubWord(temp) end if w[i] = w[i-Nk] xor temp i = i + 1 end while end SubWord() là một hàm nhận một input 4-byte và á p dụng bảng thế S -box lên input để nhận đƣợc một word output . Hàm RotWord() nhận một word input [a0, a1, a2, a3] thƣ̣c hiện một hoá n vi ̣vò ng và trả về [a1, a2, a3, a0]. Các phần tử của mảng hằng số Rcon [i] chƣ́ a cá c giá tri ̣nhận đƣợc bở i [xi-1 , {00}, {00}, {00}] trong đó xi-1 là mũ hóa của x (x đƣợc biểu diễn dƣớ i dạng {02} trên GF(28 ) và i bắt đầu từ 1). Theo đoạn giả mã trên chú ng ta có thế nhận thấ y rằ ng Nk word của khó a kế t quả sẽ đƣợc điề n bở i khó a mã hó a . Các word sau đó w [i] sẽ bằng XOR với word đứng trƣớc nó w[i-1] vớ i w[i-Nk]. Vớ i cá c word ở vi ̣trí chia hết cho Nk một biến đổi sẽ đƣợc thƣ̣c hiện vớ i w[i-1] trƣớ c khi thƣ̣c hiện phé p XOR bit , sau đó là phé p XOR vớ i một hằng số Rcon [i]. Biến đổi nà y gồ m một phép di ̣ch vò ng cá c byte của một word (RotWord()), sau đó là á p dụng một bảng tra lên tất cả 4 byte của word (SubWord()). Chú ý là thủ tục mở rộng khóa đối với các khóa có độ dài 256 hơi khác so với thủ tục cho các khóa có độ dài 128 hoặc 192. Nế u Nk = 8 và i – 4 là một bội số của Nk thì SubWord() sẽ đƣợc áp dụng cho w[i-1] trƣớ c khi thƣ̣c hiện phép XOR bit. 2.5.4.3. Thuật toá n giả i mã Thuật toá n giải mã khá giố ng vớ i thuật toá n mã hó a về mặt cấ u trú c nhƣng 4 hàm cơ bản sƣ̉ dụng là cá c hà m ngƣợc của cá c hà m trong thuật toá n giải mã . Đoạn giả mã cho thuật toá n giải mã nhƣ sau: InvCipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)]) begin byte state[4,Nb] state = in
  • 74. Chƣơng III: Các hệ mã khóa bí mật 65 AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1]) // See Sec. 5.1.4 for round = Nr-1 step -1 downto 1 InvShiftRows(state) // See Sec. 5.3.1 InvSubBytes(state) // See Sec. 5.3.2 AddRoundKey(state, w[round*Nb, (round+1)*Nb-1]) InvMixColumns(state) // See Sec. 5.3.3 end for InvShiftRows(state) InvSubBytes(state) AddRoundKey(state, w[0, Nb-1]) out = state end 2.5.4.3.1. Hàm InvShiftRows() Hàm này là hàm ngƣợc của hàm ShiftRows () . Các byte của ba hàng cuối của mảng trạng thái sẽ đƣợc dịch vòng với các vị trí dịch khác nhau . Hàng đầu tiên không bị dịch, ba hà ng cuố i bi ̣di ̣ch đi Nb – shift(r, Nb) byte trong đó các giá trị shift (r, Nb) phụ thuộc và o số hà ng nhƣ trong phầ n 5.1.2. Cụ thể hàm này tiến hành xử lý sau: ' ,( ( , ))mod , 0 4,0 ( 4)r c shift r Nb Nb r cs s r c Nb Nb        Hình minh họa:
  • 75. Chƣơng III: Các hệ mã khóa bí mật 66 Hình 3.13: Hàm InvShiftRows() của AES 2.5.4.3.2. Hàm InvSubBytes() Hàm này là hàm ngƣợc của hàm SubBytes(), hàm sử dụng nghịch đảo của biến đổi Affine bằ ng cá ch thƣ̣c hiện nhân nghi ̣ch đảo trên GF(28 ). Bảng thế đƣợc sử dụng trong hàm là: Bảng 3.28: Bảng thế cho hà m InvSubBytes() 2.5.4.3.3. Hàm InvMixColumns() Hàm này là hàm ngƣợc của hàm MixColumns (). Hàm làm việc trên các cột của mảng trạng thái, coi mỗi cột nhƣ là môtô đa thƣ́ c 4 hạng tử đƣợc mô tả trong phần 4.3. Các cột đƣợc xem là các đa thức trên GF(28 ) và đƣợc nhân theo modulo x4 +1 vớ i một đa thƣ́ c cố đi ̣nh là a-1 (x): a-1 (x) = {0b}x3 + {0d}x2 + {09}x + {0e} Và có thể mô tả bằng phép nhân ma trận nhƣ sau: s‟(x) = a-1 (x)s(x): ' 0, 0, ' 1, 1, ' 2, 2, ' 3, 3, 0 0 0 09 09 0 0 0 0 09 0 0 0 0 09 0 c c c c c c c c e b dS S e b dS S d e bS S b d eS S                                  trong đó 0  c < Nb. Kế t quả là bố n byte trong mỗi cột sẽ đƣợc thay thế theo công thƣ́ c sau: ' 0, 0, 1, 2, 3,({0 } ) ({0 } ) ({0 } ) ({09} )c c c c cs e s b s d s s        ' 1, 0, 1, 2, 3,({09} ) ({0 } ) ({0 } ) ({0 } )c c c c cs s e s b s d s       
  • 76. Chƣơng III: Các hệ mã khóa bí mật 67 ' 2, 0, 1, 2, 3,({0 } ) ({09} ) ({0 } ) ({0 } )c c c c cs d s s e s b s        ' 3, 0, 1, 2, 3,({0 } ) ({0 } ) ({09} ) ({0 } )c c c c cs b s d s s e s        2.5.4.3.4. Hàm nghịch đảo của hàm AddRoundKey() Thật thú vi ̣là hà m nà y tƣ̣ bản thân nó là nghi ̣ch đảo của chính nó là do hà m chỉ có phép toán XOR bit. 2.5.4.3.5. Thuật toá n giả i mã tƣơng đƣơng Trong thuật toá n giải mã đƣợc trình bà y ở trên chú ng ta thấ y thƣ́ tƣ̣ của các hàm biế n đổi đƣợc á p dụng khá c so vớ i thuật toá n mã hó a trong khi dạng của danh sá ch khó a cho cả 2 thuật toá n vẫn giƣ̃ nguyên . Tuy vậy một số đặc điểm của AES cho phép chú ng ta có một thuật toá n giải mã tƣơng đƣơ ng có thƣ́ tƣ̣ á p dụng cá c hà m biến đổi giố ng vớ i thuật toá n mã hó a (tấ t nhiên là thay cá c biế n đổi bằng cá c hà m ngƣợc của chú ng ). Điề u này đạt đƣợc bằng cách thay đổi danh sách khóa. Hai thuộc tính sau cho phé p chú ng ta có một thuật toá n giải mã tƣơng đƣơng: 1. Các hàm SubBytes () và ShiftRows() hoán đổi cho nhau ; có nghĩa là một biến đổi SubBytes () theo sau bở i một biế n đổi ShiftRows () tƣơng đƣơng vớ i một biế n đổi ShiftRows() theo sau bở i một biế n đổi SubBytes (). Điều nà y cũng đú ng vớ i cá c hà m ngƣợc của chú ng 2. Các hàm trộn cột – MixColumns() và InvMixColumns() là các hàm tuyến tính đố i vớ i cá c cột input, có nghĩa là: InvMixColumns(state XOR Round Key) = InvMixColumns(state) XOR InvMixColumns(Round Key). Các đặc điểm này cho phép thứ tự của các hàm InvSubBytes() và InvShiftRows() có thể đổi chỗ. Thƣ́ tƣ̣ của cá c hà m AddRoundKey() và InvMixColumns() cũng có thể đổi chỗ miễn là cá c cột của danh sách khóa giải mã phải đƣợc thay đổi bằng cách sử dụng hàm InvMixColumns(). Thuật toá n giải mã tƣơng đƣơng đƣợc thƣ̣c hiện bằ ng cá ch đảo ngƣợc thƣ́ tƣ̣ của hàm InvSubBytes () và InvShiftRows (), và thay đổi thứ tự của AddRoundKe y() và InvMixColumns() trong cá c lầ n lặp sau khi thay đổi khó a cho giá tri ̣round = 1 to Nr-1 bằng cách sử dụng biến đổi InvMixColumns (). Các word đầu tiên và cuối cùng của danh sách khóa không bị thay đổi khi ta áp dụng phƣơng pháp nà y. Thuật toá n giải mã tƣơng đƣơng cho một cấ u trú c hiệu quả hơn so vớ i thuật toá n giải mã trƣớc đó. Đoạn giả mã cho thuật toá n giải mã tƣơng đƣơng: EqInvCipher(byte in[4*Nb], byte out[4*Nb], word dw[Nb*(Nr+1)]) begin byte state[4,Nb]
  • 77. Chƣơng III: Các hệ mã khóa bí mật 68 state = in AddRoundKey(state, dw[Nr*Nb, (Nr+1)*Nb-1]) for round = Nr-1 step -1 downto 1 InvSubBytes(state) InvShiftRows(state) InvMixColumns(state) AddRoundKey(state, dw[round*Nb, (round+1)*Nb-1]) end for InvSubBytes(state) InvShiftRows(state) AddRoundKey(state, dw[0, Nb-1]) out = state end Các thay đổi sau cần thực hiện trong thuật toán sinh khóa để thuật toán trên có thể hoạt động đƣợc: for i = 0 step 1 to (Nr+1)*Nb-1 dw[i] = w[i] end for for round = 1 step 1 to Nr-1 InvMixColumns(dw[round*Nb, (round+1)*Nb-1]) // note change of type end for 2.6. Các cơ chế, hình thức sử dụng của mã hóa khối (Mode of Operation) 2.6.1. Các hình thức sử dụng Nhƣ chú ng ta đã biết c ác mã hóa khối mã hóa các khối thông tin có độ dài cố định, chẳng hạn DES với các khối bit 64, sử dụng khóa là xâu bít có độ dài bằng 56. Tuy nhiên để sử dụng các hệ mã này trên thực tế vẫn cần có một qui đi ̣nh về qui cá ch sƣ̉ dụng chúng để mã hóa các dữ liệu cần mã hóa. Cách thức sử dụng một thuật toán mã hóa khối trong thực tế đƣợc gọi là Mode of Use hay Mode Of Operation. Có 4 hình thức sử dụng các hệ mã khối đƣợc định nghĩa trong các chuẩn ANSI (ví dụ ANSI X3.106-1983 dành cho DES). Dƣ̣a và o việc xƣ̉ lý dƣ̃ liệu input của hệ mã ngƣời ta chia thành hai loại cơ chế sử dụng các hệ mã khối sau: 1. Các chế độ khối (Block Mode): xử lý các thông điệp theo các khối (ECB, CBC) 2. Các chế độ luồng, dòng (Stream Modes): xử lý các thông điệp nhƣ là một luồng bit/byte (CFB, OFB). Các chế độ khối thƣờng đƣợc sử dụng để mã hóa các dữ liệu mà chúng ta biết trƣớ c về vi ̣trí , độ lớ n trƣớ c khi mã hó a (chẳng hạn nhƣ cá c file , các email trƣớc khi cần
  • 78. Chƣơng III: Các hệ mã khóa bí mật 69 gƣ̉ i đi) trong khi cá c chế độ luồ ng thƣờ ng đƣợc sƣ̉ dụng cho việc mã hó a cá c dƣ̃ liệu không đƣợc biế t trƣớ c về độ lớ n cũng nhƣ vi ̣trí chẳng hạn nhƣ cá c tín hiệu gƣ̉ i về tƣ̀ vệ tinh hoặc cá c tín hiệu do một bộ cảm biế n đọc tƣ̀ bên ngoà i và o. Chú ý: DES, 3DES, AES (hay bất kỳ một thuật toán mã hóa khối nào khác) tạo thành một khối xây dựng cơ bản. Tuy nhiên để sử dụng chúng trong thực tế, chúng ta thường cần làm việc với các khối lượng dữ liệu không thể biết trước được, có thể chúng là một khối dữ liệu sẵn sàng ngay cho việc mã hóa(khi đó việc sử dụng mã hóa theo cơ chế khối là phù hợp), hoặc có thể chỉ được một vài bit, byte tại một thời điểm (khi đó sử dụng chế độ dòng là phù hợp). Vì thế các cơ chế sử dụng mã khối được trình bày trong phần này là riêng cho DES nhưng cũng được á p dụng tương tự cho cá c hệ mã khố i khá c. 2.6.2. Cơ chế bả ng tra mã điện tƣ̉ ECB (Electronic CodeBook Book) Thông điệp cầ n mã hó a đƣợc chia thành các khối độc lập để mã hóa, mỗi khố i bản mã là kết quả của việc mã hó a riêng biệt khố i bản rõ tƣơng ƣ́ ng vớ i nó và độc lập vớ i khố i khác. Cách làm việc này giống nhƣ chúng ta thay thế các khối bản mã bằng các khối bản rõ tƣơng ứng nên có tên gọi là bảng tra mã điện tử. P = P1P2…PN Mã hóa: Ci = DESK(Pi), kế t quả bản mã là C = C1C2..CN. Quá trình giải mã tiến hành ngƣợc lại: Pi = DES-1 K(Ci). Mã hóa P P1 P2 Pn C1 C2 Cn E E E C K Giải mã C C1 C2 Cn P1 P2 Pn D D D P K Hình 3.14: Cơ chế ECB ECB là chế độ sử dụng đơn giản và dễ cài đặt nhất, đƣợc sử dụng khi chỉ một khối đơn thông tin cần đƣợc gửi đi (chẳng hạn nhƣ một khóa session đƣợc mã hóa bằng cách dùng một khóa chính). Do trong ECB các khối bản rõ đƣợc mã hóa độc lập nên làm nảy sinh một số nhƣợc điểm sau: các lặp lại của thông điệp có thể đƣợc thể hiện trên bản mã, nghĩa là nếu có các bản rõ giống nhau thì tƣơng ứng các bản mã giống nhau , điều nà y đặc biệt thể hiện rõ với các dữ liệu lặp lại nhiều chẳng hạn nhƣ các dữ liệu hình ảnh. Việc để lộ tính lặp lại của bản rõ có thể dẫn tới các tấn công theo phƣơng pháp phân tích thống kê . Hơn nƣ̃a các bản mã có thể bị giả mạo bằng cách thêm một số khối bản mã giả vào kết quả mã hóa, bên nhận sẽ không phá t hi ện ra sự giả mạo này. Bên cạnh đó việc mã hóa các khối thông điệp là độc lập làm suy yếu DES. Trên thƣ̣c tế ECB chỉ thực sự có ích khi gửi một khối dữ liệu nhỏ.
  • 79. Chƣơng III: Các hệ mã khóa bí mật 70 2.6.3. Cơ chế mã mó c xích CBC - Cipher Block Chaining Để vƣợt qua các vấn đề về sự lặp lại và yêu cầu độc lập trong ECB , chúng ta cần một vài cách để làm cho bản mã phụ thuộc vào tất cả các khối trƣớc nó . Đó này chính là điều mà CBC cung cấp cho chúng ta bằng cách kết hợp khối bản rõ trƣớc với khối thông điệp hiện tại trƣớc khi mã hóa. Cũng giống nhƣ cơ chế EBC trong cơ chế CBC bản rõ sẽ đƣợc chia thành các khối nhƣng sẽ đƣợc liên kết với nhau trong quá trình mã hóa để tạo thành bản rõ . Chính vì các khối bản mã đƣợc móc xích với bản rõ và vì thế chế độ này có tên là CBC CBC sử dụng một vector khởi tạo IV (Initial Vector) để bắt đầu: C0 = IV, P = P1P2..PN Mã hóa: Ci = DESK (Pi  Ci-1), C = C1C2..CN Giải mã: Pi = DES-1 K(Ci)  Ci-1, P = P1P2..PN. Hình 3.15: Chế độ CBC Chế độ CBC phù hợp với các yêu cầu cần gửi các lƣợng lớn dữ liệu một cách an toàn (chẳng hạn nhƣ FTP, EMAIL, WEB) Trong CBC mỗi khối bản mã là phụ thuộc vào tất cả các khối thông điệp đứng trƣớc đó nên việc sai lệch một khố i bản rõ hoặc bản m ã nào đó cũng làm sai lệch kết quả mã hóa và giải mã tƣơng ứng . Khó khăn nhất trong việc sử dụng CBC chính là quản lý các giá trị IV sử dụng , thƣờ ng thì cả hai bên nhận và gửi đều biết (chẳng hạn nhƣ bằng 0) hoặc sẽ đƣợc khở i tạo bằ ng cá c giá tri ̣mớ i và gƣ̉ i cho bên nhận trƣớ c khi mã hó a . Tuy nhiên nếu IV bị tiết lộ kẻ tấn công có thể làm thay đổi các bit ở khối đầu tiên, vì thế có thể IV là một giá trị cố định hoặc đƣợc gửi đi sau khi đã mã hóa bằng ECB. 2.6.4. Chế độ mã phản hồi CFB (Cipher Feedback) và chế độ mã phản hồi đầu ra OFB (Output Feedback) Các chế độ luồng CFB và OFB đƣợc sử dụng để mã hóa các dữ liệu đƣợc cung cấ p rờ i rạc, thƣờ ng là cá c tín hiệu nhận đƣợc tƣ̀ vệ tinh hoặc do một bộ cảm biế n nà o đó truyền về . Chính vì dữ liệu đƣợc cung cấp rời rạc nên tại một thời điểm chúng ta không thể biế t trƣớ c độ lớ n và vi ̣trí dƣ̃ liệu sẽ đƣợc mã hó a . Do đó đố i vớ i cá c chế độ luồ ng x1 ek y1 IV=y0 x2 ek y2 y1 x1 IV=y0 dk y2 x2 dk Mã hoá Giải mã
  • 80. Chƣơng III: Các hệ mã khóa bí mật 71 input cho thuật toá n mã hó a đƣợc xem là một luồ ng cá c bit của bản rõ đƣợc lầ n lƣợt theo thờ i gian. Trong chế độ OFB và CFB dòng khoá đƣợc tạo ra sẽ đƣợc cộng modulo 2 với bản rõ. OFB thực sự là một hệ mã đồng bộ: dòng khoá đƣợc thành lập bởi việc tạo lập các vector khởi tạo 64 bit (vector IV). Ta xác định z0 = IV và tính dòng khoá z1z2 ... zn theo quy tắc zi = ek(zi-1) với i ≥ 1. Sau đó dãy bản rõ x1x2 ... xn sẽ đƣợc mã hoá bằng cách tính yi = xi  zi với i ≥ 1. Trong chế độ CFB, ta bắt đầu với y0 = IV (vector khởi tạo 64 bit) và tạo phần tử zi của dòng khoá bằng cách mã hoá khối bản mã trƣớc đó. Tức là zi = ek(yi-1) với i≥1 và yi = xi  zi với i≥1. Việc sử dụng CFB đƣợc mô tả bằng sơ đồ sau (ek trong trƣờng hợp này đƣợc sử dụng cho cả mã hoá và giải mã): Hình 3.16: Chế độ CFB Cũng có một vài dạng khác của OFB và CFB đƣợc gọi là chế độ phản hồi k-bit (1< k < 64). Ở đây ta đã mô tả chế độ phản hồi 64 bit. Các chế độ phản hồi 1-bit và 8-bit thƣờng đƣợc sử dụng cho phép mã hoá đồng thời 1 bit (hay byte) dữ liệu. Kỹ thuật cơ bản đƣợc sử dụng ở đây là một thanh ghi dịch 64 bit và mỗi bƣớc dịch đƣợc k-bit làm đầu vào cho mã hoá. K-bit bên trái của đầu vào hàm mã hoá đƣợc XOR với đơn vị đầu của block bản rõ tiếp theo để đƣa ra một đơn vị bản mã truyền đi và đơn vị này đƣợc đƣa lại vào k-bit bên phải của thanh ghi dịch. Quá trình xử lý tiếp tục cho tới khi tất cả đơn vị bản rõ đều đƣợc mã hoá. Điểm khác nhau giữa CFB và OFB là k-bit hồi tiếp cho bộ ghi dịch đƣợc lấy từ trƣớc hay sau bộ XOR (nếu lấy sau bộ XOR thì dữ liệu đã mã hoá ứng với CFB, còn lấy phía trƣớc thì là OFB). Nhìn chung , bốn chế độ của DES đều có những ƣu nhƣợc điểm riêng. Ở chế độ ECB và OFB, sự thay đổi của một khối bản rõ xi 64 bit sẽ làm thay đổi khối bản mã yi tƣơng ứng, nhƣng các khối bản khác thì không bị ảnh hƣởng. Trong một số tình huống, x1 y1 ek ekIV=y0 x2 y2 y1 x1 ek ekIV=y0 y2 x2 Giải mã Mã hoá
  • 81. Chƣơng III: Các hệ mã khóa bí mật 72 đây là một tính chất đáng mong muốn. Ví dụ nhƣ chế độ OFB thƣờng đƣợc dùng để mã hoá trong việc truyền tín hiệu qua vệ tinh. Mặt khác, ở chế độ CBC và CFB, nếu một khối bản rõ xi bị thay đổi thì yi và các khối tiếp theo sẽ bị ảnh hƣởng. Nhƣ vậy ở chế độ CBC và CFB có thể đƣợc sử dụng rất hiệu quả trong mục đích xác thực. Cũng vì lý do đó nên CFB thƣờ ng đƣợc dù ng để mã hó a trong cá c trƣờ ng hợp mà đƣờ ng truyền tố t, tín hiệu ít nhiễu. Đặc biệt hơn, các chế độ này dùng để tạo mã xác thực bản tin (MAC – Message Authentication Code). MAC đƣợc gắn thêm vào các khối bản rõ để thuyết phục R (receiver) rằng đây chính là dãy bản rõ đƣợc gửi từ S (sender) mà không phải một ai khác giả mạo. Nhƣ vậy MAC đảm bảo tính xác thực của bản tin. Ta sẽ mô tả cách sử dụng chế độ CBC để tạo MAC. Ta bắt đầu bằng vector khởi tạo IV chứa toàn số 0. Sau đó dùng chế độ CBC để tạo các khối bản mã y1y2...yn với khoá K. Cuối cùng ta xác định MAC là yn. Ngƣời gửi S (sender) sẽ phát đi khối bản rõ x1x2 ... xn cùng với MAC. Khi ngƣời nhận R (receiver) thu đƣợc x1x2 ... xn, anh ta sẽ khôi phục lại y1, y2, yn bằng khoá bí mật K và xác minh liệu yn có giống MAC của mình thu đƣợc hay không. Nếu một ngƣời thứ ba E (enemy) thu chặn đƣợc bản rõ x1x2 ... xn rõ ràng E không thể tạo ra MAC hợp lệ nếu không biết khoá bí mật K mà S và R đang dùng. Hơn nữa, nếu E thay đổi ít nhiều nội dung thì chắc chắn E không thể thay đổi đƣợc MAC để đƣợc R chấp nhận. Thông thƣờng ta muốn kết hợp cả tính xác thực lẫn độ bảo mật. Điều đó đƣợc thực hiện nhƣ sau: trƣớc tiên S dùng khoá K1 để tạo MAC cho dãy bản rõ x1x2... xn, sau đó S xác định xn+1 là MAC, rồi mã hoá dãy x1x2 ... xnxn+1 bằng khoá K2 để tạo dãy bản mã y1y2 ... ynyn+1. Khi R nhận đƣợc y1y2...ynyn+1, R sẽ giải mã bằng khoá K2 và sau đó kiểm tra xem xn+1 có phải là MAC (bằng khoá K1) của dãy bản rõ x1x2 ... xn hay không. 3. Bài tập Bài tập 3.1: Hãy giải mã bản mã đƣợc mã hóa bằng hệ mã Caesar sau (sƣ̉ dụng bảng chƣ̃ cá i tiếng Anh): WKXPEVXS. Bài tập 3.2 (khó): Thông điệp bí mật ẩn sau đoạn văn bản tiếng Anh sau là gì: “The supply of game for London is going steadily up. Head keeper Hudson, we believe, has been now told to receive all orders for fly paper and for preservations of your hen-pheasant's life.” Trích trong tác phẩm ”The Gloria Scott”. Bài tập 3.3: Sƣ̉ dụng bảng sau (hệ mã Freemason) để giải mã thông điệp: •• Bảng mã các ký tự: A B C D E F G H I
  • 82. Chƣơng III: Các hệ mã khóa bí mật 73 J K L M N• O• P• Q• R• S• T• U• V• W• X• Y• Z• Gợi ý: đây là một hệ mã thay thế tƣợng hình. Bài tập 3.4: Hãy tìm thông điệp bí mật ẩn giấu trong đoạn văn bản sau: Dear George, 3rd March Greetings to all at Oxford. Many thanks for your letter and for the Summer examination package. All Entry Forms and Fees Forms should be ready for final dispatch to the Syndicate by Friday 20th or at the very least, I‟m told, by the 21st. Admin has improved here, though there‟s room for improvement still; just give us all two or three more years and we‟ll really show you! Please don‟t let these wretched 16+ proposals destroy your basic O and A pattern. Certainly this sort of change, if implemented immediately, would bring chaos. Bài tập 3.5: Cho hệ mã Affine đƣợc cài đặt trên Z99. Khi đó khóa là các cặp (a, b) trong đó a, b  Z99 với (a, 99) = 1. Hàm mã hóa EK (x) = (a * x + b) mod 99 và hàm giải mã DK (x) = a-1 * (x – b) mod 99. a) Hãy xác định số khóa có thể đƣợc sử dụng cho hệ mã này. b) Nếu nhƣ khóa giải mã là K-1 = (16, 7), hãy thực hiện mã hóa xâu m = “DANGER”. Bài tập 3.6: Cho hệ mã Affine đƣợc cài đặt trên Z39. Khi đó khóa là các cặp (a, b) trong đó a, b  Z39 với (a, 39) = 1. Hàm mã hóa EK (x) = (a * x + b) mod 39 và hàm giải mã DK (x) = a-1 * (x – b) mod 39. a) Hãy xác định số khóa có thể đƣợc sử dụng cho hệ mã này. b) Nếu nhƣ khóa giải mã là K-1 = (23, 7), hãy thực hiện mã hóa xâu m = “ATTACK”. Bài tập 3.7: Cho hệ mã Affine đƣợc cài đặt trên Z55. Khi đó khóa là các cặp (a, b) trong đó a, b  Z55 với (a, 55) = 1. Hàm mã hóa EK (x) = (a * x + b) mod 55 và hàm giải mã DK (x) = a-1 * (x – b) mod 55. a) Hãy xác định số khóa có thể đƣợc sử dụng cho hệ mã này.
  • 83. Chƣơng III: Các hệ mã khóa bí mật 74 b) Khóa giải mã là K-1 = (13, 17), hãy xác định khóa mã hóa. Bài tập 3.8: Giả sử hệ mã Affine đƣợc cài đặt trên Z99. a) Hãy xác định só khóa có thể có của hệ mã. b) Giả sử khóa mã hó a là (16, 7), hãy xác định khóa giải mã. Bài tập 3.9: Giả sử hệ mã Affine đƣợc cài đặt trên Z126. a) Hãy xác định só khóa có thể có của hệ mã. b) Giả sử khóa mã hóa là (23, 7), hãy xác định khóa giải mã. Bài tập 3.10: Cho hệ mã Hill có M = 2. a) Ma trận A =       1713 35 có thể đƣợc sử dụng làm khóa cho hệ mã trên không giải thích. b) Cho A =       73 512 hãy thực hiện mã hóa và giải mã với xâu S = “HARD”. Bài tập 3.11: Cho hệ mã Hill có M = 2. a) Ma trận A =       a11 35 đƣợc sử dụng làm khóa cho hệ mã trên. Hãy tìm tất cả các khóa có thể sử dụng của hệ mã trên. b) Giả sử ngƣời ta sử dụng hệ mã trên để mã hóa bản rõ P = “EASY” và thu đƣợc bản mã là “UMQA”. Hãy thực hiện giải mã với bản mã là C = “MCDZUZ” và đƣa ra bản rõ. Bài tập 3.12: Cho hệ mã Hill có M = 2. a) Ma trận A =       a7 1315 đƣợc sử dụng làm khóa cho hệ mã trên. Hãy tìm tất cả các khóa có thể sử dụng của hệ mã trên. b) Giả sử ngƣời ta sử dụng hệ mã trên để mã hóa bản rõ P = “MARS” và thu đƣợc bản mã là “YARH”. Hãy thực hiện giải mã với bản mã là C = “MANNTF” và đƣa ra bản rõ. Bài tập 3.13: Cho hệ mã Vigenere có M = 6, K = “CIPHER”. a) Hãy thực hiện mã hóa xâu P = “THIS IS MY TEST“. b) Hãy thực hiện giải mã xâu M = “EICJIC RTPUEI GBGLEK CBDUGV”. Bài tập 3.14: Cho hệ mã Vigenere có M = 6. Mã hóa xâu P = “THIS IS MY TEST“ ngƣời ta thu đƣợc bản mã là “LLKJML ECVVWM”. a) Hãy tìm khóa mã hóa đã dùng của hệ mã trên. b) Dùng khóa tìm đƣợc ở phần trên hãy giải mã bản mã C = “KLGZWT OMBRVW”.
  • 84. Chƣơng III: Các hệ mã khóa bí mật 75 Bài tập 3.15: Cho hệ mã Vigenere có M = 6. Mã hóa xâu P = “SPIRIT“ ngƣời ta thu đƣợc bản mã là “OXHRZW”. a) Hãy tìm khóa mã hóa đã dùng của hệ mã trên. b) Dùng khóa tìm đƣợc ở phần trên hãy giải mã bản mã C = “BQETYH HMBEEW”. Bài tập 3.16: Cho hệ mã Vigenere có M = 6. Giải mã xâu C = “RANJLV” ngƣời ta thu đƣợc bản rõ là “CIPHER”. a) Tìm khóa đã sử dụng của hệ mã trên. b) Dùng khóa tìm đƣợc ở phần trên hãy hãy giải mã xâu M = “PLDKCI DUJQJO“. Bài tập 3.17: Phƣơng phá p mã hó a thay thế đơn giản Đoạn văn bản sau đƣợc mã hó a bằ ng cá ch sƣ̉ dụng một phƣơng phá p mã hó a thay thế đơn giản. Bản rõ là một phần của một văn bản tiếng Anh viết hoa, bỏ qua các dấu câu. Hãy sử dụng bảng thống kê tần suất xuất hiện của các chữ cái trong tiếng Anh để giải mã bản mã đã cho. ODQSOCL OW GIU BOEE QRROHOCS QV GIUR KIA QF Q DQCQSLR WIR ICL IW CQFQF EIYQE YIDJUVLR FGFVLDF GIU SLV OCVI GIUR IWWOYL IC VXQV DICPQG DIRCOCS VI WOCP VXL JXICLF ROCSOCS LHLRG YQEELR OF Q POFVRQUSXV YICWUFLP CQFQ BIRMLR QCP LHLRG YQEELR QFFURLF GIU VXQV XOF IR XLR WOEL IR QYYIUCVOCS RLYIRP IR RLFLQRYX JRIKLYV LHLRG ICL IW BXOYX OF DOFFOCS WRID VXL YIDJUVLR FGFVLD OF QAFIEUVLEG HOVQE Bảng thống kê tần suất xuất hiện của các chữ cái trong tiế ng Anh: Chƣ̃ cá i Tầ n suấ t Chƣ̃ cá i Tầ n suấ t Chƣ̃ cá i Tầ n suấ t A 8.2 % J 0.2 % S 6.3 % B 1.5 % K 08 % T 9.1 % C 2.8 % L 4.0 % U 2.8 % D 4.3 % M 2.4 % V 1.0 % E 12.7 % N 6.7 % W 2.3 % F 2.2 % O 7.5 % X 0.1 % G 2.0 % P 1.9 % Y 2.0 % H 6.1 % Q 0.1 % Z 0.1 % I 7.0 % R 6.0 % Bài tập 3.18: Cho bản mã sau: EYMHP GZYHH PTIAP QIHPH YIRMQ EYPXQ FIQHI AHYIW ISITK MHXQZ PNMQQ XFIKJ MKXIJ RIKIU XSSXQ ZEPGS ATIHP PSXZY H
  • 85. Chƣơng III: Các hệ mã khóa bí mật 76 Biết rằ ng bảng chƣ̃ cá i sƣ̉ dụng là tiếng Anh, hãy thực hiện các yêu cầu sau: a) Hãy đƣa ra bảng phân phối tần suất của các chữ cái trong bản mã trên. b) Giả sử bản mã trên nhận đƣợc bằng cách sử dụng phƣơng pháp mã hóa đổi chỗ hoặc thay thế đơn âm, hãy dựa vào bảng phân phối tần suất ở phần a để xác định xem khả năng nà o là cao hơn (hệ mã đổi chỗ hay thay thế đơn âm)? c) Hãy xác định bản rõ nếu nhƣ phần bắt đầu của bản rõ là “What ought …”. d) Giải thích cách thành lập khóa của hệ mã. Bài tập 3.19 (khó): Hãy giải mã bản mã đƣợc mã hóa bằng hệ mã Vigenere sau, xác định độ khóa sử dụng biết rằng bản rõ gồm các chữ cái trong bảng mã tiếng Anh. IGDLK MJSGC FMGEP PLYRC IGDLA TYBMR KDYVY XJGMR TDSVK ZCCWG ZRRIP UERXY EEYHEUTOWSERYWC QRRIP UERXJ QREWQ FPSZC ALDSD ULSWF FFOAM DIGIY DCSRR AZSRB GNDLC ZYDMMZQGSS ZBCXM OYBID APRMK IFYWF MJVLY HCLSP ZCDLC NYDXJ QYXHDAPRMQ IGNSU MLNLG EMBTF MLDSB AYVPU TGMLK MWKGF UCFIY ZBMLC DGCLY VSCXY ZBVEQ FGXKN QYMIY YMXKM GPCIJ HCCEL PUSXF MJVRY FGYRQ Sƣ̉ dụng một trong cá c ngôn ngƣ̃ lập trình C, C++, Java hoặc C# để làm các bài tập sau: Bài tập 3.20: Viế t chƣơng trình đếm tần số xuất hiện của các chữ cái tiếng Anh trong một văn bản tiế ng Anh ở dạng file text. Bài tập 3.21: Viế t chƣơng trình đếm tần số xuất hiện của các chữ cái tiếng Việt trong một văn bản tiế ng Việt ở dạng file RTF. Bài tập 3.22: Viế t chƣơng trình cà i đặt thuật toá n mã hóa và giải mã của hệ mã Ceasar. Bài tập 3.23: Viế t chƣơng trình cà i đặt thuật toá n mã hó a và giải mã của hệ mã Affine. Bài tập 3.24: Viế t chƣơng trình tính đi ̣nh thƣ́ c của ma trận vuông cấ p N (N < 20). Bài tập 3.25: Viế t chƣơng trình cà i đặt thuật toá n mã hóa và giải mã của hệ mã Hill. Bài tập 3.26: Viế t chƣơng trình cà i đặt thuật toá n mã hó a và giải mã của hệ mã Vigenere. Bài tập 3.27: Viế t chƣơng trình mã hó a và giải mã file theo hệ mã DES vớ i cá c cơ chế mã hóa ECB, CBC. Bài tập 3.28: Viế t chƣơng trình mã hó a và giải mã file theo hệ mã AES vớ i cá c cơ chế mã hóa ECB, CBC.
  • 86. Chƣơng IV: Các hệ mã mật khóa công khai 77 CHƢƠNG IV: CÁC HỆ MÃ MẬT KHÓA CÔNG KHAI Trong cá c hệ mã mật khó a bí mật nế u chú ng ta biế t khó a và hà m mã hó a chú ng ta có thể tìm đƣợc khóa và hàm giải mã một cách nhanh chóng (thờ i gian đa thƣ́ c). Một hệ mã mật khó a bí mật là một hệ mã mật mà tấ t cả mọi ngƣờ i đề u biế t hà m mã hóa và khóa mã hóa nhƣng không tồn tại một t huật toá n thờ i gian đa thƣ́ c để có thể tính đƣợc khó a giải mã tƣ̀ cá c thông tin đó. 1. Khái niệm hệ mã mật khóa công khai Các hệ mã đƣợc trình bà y trong cá c chƣơng trƣớ c đƣợc gọi là cá c hệ mã khó a bí mật, khóa đối xứng, hay cá c hệ mã truyền thố ng (conventional). Các hệ mã này có các điểm yếu sau đây:  Nế u số lƣợng ngƣờ i sƣ̉ dụng lớn thì số khóa sẽ tăng rấ t nhanh, chẳng hạn vớ i n ngƣờ i sƣ̉ dụng thì số khó a sẽ là n *(n-1)/2 do đó rấ t khó quản lý, phƣ́ c tạp và không an toà n.  Dƣ̣a trên cá c hệ mã nà y không thể xây dƣ̣ng cá c khá i niệm và di ̣ch vụ nhƣ chƣ̃ ký điện tử, dịch vụ xác thực hóa ngƣời dùng cho các ứng dụng thƣơng mại điện tƣ̉ . Vào năm 1975 Diffie và Hellman trong một công trình của mình (một bà i bá o) đã đề xuấ t ra cá c ý tƣở ng cho phé p xây dƣ̣ng lên cá c hệ mã hoạt động theo cá c nguyên tắ c mớ i gắn liề n vớ i cá c bên truyề n tin chƣ́ không gắn vớ i cá c cặp truyề n tin. Nguyên tắ c hoạt động của cá c hệ mã là mỗi bên tham gia truyề n tin sẽ có 2 khóa, một khó a gọi là khó a bí mật và một khó a đƣợc gọi là khó a công khai. Khóa bí mật là khóa dùng để giải mã và đƣợc giữ bí mật (KS), khóa công khai là khóa dùng để sinh mã đƣợc công khai hó a để bấ t cƣ́ ai cũng có thể sƣ̉ dụng khó a nà y gƣ̉ i tin cho ngƣờ i chủ của hệ mã (KP). Ngày nay chúng ta có thể thấy rất rõ nguyên tắc này trong việc gửi email , mọi ngƣờ i đều có thể gƣ̉ i email tớ i một đi ̣a chỉ email nà o đó , nhƣng chỉ có ngƣờ i chủ sở hƣ̃u của địa chỉ email đó mới có thể đọc đƣợc nội dung của bức thƣ , còn những ngƣời khác thì không. Vớ i cá c hệ mã khó a công khai việc phân phố i khó a sẽ trở nên dễ dà ng hơn qua cá c kênh cung cấ p khó a công cộng , số lƣợng khó a hệ thố ng quản lý cũng sẽ ít hơn (là n khóa cho n ngƣời dùng). Các dịch vụ mới nhƣ chữ ký điện tử, thỏa thuận khóa cũng đƣợc xây dƣ̣ng dƣ̣a trên cá c hệ mã nà y. Các yêu cầu của loại hệ mã này: - Việc sinh KP, KS phải dễ dàng - Việc tính E(KP, M) là dễ dàng - Nế u có C = E(KP, M) và KS thì việc tìm bản rõ cũng là dễ - Nế u biế t KP thì việc dò tìm KS là khó - Việc khôi phục bả n rõ tƣ̀ bản mã là rấ t khó Khi A muố n truyề n tin cho B , A sẽ sƣ̉ dụng khó a K P của B để mã hóa tin tức và truyền bản mã tớ i cho B, B sẽ sƣ̉ dụng khó a bí mật của mình để giải mã và đọc tin:
  • 87. Chƣơng IV: Các hệ mã mật khóa công khai 78 Hình 4.1: Mô hình sƣ̉ dụng 1 của các hệ mã khóa công khai PKC Ciphertext = E(KP,Plaintext) ,Plantext = D(KS, E(KP,Plaintext)) (1) Hình 4.2: Mô hình sƣ̉ dụng 2 của các hệ mã khóa công khai PKC Ciphertext = D(KS, Plaintext), Plaintext = E(KP, D(KS, Plaintext)) (2) Mô hình (2) đƣợc sƣ̉ dụng c ho cá c hệ chƣ̃ ký điện tƣ̉ cò n mô hình (1) đƣợc sƣ̉ dụng cho các hệ mã mật . Các hệ mã này đƣợc gọi là các hệ mã khóa công khai PKC (Public Key Cryptosystems) hay cá c hệ mã bấ t đố i xƣ́ ng (Asymmetric Encryption Scheme). 2. Nguyên tắc cấu tạo củ a cá c hệ mã mật khó a công khai Các hệ mã khóa công khai đƣợc xây dựng dựa trên các hàm đƣợc gọi là các hàm 1 phía hay hàm 1 chiề u (one–way functions). Hàm một chiều f : X  Y là m một hà m mà nếu biế t x  X ta có thể dễ dà ng tính đƣợc y = f(x). Nhƣng vớ i y bấ t kỳ  Y việc tìm x  X sao cho y = f(x) là khó. Có nghĩa là việc tìm hà m ngƣợc f-1 là rất khó. Ví dụ nếu chúng ta có các số nguyên tố P 1, P2, ..., Pn thì việc tính N = P1 * P2 * ... * Pn là dễ nhƣng nếu có N thì việc phân tích ngƣợc lại là một bài toán khó với N lớn. Để thuận tiện cá c hà m một phía đƣợc sƣ̉ dụng trong c ác hệ mã PKC thƣờng đƣợc trang bi ̣cá c cƣ̉ a bẫy (trapdoor) giúp cho việc tìm x thỏa mã y = f(x) là dễ dàng nếu chúng ta biế t đƣợc cƣ̉ a bẫy nà y. Hàm của bẫy (trapdoor function): là một hàm một chiều trong đó việc tính f -1 là rấ t nhanh khi chú ng ta biết đƣợc cƣ̉ a bẫy của hà m . Ví dụ việc tìm nghiệm của bài toán xếp balô 0/1 trong hệ mã xếp balô Knapsack mà chú ng ta sẽ học trong phầ n tiếp theo là một hàm một phía (việc mã hó a rấ t nhanh và dễ d àng nhƣng tìm vectơ nghiệm tƣơng ứng là khó) nhƣng nế u ta biế t cƣ̉ a bẫy (Vectơ xếp balô siêu tăng A‟ ) thì việc giải bài toán lại rất dễ dà ng. 3. Một số hệ mã khó a công khai 3.1. Hệ mã knapsack Bài toán xếp ba lô tổng quát: Khóa công khai (KP) Khóa bí mật (KS) Mã hóa Giải mã Plaintext Plaintext Ciphertext A B Mã hóa Giải mã Plaintext Khóa bí mật (KS) Khóa công khai (KP) Plaintext Signed Message A B
  • 88. Chƣơng IV: Các hệ mã mật khóa công khai 79 Cho M, N và A1, A2, ...., AN là các số nguyên dƣơng tìm các số xi không âm sao cho: M = 1 * N i i i x A   Vecto A = (A1, A2, ..., AN) đƣợc gọi là vecto xế p balô cò n vectơ X = (x1, x2, …, xN) là vectơ nghiệm. Một trƣờ ng hợp riêng đá ng quan tâm của bà i toá n xếp ba lô tổng quá t là trƣờ ng hợp mà xi  {0, 1}. Khi đó ta có bà i toá n xế p ba lô 0, 1. Vecto xế p ba lô siêu tăng : Trong trƣờ ng hợp vecto (A1, A2, ..., AN) đƣợc sắp lại thành (A‟1, A‟2, ..., A‟N) sao cho:  i ta có : ' j j i A   < A‟i thì vecto (A1, A2, ..., AN) đƣợc gọi là vecto xế p balo siêu tăng. Khi (A1, A2, ..., AN) là một vecto xếp balo siêu tăng ta có ngay tính chấ t: M >= A‟i  i. Do đó việc giải bà i toá n xế p ba lô 0/1 trở nên dễ dà ng hơn rấ t nhiề u. Hệ mã knapsack do Merkle và Hellman đƣa ra và o năm 1978. Cách xây dựng: 1. Chọn 1 vecto siêu tăng A‟ = (a‟ 1, a‟ 2, ..., a‟ N), chọn 1 số M > 2 * a‟ N, chọn ngẫu nhiên 1 số u < M và (u, M) = 1 2. Xây dƣ̣ng Vecto A = (a1, a2, ..., aN) trong đó ai = (a‟ i * u) mod M 3. Khóa: KP = (A, M), KS = (u, u-1 ) 4. Không gian cá c bản rõ là không gian mọi dãy N bit P = (x1, x2, ..., xn). Mã hóa: C = ( 1 * N i i i a x   )mod M Giải mã: tính C‟ = C * u-1 mod M sau đó giải bài toán xếp ba lô 0/1 vớ i A‟ , C‟ tƣ̀ đó tìm đƣợc P = (x1, x2, ..., xn). Ví dụ 1: Cho hệ mã Knapsack có A‟ = (2, 3, 6, 12, 25), N = 5, M = 53, u = 46, u-1 = 15. a) Hãy tìm các khóa của hệ mã trên b) Mã hóa và giải mã bản mã tƣơng ứng của bản rõ M = 01001. 3.2. Hệ mã RSA Hệ mã RSA đƣợc đặt tên dƣ̣a theo cá c chƣ̃ cá i đầ u của 3 tác giả của hệ mã là Rivest, Shamir và Adleman. Đây là thuật toán mã hóa nổi tiếng nhất và cũng là thuật toán đƣợc ứng dụng thực tế nhất. Để cài đặt RSA ban đầu mỗi ngƣời dùng sinh khóa công khai và khóa bí mật của mình bằng cách:
  • 89. Chƣơng IV: Các hệ mã mật khóa công khai 80  chọn hai số nguyên tố lớn ngẫu nhiên (cỡ gần 100 chữ số) khác nhau p và q  tính N = p*q  chọn một số e nhỏ hơn N và (e, (N)) = 1, e đƣợc gọi là số mũ lập mã  tìm phần tử ngƣợc của e trên vành module (N), d là số mũ giải mã  khóa công khai là KP = (e, N)  khóa bí mật là KS = K-1 P = (d, p, q) Việc thiết lập khóa này đƣợc thực hiện 1 lần khi một ngƣời dùng thiết lập (thay thế) khóa công khai của họ. Mũ e thƣờng là khá nhỏ (đễ mã hóa nhanh), và phải là nguyên tố cùng nhau với (N). Các giá trị thƣờng đƣợc chọn cho e là 3 hoặc 216 – 1 = 65535. Tuy nhiên khi e nhỏ thì d sẽ tƣơng đố i lớ n . Khoá bí mật là (d, p, q). Các số p và q thƣờng có giá trị xấp xỉ nhau nhƣng không đƣợc bằng nhau . Chú ý là việc để lộ một trong các thành phần trên sẽ làm cho hệ mã hóa trở thành không an toà n. Sử dụng RSA  để mã hóa một thông điệp M: C = Me (mod N) (0<= M < N)  giải mã: M = Cd (mod N) Thuật toán mã hóa RSA làm việc đƣợc bởi vì nó dựa trên cơ sở toán học là sự tổng quát định lý Ferma nhỏ của Ơclit: X(N) = 1 (mod N). Trong thuật toán RSA chúng ta chọn e và d là nghịch đảo của nhau trên vành Z(N) với e đƣợc chọn trƣớc. Do đó chúng ta sẽ có e.d  1 mod (N), suy ra: M = Cd = M e.d = M1+q.(N) = M . (M(N) )q = M mod N Công thức này đảm bảo việc giải mã sẽ cho kết quả đúng là bản rõ ban đầu (chú ý là điều này chỉ đúng khi p khác q). Ví dụ 1: Cho hệ mã RSA có N = p*q = 11 * 47 = 517, e = 3.  Hãy tìm các khóa công khai và bí mật của hệ mã trên  Mã hóa bản rõ M = 26. Đầu tiên ta tính đƣợc (N) = 460 = 10 * 46, do (3,460) = 1 nên áp dụng thuật toá n Ơclit mở rộng ta tìm đƣợc d = 307. Vậy khóa công khai của hệ mã KP = (e, N) = (3, 517), khóa bí mật là KS = (d, p, q) = (307, 11, 47). Mã hóa M = 26 ta có C = Me mod N = 263 mod 517 = 515. Độ an toàn của RSA Độ an toàn của RSA phụ thuộc vào độ khó của việc tính (N) và điều này đòi hỏi chúng ta cần phân tích N ra thừa số nguyên tố. Thuật toán phân tích số nguyên tố hiệu quả nhất hiện nay là Brent-Pollard, chúng ta hãy xem xét bảng thống kê sau để thấy đƣợc tốc độ hoạt động của nó: Số chữ số trong hệ thập phân của N Số các thao tác Bit để phân tích N
  • 90. Chƣơng IV: Các hệ mã mật khóa công khai 81 20 7.20e+03 40 3.11e+06 60 4.63e+08 80 3.72e+10 100 1.97e+12 120 7.69e+13 140 2.35e+15 160 5.92e+16 180 1.26e+18 200 2.36e+19 Bảng 4.1: Tố c độ của thuật toá n Brent-Pollard Các nghiên cứu về vấn đề phân tích các số nguyên lớn hiện nay tiến triển rất chậm, các tiến bộ lớn nhất cũng chỉ là các cải tiến về thuật toán và có thể nói rằng trừ khi có các đột phá trong việc phân tích các số 1024 bit, RSA là an toàn trong thời điểm hiện nay. Các nhà mật mã học phát minh ra hệ mã RSA đã đƣa ra một giải thƣởng trị giá 100 $ vào năm 1977. Đó là một hệ mã với số N có 129 chữ số, thách thức này đã đƣợc phá. Trên thực tế để cài đặt RSA cần phải thực hiện các thao tác modulo với các số 300 chữ số (hay 1024 bit) mà hiện nay các máy tính mới chỉ thao tác với các số nguyên 64 bit, điều này dẫn đến nhu cầu cần các thƣ viện số học nhân chính xác để làm việc với các số nguyên lớn này. Ngoài ra việc sử dụng RSA cần tới các số nguyên tố lớn nên chúng ta cũng phải có một cơ sở dữ liệu các số nguyên tố. Để tăng tốc cho RSA chúng ta có thể sử dụng một số phƣơng pháp khác chẳng hạn nhƣ cải tiến các phép tính toán nhân hai số lớn hoặc tăng tốc việc tìm bản mã, bản rõ. Đối với phép nhân 2 số n bit thông thƣờng chúng ta cần thực hiện O(n2 ) phép tính bit. Thuật toán nhân các số nguyên Schonhage – Strassen cho phép chúng ta thực hiện phép nhân 2 số với độ phức tạp là O(n log n) với các bƣớc nhƣ sau:  Chia mỗi số nguyên thành các khối, sử dụng các khối này nhƣ các hệ số của một đa thức.  Tính các đa thức này tại một số các điểm thích hợp, và nhân các kết quả thu đƣợc.  Nội suy các kết quả này hình thành các hệ số của đa thức tích  Kết hợp các hệ số để hình thành nên tích của hai số ban đầu  Biến đổi Fourier rời rạc, và lý thuyết chặp có thể đƣợc sử dụng để tăng tốc độ của quá trình nội suy.
  • 91. Chƣơng IV: Các hệ mã mật khóa công khai 82 Một cách khác nữa để tăng tốc việc nhân các số lớn trong hệ mã RSA là sử dụng các phần cứng chuyên dụng với các thuật toán song song. Nhƣ đã trình bày ở phần trƣớc khi mã hóa chúng ta thƣờng chọn e nhỏ để đẩy nhanh quá trình mã hóa nhƣng điều này cũng đồng nghĩa là việc giải mã sẽ chậm do số mũ lớn. Một cải tiến đáng kể trong tốc độ giải mã RSA có thể nhận đƣợc bằng cách sử dụng định lý phần dƣ Trung Hoa làm việc với modulo p và q tƣơng ứng thay vì N. Vì p và q chỉ bằng một nửa của N nên tính toán sẽ nhanh hơn nhiều. Định lý phần dƣ Trung Hoa đƣợc sử dụng trong RSA bằng cách tạo ra hai phƣơng trình từ việc giải mã M = Cd (mod N) nhƣ sau: M1 = M mod p = (C mod p)d mod (p-1) M2 = M mod q = (C mod q)d mod (q-1) Sau đó ta giải hệ: M = M1 mod p M = M2 mod q Hệ này có nghiệm duy nhất theo định lý phần dƣ Trung Hoa M = [(M2 + q – M1)u mod q] p + M1 Trong đó p.u mod q = 1 Việc sử dụng định lý phần dƣ Trung Hoa là một phƣơng pháp đƣợc sử dụng rộng rãi và phổ biến để tăng tốc độ giải mã của RSA. Hiện tƣợng lộ bả n rõ Một hiện tƣợng cầ n lƣu ý kh i sƣ̉ dụng cá c hệ mã RSA là hiện tƣợng lộ bản rõ . Ta hãy xét hệ mã RSA có N = p*q = 5*7, e = 17, khi đó vớ i M = 6 ta có C = 617 mod N = 6. Tƣơng tƣ̣ vớ i hệ mã RSA có N = p*q = 109*97, e = 865, vớ i mọi M ta đề u có M e mod N = M. Theo tính toá n thì vớ i một hệ mã RSA có N = p*q và e bấ t kỳ , số lƣợng bản rõ sẽ bi ̣ lộ khi mã hó a sẽ là (1 + (e-1, p-1))*(1 + (e-1, q-1)). Trong số cá c hệ mã khó a công khai thì có lẽ hệ mã RSA (cho tớ i thờ i điểm hiện tại) là hệ mã đƣợc sử dụng rộng rãi nhất.Tuy nhiên do khi là m việc vớ i dƣ̃ liệu đầ u và o (thông điệp mã hó a , bản rõ) lớ n thì khố i lƣợng tính toá n rấ t lớ n nên trên thƣ̣c tế ngƣờ i ta hay dùng hệ mã này để mã hóa các dữ liệu c ó kích thƣớc nhỏ, hoặc có yêu cầ u bảo mật cao, chẳng hạn nhƣ cá c khó a phiên (session key) trong cá c phiên truyề n tin . Khi đó hệ mã RSA sẽ đƣợc sƣ̉ dụng kế t hợp vớ i một hệ mã khố i khá c , chẳng hạn nhƣ AES , theo mô hình lai ghép nhƣ sau:
  • 92. Chƣơng IV: Các hệ mã mật khóa công khai 83 B - ngƣời nhận RSA Khóa công khai của B Khóa phiên K C1 RSA Khóa bí mật của B C1 Khóa phiên K AESP C2 AES C2 P A - ngƣời gửi Hình 4.3: Mô hình ƣ́ ng dụng lai ghép RSA vớ i cá c hệ mã khố i 3.3. Hệ mã El Gamal Hệ mã El Gamal là một biến thể của sơ đồ phân phối khoá Diffie – Hellman. Hệ mã này đƣợc El Gamal đƣa ra vào năm 1985. Giống nhƣ sơ đồ phân phối khóa Diffie – Hellman tính an toàn của nó dựa trên tính khó giải của bài toán logarit rời rạc. Nhƣợc điểm chính của nó là kích thƣớc thông tin sau khi mã hóa gửi đi sẽ tăng gấp đôi so với thông tin gốc. Tuy nhiên so với RSA, El Gamal không có nhiều rắc rối về vấn đề bản quyền sử dụng. Ban đầu ngƣời ta sẽ chọn một số nguyên tố lớn p và hai số nguyên tuỳ ý nhỏ hơn p là a (a là một phầ n tƣ̉ nguyên thủy của Z* P) và x (x là của ngƣời nhận, bí mật) sau đó tính: y = ax mod p Để mã hóa một thông điệp M (là một số nguyên trên ZP) thành bản mã C ngƣời gửi chọn một số ngẫu nhiên k nhỏ hơn p và tính khóa mã hóa K: K = yk mod p Sau đó tính cặp bản mã:  C1 = ak mod p  C2 = K.M mod p Và gửi bản mã C = (C1, C2) đi (chú ý là sau đó k sẽ bị huỷ). Để giải mã thông điệp đầu tiên ta cần tính lại khóa mã hóa thông điệp K: K = C1 x mod p = ak.x mod p Sau đó tính M bằng cách giải phƣơng trình sau đây: M = C2 . K-1 mod p Việc giải mã bao gồm việc tính lại khóa tạm thời K (rất giống với mô hình của Diffie – Hellman đƣa ra). Khóa công khai của hệ mã là (p, a, y), khóa bí mật là x. Ví dụ: Cho hệ mã El Gamal có P = 97, a = 5, x = 58.
  • 93. Chƣơng IV: Các hệ mã mật khóa công khai 84  Tìm khóa của hệ mã trên.  Mã hóa bản rõ M = 3 với k đƣợc chọn bằng 36. Trƣớc hết ta tính y = 558 mod 97 = 44, từ đó suy ra KP = (P, a, y) = (97, 5, 44) và KS = (58). Để mã hóa thông điệp M = 3 ta tính khóa K = 4436 mod 97 = 75 sau đó tính:  C1 = 536 = 50 mod 97  C2 = 75.3 mod 97 = 31 mod 97 Vậy bản mã thu đƣợc là C = (50, 31). Vấn đề đối với các hệ mã khóa công khai nói chung và El Gamal nói riêng là tốc độ (do phải làm việc với các số nguyên lớn), bên cạnh đó dung lƣợng bộ nhớ dành cho việc lƣu trữ các khóa cũng lớn. Với hệ mã El Gamal chúng ta cần gấp đôi bộ nhớ để chứa bản mã so với các hệ mã khác. Ngoài ra do việc sử dụng các số nguyên tố nên việc sinh khóa và quản lý khóa cũng khó khăn hơn với các hệ mã khối. Trên thực tế các hệ mã khóa công khai thƣờng đƣợc sử dụng kết hợp với các hệ mã khối (mã hóa khóa của hệ mã) hoặc để mã hóa các thông tin có dung lƣợng nhỏ và là một phần quan trọng của một phiên truyền tin nào đó. Thám mã đối với hệ mã El Gamal Để thƣ̣c hiện thá m mã hệ mã El Gamal chú ng ta cầ n giải bà i toá n Logaritm rờ i rạc . Ở đây chúng ta sẽ xem xét hai thuật toán có thể áp d ụng để giải bài toán này , vớ i độ phƣ́ c tạp và khả năng á p dụng khá c nhau. Thuật toá n Shank Thuật toá n nà y cò n có tên khá c là thuật toá n cân bằ ng thờ i gian – bộ nhớ (Time- Memory Trade Off), có nghĩa là nếu chúng ta có đủ bộ nhớ thì có thể sƣ̉ dụng bộ nhớ đó để làm giảm thời gian thực hiện của thuật toán xuống. Input: số nguyên tố p, phầ n tƣ̉ nguyên thủy a của * pZ , số nguyên y. Output: cầ n tìm x sao cho ax mod p = y. Thuật toán: Gọi m = [(p-1)1/2 ] (lấ y phầ n nguyên). Bƣớ c 1: Tính amj mod p vớ i 0 ≤ j ≤ m-1. Bƣớ c 2: Sắp xếp cá c cặp (j, amj mod p) theo amj mod p và lƣu và o danh sá ch L1. Bƣớ c 3: Tính ya-i mod p vớ i 0 ≤ i ≤ m-1. Bƣớ c 4: Sắp xếp cá c cặp (i, ya-i mod p) theo amj mod p và lƣu và o danh sá ch L2. Bƣớ c 5: Tìm trong hai danh sách L1 và L2 xem có tồ n tại cặp (j, amj mod p) và (i, ya-i mod p) nào mà amj mod p = ya-i mod p (tọa độ thứ hai của hai cặp bằng nhau). Bƣớ c 6: x = (mj + i) mod (p-1). Kế t quả nà y có thể kiểm chƣ́ ng tƣ̀ công thƣ́ c amj mod p = ya-i mod p => amj + i mod p = y mod p => x = (mj + i) mod (p-1).
  • 94. Chƣơng IV: Các hệ mã mật khóa công khai 85 Độ phức tạp của thuật toán phụ thuộc vào m = [(p-1)1/2 ], vớ i giá tri ̣của m, chúng ta cầ n tính cá c phầ n tƣ̉ thuộc hai danh sá ch L 1 và L2, đều là các phép toán lũy thừa phụ thuộc và o j và i , i và j lại phụ thuộc và o m nên có thể nhận thấ y là thuật toá n nà y chỉ có thể á p dụng trong nhƣ̃ng trƣờ ng hợp mà p nhỏ. Thuật toán Pohlig-Hellman Có những trƣờng hợp đặc biệt mà bài toán Logarithm rời rạc có thể giải quyết với độ phƣ́ c tạp nhỏ hơn O(p1/2 ), chẳng hạn nhƣ khi p – 1 chỉ có các ƣớc nguyên tố nhỏ. Một thuật toá n là m việc vớ i cá c trƣờ n g hợp nhƣ vậy đã đƣợc Pohlig và Hellman đƣa ra và o năm 1978. Giả sử p – 1 = 2n . Gọi a là phần tử nguyên thủy của * pZ , p là một số lẻ và a (p-1)/2 mod p = -1. Gọi m là số nguyên thuộc khoảng [0, p-2] mà chúng ta cầ n tìm để y = am mod p. Giả sử m đƣợc biểu diễn thà nh dạng nhi ̣phân m = m0 + 2m1 + 4m2 + … + 2n-1 mn-1. Khi đó : 2 1 0 0 1 2 1 1 1 1 1 02 2 ... 22 2 2 2 0 1 0 ( ) ( ) 1 1 nÕu m nÕu m n n p p p p m m m m mm y a a a                   Việc tính y(p-1)/2 mấ t nhiều nhấ t 2[log2p] bƣớ c và sẽ cho ta m 0. Khi xá c đi ̣nh đƣợc y 1 = ya-m 0, ta lặp lại thao tá c tƣơng tƣ̣ để tính m1: 2 1 1 2 1 1 1 1 12 ... 24 2 2 1 1 1 0 ( ) 1 1 nÕu m nÕu m n n p p p m m m m c a a                Quá trình tính toán cứ thể tiếp diễn cho tới khi chúng ta tìm đƣợc m i. Độ phức tạp của thuật toán là: n(2[log2p] + 2) ~ O((log2p)2 ). 3.4. Các hệ mã mật dựa trên cá c đƣờ ng cong Elliptic Hầ u hết cá c sản phẩm và cá c chuẩn sƣ̉ dụng cá c hệ mã khó a công khai để mã hó a và chữ ký điện tử hiện nay đều sử dụng hệ mã RSA . Tuy nhiên vớ i sƣ̣ phá t triển của ngành thám mã và năng lực ngày càng tăng nhanh chóng của các hệ thống máy tính , độ dài khóa để đảm bảo an toàn cho hệ mã RSA cũng ngày càng tăng nhanh chóng , điề u này làm giảm đáng kể hiệu năng của các hệ thống sử dụng hệ mã RSA , đặc biệt là vớ i các ứng dụng thƣơng mại điện tử trực tuyến hay các hệ thống realtime đòi hỏi thời gian xƣ̉ lý nhanh chó ng . Gầ n đây một hệ mã mớ i đã xuấ t hiện và có khả năng thay thế cho RSA, đó là cá c hệ mã khó a công khai dƣ̣a trên c ác đƣờng cong Elliptic – ECC (Elliptic Curve Cryptography). Điểm hấ p dẫn nhấ t của cá c hệ mã dƣ̣a trên cá c đƣờ ng cong Elliptic là nó cho phép đạt đƣợc tính an toàn tƣơng đƣơng với RSA trong khi kích thƣớc khóa sử dụng lại nhỏ hơn rấ t nhiề u, làm giảm số phép tính sử dụng khi mã hóa, giải mã và do đó đạt đƣợc hiệu năng và tố c độ cầ n thiế t. Trên lý thuyế t tính an toà n của ECC không cao bằ ng so vớ i RSA và cũng khó giải thích một cá ch dễ hiểu hơn so vớ i RSA hay Diffie -Hellman. Cơ sở toán học đầy đủ của các hệ mã dựa trên đƣờng cong Elliptic vƣợt ra ngoài phạm vi của tài liệu này , trong phầ n nà y chú ng ta sẽ chỉ xem xét cá c vấ n đề cơ bản của cá c đƣờ ng cong Elliptic và các hệ mã ECC.
  • 95. Chƣơng IV: Các hệ mã mật khóa công khai 86 3.4.1. Nhóm Abel Nhóm Abel G, thƣờ ng đƣợc ký hiệu là {G, •} là một tập hợp với một phép toán hai ngôi ký hiệu là •, kế t qủa thƣ̣c hiện của phé p toá n vớ i hai phầ n tƣ̉ a , b  G, ký hiệu là (a • b) cũng là một phầ n tƣ̉ thuộc G, tính chất này gọi là đóng đối với tập G. Đối với phép toán • cá c mệnh đề sau đều thỏa mãn: (A1):  a, b  G thì (a • b) G, tính đóng (Closure) (A2):  a, b, c  G thì a • (b • c) = (a • b) • c, tính kết hợp (Associate) (A3): Tồ n tại e  G: e • a = a • e = a  a  G, e đƣợc gọi là phầ n tƣ̉ đơn vi ̣của tập G. (A4):  a  G, luôn  a‟  G: a • a‟ = a‟ • a = e, a‟ là phần tử nghịch đảo của a. (A5):  a, b  G: a • b = b • a, tính giao hoán (Commutative). Rấ t nhiề u cá c hệ mã khó a công khai dƣ̣a trên cá c nhó m Abel. Chẳng hạn, giao thƣ́ c trao đổi khó a Diffie -Hellman liên quan tớ i việc nhân cá c cặp số nguyên khá c không theo modulo q (nguyên tố ). Các khóa đƣợc sinh ra bởi phép tính lũy thƣ̀ a trên nhó m. Đối với các hệ mã ECC, phép toán cộng trên các đƣờng cong Elliptic đƣợc sử dụng là phép toán cơ bản. Phép nhân đƣợc định nghĩa là sự lặp lại của nhiều phép cộng : a x k = (a + a + … + a). Việc thá m mã liên quan tới việc xác định giá trị của k với các thông tin công khai là a và (a x k). Một đƣờ ng cong Elliptic là một phƣơng trình vớ i hai biế n và cá c hệ số . Các đƣờng cong sƣ̉ dụng cho cá c hệ mã mật có cá c biến và cá c hệ thố ng là cá c phầ n tƣ̉ thuộc về một trƣờ ng hƣ̃u hạn, điề u nà y tạo thà nh một nhó m Abel . Trƣớ c hế t chú ng ta sẽ xem xét các đƣờng cong Elliptic trên trƣờng số thực. 3.4.2. Các đƣờng cong Elliptic trên trƣờ ng số thƣ̣c Các đƣờn g cong Elliptic không phải là cá c đƣờ ng Ellipse . Tên gọi đƣờ ng cong Elliptic đƣợc đặt vì loại đƣờ ng cong nà y đƣợc mô tả bở i cá c phƣơng trình bậc ba , tƣơng tƣ̣ nhƣ cá c phƣơng trình đƣợc dù ng để tính chu vi của một Ellipse . Ở dạng chung nhấ t phƣơng trình bậc 3 biểu diễn một đƣờ ng cong Elliptic có dạng: y2 + axy + by = x3 + cx2 + dx + e. Trong đó a, b, c, d, e là cá c số thƣ̣c , x và y là cá c biế n thuộc trƣờ ng số thƣ̣c . Vớ i mục đích để hiểu về các hệ mã EC C chú ng ta chỉ xét cá c dạng đƣờ ng cong Elliptic có dạng: y2 = x3 + ax + y (phƣơng trình 1) Các phƣơng trình này đƣợc gọi là các phƣơng trình bậc ba , trên cá c đƣờ ng cong Elliptic chú ng ta đi ̣nh nghĩa một điểm đặc biệt gọi là điể m O hay điểm tại vô cù ng (point at infinity). Để vẽ đƣờ ng cong Elliptic chú ng ta cầ n tính cá c giá tri ̣theo phƣơng trình: 3 y x ax b   Vớ i mỗi giá tri ̣cụ thể của a và b , sẽ cho chúng ta hai giá trị của y (một âm và một dƣơng) tƣơng ƣ́ ng vớ i một giá tri ̣của x , các đƣờng cong dạng này luôn đối xứng qua đƣờ ng thẳng y = 0. Ví dụ về hình ảnh của một đƣờng cong Elliptic:
  • 96. Chƣơng IV: Các hệ mã mật khóa công khai 87 Hình 4.4: Các đƣờng cong Elliptic trên trƣờng số thực Chúng ta xem xét tập điểm E (a, b) chƣ́ a tấ t cả các điểm (x, y) thỏa mãn phƣơng trình 1, cùng với điểm O. Sƣ̉ dụng cá c cặp (a, b) khác nhau chúng ta có các tập E (a, b) khác nhau. Sƣ̉ dụng ký hiệu nà y ta có hình vẽ minh họa trên là biểu diễn của hai tập hợp E(1, 0) và E(1, 1) tƣơng ƣ́ ng. 3.4.3. Mô tả hình học củ a phé p cộng trên cá c đƣờ ng cong Elliptic Vớ i mỗi cặp (a, b) cụ thể chúng ta có thể thành lập một nhóm trên tập E (a, b) vớ i các điều kiện sau: 3 2 4 27 0a b  (điề u kiện 1).
  • 97. Chƣơng IV: Các hệ mã mật khóa công khai 88 Vớ i điề u kiện bổ sung nà y ta đi ̣nh nghĩa phé p cộng trên đƣờ ng cong Elliptic , mô tả về mặt hình học nhƣ sau: nế u ba điểm trên một đƣờ ng cong Elliptic tạo thà nh một đƣờ ng thẳng thì tổng của chúng bằng O. Vớ i đi ̣nh nghĩa nà y cá c luật của phé p cộng trên đƣờ ng cong Elliptic nhƣ sau: 1. O là phần tử trung hòa của phép cộng.  P  E(a, b): P + O= P. Trong cá c mệnh đề sau chú ng ta giả sƣ̉ P, Q ≠ O. 2. P = (x, y) thì phầ n tƣ̉ đố i của P, ký hiệu là P, sẽ là (x, -y) và P + (P) = P P = O. P và P nằm trên một đƣờ ng thẳng đƣ́ ng 3. Để cộng hai điểm P và Q không có cù ng hoà ng độ x , vẽ một đƣờng thẳng nố i chú ng và tìm giao điểm R. Dễ dà ng nhận thấy chỉ có một điểm R nhƣ vậy, tổng của P và Q là điểm đối xứng với R qua đƣờng thẳng y = 0. 4. Giao điểm của đƣờ ng thẳng nố i P vớ i đố i của P , tƣ́ c P, đƣợc xem nhƣ cắt đƣờ ng cong tại điểm vô cƣ̣c và đó chính là O. 5. Để nhân đôi một điểm Q, ta vẽ một tiế p tuyế n tại Q vớ i đƣờ ng cong và tìm giao điểm S: Q + Q = 2Q = S. Vớ i 5 điề u kiện nà y E(a, b) là một nhóm Abel. 3.4.4. Mô tả đại số về phép cộng Trong phầ n nà y chú ng ta sẽ trình bà y một số kế t quả cho phé p tính toá n trên cá c đƣờ ng cong Elliptic. Vớ i hai điểm phân biệt P = (xP, yP) và Q = (xQ, yQ) không phải là đố i của nhau, độ dố c của đƣờ ng nố i l giƣ̃a chú ng là Ä = (yQ, yP). Có chính xác một điểm khác mà l giao với đƣờn g cong, và đó chính là đối của tổng giữa P và Q . Sau một số phép toán đại số chúng ta có thể tính ra R = P + Q nhƣ sau: 2 R P Qx y x    ( )R P P Ry y x y     Phép toán nhân đôi đối với P đƣợc tính nhƣ sau: 2 23 ( ) 2 2 P R P P x a x x y    2 3 ( )( ) 2 P R P R P P x a y x x y y     3.4.5. Các đƣờng cong Elliptic trên ZP Các hệ mã ECC sử dụng các đƣờng cong Elliptic với các biến và các hệ số giới hạn thuộc về một trƣờ ng hƣ̃u hạn . Có hai họ các đƣờng cong Elliptic có thể sử dụng với các hệ mã ECC: các đƣờng cong nguyên tố trên ZP và các đƣờng cong nhị phân trên GF(2m ). Một đƣờ ng cong nguyên tố trên Z P, chúng ta sử dụng phƣơng trình bậc ba mà các biến và các hệ số của nó đều là các giá trị nguyên nằm từ 0 tớ i p-1 và các phép tính đƣợc thƣ̣c hiện theo modulo P . Trên đƣờ ng cong nhi ̣phân, các biến và các hệ số là các giá trị trên GF(2n ). và các tính toán đƣợc thực hiện trên GF (2n ). Các nghiên cứu về lý thuyết đã cho thấ y cá c đƣờ ng cong nguyên tố là phù hợp nhấ t cho cá c ƣ́ ng dụng phầ n mề m vì nhƣ̃ng phƣ́ c tạp trong tính toá n đố i vớ i cá c đƣờ ng cong nhi ̣phân , nhƣng đố i vớ i cá c ƣ́ ng dụng phần cứng thì việc sử dụng các đƣờng cong nhi ̣phân lại tố t hơn vì cơ chế là m việc của các mạch, các con chíp rất phù hợp với các tính toán trên trƣờng nhị phân.
  • 98. Chƣơng IV: Các hệ mã mật khóa công khai 89 Vớ i cá c đƣờ ng cong Elliptic trên Z P chúng ta định nghĩa lại phƣơng trình biểu diễn nhƣ sau: y2 mod p = (x3 + ax + y) mod p. (phƣơng trình 2) Chẳng hạn cá c giá tri ̣a = 1, b = 1, x = 9, y = 9, y = 7, p = 23 thỏa mãn phƣơng trình trên. Các giá trị hệ số a, b và cá c biế n số x , y đều thuộc ZP. Tập EP(a, b) gồ m tấ t cả cá c cặp (x, y) thỏa mãn phƣơng trình phƣơng trình 2. Ví dụ với p = 23, a = b = 1, ta có tập E23(1, 1): (0, 1) (6, 4) (12, 19) (0, 22) (6, 19) (13, 7) (1, 7) (7, 11) (13, 16) (1, 16) (7, 12) (17, 3) (3, 10) (9, 7) (17, 20) (3, 13) (9, 16) (18, 3) (4, 0) (11, 3) (18, 20) (5, 4) (11, 20) (19, 5) (5, 19) (12, 4) (19, 18) Bảng 4.2: Biểu diễn của tập E23(1, 1)
  • 99. Chƣơng IV: Các hệ mã mật khóa công khai 90 Các qui tắc về phép cộng cũng đƣợc định nghĩa tƣơng tự đối với các đƣờng cong Elliptic nguyên tố : Điều kiện: (4a3 + 27b2 ) mod p ≠ 0. 1. P + O = P 2. Nế u P = (xP, yP) thì P +(xP, yP) = O, điểm (xP, yP) đƣợc gọi là đố i của P , ký hiệu là P. Chẳng hạn trên E23(1, 1), P = (13, 7) ta có P = (13, 7) nhƣng 7 mod 23 = 16 nên P = (13, 16), cũng thuộc E23(1, 1). 3. Vớ i hai điểm phân biệt P = (xP, yP) và Q = (xQ, yQ), R = P + Q = (xR, yR) đƣợc đi ̣nh nghĩa nhƣ sau: 2 ( )mod ( ( ) )mod R P Q R P R P x x x p y x x y p         Trong đó: 2 ( )mod ,( ) 3 ( )mod ,() ) 2 Q P Q P P P y y p P Q x x x a p p Q y          4. Phép nhân đƣợc định nghĩa là tổng của các phép cộng , chẳng hạn 4P = P + P + P + P. Ví dụ với P = (3, 10) và Q = (9, 7) trên E23(1, 1) ta có : 7 10 3 1 ( )mod23 ( )mod23 ( )mod23 11 9 3 6 2          nên xR = (112 - 3 - 9 ) mod 23 = 17 yR = (11(3 - 17) - 10) mod 23 = 20. Nên P + Q = (17, 20). Để tìm 2P ta tính: 2 3(3 ) 1 5 1 ( )mod 23 ( )mod 23 ( )mod 23 6 2 10 20 4        Chú ý là để thực hiện phép tính cuối cùng ta lấy phần tử nghịch đảo của 4 trên Z23 sau đó nhân vớ i tƣ̉ số là 1. xR=(62 (3 - 7) - 10) mod 23 = 30 mod 23 = 7 yR = (6(3 - 7) - 10) mod 23 = 34 mod 23 = 12 Kế t luận: 2P = (7, 12). Để xá c đi ̣nh độ an toà n của cá c hệ mã mật dƣ̣a trên cá c đƣờ ng cong Elliptic , ngƣờ i ta thƣờ ng dƣ̣a trên một con số là số phầ n điểm trên một nhó m Abel hƣ̃u hạn , gọi là N , đƣợc đi ̣nh nghĩa trên một đƣờ ng cong Elliptic . Trong trƣờ ng hợp nhó m hƣ̃u hạn EP(a, b), ta có cá c cận của N là : 1 2 1 2p p N p p      , con số nà y xấ p xỉ bằ ng số phầ n tƣ̉ của ZP (bằ ng p). 3.4.6. Các đƣờng cong Elliptic dựa trên các trƣờng hữu hạn GF(2m ) Số phầ n tƣ̉ của trƣờ ng hƣ̃u hạn GF (2m ) là 2m , các phép toán đƣợc trang bị trên GF(2m ) là phép toán cộng và phép toán nhân đƣợc thực hiện với các đa thức . Đối với các đƣờ ng cong Elliptic dƣ̣a trên GF (2m ), chúng ta sử dụng một phƣơng trình bậc ba với các biế n và cá c tham số có giá tri ̣thuộc GF (2m ), các phép tính đƣợc thực hiện tuân theo các phép toán trên GF(2m ). 1. Phƣơng trình biểu diễn
  • 100. Chƣơng IV: Các hệ mã mật khóa công khai 91 So vớ i cá c hệ mã mật dƣ̣a trên cá c đƣờ ng cong trên Z P, dạng biểu diễn của các hệ mã dựa trên GF(2m ) tƣơng đố i khá c: y2 + xy = x3 + ax2 + b (phƣơng trình 3) Trong đó cá c biến x, y và cá c hệ số a, b là cá c phầ n tƣ̉ của GF(2m ) và các phép tính toán đƣợc thực hiện tuân theo các qui tắc trên GF(2m ). Chúng ta ký hiệu E2 m (a, b) là tất cả các cặp số nguyên (x, y) thỏa mãn phƣơng trình phƣơng trình 3 và điểm vô cùng O. Ví dụ: chúng ta có thể sử dụng GF(24 ) vớ i đa thƣ́ c bấ t khả qui f(x) = x4 + x + 1. Phầ n tƣ̉ sinh của GF(24 ) là g thỏa mãn f(g) = 0, g4 = g + 1, hay ở dạng nhi ̣phân là 0010. Chúng ta có bảng lũy thƣ̀ a của g nhƣ sau: g0 = 0001 g4 = 0011 g8 = 0101 g12 = 1111 g1 = 0010 g5 = 0110 g9 = 1010 g13 = 1101 g2 = 0100 g6 = 1100 g10 = 0111 g14 = 1001 g3 = 1000 g7 = 1011 g11 = 1110 g15 = 0001 Chẳng hạn g5 = g4 g = (g+1)g = g2 + g = 0110. Xét đƣờng cong Elliptic y 2 + xy = x3 + g4 x2 + 1, trong trƣờ ng hợp nà y a = g4 và b = g0 = 1. Một điểm nằ m trên đƣờ ng cong là (g5 , g3 ): (g3 )2 + (g5 )(g3 ) = (g5 )3 + (g4 )(g5 )2 + 1  g6 + g8 = g15 + g14 + 1  1100 + 0101 = 0001 + 1001 + 0001  1001 = 1001 Bảng sau là các điểm trên E2 4 (g4 , 1): (0, 1) (g5 , g3 ) (g9 , g13 ) (1, g6 ) (g5 , g11 ) (g10 , g) (1, g13 ) g6 , g8 ) (g10 , g8 ) (g3 , g8 ) (g6 , g14 ) (g12 ,0) (g3 , g13 ) (g9 , g10 ) (g12 , g12 ) Hình biểu diễn tƣơng đƣơng:
  • 101. Chƣơng IV: Các hệ mã mật khóa công khai 92 Hình 4.5: Hình biểu diễn E2 4 (g4 , 1) Một nhó m Abel có thể đi ̣nh nghĩa dƣ̣a trên E2 m (a, b) vớ i điề u kiện b≠0. Các luật thực hiện vớ i phé p cộng,  a, b E2 m (a, b): 1. P + O = P 2. Nế u P = (xP, yP) thì P + (xP, xP + yP) = O. Điểm (xP, xP + yP) là điểm đối của P, ký hiệu là P. 3. Nế u P = (xP, yP) và Q = (xQ, yQ) và P≠Q, P≠Q thì R = P + Q = (xR, yR) đƣợc xác định bằng các công thức sau: 2 ( ) R R P Q P R R P x x x a y x x x y a              Trong đó: Q P Q P y y x x     4. Nế u P = (xP, yP) thì R = 2P = (xR, yR) đƣợc xá c đi ̣nh bằ ng cá c công thƣ́ c sau: 2 2 ( 1) R R P R x a y x x          Trong đó: P P P y x x   
  • 102. Chƣơng IV: Các hệ mã mật khóa công khai 93 3.4.7. Hệ mã mật dƣ̣a trên các đƣờ ng cong Elliptic Phép toán cộng trên đƣờng cong Elliptic tƣ ơng ƣ́ ng vớ i phé p nhân theo modulo trong hệ mã RSA , còn phép toán nhân (cộng nhiều lầ n ) trên đƣờ ng cong Elliptic tƣơng ứng với phép lũy thừa theo modulo trong hệ mã RSA . Tƣơng tƣ̣ nhƣ bà i toá n cơ sở của hệ mã RSA là bà i toá n phân tích ra dạng thừa số nguyên tố của một số nguyên lớn , các hệ mã dƣ̣a trên cá c đƣờ ng cong Elliptic cũng có cá c bà i toá n cơ sở là một bà i toá n khó giải, gọi là bài toán Logarithm trên đƣờng cong Elliptic: Xét phƣơng trình Q = kP trong đó P, Q  EP(a, b) và k < p. Việc tính Q nế u biết P và k là một bà i toá n dễ (thƣ̣c hiện theo cá c công thƣ́ c). Nhƣng việc xá c đi ̣nh k vớ i giá tri ̣P, Q cho trƣớ c lại là bà i toá n khó . Chúng ta xem xét ví dụ (Certicom Website www.certicom.com): E23(9, 17) đƣợc xá c đi ̣nh bở i phƣơng trình y2 mod 23 = (x3 + 9x + 17) mod 23. Vớ i Q = (4, 5) và P = (16, 5) thì k thỏa mãn Q = kP sẽ bằ ng bao nhiêu ? Phƣơng pháp đơn giản nhất là nhân P lên nhiề u lầ n cho tớ i khi bằng Q: P = (16, 5), 2P = (20, 20), 3P = P = (16, 5); 2P = (20, 20); 3P = (14, 14); 4P = (19, 20); 5P = (13, 10); 6P = (7, 3); 7P = (8, 7); 8P (12, 17); 9P = (4, 5). Nhƣ vậy k = 9. Trên thƣ̣c tế cá c hệ mã sẽ đảm bảo giá trị k là đủ lớn để phƣơng pháp vét cạn nhƣ trên là không thể thực hiện đƣợc. 3.4.8. Phƣơng phá p trao đổ i khó a Diffie-Hellman dƣ̣a trên các đƣờ ng cong Elliptic Ban đầ u ngƣờ i ta chọn một số nguyên lớ n q , có thể là một số nguyên tố p hay có dạng 2m tƣơng ƣ́ ng vớ i cá c phƣơng trình biểu diễn và cá c tham số a , b. Việc lƣ̣a chọn này cho chúng ta tập hợp Eq(a, b). Tiế p theo chọn một điểm G = (x1, y1)  EP(a, b) có bậc n rấ t lớ n, bậc n của điểm G là số nguyên nhỏ nhấ t thỏa mãn nG = O. Eq(a, b) và G là các tham số công khai cho hệ mã mật dƣ̣a trên đƣờ ng cong Elliptic tƣơng ƣ́ ng vớ i cá c tham số p, a, b. Phƣơng phá p trao đổi khó a giƣ̃a hai ngƣờ i dù ng A và B có thể thƣ̣c hiện nhƣ sau: 1. A chọn một số nguyên nA nhỏ hơn n. Đó chính là khó a riêng của A. Sau đó sinh khó a công khai PA = nA x G, khóa này là một điểm trên Eq(a, b). 2. Tƣơng tƣ̣ B cũng chọn một khó a riêng nB và tính khóa công khai PB. 3. A sinh một khó a bí mật K = nA x PB. B sinh khó a bí mật K = nB x PA. Dễ dà ng kiểm chƣ́ ng cá c khó a bí mật của A và B tính đƣợc đề u bằ ng nhau : nA x PB = nA x (nB x G) = nB x (nA x G) = nB x PA. Hình minh họa các bƣớc:
  • 103. Chƣơng IV: Các hệ mã mật khóa công khai 94 Hình 4.6: Phƣơng phá p trao đổi khó a Diffie-Hellman dƣ̣a trên ECC Để tấ n công phƣơng phá p trao đổi khó a trên , kẻ tấn công cần phải tính đƣợc giá trị k vớ i cá c giá tri ̣công khai là G và kG, và đây chính là bài toán Logarithm trên đƣờng cong Elliptic, một bà i toá n khó . Ví dụ: p = 211, E211(0, 4) tƣơng ƣ́ ng vớ i phƣơng trình biểu diễn y 2 = x3 + 4, ta chọn G = (2, 2). Do 240G = O nên n = 240. A chọn khó a riêng là n A = 121, khóa công khai tƣơng ƣ́ ng của A sẽ là PA = 121(2, 2) = (115, 48). Khóa riêng của B là nB = 203 nên khó a công khai cù a B là P B = 203(2, 2) = ( 130, 203). Khóa bí mật (chia sẻ ) giƣ̃a A và B là 121(130, 203) = 203(115, 48) = (161, 69). 3.4.9. Thuật toá n mã hó a và giả i mã Có nhiều cách mã hóa/giải mã đã đƣợc nghiên cứu với các hệ mã trên các đƣờng cong Elliptic, ở đây chúng ta sẽ xem xét cách đơn giản nhất . Thuật toá n mã hó a ban đầ u sẽ thực hiện phép biến đổi tiền xử lý từ input là một bản rõ m thành dạng một điểm P m. Điểm Pm sẽ đƣợc mã hóa thành bản mã và sau đó giải mã . Thƣ̣c chấ t việc tiề n xƣ̉ lý nà y không đơn giản vì không phải tấ t cả cá c tọa độ có dạng (x, y) đều thuộc E P(a, b). Có
  • 104. Chƣơng IV: Các hệ mã mật khóa công khai 95 nhiề u cá ch khá c nhau cho việc tiề n xƣ̉ lý nà y , chúng ta không bàn kỹ tới chúng ở đây nhƣng thƣ̣c tế là có một và i cá ch dễ hiểu để thƣ̣c hiện việc đó . Giố ng nhƣ đố i vớ i hệ trao đổi khó a , chúng ta cần một điểm G và một nhóm Elliptic Eq(a, b) làm tham s ố. Mỗi ngƣờ i dù ng A lƣ̣a chọn một khó a riêng n A và sinh một khóa công khai PA = nA x G. Để mã hó a một thông điệp P m để gửi tới cho B , A sẽ chọn một số nguyên dƣơng ngẫu nhiên k và sinh bản mã Cm gồ m một cặp điểm: Cm = {kG, Pm + kPB}. Chú ý là ở đây A sử dụng khóa công khai của B . Để giải mã bản mã , B sẽ nhân điểm thƣ́ nhấ t vớ i khó a bí mật của B và lấ y kế t quả nhận đƣợc trƣ̀ đi điểm thƣ́ hai: Pm + kPB nB(kG) = Pm + k(nBG) nB(kG) = Pm. A đã che đi giá trị của Pm bằng cá ch cộng kPB vào Pm. Chỉ có duy nhất A biết giá trị k, nên thậm chí biế t khó a công khai P B, không ai có thể loại bỏ mặt nạ kP B để tìm ra Pm. Tuy nhiên giá tri ̣của C m cũng gồm một đầu mối để B (ngƣờ i duy nhấ t giƣ̃ khó a riêng n B) có thể dựa vào đầu mối đó mà tìm ra Pm. Ví dụ: p = 751, EP(1, 188) tƣơng ƣ́ ng vớ i phƣơng trình y 2 = x3 + x + 188, G = (0, 376). Giả sử A muốn gửi một thông điệp tƣơng ứng với Pm = (562, 201) và A lựa chọn k = 386, khóa công khai của B là PB = (201, 5). Chúng ta có 386(0, 376) = (676, 558) và (562, 201) + 386(201, 5) = (385, 328). Bản mã sẽ là Cm = {(676, 558), (385, 328)}. 3.4.10. Độ an toàn của các hệ mã mật dựa trên các đƣờng cong Elliptic Độ an toàn của các hệ mã ECC phụ thuộc vào việc xác định đƣợc giá trị của k dựa trên cá c giá tri ̣kP và P. Bài toán này đƣợc gọi là bài toán Logarithm trên các đƣờng cong Elliptic. Thuật toá n nhanh nhấ t để giải bà i toán này là thuật toán của Pollard . Bảng sau cho chú ng ta sƣ̣ so sá nh tƣơng quan giƣ̃a cá c hệ mã: Symmetric Scheme (key size in bits) ECC-Based Scheme (size of n in bits) RSA/DSA (modulus size in bits) 56 112 512 80 160 1024 112 224 2048 128 256 3072 92 384 7680 256 512 15360 Nguồ n: Certicom Bảng 4.3: Bảng so sánh các hệ mã ECC với hệ mã RSA
  • 105. Chƣơng IV: Các hệ mã mật khóa công khai 96 Có thể thấy là so với RSA , các hệ mã ECC có ƣu thế hơn về độ dài khóa sử dụng , đặc biệt là khi chú ng ta sƣ̉ dụng cá c khó a có độ dà i nhỏ thì ECC cò n có ƣu thế về tố c độ (số phé p tính) xƣ̉ lý trong mã hó a và giải mã. 4. Bài tập Bài tập 4.1: Cho N = 1517. Hãy tính 131435 mod N. Bài tập 4.2: Trong hệ mã RSA có N = p * q = 103 * (219 – 1) thì có thể sử dụng tối đa là bao nhiêu gía trị của e để làm khóa mã hóa, giải thích. Bài tập 4.3: Trong hệ mã RSA có N = p*q = 103 * 113 sẽ có bao nhiêu trƣờng hợp lộ bản rõ. Bài tập 4.4: Trong hệ chữ ký điện tử ElGamma có p = 231 – 1 khi ký lên một văn bản có thể sử dụng tối đa bao nhiêu gía trị k, giải thích. Bài tập 4.5: Cho hệ mã ElGamma có p = 31, a = 11 và x = 6. Để mã hóa M = 18 ngƣời ta chọn k = 7. Hãy thực hiện tính toán và đƣa ra bản mã kết quả. Bài tập 4.6: Cho hệ RSA có n = 1363, biết phi(n) = 1288 hãy mã hóa bản rõ M = 2007. Bài tập 4.7: Tƣơng tự Câu 1 với n = 215629 và phi(n) = 214684 hãy giải mã bản mã M = 2007. Bài tập 4.8: Giả sử có 4 tổ chức sử dụng 4 hệ mã RSA để truyền thông với nhau. Gọi N1, N2, N3, N4 lần lƣợt là các tham số tƣơng ứng mà họ sử dụng và (Ni, Nj) = 1  i  j và i, j  Z5/{0}. Cả bốn hệ RSA này đều có số mũ lập mã là e = 3. Một thông điệp m sau khi mã hóa bằng 4 hệ mã trên nhận đƣợc 4 bản mã tƣơng ứng là C1, C2, C3, C4. Hãy tìm m. Bài tập 4.9: Cho hệ mã Knapsack có A = {11, 15, 30, 60}, M = 150 và u = 77. a) Hãy tìm khóa công khai KP, và khóa bí mật KS của hệ mã trên. b) Để mã hóa các thông điệp viết bằng tiếng Anh ngƣời ta dùng một hàm chuyển đổi từ các ký tự thành các xâu nhị phân nhƣ sau: Ký tự Xâu bít Ký tự Xâu bít Ký tự Xâu bít Ký tự Xâu bít A 00000 H 00111 O 01110 V 10101 B 00001 I 01000 P 01111 W 10110 C 00010 J 01001 Q 10000 X 10111 D 00011 K 01010 R 10001 Y 11000 E 00100 L 01011 S 10010 Z 11001 F 00101 M 01100 T 10011 G 00110 N 01101 U 10100 Khi đó ví dụ xâu ABCD sẽ đƣợc chuyển thành 00000 00001 00010 00011 và cắt thành các xâu có độ dài 4 để thực hiện mã hóa. Kết quả thu đƣợc bản mã là một dãy các số  ZM. Hãy thực hiện mã hóa xâu P = “ANTI”. c) Giả sử bản mã thu đƣợc là C = <120, 105, 105, 0, 60, 75, 30, 22, 22, 30>. Hãy thực hiện giải mã bản mã trên để thu đƣợc thông điệp ban đầu. Bài tập 4.10: Cho hệ mã Knapsack có A = {7, 13, 31, 53}, M = 173 và u = 97. a) Hãy tìm khóa công khai KP, và khóa bí mật KS của hệ mã trên.
  • 106. Chƣơng IV: Các hệ mã mật khóa công khai 97 b) Để mã hóa các thông điệp viết bằng tiếng Anh ngƣời ta dùng một hàm chuyển đổi từ các ký tự thành các xâu nhị phân nhƣ sau: Ký tự Xâu bít Ký tự Xâu bít Ký tự Xâu bít Ký tự Xâu bít A 00000 H 00111 O 01110 V 10101 B 00001 I 01000 P 01111 W 10110 C 00010 J 01001 Q 10000 X 10111 D 00011 K 01010 R 10001 Y 11000 E 00100 L 01011 S 10010 Z 11001 F 00101 M 01100 T 10011 G 00110 N 01101 U 10100 Khi đó ví dụ xâu ABCD sẽ đƣợc chuyển thành 00000 00001 00010 00011 và cắt thành các xâu có độ dài 4 để thực hiện mã hóa. Kết quả thu đƣợc bản mã là một dãy các số  ZM. Hãy thực hiện mã hóa xâu P = “AUNT”. c) Giả sử bản mã thu đƣợc là C = < 67,160, 66, 66, 0, 116, 4, 111, 0, 17>. Hãy thực hiện giải mã bản mã trên để thu đƣợc thông điệp ban đầu. Bài tập 4.11: Cho hệ mã Knapsack có A = {2, 3, 7, 13, 29, 57}, M = 151 và u = 71. a) Hãy tìm khóa công khai KP, và khóa bí mật KS của hệ mã trên. b) Để mã hóa các thông điệp viết bằng tiếng Anh ngƣời ta dùng một hàm chuyển đổi từ các ký tự thành các xâu nhị phân nhƣ sau: Ký tự Xâu bít Ký tự Xâu bít Ký tự Xâu bít Ký tự Xâu bít A 00000 H 00111 O 01110 V 10101 B 00001 I 01000 P 01111 W 10110 C 00010 J 01001 Q 10000 X 10111 D 00011 K 01010 R 10001 Y 11000 E 00100 L 01011 S 10010 Z 11001 F 00101 M 01100 T 10011 G 00110 N 01101 U 10100 Khi đó ví dụ xâu ABCDEF sẽ đƣợc chuyển thành 00000 00001 00010 00011 00100 00101 và cắt thành các xâu có độ dài 6 để thực hiện mã hóa. Kết quả thu đƣợc bản mã là một dãy các số  ZM. Hãy thực hiện mã hóa xâu P = “ANSWER”. c) Giả sử bản mã thu đƣợc là C = <44, 40, 121, 104, 0>. Hãy thực hiện giải mã bản mã trên để thu đƣợc thông điệp ban đầu. Bài tập 4.12: Cho hệ mã RSA có p = 31, q = 41, e = 271. a) Hãy tìm khóa công khai KP, và khóa bí mật KS của hệ mã trên. b) Để mã hóa các thông điệp đƣợc viết bằng tiếng Anh ngƣời ta dùng một hàm chuyển đổi các ký tự thành các số thập phân có hai chữ số nhƣ sau: Ký tự A B C D E F G H I J K L M Mã hóa 00 01 02 03 04 05 06 07 08 09 10 11 12 Ký tự N O P Q R S T U V W X Y Z Mã hóa 13 14 15 16 17 18 19 20 21 22 23 24 25
  • 107. Chƣơng IV: Các hệ mã mật khóa công khai 98 Khi đó ví dụ xâu ABC sẽ đƣợc chuyển thành 00 01 02 và sau đó cắt thành các số có 3 chữ số 000 (bằng 0) và 102 để mã hóa. Bản mã thu đƣợc là một tập các số  ZN. Hãy thực hiện mã hóa xâu P = ”SERIUS”. c) Giả sử bản mã thu đƣợc là C = <201, 793, 442, 18> hãy thực hiện giải mã để tìm ra thông điệp bản rõ ban đầu. Bài tập 4.13: Cho hệ mã RSA có p = 29, q = 43, e = 11. a) Hãy tìm khóa công khai KP, và khóa bí mật KS của hệ mã trên. b) Để mã hóa các thông điệp đƣợc viết bằng tiếng Anh ngƣời ta dùng một hàm chuyển đổi các ký tự thành các số thập phân có hai chữ số nhƣ sau: Ký tự A B C D E F G H I J K L M Mã hóa 00 01 02 03 04 05 06 07 08 09 10 11 12 Ký tự N O P Q R S T U V W X Y Z Mã hóa 13 14 15 16 17 18 19 20 21 22 23 24 25 Khi đó ví dụ xâu ABC sẽ đƣợc chuyển thành 00 01 02 và sau đó cắt thành các số có 3 chữ số 000 (bằng 0) và 102 để mã hóa. Bản mã thu đƣợc là một tập các số  ZN. Hãy thực hiện mã hóa xâu P = ”TAURUS”. c) Giả sử bản mã thu đƣợc là C = <1, 169, 1206, 433> hãy thực hiện giải mã để tìm ra thông điệp bản rõ ban đầu. Bài tập 4.14: Cho hệ mã RSA có n = 1363, e = 57. a) Hãy tìm khóa công khai KP, và khóa bí mật KS của hệ mã trên. b) Giả sử bản rõ P = 102 hãy mã hóa và đƣa ra bản mã C. c) Giả sử hệ mã trên đƣợc dùng làm hệ chữ ký điện tử, hãy tính chữ ký với thông điệp M = 201. Bài tập 4.15: Cho hệ mã ElGamma có p = 83, a = 5 là một phần tử nguyên thuỷ của ZP * , x = 37. a) Hãy tìm khóa công khai KP, và khóa bí mật KS của hệ mã trên. b) Để mã hóa bản rõ P = 72 ngƣời ta chọn k = 23, hãy mã hóa và đƣa ra bản mã. c) Hãy tìm tất cả các phần tử nguyên thuỷ của ZP * . Bài tập 4.16: Cho hệ mã mật ElGamma có p = 1187, a = 79 là một phần tử nguyên thuỷ của ZP * , x = 113. a) Hãy tìm khóa công khai KP, và khóa bí mật KS của hệ mã trên. b) Để mã hóa các thông điệp đƣợc viết bằng tiếng Anh ngƣời ta dùng một hàm chuyển đổi các ký tự thành các số thập phân có hai chữ số nhƣ sau: Ký tự A B C D E F G H I J K L M Mã hóa 00 01 02 03 04 05 06 07 08 09 10 11 12 Ký tự N O P Q R S T U V W X Y Z Mã hóa 13 14 15 16 17 18 19 20 21 22 23 24 25
  • 108. Chƣơng IV: Các hệ mã mật khóa công khai 99 Khi đó ví dụ xâu ABC sẽ đƣợc chuyển thành 00 01 02 và sau đó cắt thành các số có 3 chữ số 000 (bằng 0) và 102 để mã hóa. Bản mã thu đƣợc là một tập các cặp số (C1, C2)  ZP. Hãy thực hiện mã hóa xâu m = ”TAURUS” với các giá trị 13 < k < 19. c) Giả sử thu đƣợc bản mã là một tập các cặp (C1, C2) là <(358, 305), (1079, 283), (608, 925),(786, 391)>. Hãy giải mã và đƣa ra thông điệp ban đầu. Bài tập 4.17: Cho bản mã nhận đƣợc bằng cá ch sƣ̉ dụng một hệ mã RSA nhƣ sau: 11437 6198 16611 2405 18636 2679 12205 24142 6375 2134 16611 2405 9529 7260 7834 15094 4667 24027 762 5878 5206 16683 5359 10888 4168 3536 23229 20351 15580 6704 7977 374 6525 4287 14402 527 12887 21628 11884 9402 15470 1339 10420 18051 23125 7747 135 22007 20049 9984 13199 15176 1379 8313 19574 7989 22869 406 10057 21758 3918 23991 14237 7989 3947 19529 15728 5601 3527 7200 7601 13282 21160 6291 15994 7785 8982 3045 6596 16796 4663 2405 20302 11929 17125 14533 21001 8351 11571 22082 11040 8687 6704 3330 5630 19650 13024 Khóa công khai có n = 24637 và e = 3. a) Hãy xác định p, q và d. b) Giải mã bản mã để nhận đƣợc bản rõ (là các số trên Z24637). c) Chuyển bản rõ nhận đƣợc thà nh dạng văn bản tiếng Anh , biết rằ ng mỗi số nguyên trên Z24637 biểu diễn một bộ 3 chƣ̃ cá i theo qui tắ c sau: DOG 3 × 262 + 14× 26 + 6 = 2398 CAT 2 × 262 + 0× 26 + 19 = 1371 ZZZ 25 × 262 + 25× 26 + 25 = 17575 Bài tập 3.18: Cho hệ mã ElGamal có p = 71 và a = 7. a) Giả sử khóa công khai của B là YB = 3 và A chọn số ngẫu nhiên k = 2, hãy xác đi ̣nh bản mã tƣơng ƣ́ ng vớ i bản mã M = 30. b) Giả sử A chọn một giá trị ngẫu nhiên k khác và bản mã tƣơng ứng với M = 30 bây giờ là C = (59, C2). Hãy xác định C2? Bài tập 3.19: Cho hệ mã dƣ̣a trên đƣờ ng cong Elliptic có cá c tham số là E 11(1, 6) và G = (2, 7). Khóa bí mật của B là nB = 7. a) Hãy xác định khóa công khai của B? b) Giả sử cần mã hóa bản rõ P m = (10, 9) và số ngẫu nhiên k = 3. Hãy xác định bản mã Cm. c) Minh họa quá trình giải mã vớ i Cm nhận đƣợc ở phầ n b. Sƣ̉ dụng một trong cá c ngôn ngƣ̃ lập trình C, C++, Java hoặc C# để làm các bài tập sau:
  • 109. Chƣơng IV: Các hệ mã mật khóa công khai 100 Bài tập 3.20: Viế t chƣơng trình cà i đặt thuật toá n mã hó a và giải mã của hệ mã Knapsack. Bài tập 3.21: Viế t chƣơng trình cà i đặt thuật toá n mã hóa và giải mã của hệ mã RSA. Bài tập 3.22: Viế t chƣơng trình cà i đặt thuật toá n mã hó a và giải mã của hệ mã El Gammal. Bài tập 3.23: Viế t chƣơng trình mã hó a và giải mã File vớ i thuật toá n mã hó a và giải mã RSA. Bài tập 3.24: Viế t chƣơng trình truyền file qua hệ thố ng mạng sƣ̉ dụng thuật toá n mã hó a RSA. Bài tập 3.25: Viế t chƣơng trình chia sẻ file trên mạng cục bộ sƣ̉ dụng hệ mã RSA. Bài tập 3.26: Viế t chƣơng trình phân phố i khó a dƣ̣a trên hệ mã RSA.
  • 110. Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm 101 CHƢƠNG V: CHƢ̃ KÝ ĐIỆN TƢ̉ VÀ HÀ M BĂM 1. Chƣ̃ ký điện tƣ̉ 1.1. Khái niệm về chữ ký điện tử Kể từ khi con ngƣời phát minh ra chữ viết, các chữ ký thƣờng luôn đƣợc sử dụng hàng ngày, chẳng hạn nhƣ ký một biên nhận trên một bức thƣ nhận tiền từ ngân hàng, ký hợp đồng hay một văn bản bất kỳ nào đó. Chữ ký viết tay thông thƣờng trên tài liệu thƣờng đƣợc dùng để xác định ngƣời ký nó. Sơ đồ chữ ký điện tử là một phƣơng pháp ký một văn bản hay lƣu bức điện dƣới dạng điện tử. Chẳng hạn một bức điện có chữ ký đƣợc lƣu hành trên mạng máy tính. Chữ ký điện tử từ khi ra đời đã có nhiều ứng dụng rộng rãi trong các giao dịch thƣơng mại, từ việc xác minh chữ ký cho đến các thẻ tín dụng, các sơ đồ định danh và các sơ đồ chia sẻ bí mật ... Sau đây, chúng ta sẽ tìm hiểu một số sơ đồ chữ ký quan trọng. Song trƣớc hết, chúng ta sẽ thảo luận một vài điểm khác biệt cơ bản giữa chữ ký thông thƣờng và chữ ký điện tử. Đầu tiên là vấn đề ký một tài liệu. Với chữ ký thông thƣờng nó là một phần vật lý của tài liệu. Tuy nhiên, một chữ ký điện tử không gắn theo kiểu vật lý vào bức điện nên thuật toán đƣợc dùng phải là “không nhìn thấy” theo cách nào đó trên bức điện. Thứ hai là vấn đề kiểm tra. Chữ ký thông thƣờng đƣợc kiểm tra bằng cách so sánh nó với các chữ ký xác thực khác. Ví dụ, ai đó ký một tấm séc để mua hàng, ngƣời bán sẽ so sánh chữ ký trên mảnh giấy đó với chữ ký nằm ở mặt sau thẻ tín dụng để kiểm tra. Mặt khác, chữ ký số có thể kiểm tra bằng một thuật toán kiểm tra một cách công khai. Nhƣ vậy, bất kỳ ai cũng có thể kiểm tra đƣợc chữ ký điện tử. Việc sử dụng một sơ đồ ký an toàn có thể ngăn chặn đƣợc khả năng giả mạo. Sự khác biệt cơ bản giữa chữ ký điện tử và chữ ký thông thƣờng là ở chỗ: một bản copy tài liệu có chữ ký đƣợc đồng nhất với bản gốc. Nói cách khác, tài liệu có chữ ký trên giấy thƣờng có thể khác biệt với bản gốc điều này để ngăn chặn một bức điện đƣợc ký khỏi bị dùng lại. Ví dụ, nếu B ký một bức điện xác minh cho A rút 100$ từ tài khoản của mình, anh ta chỉ muốn A có khả năng làm điều đó một lần. Vì thế, bản thân bức điện phải chứa thông tin để khỏi bị dùng lại, chẳng hạn nhƣ dùng dịch vụ gán nhãn thời gian (Time Stamping Service). Một sơ đồ chữ ký điện tử thƣờng chứa hai thành phần: thuật toán ký sig() và thuật toán xác minh ver(). B có thể ký một bức điện x dùng thuật toán ký an toàn (bí mật). Kết quả chữ ký y = sig(x) nhận đƣợc có thể đƣợc kiểm tra bằng thuật toán xác minh công khai ver(y). Khi cho trƣớc cặp (x, y), thuật toán xác minh cho giá tri TRUE hay FALSE tuỳ thuộc vào việc chữ ký đƣợc xác thực nhƣ thế nào. Vậy thế nào là chữ ký điện tử? Chúng ta có một số định nghĩa nhƣ sau:  Là một định danh điện tử đƣợc tạo ra bởi máy tính đƣợc các tổ chức sử dụng nhằm đạt đƣợc tính hiệu quả và có hiệu lực nhƣ là các chữ ký tay.  Là một cơ chế xác thực hóa cho phép ngƣời tạo ra thông điệp đính kèm một mã số vào thông điệp giống nhƣ là việc ký một chữ ký lên một văn bản bình thƣờng.
  • 111. Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm 102 Các chữ ký điện tử đƣợc sinh và sử dụng bởi các hệ chữ ký (sơ đồ) điện tử, dƣới đây là định nghĩa một hệ chữ ký điện tử. Định nghĩa: Một sơ đồ chữ ký điện tử là bộ 5 (P, A, K, S, V) thoả mãn các điều kiện dưới đây: 1) P là tập hữu hạn các bức điện (thông điệp, bản rõ) có thể. 2) A là tập hữu hạn các chữ ký có thể. 3) K là tập không gian khoá (tập hữu hạn các khoá có thể). 4) Với mỗi khoá K  K tồn tại một thuật toán ký sigK  S và một thuật toán xác minh verK  V. Mỗi sigk: P → A và verK: P x A → {TRUE, FALSE} là những hàm sao cho mỗi bức điện x  P và mỗi chữ ký y  A thoả mãn phương trình dưới đây: Ver (x, y) =    TRUE nếu y = sig(x) FALSE nếu y ≠ sig(x). [5] Với mỗi K  K, hàm sigK và verK là các hàm đa thức thời gian. Hàm verK sẽ là hàm công khai còn hàm sigK là bí mật. Không thể dễ dàng tính toán để giả mạo chữ ký của B trên bức điện x, nghĩa là với x cho trƣớc chỉ có B mới có thể tính đƣợc y để ver(x, y) = TRUE. Một sơ đồ chữ ký không thể an toàn vô điều kiện vì một ngƣời C nào đó có thể kiểm tra tất cả chữ số y trên bức điện x nhờ dùng thuật toán ver() công khai cho tới khi anh ta tìm thấy chữ ký đúng. Vì thế, nếu có đủ thời gian, C luôn có thể giả mạo chữ ký của B. Nhƣ vậy mục đích của chúng ta là tìm các sơ đồ chữ ký điện tử an toàn về mặt tính toán. Chú ý rằng ai đó có thể giả mạo chữ ký của B trên một bức điện “ngẫu nhiên” x bằng cách tính x = eK(y) với y nào đó; khi đó y = sigK(x). Một biện pháp xung quanh vấn đề khó khăn này là yêu cầu các bức điện chứa đủ phần dƣ để chữ ký giả mạo kiểu này không phù hợp với toàn bộ nội dung của bức điện x trừ một xác suất rất nhỏ. Có thể dùng các hàm Băm (hash function) nhƣ MD4, MD5 trong việc tính kết nối các sơ đồ chữ ký điện tử sẽ loại trừ phƣơng pháp giả mạo này (sẽ trình bày trong các phần sau của tài liệu). 1.2. Hệ chữ ký RSA Dựa vào ƣu điểm của hệ mã RSA, nếu thiết lập đƣợc sơ đồ chữ ký dựa trên bài toán phân tích ra thừa số nguyên tố thì độ an toàn của chữ ký sẽ rất cao. Việc thiết lập sơ đồ xác thực chữ ký RSA rất đơn giản, ta chỉ cần đảo ngƣợc hàm mã hoá và giải mã. Sau đây là sơ đồ chữ ký RSA. Cho n = p*q, trong đó p, q là các số nguyên tố. Đặt P = A = Zn và định nghĩa: K = {(n, p, q, a, b): n=p*q, p và q là các số nguyên tố, ab ≡ 1 (mod  (n))}. Các giá trị n và b là công khai; còn p, q, a là bí mật. Với K = (n, p, q, a, b), ta xác định:
  • 112. Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm 103 sigK(x) = xa mod n và verK(x,y) = TRUE  x ≡ yb (mod n) với x, y  Zn. [5] Thông thƣờng, chữ ký đƣợc kết hợp với hàm mã hoá công khai. Giả sử A muốn gửi một bức điện đã đƣợc mã hoá và đã đƣợc ký đến cho B. Với bản rõ x cho trƣớc, A sẽ tính toán chữ ký của mình y = sigA(x) và sau đó mã hoá cả x và y sử dụng khoá công khai eB của B, kết quả nhận đƣợc là z = eB(x, y). Bản mã z sẽ đƣợc gửi tới B, khi B nhận đƣợc z, đầu tiên anh ta giải mã với hàm giải mã dB của mình để nhận đƣợc (x, y). Sau đó anh ta dùng hàm xác minh công khai của A để kiểm tra xem verA(x,y) = TRUE hay không. Song nếu đầu tiên A mã hoá x , rồi sau đó mới ký lên bản mã nhận đƣợc thì sao? Khi đó, A sẽ tính: y = sigA(eB(x)) A sẽ truyền cặp (z, y) tới B, B sẽ giải mã z và nhận đƣợc x, sau đó xác minh chữ ký y trên x nhờ dùng verA. Một vấn đề nảy sinh nếu A truyền (x, y) kiểu này thì một ngƣời thứ ba C có thể thay chữ ký y của A bằng chữ ký của chính mình: y‟ = sigC(eB(x)) Chú ý rằng, C có thể ký lên bản mã eB(x) ngay cả khi anh ta không biết bản rõ x. Khi đó nếu C truyền (z, y‟) đến B, chữ ký của C đƣợc B xác minh bằng verC và do đó, B cho rằng bản rõ x xuất phát từ C. Do khó khăn này, hầu hết ngƣời sử dụng đƣợc khuyến nghị “ký trƣớc khi mã”. 1.3. Hệ chữ ký ElGammal Hệ chữ ký ElGammal đƣợc đƣa ra vào 1985. Một phiên bản sửa đổi hệ này đƣợc Học viện Quốc gia tiêu chuẩn và kỹ thuật (NIST) đƣa ra nhƣ một chuẩn của chữ ký điện tử. Hệ chữ ký ElGammal đƣợc thiết kế riêng biệt cho mục đích chữ ký, trái ngƣợc với RSA thƣờng đƣợc sử dụng cho cả mục đích mã hoá công khai và chữ ký. Hệ chữ ký ElGammal là không xác định, nghĩa là có rất nhiều giá trị chữ ký cho cùng một bức điện cho trƣớc. Thuật toán xác minh phải có khả năng nhận bất kỳ giá trị chữ ký nào nhƣ là việc xác thực. Sơ đồ chữ ký ElGammal đƣợc miêu tả nhƣ sau: Cho p là một số nguyên tố như là bài toán logarit rời rạc trong Zp, α  Zp * là một phần tử nguyên tử và P = Zp * , A = (Zp * )*Zp-1, và định nghĩa: K = {(p, α, a, β) : β ≡ αa (mod p)} trong đó giá trị p, α và β là công khai, còn a là bí mật. Với K = (p, α, a, β) và chọn một số ngẫu nhiên k  Zp-1 * , định nghĩa: sigK(x, k) = (, ) trong đó:  = αk mod p  = (x - a*)k-1 mod (p – 1). Với x,   Zp * và   Zp-1, định nghĩa: ver(x, , ) = TRUE  β  ≡ αx (mod p). [5]
  • 113. Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm 104 Nếu chữ ký là đúng thì việc xác nhận thành công khi: β  ≡ αa αk (mod p) ≡ αx (mod p). trong đó: a + k ≡ x (mod p -1). B sẽ tính toán chữ ký bằng việc sử dụng cả giá trị bí mật a (một phần của khoá) và số bí mật ngẫu nhiên k (giá trị để ký bức điện). Việc xác minh có thể thực hiện đƣợc chỉ với các thông tin đƣợc công khai: Ví dụ: Chúng ta chọn p = 467, α = 2, a = 127. Ta tính: β = αa mod p = 2127 mod 467 = 132. Bây giờ B muốn ký lên bức điện x = 100 và anh ta chọn một giá trị ngẫu nhiên k = 213 (chú ý là UCLN(213, 466) = 1 và 213-1 mod 466 = 431). Sau đó tính:  = 2213 mod 467 = 29  = (100 – 127*29)431 mod 466 = 51. Bất cứ ai cũng có thể kiểm tra chữ ký này bằng cách tính: 13229 2951 ≡ 189 (mod 467) 2100 ≡ 189 (mod 467). Giả sử kẻ thứ ba C muốn giả mạo chữ ký của B trên bức điện x mà không biết số bí mật a. Nếu C chọn một giá trị  và cố gắng tìm , anh ta phải tính một hàm logarit rời rạc logαx - . Mặt khác, nếu đầu tiên anh ta chọn  để cố gắng tìm  thì anh ta phải tính   = αx (mod p). Cả hai việc này đều không thể thực hiện đƣợc. Tuy nhiên có một lý thuyết mà C có thể ký lên một bức điện ngẫu nhiên bằng cách chọn đồng thời ,  và x. Cho i, j là số nguyên với 0 ≤ i, j ≤ p - 2, và UCLN(j, p - 1) = 1. Sau đó tính:  = αi βj mod p  = - j-1 (mod p-1) x = - ij-1 (mod p-1). Nhƣ vậy, ta xem (, ) là giá trị chữ ký cho bức điện x. Việc xác minh sẽ thực hiện nhƣ sau: β  ≡ )(mod)( 1 pjji jiji     ≡ )(mod 1 p jijiji ij     ≡ )(mod 1 p ji ij     ≡ )(mod 1 pij   ≡ αx (mod p). Ví dụ: Nhƣ ví dụ trên, ta chọn p = 467, α = 2, β = 132. Kể thứ ba C sẽ chọn i = 99 và j = 179. Anh ta sẽ tính:
  • 114. Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm 105  = 299 132179 mod 467 = 117  = -117*151 mod 466 = 41 x = 99*44 mod 466 = 331 Cặp giá trị (117, 41) là giá trị chữ ký cho bức điện 331. Việc xác minh đƣợc thực hiện nhƣ sau: 132117 11741 ≡ 303 (mod 467) 2331 ≡ 303 (mod 467). Một phƣơng pháp thứ hai có thể giả mạo chữ ký là sử dụng lại chữ ký của bức điện trƣớc đó, nghĩa là với cặp (, ) là giá trị chữ ký của bức điện x, nó sẽ đƣợc C ký cho nhiều bức điện khác. Cho h, i và j là các số nguyên, trong đó 0≤ i, j, h ≤ p-2 và UCLN(h - j, p-1) = 1. λ = h αi βj mod p μ = λ(h - j)-1 mod (p-1) x‟ = λ(hx + i)(h - j)-1 mod (p-1). Ta có thể kiểm tra: βλ λμ = αx‟ mod p. Và do đó, (λ, μ) là cặp giá trị chữ ký của bức điện x‟. Điều thứ ba là vấn đề sai lầm của ngƣời ký khi sử dụng cùng một giá trị k trong việc ký hai bức điện khác nhau. Cho (, 1) là chữ ký trên bức điện x1 và (, 2) là chữ ký trên bức điện x2. Việc kiểm tra sẽ thực hiện: β  1 ≡ α 1x (mod p) β  2 ≡ α 2x (mod p). Do đó: )(mod2121 pxx     . Đặt  = αk , khi đó: x1 - x2 = k(1 - 2) (mod p-1). Bây giờ đặt d = UCLN(1 - 2, p - 1). Vì d | (1 - 2) và d | (p - 1) nên nó cũng chia hết cho (x1 - x2). Ta đặt tiếp: x‟ = d x21x  ‟ = d 21   p‟ = d p 1 Cuối cùng, ta đƣợc: x‟ ≡ k‟ (mod p‟). Vì UCLN(‟, p‟) = 1 nên ta có:  = (‟)-1 mod p‟ Nhƣ vậy, giá trị k sẽ đƣợc xác định nhƣ sau:
  • 115. Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm 106 k = x‟ (mod p‟) = x‟ + ip‟ (mod p) Với 0 ≤ i ≤ d-1, ta có thể tìm đƣợc giá trị k duy nhất bằng hàm kiểm tra:  ≡ αk mod p. 1.4. Chuẩn chữ ký điện tử (Digital Signature Standard) 1.4.1. Thuật toán chữ ký điện tử (Digital Signature Algorithm) Tháng 8/1991, NIST đã đƣa ra thuật toán chữ ký điện tử (DSA) là cơ sở cho chuẩn chữ ký điện tử. Đây là một biến thể của thuật toán ElGammal. 1) Chọn một số nguyên tố q với 2159 < q < 2160 . 2) Chọn t sao cho 0 ≤ t ≤ 8 và chọn một số nguyên tố p, trong đó 2511+64t < p < 2512+64t và q phải chia hết (p-1) (hay q là một ướ c nguyên tố củ a p-1). 3) Bây giờ, tạo ra một số α duy nhất cho q trong trường Zp * . - Chọn một giá trị g  Zp * và tính α = g(p-1)/q mod p. - Nếu α = 1 thì quay lại bước trên. (chọn lại giá trị g cho phù hợp) 4) Chọn một số nguyên ngẫu nhiên a để 1 ≤ a ≤ q-1. 5) Tính y = αa mod p. 6) Như vậy , khoá để ký là (p, q, α, y) được công khai và a là khoá bí mật. 1.4.2. Chuẩn chữ ký điện tử Chuẩn chữ ký điện tử (DSS) đƣợc sửa đổi từ hệ chữ ký ElGammal. Nó đƣợc công bố tại hội nghị Tiêu chuẩn xử lý thông tin Liên Bang (FIPS) vào 19/05/1994 và trở thành chuẩn vào 01/12/1994. DSS sử dụng một khoá công khai để kiểm tra tính toàn vẹn của dữ liệu nhận đƣợc và đồng nhất với dữ liệu của ngƣời gửi. DSS cũng có thể sử dụng bởi ngƣời thứ ba để xác định tính xác thực của chữ ký và dữ liệu trong nó. Đầu tiên chúng ta hãy tìm hiểu động cơ của sự thay đổi này, sau đó sẽ tìm hiểu thuật toán của DSS. Trong rất nhiều trƣờng hợp, một bức điện có thể đƣợc mã hoá và giải mã một lần, vì vậy nó đáp ứng cho việc sử dụng của bất kỳ hệ thống bảo mật nào đƣợc biết là an toàn lúc bức điện đƣợc mã hoá. Nói cách khác, một bức điện đƣợc ký đảm nhiệm chức năng nhƣ một văn bản hợp pháp, chẳng hạn nhƣ các bản hợp đồng, vì vậy nó cũng giống nhƣ việc cần thiết để xác minh chữ ký sau rất nhiều năm bức điện đƣợc ký. Điều này rất quan trọng cho việc phòng ngừa về độ an toàn của chữ ký đƣợc đƣa ra bởi một hệ thống bảo mật. Vì hệ chữ ký ElGammal không đảm nhận đƣợc điều này, việc thực hiện này cần một giá trị lớn modulo p. Tất nhiên p nên có ít nhất 512-bit, và nhiều ngƣời cho rằng độ dài của p nên là 1024-bit nhằm chống lại việc giả mạo trong tƣơng lai. Tuy nhiên, ngay cả một thuật toán modulo 512-bit dùng để ký cũng phải thực hiện việc tính toán đến 1024-bit. Cho ứng dụng tiềm năng này, có rất nhiều card thông minh đƣợc đƣa ra, nhằm thực hiện một chữ ký ngắn hơn nhƣ mong muốn. DSS đã sửa đổi hệ chữ ký ElGammal cho phù hợp theo cách này một cách khéo léo, để mỗi 160-bit bức điện đƣợc ký sử dụng một chữ ký 320-bit, nhƣng việc tính toán đƣợc thực hiện với 512-bit modulo p. Cách này đƣợc thực hiện nhờ việc chia nhỏ Zp * thành các trƣờng có kích thƣớc 2160 . Việc thay đổi này sẽ làm thay đổi giá trị :
  • 116. Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm 107  = (x + α)k-1 mod(p - 1). Điều này cũng làm cho giá trị kiểm tra cũng thay đổi: αx β ≡  (mod p). (1.4.2.1) Nếu UCLN(x + α, p - 1) = 1 thì sẽ tồn tại -1 mod (p - 1), do đó (6.1) sẽ biến đổi thành: 11   x ≡  (mod p). (1.4.2.2) Đây chính là sự đổi mới của DSS. Chúng ta cho q là một số nguyên tố 160-bit sao cho q | (p-1), và α là một số thứ q của 1 mod p, thì β và  cũng là số thứ q của 1 mod p. Do đó α, β và  có thể đƣợc tối giản trong modulo p mà không ảnh hƣởng gì đến việc xác minh chữ ký. Sơ đồ thuật toán nhƣ sau: Cho p là một số nguyên tố 512-bit trong trường logarit rời rạc Zp; q là một số nguyên tố 160-bit và q chia hết (p-1). Cho α  Zp * ; P = Zp * , A = Zq*Zq, và định nghĩa: K = {(p, q, α, a, β) : β ≡ αa (mod p)} trong đó giá trị p, q, α và β là công khai, còn a là bí mật. Với K = (p, α, a, β) và chọn một số ngẫu nhiên k (1 ≤ k ≤ q-1), định nghĩa: sigK(x, k) = (, ) trong đó:  = (αk mod p) mod q  = (x + a*)k-1 mod q. Với x  Zp * và ,   Zq, việc xác minh được thực hiên bằng cách tính: e1 = x-1 mod q e2 = -1 mod q ver(x, , ) = TRUE  ( 21 ee  mod p) mod q = . [5] Chú ý rằng, với DSS thì   0 (mod q) vì giá trị: -1 mod q cần cho việc xác minh chữ ký (điều này cũng tƣơng tự nhƣ việc yêu cầu UCLN(, p-1) = 1 để (1.4.2.1) → (1.4.2.2)). Khi B tính một giá trị  ≡ 0 (mod q) trong thuật toán ký, anh ta nên bỏ nó đi và chọn một số ngẫu nhiên k mới. Ví dụ: Chúng ta chọn q = 101 và p = 78*q + 1 = 7879 và g = 3 là một nguyên tố trong Z7879. Vì vậy , ta có thể tính: α = 378 mod 7879 = 170. Chọn a = 75, do đó: β = αa mod 7879 = 4567. Bây giờ, B muốn ký một bức điện x = 1234, anh ta chọn một số ngẫu nhiên k = 50. Vì vậy : k-1 mod 101 = 99.
  • 117. Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm 108 Tiếp đó:  = (17050 mod 7879) mod 101 = 2518 mod 101 = 94  = (1234 + 75*94)99 mod 101 = 97. Cặp chữ ký (94, 97) cho bức điện 1234 đƣợc xác thƣc nhƣ sau: -1 = 97-1 mod 101 = 25 e1 = 1234*25 mod 101 = 45 e2 = 94*25 mod 101 = 27 (17045 456727 mod 7879) mod 101 = 2518 mod 101 = 94. Kể từ khi DSS đƣợc đề xuất vào năm 1991, đã có nhiều phê bình đƣa ra. Chẳng hạn nhƣ kích cỡ của moduloe p bị cố định 512-bit, điều mà nhiều ngƣời không muốn. Vì vậy, NIST đã thay đổi chuẩn này để có thể thay đổi kích thƣớc moduloe (chia bởi 64) thành một dãy từ 512 đến 1024-bit. Ngoài ra, một sự phê bình khác về DSS là chữ ký đƣợc tạo ra nhanh hơn so với việc xác minh nó. Trái ngƣợc với hệ chữ ký RSA thì việc xác minh công khai là rất nhanh chóng (mà ta biết trong thƣơng mại điện tử việc xác minh là rất quan trọng và đòi hỏi thời gian thực hiện phải nhanh chóng). 1.5. Mô hình ƣ́ ng dụng củ a chƣ̃ ký điện tƣ̉ Khác với chữ ký thông thƣờ ng trên thƣ̣c tế , các chữ ký điện tử là một thông tin ở dạng số hóa đƣợc tạo ra từ văn bản sử dụng hệ chữ ký điện tử và không phải là một phầ n của văn bản . Do đó sau khi đƣợc tạo ra , chƣ̃ ký điện tƣ̉ sẽ đƣợc gƣ̉ i đi cù ng vớ i thông điệp, ngƣờ i nhận nhận đƣợc thông điệp và chƣ̃ ký tƣơng ƣ́ ng sẽ thƣ̣c hiện thuật toán kiểm tra xem chữ ký có đúng là chữ ký của ngƣời gửi lên văn bản nhận đƣợc hay không. Mô hình ƣ́ ng dụng nà y có thể đƣợc minh họa qua hình vẽ sau: B - ngƣời nhận RSA Khóa công khai của B Khóa phiên K C1 RSA Khóa bí mật của B C1 Khóa phiên K AESP, S C2 AES C2 P, S A - ngƣời gửi KýP S Khóa bí mật của A Kiểm tra chữ ký P Khóa công khai của B Hình 5.1: Mô hình ƣ́ ng dụng của chƣ̃ ký điện tƣ̉
  • 118. Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm 109 2. Hàm Băm (Hash Function) 2.1. Khái niệm Ta thấy rằng các hệ chữ ký đƣợc miêu tả ở trên chỉ cho phép ký các bức điện ngắn. Ví dụ nhƣ trong DSS, 160-bit bức điện đƣợc ký với 320-bit. Nhƣ vậy với những bức điện hàng Megabyte thì chúng ta phải làm thế nào! Một cách đơn giản để giải quyết vấn đề này là chia bức điện lớn thành những đoạn nhỏ 160-bit, và sau đó ký lên mỗi đoạn nhỏ đó, điều này cũng tƣơng tự nhƣ mã hoá một chuỗi dài bản rõ bằng việc mã hoá từng ký tự bản rõ sử dụng cùng một khoá. Nhƣng có một vài vấn đề trong việc tạo chữ ký điện tử. Đầu tiên là với một bức điện dài, chúng ta sẽ kết thúc với một lƣợng chữ ký khổng lồ. Ngoài ra, điều bất tiện là hầu hết các hệ chữ ký đều rất chậm. Nghiêm trọng hơn là với rất nhiều đoạn đƣợc ký nhƣ vậy sẽ dẫn đến khi sắp xếp lại và có thể một vài đoạn bị bỏ đi (mất đi tính toàn vẹn). Để giải quyết tất cả các rắc rối này, ngƣời ta sử dụng hàm Băm (hash function). Định nghĩa: Một hàm Băm H sẽ lấy ở đầu vào một thông tin X có kích thƣớc biến thiên và sinh kết quả là một chuỗi có độ dài cố định, đƣợc gọi là cốt của bức điện (message digest). Ví dụ nhƣ khi B muốn ký một bức điện x (độ dài bất kỳ), đầu tiên anh ta tính cốt của bức điện z = h(x) (độ dài cố định) và sau đó ký y = sigK(z). Anh ta phát cặp (x,y) lên kênh truyền, bây giờ việc kiểm tra có thể thực hiện bằng việc tính lại cốt của bức điện z = h(x), sau đó kiểm tra verK(z,y) có bằng TRUE hay không. Hình 5.2: Sơ đồ chữ ký sử dụng hàm Băm 2.2. Đặc tính của hàm Băm Một vấn đề cần bàn ở đây là tính đụng độ của hàm Băm. Theo nguyên lý Diricle: nếu có n+1 con thỏ được bỏ vào n cái chuồng thì phải tồn tại ít nhất một cái chuồng mà trong đó có ít nhất là hai con thỏ ở chung [9]. Rõ ràng với không gian giá trị Băm nhỏ hơn rất nhiều so với không gian tin về mặt kích thƣớc thì chắc chắn sẽ tồn tại đụng độ, nghĩa là có hai tin x  x‟ mà giá trị Băm của chúng là giống nhau, tức h(x) = h(x‟). Sau đây chúng ta sẽ xét các dạng tấn công có thể có, từ đó rút ra các tính chất của hàm Băm: z = h(x) y = sigK(z)x x.y verK(y) z = h(x) 0: true 1: false x.y
  • 119. Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm 110 Dạng tấn công thứ nhất là ngƣời C bắt đầu với một bức điện đƣợc ký có giá trị (x, y), trong đó y = sigK(h(x)) (cặp (x, y) có thể là bất kỳ bức điện trƣớc đó mà B đã ký). Sau đó, C tính z = h(x) và cố gắng tìm x‟  x để h(x‟) = h(x). Nếu C làm đƣợc điều này thì cặp (x‟, y) sẽ là một bức điện đƣợc ký có giá trị (một bức điện giả mạo có giá trị). Để ngăn cản việc này, hàm Băm h phải thoả mãn tính chất sau: Tính chất 1: Một hàm Băm h có tính phi đụng độ cao khi với một bức điện x cho trước , không tìm ra một bức điện x’  x sao cho h(x’) = h(x). [5] Một dạng tấn công khác mà ngƣời C có thể làm là: đầu tiên anh ta tìm 2 bức điện x  x‟ sao cho h(x) = h(x‟). Sau đó C đƣa bức điện x cho B và thuyết phục B ký vào cốt bức điện h(x); và vì vậy, anh ta tìm đƣợc y. Nhƣ vậy, cặp (x‟, y) là một cặp chữ ký giả có giá trị. Điều này là nguyên nhân mà việc thiết kế hàm Băm phải thoả mãn tính chất 2 nhƣ sau: Tính chất 2: Một hàm Băm h có tính đụng độ cao khi không thể tìm ra những bức điện x và x’ sao cho x’  x và h(x’) = h(x). [5] Dạng tấn công thứ 3 là chọn một giá trị cốt z ngẫu nhiên. Ngƣời C sẽ tính một chữ ký với một giá trị ngẫu nhiên z, sau đó anh ta tìm một bức điện x sao cho z = h(x). Nếu anh ta làm đƣợc điều này thì cặp (x, y) là cặp chữ ký giả có giá trị. Nhƣ vậy một tính chất nữa mà h cần thoả mãn là tính một chiều: Tính chất 3: Một hàm Băm h có tính một chiều khi với cốt của một bức điện z cho trước không thể tìm được một bức điện x sao cho h(x) = z. [5] 2.3. Birthday attack Nhƣ đã biết, một dạng tấn công có khả năng đối với các hệ chữ ký điện tử có dùng hàm Băm là tìm cách tạo ra những văn bản x và x‟ có nội dung khác nhau (một có lợi và một là bất lợi cho bên ký) mà giá trị Băm giống nhau. Kẻ địch có thể tìm cách tạo ra một số lƣợng rất lớn các văn bản có nội dung không thay đổi nhƣng khác nhau về biểu diễn nhị phân (đơn giản là việc thêm bớt khoảng trắng hay dùng nhiều từ đồng nghĩa để thay thế ...), sau đó sử dụng một chƣơng trình máy tính để tính giá trị Băm của các văn bản đó và đem so sánh với nhau để hi vọng tìm ra một cặp văn bản đụng độ (sử dụng phƣơng pháp thống kê). Nhƣng việc này đòi hỏi số văn bản cần đƣợc tính giá trị Băm phải lớn hơn kích thƣớc không gian Băm rất nhiều. Chẳng hạn nhƣ nếu hàm Băm có không gian Băm 64- bit thì số lƣợng văn bản cần đƣợc đem ra nạp vào chƣơng trình phải ít nhất 264 (với một máy tính có thể thực hiện việc Băm 1 triệu bức điện trong 1 giây, thì phải mất 6000.000 năm tính toán [6]) Tuy nhiên nếu kẻ địch thử với lƣợng văn bản ít hơn nhiều, trong phạm vi có thể tính đƣợc thì xác suất để tìm đƣợc đụng độ sẽ nhƣ thế nào? Câu trả lời là “có thể thực hiện đƣợc”. Bản chất của hiện tƣợng này đƣợc minh hoạ rõ thông qua phát biểu sau, thƣờng đƣợc gọi là nghịch lý ngày sinh (birthday paradox):
  • 120. Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm 111 Trong một nhóm có 23 người bất kỳ , xác suất để có hai người có cùng ngày sinh nhật ít nhất là ½. [5] Một cách tổng quát, giả sử một hàm Băm có n giá trị Băm khác nhau, nếu chúng ta có k giá trị Băm từ k thông tin khác nhau đƣợc chọn ngẫu nhiên, thì xác suất để không xảy ra đụng độ là: (1- n 1 )(1- n 2 ) ... (1- n k 1 ) =     1 1 )1( k i n i . Với 1 n i , thì     1 1 )1( k i n i n kkk i n i ee 2 )1(1 1      . Do đó, xác suất để xảy ra đụng độ ít nhất là n kk e 2 )1( 1   . Giả sử gọi xác suất trên là  ta có : ( 1) 2 1 k k n e      (*) Suy ra : 2 1 2 log 1 k k n     , suy ra: 1 2 log 1 k n    (**) Theo công thƣ́ c (**) này khi giá trị e rất gần với 1 thì 1 log 1  vẫn khá nhỏ nên k là tỉ lệ với n . Vớ i ε = 0.5 ta có k≈1.1774 n (***). Ví dụ: Vớ i k = 23 là số ngƣời, n = 365 là số ngày trong năm thì xác xuất tồn tại hai ngƣời có cùng sinh nhật sẽ là  = 1 – 2,7-0,7  0,5075. Và đây chính là nghịch lý ngày sinh đã phát biểu ở trên. Hoặc chú ng ta có thể thay n = 365 vào công thức (***) sẽ nhận đƣợc k = 22.49 ≈23. Nghịch lý ngày sinh hay công thƣ́ c (*) cho phé p chú ng ta dƣ̣ đoá n đƣợc chặn dƣớ i của số lƣợng phép thử cần thực hiện để tìm ra đụng độ của một hà m băm . Một hà m băm 40-bit sẽ là không an toà n vì chỉ cầ n thƣ̉ 220 (khoảng 1 tỉ) phép thử chúng ta đã có xác suấ t đụng độ là 50%. Tƣơng tƣ̣, với một hàm Băm có không gian Băm 64-bit nêu trên thì số phé p thƣ̉ để có xác suất đụng độ là 50% sẽ là 232 , điều này là có khả năng thức hiện đƣợc. Ví dụ với loại máy tính nêu trên chỉ mất khoảng 1 giờ tính toán. Hàm băm đƣợc coi là an toàn là các hàm băm 128 bit (nhƣ MD5 ..) vì khi đó s ố lƣợng phép thƣ̉ sẽ là 264 . Tuy nhiên hiện nay vớ i sƣ̣ phá t triển của cá c thuật toá n thá m mã hàm băm mới đƣợc phát hiện các hàm băm 128 cũng đƣợc khuyến nghị là không nên sƣ̉ dụng trong cá c hệ thố ng bảo mật mớ i . Các hàm băm đƣợc khuyế n nghi ̣thay thế cho MD5 là các hàm băm 164 bit nhƣ DSS, SHA2. 2.4. Một số hàm Băm nổi tiếng 2.4.1. MD5 (Message Digest) Ronald Rivest là ngƣời đã phát minh ra các hàm Băm MD2, MD4 (1990) và MD5 (1991). Do tính chất tƣơng tự của các hàm Băm này, sau đây chú ng ta sẽ xem xét hàm
  • 121. Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm 112 Băm MD5, đây là một cải tiến của MD4 và là hàm Băm đƣợc sử dung rộng rãi nhất, nguyên tắ c thiế t kế của hà m băm nà y cũng là nguyên tắ c chung cho rấ t nhiề u cá c hà m băm khá c. a. Miêu tả MD5: Đầu vào là những khối 512-bit, đƣợc chia cho 16 khối con 32-bit. Đầu ra của thuật toán là một thiết lập của 4 khối 32-bit để tạo thành một hàm Băm 128-bit duy nhất. Đầu tiên, ta chia bức điện thành các khối 512-bit, với khối cuối cùng (đặt là x và x < 512-bit) của bức điện, chúng ta cộng thêm một bit 1 vào cuối của x, theo sau đó là các bit 0 để đƣợc độ dài cần thiết (512 bit). Kết quả là bức điện vào là một chuỗi M có độ dài chia hết cho 512; vì vậy ta có thể chia M ra thành các N word 32-bit (N word này sẽ chia hết cho 16). Bây giờ, ta bắt đầu tìm cốt của bức điện với 4 khối 32-bit A, B, C và D (đƣợc xem nhƣ thanh ghi) : A = 0x01234567 B = 0x89abcdef C = 0xfedcba98 D = 0x76543210. ngƣời ta thƣờng gọi A, B, C, D là các chuỗi biến số (chaining variables). Bức điện đƣợc chia ra thành nhiều khối 512-bit, mỗi khối 512-bit lại đƣợc chia ra 16 khối 32-bit đi vào bốn vòng lặp của MD5. Giả sử ta đặt a, b, c và d thay cho A, B, C và D đối với khối 512-bit đầu tiên của bức điện. Bốn vòng lặp trong MD5 đều có cấu trúc giống nhau. Mỗi vòng thực hiện 16 lần biến đổi: thực hiện với một hàm phi tuyến của 3 trong 4 giá trị a, b, c và d; sau đó nó cộng kết quả đến giá trị thứ 4, tiếp đó cộng với một khối con 32-bit và một hằng số. Sau đó, nó dịch trái một lƣợng bit thay đổi và cộng kết quả vào một trong 4 giá trị a, b, c hay d. Kết quả cuối cùng là một giá trị mới đƣợc thay thế một trong 4 giá trị a, b, c hay d. Hình 5.3: Sơ đồ vòng lặp chính của MD5 A B C D Vòng 1 Vòng 2 Vòng 3 Vòng 4 A B C D Khối của bức điện
  • 122. Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm 113 Hình 5.4: Sơ đồ một vòng lặp MD5 Có bốn hàm phi tuyến, mỗi hàm này đƣợc sử dụng cho mỗi vòng: F(X,Y,Z ) = (X  Y) ((X)  Z) G(X,Y,Z ) = ((X  Z) (Y  (Z))) H(X,Y,Z ) = X  Y  Z I(X,Y,Z ) = Y  (X (Z)). trong đó:  là XOR,  là AND, là OR, và  là NOT. Những hàm này đƣợc thiết kế sao cho các bit tƣơng ứng của X, Y và Z là độc lập và không ƣu tiên, và mỗi bit của kết quả cũng độc lập và ngang bằng nhau. Nếu Mj là một biểu diễn của khối con thứ j (j = 16) và <<<s là phép dịch trái của s bit, thì các vòng lặp có thể biểu diễn nhƣ sau: FF(a,b,c,d,Mj,s,ti) đƣợc biểu diễn a = b + ((a + F(b,c,d) + Mj + ti) <<< s) GG(a,b,c,d,Mj,s,ti) đƣợc biểu diễn a = b + ((a + G(b,c,d) + Mj + ti) <<< s) HH(a,b,c,d,Mj,s,ti) đƣợc biểu diễn a = b + ((a + H(b,c,d) + Mj + ti) <<< s) II(a,b,c,d,Mj,s,ti) đƣợc biểu diễn a = b + ((a + I(b,c,d) + Mj + ti) <<< s). Bốn vòng (64 bƣớc) sẽ thực hiện nhƣ sau: Vòng 1: FF (a, b, c, d, M0, 7, 0x76aa478) FF (d, a, b, c, M1, 12, 0xe8c7b756) FF (c, d, a, b, M2, 17, 0x242070db) FF (b, c, d, a, M3, 22, 0xc1bdceee) FF (a, b, c, d, M4, 7, 0xf57c0faf) FF (d, a, b, c, M5, 12, 0x4787c62a) FF (c, d, a, b, M6, 17, 0xa8304613) FF (b, c, d, a, M7, 22, 0xfd469501) FF (a, b, c, d, M8, 7, 0x698098d8) FF (d, a, b, c, M9, 12, 0x8b44f7af) a b c d Hàm phi tuyến <<< s Mj ti
  • 123. Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm 114 FF (c, d, a, b, M10, 17, 0xffff5bb1) FF (b, c, d, a, M11, 22, 0x895cd7be) FF (a, b, c, d, M12, 7, 0x6b901122) FF (d, a, b, c, M13, 12, 0xfd987193) FF (c, d, a, b, M14, 17, 0xa679438e) FF (b, c, d, a, M15, 22, 0x49b40821). Vòng 2: GG (a, b, c, d, M1, 5, 0x61e2562) GG (d, a, b, c, M6, 9, 0xc040b340) GG (c, d, a, b, M11, 14, 0x265e5a51) GG (b, c, d, a, M0, 20, 0xe9b6c7aa) GG (a, b, c, d, M5, 5, 0xd62f105d) GG (d, a, b, c, M10, 9, 0x02441453) GG (c, d, a, b, M15, 14, 0xd8a1e681) GG (b, c, d, a, M4, 20, 0xe7d3fbc8) GG (a, b, c, d, M9, 5, 0x21e1cde6) GG (d, a, b, c, M14, 9, 0xc33707d6) GG (c, d, a, b, M3, 14, 0xf4d50d87) GG (b, c, d, a, M8, 20, 0x455a14ed) GG (a, b, c, d, M13, 5, 0xa9e3e905) GG (d, a, b, c, M2, 9, 0xfcefa3f8) GG (c, d, a, b, M7, 14, 0x676f02d9) GG (b, c, d, a, M12, 20, 0x8d2a4c8a). Vòng 3: HH (a, b, c, d, M5, 4, 0xfffa3942) HH (d, a, b, c, M8, 11, 0x8771f681) HH (c, d, a, b, M11, 16, 0x6d9d6122) HH (b, c, d, a, M14, 23, 0xfde5380c) HH (a, b, c, d, M1, 4, 0xa4beea44) HH (d, a, b, c, M4, 11, 0x4bdecfa9) HH (c, d, a, b, M7, 16, 0xf6bb4b60) HH (b, c, d, a, M10, 23, 0xbebfbc70) HH (a, b, c, d, M13, 4, 0x289b7ec6) HH (d, a, b, c, M0, 11, 0xeaa127fa) HH (c, d, a, b, M3, 16, 0xd4ef3085) HH (b, c, d, a, M6, 23, 0x04881d05) HH (a, b, c, d, M9, 4, 0xd9d4d039) HH (d, a, b, c, M12, 11, 0xe6db99e5) HH (c, d, a, b, M15, 16, 0x1fa27cf8) HH (b, c, d, a, M2, 23, 0xc4ac5665). Vòng 4: II (a, b, c, d, M0, 6, 0xf4292244) II (d, a, b, c, M7, 10, 0x432aff97)
  • 124. Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm 115 II (c, d, a, b, M14, 15, 0xab9423a7) II (b, c, d, a, M5, 21, 0xfc93a039) II (a, b, c, d, M12, 6, 0x655b59c3) II (d, a, b, c, M3, 10, 0x8f0ccc92) II (c, d, a, b, M10, 15, 0xffeff47d) II (b, c, d, a, M1, 21, 0x85845dd1) II (a, b, c, d, M8, 6, 0x6fa87e4f) II (d, a, b, c, M15, 10, 0xfe2ce6e0) II (c, d, a, b, M6, 15, 0xa3013414) II (b, c, d, a, M13, 21, 0x4e0811a1) II (a, b, c, d, M4, 6, 0xf7537e82) II (d, a, b, c, M11, 10, 0xbd3af235) II (c, d, a, b, M2, 15, 0x2ad7d2bb) II (b, c, d, a, M9, 21, 0xeb86d391). Những hằng số ti đƣợc chọn theo quy luật sau: ở bƣớc thứ i giá trị ti là phần nguyên của 232 *abs(sin(i)), trong đó i = [0..63] đƣợc tính theo radian. Sau tất cả những bƣớc này a, b, c và d lần lƣợt đƣợc cộng với A, B, C và D để cho kết quả đầu ra; và thuật toán tiếp tục với khối dữ liệu 512-bit tiếp theo cho đến hết bức điện. Đầu ra cuối cùng là một khối 128-bit của A, B, C và D, đây chính là hàm Băm nhận đƣợc. b. Tính bảo mật trong MD5: Ron Rivest đã phác hoạ những cải tiến của MD5 so với MD4 nhƣ sau:  Vòng thứ 4 đƣợc thêm vào (còn MD4 chỉ có 3 vòng).  Mỗi bƣớc đƣợc cộng thêm một hằng số duy nhất.  Hàm G ở vòng 2 thay đổi từ ((X  Y) (X  Z) (Y  Z)) thành ((X  Z) (Y  (Z))) nhằm giảm tính đối xứng của G (giảm tính tuyến tính).  Mỗi bƣớc đƣợc cộng kết quả của bƣớc trƣớc nó, làm các quá trình có tính liên kết, phụ thuộc lẫn nhau.  Việc các khối con bị thay đổi khi vào vòng 2 và vòng 3 làm cho khuôn dạng cấu trúc vòng lặp thay đổi theo.  Số lƣợng lƣợng bit dịch trái của mỗi vòng đƣợc tối ƣu và các bƣớc dịch ở mỗi vòng là khác nhau. Năm 1993, den Boer và Bosselaers đã tìm ra đụng độ trong việc sử dụng hàm nén (vòng 2 và 3) của MD5. Điều này phá vỡ quy luật thiết kế MD5 là chống lại sự đụng độ, nhƣng MD5 vẫn là hàm Băm đƣợc sử dụng rộng rãi hiện nay. 2.4.2. SHA (Secure Hash Algorithm) Năm 1995, tổ chức NIST cùng NSA đã thiết kế ra thuật toán hàm Băm an toàn (SHA) sử dụng cho chuẩn chữ ký điện tử DSS. SHA đƣợc thiết kế dựa trên những nguyên tắc của MD4/MD5, tạo ra 160-bit giá trị Băm. a. Miêu tả SHA:
  • 125. Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm 116 Cũng giống với MD5, bức điện đƣợc cộng thêm một bit 1và các bit 0 ở cuối bức điện để bức điện có thể chia hết cho 512. SHA sử dụng 5 thanh ghi dịch: A = 0x67452301 B = 0xefcdab89 C = 0x98badcfe D = 0x10325476 E = 0xc3d2e1f0 Bức điện đƣợc chia ra thành nhiều khối 512-bit. Ta cũng đặt là a, b, c, d và e thay cho A, B, C, D và E đối với khối 512-bit đầu tiên của bức điện. SHA có bốn vòng lặp chính với mỗi vòng thực hiện 20 lần biến đổi: bao gồm thực hiện với một hàm phi tuyến của 3 trong 5 giá trị a, b, c, d và e; sau đó cũng đƣợc cộng và dịch nhƣ trong MD5. SHA xác lập bốn hàm phi tuyến nhƣ sau: ft(X,Y,Z) = (X  Y) ((X)  Z) với 0 ≤ t ≤ 19 ft(X,Y,Z) = X  Y  Z với 20 ≤ t ≤ 39 ft(X,Y,Z) = (X  Y) (X  Z) (Y  Z) với 40 ≤ t ≤ 59 ft(X,Y,Z) = X  Y  Z với 60 ≤ t ≤ 79. Bốn hằng số sử dụng trong thuật toán là: Kt = 21/2 /4 = 0x5a827999 với 0 ≤ t ≤ 19 Kt = 31/2 /4 = 0x6ed9eba1 với 20 ≤ t ≤ 39 Kt = 51/2 /4 = 0x8f1bbcdc với 40 ≤ t ≤ 59 Kt = 101/2 /4 = 0xca62c1d6 với 60 ≤ t ≤ 79. Các khối bức điện đƣợc mở rộng từ 16 word 32-bit (M0 đến M15) thành 80 word 32- bit (W0 đến W79) bằng việc sử dụng thuật toán mở rộng: Wt = Mt với 0 ≤ t ≤ 15 Wt = (Wt-3  Wt-8  Wt-14  Wt-16) với 16 ≤ t ≤ 79. Ta có thể miêu tả một vòng lặp của SHA nhƣ sau:
  • 126. Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm 117 Hình 5.5: Sơ đồ một vòng lặp của SHA Nếu gọi Wt là biểu diễn của khối con thứ t của bức điện đƣợc mở rộng, và <<<s là biểu diễn dịch trái s bit, thì vòng lặp chính của SHA nhƣ sau: a = A, b = B, c = C, D = D, e = E, for t = 0 to 79 { TEMP = (a <<< 5) + ft(b, c, d) + e +Wt + Kt, e = d, d = c, c = b <<< 30, b = a, a = TEMP, } A = A + a, B = B + b, C = C + c, D = D + d, E = E + e, Thuật toán tiếp tục với khối 512-bit tiếp theo cho tới khi hết bức điện, và kết quả sau cùng trong 4 thanh ghi A, B, C, D và E chính là hàm Băm SHA 160-bit. b. Tính bảo mật trong SHA: Để hiểu rõ hơn về tính bảo mật của SHA, ta hãy so sánh SHA với MD5 để có thể tìm ra những điểm khác nhau của hai hàm Băm này:  MD5 và SHA đều cộng thêm các bit “giả” để tạo thành những khối chia hết cho 512-bit, nhƣng SHA sử dụng cùng một hàm phi tuyến f cho cả bốn vòng. ei-1 di-1 ci-1 bi-1 ai-1 ei di ci bi ai Hàm phi tuyến <<< 30 <<< 5 Wt Kt
  • 127. Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm 118  MD5 sử dụng mỗi hằng số duy nhất cho mỗi bƣớc biến đổi, SHA sử dụng mỗi hằng số cho mỗi vòng biến đổi, hằng số dịch này là một số nguyên tố đối với độ lớn của word (giống với MD4).  Trong hàm phi tuyến thứ 2 của MD5 có sự cải tiến so với MD4, SHA thì sử dụng lại hàm phi tuyến của MD4, tức (X  Y) (X  Z) (Y  Z).  Trong MD5 với mỗi bƣớc đƣợc cộng kết quả của bƣớc trƣớc đó. Sự khác biệt đối với SHA là cột thứ 5 đƣợc cộng (không phải b, c hay d nhƣ trong MD5), điều này làm cho phƣơng pháp tấn công của Boer-Bosselaers đối với SHA bị thất bại (den Boer và Bosselaers là hai ngƣời đã phá thành công 2 vòng cuối trong MD4). Cho đến nay, chƣa có một công bố nào đƣợc đƣa ra trong việc tấn công SHA, bởi vì độ dài của hàm Băm SHA là 160-bit, nó có thể chống lại phƣơng pháp tấn công bằng vét cạn (kể cả birthday attack) tốt hơn so với hàm Băm MD5 128-bit. 2.5. Một số ƣ́ ng dụng củ a hàm Băm Nhƣ đã trình bà y ở phầ n đầ u chƣơng , ứng dụng chính của các hàm băm là sƣ̉ dụng với các hệ chữ ký điện tử , trong đó thay vì ký trƣ̣c tiế p lên cá c văn bản , thông điệp (mà trong đa số trƣờng hợp là rất lớn, tố c độ chậm) ngƣờ i ta sẽ ký lên giá tri ̣băm đại diện cho toà n bộ văn bản đó . Điề u nà y đặc biệt quan trọng và hiệu quả bở i vì chú ng ta biết rằng cá c hệ chƣ̃ ký điện tƣ̉ đề u là m việc vớ i cá c phép tính số học số lớ n nên bản thân chúng đã tƣơng đối chậm, việc sƣ̉ dụng giá tri ̣băm thay cho toà n bộ v ăn bản là giải phá p toàn diện khắc phục đƣợc yếu điểm này của các hệ chữ ký điện tử . Ngoài việc xử dụng vớ i cá c hệ chƣ̃ ký điện tƣ̉ hà m băm cò n đƣợc sƣ̉ dụng và o cá c mục đích khá c nhƣ : xác thƣ̣c hó a thông điệp, xác thƣ̣c hó a ngƣờ i dù ng. Đối với các ứng dụng không cần giữ bí mật thông điệp mà chỉ cần đảm bảo thông điệp không bi ̣thay đổi trên đƣờ ng truyền ngƣờ i ta sẽ sƣ̉ dụng hà m băm cho mục đích xá c thƣ̣c tính nguyên vẹn của thông điệ p đó . Chẳng hạn chú ng ta có một phầ n mềm mã nguồ n mở ở dạng setup muố n phân phố i cho ngƣờ i dù ng , rõ ràng việc gửi phần mềm đó tớ i má y tính của ngƣờ i dù ng là không cầ n phải mã hó a , tuy nhiên nếu nhƣ phầ n mề m đó bị thay đổi trên đƣờ ng truyề n (chẳng hạn nhƣ bi ̣gắ n thêm cá c spyware , virus …) thì sẽ rấ t nguy hiểm . Để đảm bảo chú ng ta sẽ cung cấ p giá tri ̣băm của phầ n mề m đó (khi đó phầ n mềm chính là thông điệp ). Ngƣờ i dù ng sẽ download cả ph ần mềm và giá trị băm nhận đƣợc , sau đó tiế n hà nh băm lại , đố i sá nh giá tri ̣băm nhận đƣợc vớ i giá tri ̣băm đƣợc cung cấ p cù ng vớ i phầ n mề m , nế u hai giá tri ̣nà y khớ p nhau thì có thể đảm bảo phầ n mềm không bi ̣sƣ̉ a đổi trên đƣờ ng truyề n. Hiện nay đa số cá c phầ n mềm mã nguồ n mở đề u đƣợc phân phố i theo cá ch nà y. Trong cá c hệ thố ng yêu cầ u có xá c thƣ̣c ngƣờ i dù ng nhƣ cá c hệ quản tri ̣cơ sở dƣ̃ liệu, hệ điề u hà nh , các ứng dụng web , ứng dụng dạng desktop application , để lƣu mật khẩu ngƣờ i dù ng ngƣờ i ta cũng sƣ̉ dụng cá c hà m băm hoặc cá c hệ mã trong cá c vai trò của hàm băm (không sƣ̉ dụng khó a ). Khi đó mỗi tà i khoản của ngƣờ i dù ng thay vì lƣu dƣớ i dạng tên truy c ập (username) và mật khẩu (password) sẽ đƣợc lƣu dƣới dạng : tên ngƣờ i dù ng, giá trị băm của mật khẩu . Khi một ngƣờ i dù ng đăng nhập và o hệ thố ng , hệ thố ng sẽ lấ y tên truy cập , mật khẩu họ nhập và o , kiểm tra xem có tên truy cập nà o nhƣ vậy hay không . Nế u có sẽ tiế n hà nh băm giá tri ̣mật khẩu do ngƣờ i dù ng nhập và o , đố i
  • 128. Chƣơng V: Chƣ̃ ký điện tƣ̉ và hà m băm 119 sánh với giá trị băm tƣơng ứng lƣu trong cơ sở dữ liệu (có thể ở dạng file text , xml, hay file cơ sở dƣ̃ liệu của một hệ quản trị cơ sở dữ liệu nào đó). Nế u kế t quả đố i sá nh là khớ p thì ngƣời dùng đó là hợp lệ , ngƣợc lại nếu không khớ p có nghĩa là sai mật khẩu . Hiện nay tấ t cả cá c hệ quản tri ̣cơ sở dƣ̃ liệu đều đƣợc trang bi ̣cá c hà m băm để cho phép ngƣờ i dù ng tạo ra cá c giá tri ̣băm của mật khẩu ngƣờ i dù ng và lƣu lại cá c giá tri ̣băm nà y. Việc lƣu cá c giá tri ̣băm đảm bảo chú ng ta không bi ̣lộ mật khẩu do mật khẩu đƣợc lƣu ở dạng nguyên bản trên má y tính hoặc khi truyền qua hệ thố ng mạng . Hệ điề u hà nh Unix sƣ̉ dụng nguyên tắc lƣu mật khẩu nhƣ trên vớ i hà m băm là hệ mã DES đƣợc lặp lại 25 lầ n, mật khẩu của ngƣờ i dù ng đƣợc sƣ̉ dụng nhƣ khó a của hệ mã, bản rõ đem mã hóa là xâu 64 bit 0. Ngày nay với sự phát triển mạnh mẽ của thƣơng mại điện tử , các giao dịch đều đƣợc thƣ̣c hiện tƣ̀ xa, trên cá c hệ thố ng mạng nên việc ƣ́ ng dụng của cá c hệ chƣ̃ ký điện tƣ̀ và đi kè m vớ i đó là cá c hà m băm ngà y cà ng trở nên quan trọng . Mọi thông tin trong các giao dịch thƣơng mại điện tử đều cần đƣợc bảo vệ bằng các chữ ký , hàm băm. Vì thế có thể nó i rằ ng đôi khi cá c hà m băm cò n quan trọng hơn cả cá c hệ mã mật. 3. Bài tập Bài tập 5.1: Cho hệ chữ ký điện tử ElGamma có p = 1019, a = 191 là một phần tử nguyên thuỷ của ZP * , x = 37. a) Hãy tìm khóa công khai KP, và khóa bí mật KS của hệ chữ ký trên. b) Để ký lên bản rõ M = 102 ngƣời ta chọn k = 143, hãy thực hiện ký đƣa ra chữ ký tƣơng ứng. c) Kiểm tra xem cặp (K, S) = (251, 507) có là chữ ký lên văn bản M = 127 hay không. Bài tập 5.2: Cho hệ chƣ̃ ký điện tƣ̉ RSA có p = 31, q = 41, e = 271. a) Hãy tìm khóa công khai KP, và khóa bí mật KS của hệ mã trên. b) Hãy tính chữ ký cho thông điệp M = 100. Bài tập 5.3: Cho thuật toá n chƣ̃ ký điện tƣ̉ DSA có q = 11, p = 67, α = 9, β = 62, khóa bí mật a = 4, để ký lên văn bản M = 8, ngƣờ i ta chọn k = 2. Hãy xác định chữ ký lên văn bản M. Bài tập 5.4: Cho hệ chƣ̃ ký điệ n tƣ̉ RSA có p = 47, q = 71, e= 79. Hãy xác định chữ ký của hệ mã lên thông điệp M = 688. Sƣ̉ dụng một trong cá c ngôn ngƣ̃ lập trình C, C++, Java hoặc C# để làm các bài tập sau: Bài tập 5.5: Cài đặt hệ chữ ký điện tử RSA. Bài tập 5.6: Cài đặt hệ chữ ký điện tử El Gammal. Bài tập 5.7: Cài đặt hàm băm MD5. Bài tập 5.8: Cài đặt hàm băm SHA. Gợi ý : Có thể sử dụng các thƣ viện số lớn nhƣ MIRACL hoặc cá c thƣ viện mã nguồ n mở nhƣ Crypto++ (chi tiế t tại địa chỉ website: http://www.cryptopp.com/), Cryptolib ( chi tiết tại đi ̣a chỉ website http://www.cs.auckland.ac.nz/~pgut001/cryptlib).
  • 129. Chƣơng VI: Quản lý khóa 120 CHƢƠNG VI: QUẢN LÝ KHÓA 1. Quản lý khoá trong các mạng truyền tin Trong các chƣơng trƣớc, ta đã làm quen với các phƣơng pháp lập mã và các bài toán quan trọng khác liên quan đến việc truyền tin bảo mật trên các mạng truyền tin công cộng nói chung. Ta cũng đã thấy rằng các hệ mật mã khoá công khai công khai có nhiều ƣu việt hơn các hệ mật mã đối xứng trong việc làm nền tảng cho các giải pháp an toàn thông tin, và đặc biệt đối với các hệ mã khoá đối xứng thì việc thực hiện đồi hỏi những kênh bí mật để chuyển khoá hoặc trao đổi khoá giữa các đối tác, thì về nguyên tắc, đối với các hệ mã hoá với khoá công khai không cần có những kênh bí mật nhƣ vậy, vì các khoá công khai có thể đƣợc truyền hay trao đổi cho nhau một cách công khai qua các kênh truyền tin công cộng. Tuy nhiên, trên thực tế, để bảo đảm cho các hoạt động thông tin đƣợc thật sự an toàn, không phải bất cứ thông tin nào về các khoá công khai của một hệ mã, của một thuật toán kiểm tra chữ ký, của một giao thức xác nhận thông báo hay xác nhận danh tính … cũng phát công khai một cách tràn lan trên mạng công cộng, mặc dù là công khai nhƣng ngƣời ta cũng muốn là những ai cần biết thì mới nên biết mà thôi. Do đó, mặc dù sử dụng các hệ có khoá công khai, ngƣời ta cũng muốn có những giao thức thực hiện việc trao đổi khoá giữa các đối tác thực sự có nhu cầu giao lƣu thông tin với nhau, kể cả trao đổi khoá công khai. Việc trao đổi khoá giữa các chủ thể trong một cộng đồng nào đó có thể đƣợc thiết lập một cách tự do giữa bất cứ hai ngƣời nào khi có nhu cầu trao đổi thông tin, hoặc có thể đƣợc thiết lập một cách tƣơng đối lâu dài trong thời gian nào đó trong cả cộng đồng với sự điều phối của một cơ quan đƣợc uỷ thác TA. Việc trao đổi khoá trong trƣờng hợp thứ nhất ta gọi đơn giản là thoả thuận khoá, còn trong trƣờng hợp thứ hai ta gọi là phân phối khoá; TA là nơi thực hiện việc phân phối, cũng là nơi quản lý khoá. Việc thoả thuận khoá nói chung không cần có sự tham gia của một TA nào và chỉ có thể xảy ra khi các hệ bảo mật mà ta sử dụng là hệ có khoá công khai, còn việc phân phối khoá thì có thể xảy ra đối với các trƣờng hợp sử dụng các hệ khoá đối xứng cũng nhƣ các hệ có khoá công khai. Việc phân phối khoá với vai trò quản trị khoá của một TA là một việc bình thƣờng, đã tồn tại rất lâu trƣớc khi có các hệ mật mã khoá công khai . Ta sẽ bắt đầu vớ i một vài hệ phân phối khoá nhƣ vậy, sau đó sẽ giới thiệu một số hệ phân phối hoặc trao đổi khoá khi dùng các sơ đồ an toàn và bảo mật với khoá công khai. 2. Một số hệ phân phối khoá 2.1. Sơ đồ phân phối khoá Blom Giả sử ta có một mạng gồm có n ngƣời dùng và mỗi ngƣời dùng đó đều có nhu cầu trao đổi thông tin bí mật với mọi ngƣời trong mạng. Giả sử sơ đồ mật mã đƣợc sử dụng là một sơ đồ mật mã khoá đối xứng (chẳng hạn nhƣ DES). Toàn bộ mạng cần có 2 )1( nn khoá khác nhau cho chừng ấy cặp ngƣời dùng khác nhau trong mạng. Một cơ quan uỷ thác TA quản lý chừng ấy khoá và phải chuyển cho mỗi ngƣời dùng (n-1) khoá chung với (n-1) ngƣời còn lại trong mạng; nhƣ vậy TA phải truyền bằng những kênh bí mật tất cả là n(n-1) lƣợt khoá đến tất cả n ngƣời dùng.
  • 130. Chƣơng VI: Quản lý khóa 121 Năm 1985, Blom đề nghi ̣một sơ đồ phân phố i khoá , mà sau đây ta gọi là sơ đồ Blom, trong trƣờ ng hợp đơn giản nhấ t đƣợc mô tả nhƣ sau:  TA chọn một số nguyên tố p ≥ n, và chọn cho mỗi ngƣời dùng A một số pA Zr  . Số p và các số rA đƣợc công bố công khai.  Sau đó, TA chọn ba số ngẫu nhiên a, b, c pZ và lập đa thức: pcxyyxbayxf mod)(),(   Với mỗi ngƣời dùng A, TA tính pxbarxfxg AAAA mod),()(  , trong đó pbraa A modA  , pcrbb AA mod . TA chuyển bí mật cặp số (aA, bA) cho A. Nhƣ vậy, A biết xbaxg AA  A)( . So với việc TA phải truyền bí mật n(n-1) lƣợt khoá trên thì với sơ đồ Blom, TA chỉ phải truyền n lƣợt các cặp số (aA, bA) mà thôi. Sau khi đã thực hiện xong các công việc chuẩn bị đó, bây giờ nếu hai ngƣời dùng A và B muốn tạo khoá chung để truyền tin bằng mật mã cho nhau thì khoá chung KA,B đó sẽ là: ),,()()(, BAABBABA rrfrgrgK  mà mỗi ngƣời A và B tính đƣợc bằng những thông tin mình đã có. Nhƣ vậy, theo sơ đồ phân phối này, TA phân phối cho mọi ngƣời dùng một phần bí mật của khoá, hai ngƣời dùng bất kỳ phối hợp phần bí mật của riêng mình với phần công khai của ngƣời kia để cùng tạo nên khoá bí mật chung cho hai ngƣời. Sơ đồ này là an toàn theo nghĩa sau đây: bất kỳ một ngƣời thức ba C nào (kể cả C là một ngƣời tham gia trong mạng) có thể đƣợc phát hiện đƣợc khoá bí mật riêng của hai ngƣời A và B. Thực vậy, dù C có là ngƣời tham gia trong mạng đi nữa, thì cái mà C biết nhiều lắm là hai số aC, bC do TA cấp cho. Ta chứng minh rằng với những gì mà C biết thì bất kỳ giá trị pZ nào cũng có thể đƣợc chấp nhận là KA,B. Những gì mà C biết , kể cả chấp nhận BAK , , đƣợc thể hiện thành: CC CC BABA bcrb abra rcrrrba    )( Nếu xem a, b, c là ẩn số, ta có định thức các hệ số ở vế phải là: ),)(( 10 01 1 BCAC C C BABA rrrr r r rrrr   Theo giả thiết chọn các số r, định thức đó khác 0, do đó hệ phƣơng trình luôn có nghiệm (a, b, c), tức việc chấp nhận  là giá trị của KA,B là hoàn toàn có thể. Bất kỳ giá trị
  • 131. Chƣơng VI: Quản lý khóa 122 pZ nào cũng có thể đƣợc C chấp nhận là KA,B, điều đó đồng nghĩa với việc C không biết KA,B là số nào. Tuy nhiên, nếu có hai ngƣời tham gia C và D (khác A, B) liên minh với nhau để phát hiện KA,B thì lại rất dễ dàng, vì cả C và D biết: DD D C C b a b a     crb bra crb bra D C C bốn phƣơng trình đó đủ để xác định (a, b, c) từ đó tìm đƣợc KA,B. Ta có thể mở rộng sơ đồ Blom nói trên để đƣợc một sơ đồ Blom tổng quát, trong đó mọi khoá chung KA,B của hai ngƣời dùng A và B là bí mật hoàn toàn đối với bất kỳ liên minh nào gồm k ngƣời ngoài A và B, nhƣng không còn là bí mật đối với mọi liên minh gồm k+1 ngƣời tham gia trong mạng. Muốn vậy, ta chỉ cần thay đa thức f(x, y) nói trên bằng một đa thức đối xứng bậc 2k sau đây:    k i k j ji ij pyxayxf 0 0 ,mod),( trong đó jiijpij aakjiZa  ,,0, với mọi i, j. 2.2. Hệ phân phối khoá Kerberos Kerberos là tên của một hệ dịch vụ phân phối (hay cấp phát) khoá phiên (sesion key) cho từng phiên truyền tin bảo mật theo yêu cầu của ngƣời dùng trong một mạng truyền tin. Hệ mật mã đƣợc sử dụng thƣờng là hệ có khoá đối xứng chẳng hạn nhƣ DES. Để thực hiện hệ này, trƣớc hết cơ quan đƣợc uỷ thác (hay trung tâm điều phối) TA cần chia sẻ một khoá DES bí mật KA với mỗi thành viên A trong mạng. Sau đó, mỗi lần A có nhu cầu truyền tin bảo mật với một thành viên khác B thì yêu cầu TA cấp một khoá phiên cho cả A và B. Việc cấp phát đó sẽ đƣợc thực hiện bằng một giao thức phân phối khoá nhƣ sau: 1) TA chọn ngẫu nhiên một khoá phiên K, xác định một tem thời gian T và thời gian sống L (nhƣ thế có nghĩa là khoá phiên K có giá trị sử dụng trong khoảng thời gian từ T đến T+L). 2) TA tính ),,),(,(1 LTBIDKem AK ),),(,(2 LTAIDKem BK và gửi (m1, m2) đến A. 3) A dùng hàm giải mã AKd cho m1 để thu đƣợc K, T, L, ID(B). Sau đó tính ),),((3 TAIDem K và gửi (m3, m2) cho B. 4) B dùng các hàm giải mã BKd cho m2 và dK cho m3 để thu đƣợc K, T, L, ID(A) và ID(A), T. Nếu thấy hai giá trị của ID(A) và của T trùng nhau thì B tính tiếp m4 = eK(T + 1) và gửi m4 cho A.
  • 132. Chƣơng VI: Quản lý khóa 123 5) A dùng hàm giải mã dK cho m4 và thử xem kết quả thu đƣợc có đúng là T+1 hay không. Trong giao thức nói trên, các ký hiệu ID(A) và ID(B) là chỉ danh tính của A và của B, các thông tin đó là công khai. Hoàn thành giao thức gồm 5 bƣớc nói trên, TA (cùng với A và B) đã thực hiện xong việc cấp phát một khoá phiên K cho hai ngƣời dùng A và B để truyền tin mật mã cho nhau. Tất cả các việc trao đổi các thông tin trong giao thức đó đều đƣợc thực hiện trên các kênh công cộng, dù khoá K vẫn là bí mật (chỉ A, B và TA là đƣợc biết mà thôi). Ngoài việc cấp phát khoá, giao thức đó còn thực hiện đƣợc việc xác nhận khoá: B và A đều tin chắc đƣợc rằng đối tác của mình đã thực sự có khoá K do kết quả của việc thực hiện các phép thử ở bƣớc 4 và 5. Thêm nữa, cả A và B còn biết đƣợc thời hạn có hiệu lực của khoá. Phân phối khoá bí mật theo giao thức Kerberos có độ tin cậy cao, tuy nhiên trong thực tế, việc sử dụng nó cũng đòi hỏi tốn nhiều thời gian nên ngày nay cũng chỉ đƣợc dùng trong những trƣờng hợp hạn chế. 2.3. Hệ phân phối khó a Diffe-Hellman Hệ phân phối khoá Diffe-Hellman không đòi hỏi TA phải biết và chuyển bất kỳ thông tin mật nào về khoá của các ngƣời tham gia trong mạng để họ thiết lập đƣợc khoá chung bí mật cho việc truyền tin với nhau. Trong một hệ phân phối khoá Diffe-Hellman, TA chỉ việc chọn một số nguyên tố lớn p và một phần tử nguyên thuỷ  theo mod p sao cho bài toán tính loga trong * pZ là rất khó. Các số p và  đƣợc công bố công khai cho mọi ngƣời tham gia trong mạng. Ngoài ra, TA có một sơ đồ chữ ký với thuật toán ký bí mật sigTA và thuật toán kiểm tra công khai verTA. Một thành viên bất kỳ A với danh tính ID(A) tuỳ ý chọn một số aA (0 ≤ aA ≤ p-2) và tính pb a A modA  . A giữ bí mật aA và đăng ký các thông tin (ID(A), bA) với TA. TA cấp cho A chứng chỉ: C(A) = (ID(A), bA, sigTA(ID(A), bA)). Các chứng chỉ của các thành viên trong mạng có thể đƣợc lƣu giữ trong một cơ sở dữ liệu công khai hoặc uỷ thác cho TA lƣu giữ và cung cấp công khai cho các thành viên mỗi khi cần đến. Khi hai thành viên A và B trong mạng cần có một khoá bí mật chung để truyền tin bảo mật cho nhau thì A dùng thông tin công khai bB có trong C(B) kết hợp với số bí mật của mình là aA để tạo nên khoá. .modmodA , ppbK ABaaa BBA  Khoá chung đó B cũng tạo ra đƣợc từ các thông tin công khai bA của A và số bí mật aB của mình: .modmodB , ppbK BAaaa BBA 
  • 133. Chƣơng VI: Quản lý khóa 124 Để bảo đảm đƣợc các thông tin về bB và bA là chính xác, A và B có thể dùng thuật toán verTA để kiểm tra chữ ký xác nhận của TA trong các chứng chỉ C(B) và C(A) tƣơng ứng. Cơ sở lý thuyết đảm bảo cho sƣ̣ an toà n của cá c phƣơng phá p trao đổi khó a dƣ̣a trên hệ phân phố i khó a Diffie -Hellman là bà i toá n Logarithm rờ i rạc , có thể tham khảo thêm trong phầ n 3.3 chƣơng IV để biế t thêm. 3. Trao đổi khoá và thoả thuận khoá 3.1. Giao thức trao đổi khoá Diffie-Hellman Hệ phân phối khoá Diffie-Hellman nói trong mục trƣớc có thể dễ dàng biến đổi thành một giao thức trao đổi (hay thoả thuận) khoá trực tiếp giữa các ngƣời sử dụng mà không cần có sự can thiệp của một TA làm nhiêm vụ điều hành hoặc phân phối khoá. Một nhóm bất kỳ ngƣời sử dụng có thể thoả thuận cùng dùng chung một số nguyên tố lớn p và một phần tử nguyên thuỷ  theo mod p, hai ngƣời bất kỳ trong nhóm A và B mỗi khi muốn truyền tin bảo mật cho nhau có thể cùng thực hiện giao thức sau đây để trao đổi khoá: 1) A chọn ngẫu nhiên số aA (0 ≤ aA ≤ p-2) bí mật, tính pb a A modA  và gửi bA cho B . 2) Tƣơng tự, B chọn ngẫu nhiên số aB (0 ≤ aB ≤ p-2) bí mật, tính pb a B modB  và gửi bB cho A. 3) A và B cùng tính đƣợc khoá chung: ).mod(modmod AA , ppbpbK BB aaa A a BBA  Giao thức trao đổi khoá Diffie-Hellman có các tính chất sau:  Giao thức là an toàn đối với việc tấn công thụ động, nghĩa là một ngƣời thứ ba dù biết bA và bB sẽ khó mà biết đƣợc KA,B. Chúng ta biết rằng bài toán “biết bA và bB tìm KA,B” chính là bài toán Diffie-Hellman, bài toán này tƣơng đƣơng với bài toán phá mã ElGammal. Bây giờ ta sẽ chứng minh điều này. Phép mật mã ElGammal với khoá K = (  ,,, ap ), trong đó pa mod  cho ta từ một bản rõ x và một số ngẫu nhiên 1 pZk lập đƣợc mật mã eK(x, k) = (y1, y2) với py k mod1  , .mod2 pxy k  Và phép giải mã đƣợc cho bởi py k mod1  . Giả sử ta có thuật toán A giải bài toán Diffie-Hellman. Ta sẽ dùng A để phá mã ElGammal nhƣ sau: Cho mật mã (y1, y2). Trƣớc tiên, dung A cho py k mod1  và ,mod pa   ta đƣợc pByA kka mod),( 1   . Sau đó, ta thu đƣợc bản rõ x từ k  và y2 nhƣ sau: .mod)( 1 2 pyx k   
  • 134. Chƣơng VI: Quản lý khóa 125 Ngƣợc lại, giả sử có một thuật toán khác là B dùng để phá mã ElGammal, tức .mod)(),,,,( 1 1221 pyyxyypB a   Áp dụng B cho Ab , y1 = bB, y2 =1, ta đƣợc ,mod)).(1()1,,,,( AA 111 pbbbpB Baaa BBA    tức giải đƣợc bài toán Diffie-Hellman.  Giao thức là không an toàn đối với việc tấn công chủ động bằng cách đánh tráo giữa đƣờng. Nghĩa là một ngƣời thứ ba C có thể đánh tráo các thông tin trao đổi giữa A và B. Chẳng hạn, C thay Aa  mà A định gửi cho B bởi Aa'  và thay Ba  mà B định gửi cho A bởi Ba'  . Nhƣ vậy, sau khi thực hiện giao thức trao đổi khoá, A đã lập một khoá chung Baa 'A  với C mà vẫn tƣởng là với B; đồng thời B cũng lập một khoá chung BA aa'  với C mà vẫn tƣởng là với A. C có thể giả mã mọi thông báo mà A tƣởng nhầm là mình gửi đến B cũng nhƣ mọi thông báo mà B tƣởng nhầm là mình gửi đến A. Một cách khắc phục kiểu tấn công này là làm sao để A và B có kiểm thử để xác nhận tính đúng đắn của các khoá công khai bA và bB. Ngƣời ta đƣa vào giao thức trao đổi khoá Diffie-Hellman thêm vai trò điều phối của một TA để đƣợc một hệ phân phối khoá Diffie-Hellman nhƣ một cách khắc phục nhƣợc điểm này. Trong hệ phân phối khoá Diffie- Hellman, sự can thiệp của TA là rất yếu, thực ra TA chỉ làm mỗi việc là cấp chứng chỉ xác nhận khoá công khai cho từng ngƣời dùng chứ không đòi hỏi biết thêm bất cứ một bí mật nào của ngƣời dùng. Tuy nhiên, nếu chƣa thoả mãn với vai trò hạn chế đó của TA thì có thể cho TA một vai trò xác nhận yếu hơn, không liên quan gì đến khoá, chẳng hạn nhƣ xác nhận thuật toán kiểm thử chữ ký của ngƣời dùng, còn bản thân các thông tin về khoá (cả bí mật lẫn công khai) thì do các ngƣời dùng trao đổi trực tiếp với nhau. Với cách khắc phục có vai trò hết sức hạn chế đó của TA, ta đƣợc giao thức sau đây: 3.2. Giao thức trao đổi khoá Diffie-Hellman có chứng chỉ xác nhận Mỗi ngƣời dùng A có một danh tính ID(A) và một sơ đồ chữ ký với thuật toán ký sigA và thuật toán kiểm thử verA. TA cũng có một vai trò xác nhận, nhƣng không phải xác nhận bất kỳ thông tin nào liên quan đến việc tạo khoá mật mã của ngƣời dùng (dù là khoá bí mật hay khoá công khai), mà chỉ là xác nhận một thông tin ít quan hệ khác nhƣ thuật toán kiểm thử chữ ký của ngƣời dùng. Còn bản thân các thông tin liên quan đến việc tạo khoá mật mã thì các ngƣời dùng sẽ trao đổi trực tiếp với nhau. TA cũng có một sơ đồ chữ ký của mình, gồm một thuật toán ký sigTA và một thuật toán kiểm thử công khai verTA. Chứng chỉ mà TA cấp cho mỗi ngƣời A sẽ là: C(A) = (ID(A), verA, sigTA(ID(A), verA)). Rõ ràng trong chứng chỉ đó TA không xác nhận bất kỳ điều gì liên quan đến việc tạo khoá của A cả. Việc trao đổi khoá giữa hai ngƣời dùng A và B đƣợc thực hiện theo giao thức sau đây: 1) A chọn ngẫu nhiên số aA (0 ≤ aA ≤ p-2), tính pb a A modA  và gửi bA cho B. 2) B chọn ngẫu nhiên số aB (0 ≤ aB ≤ p-2), tính pb Ba B mod tính tiếp ,mod pbK Ba A ),,( ABBB bbsigy  và gửi (C(A), bB, yB) cho A.
  • 135. Chƣơng VI: Quản lý khóa 126 3) A tính ,mod pbK Aa B dùng verB để kiểm thử yB, dùng verTA để kiểm thử C(B), sau đó tính yA = sigA(bA, bB) và gửi (C(A), yA) cho B. 4) B dùng verA để kiểm thử yA và dùng verTA để kiểm thử C(A). Nếu tất cả các bƣớc đó đƣợc thực hiện và các phép kiểm thử đều cho kết quả đúng đắn thì giao thức đƣợc kết thúc, và cả A và B đều có đƣợc khoá chung K. Do việc dùng các thuật toán kiểm thử nên A biết chắc giá trị bB là của B và B biết chắc giá trị bA của A, loại trừ khả năng một ngƣời C nào khác đánh tráo các giá trị đó giữa đƣờng. 3.3. Giao thức trao đổi khoá Matsumoto-Takashima-Imai Giao thức trình bày trong mục trên dùng ba lần chuyển tin qua lại để thiết lập một khoá chung. Các tác giả Nhật Matsumoto, Takashima và Imai đề nghị một cải tiến để chỉ dùng một giao thức gồm hai lần chuyển tin (một từ A đến B và một từ B đến A) để thoả thuận khoá nhƣ sau: Ta giả sử rằng trƣớc khi thực hiện giao thức, TA đã ký cấp chứng chỉ cho mỗi ngƣời dùng A theo cách trong giao thức trao đổi DH: C(A) = (ID(A), bA, sigTA(ID(A), bA)). và thuật toán kiểm thử chữ ký verTA là công khai. Trong giao thức này, các bA không trực tiếp tạo nên các khoá mật mã cho truyền tin, mà với mỗi phiên truyền tin bảo mật, khoá phiên (sesion key) sẽ đƣợc tạo ra cho từng phiên theo giao thức. Giao thức trao đổi khoá phiên MTI gồm ba bƣớc (trong đó có hai lần chuyển tin) nhƣ sau: 1) A chọn ngẫu nhiên số rA (0 ≤ rA ≤ p-2), tính ,mod ps Ar A  và gửi (C(A), sA) cho B. 2) B chọn ngẫu nhiên số rB (0 ≤ rB ≤ p-2), tính ,mod ps Br B  và gửi (C(B), sB) cho A. 3) A tính ,mod.A pbsK Ar B a B với giá trị bB thu đƣợc từ C(B) B tính ,mod. pbsK BB r B a A với giá trị bB thu đƣợc từ C(A). Hai cách tính đó cho cùng một giá trị .modA pK arar BBA    Giao thức này cũng có khả năng giữ bí mật khoá K nhƣ đối với giao thức Diffie- Hellman trƣớc sự tấn công thụ động. Tuy nhiên, vì không có chứng chỉ đối với các giá tri sA, sB nên vẫn có nguy cơ của sự tấn công tích cực bằng việc đánh tráo giữa đƣờng bởi một ngƣời C nào đó theo kiểu sau đây: Lẽ ra A gửi đến B cặp (C(A), sA) thì C đánh tráo bằng cách (C(A), sA) và gửi đến B giá trị (C(A), s‟A) với ps Ar A mod' '  . Và ngƣợc lại, đáng lẽ B gửi đến A giá trị (C(B), sB) C(A), Ar'  A C B C(A), Ar  C(B), Br'  C(B), Br 
  • 136. Chƣơng VI: Quản lý khóa 127 thì C đánh trao bằng cách nhận (C(B), sB) và gửi đến A giá trị (C(B), s‟B) với ps Br B mod' '  . Khi đó A tính đƣợc khoá: ,modA' 1 pK arar BBA    và B tính đƣợc khoá: .modA' 2 pK arar BBA    Hai giá trị K1 và K2 này khác nhau nên không giúp A và B truyền tin đƣợc cho nhau, nhƣng C không có khả năng tính đƣợc giá trị nào trong hai giá trị đó (vì không biết aA và aB) nên khác với giao thức Diffie-Hellman, ở đây C chỉ có thể phá rối, chứ không thể đánh cắp thông tin đƣợc. 3.4. Giao thức Girault trao đổi khoá không chứng chỉ Giao thức Girault đƣợc đề xuất năm 1991. Trong giao thức này, ngƣời sử dụng A không cần dùng chứng chỉ C(A) mà thay bằng một khoá công khai tự chứng thực đƣợc cấp trƣớc bởi một TA. Phƣơng pháp này sử dụng kết hợp các đặc tính của bài toán RSA và logarit rời rạc. Giả sử n là tích của hai số nguyên tố lớn p và q, n = p*q, p và q có dạng p = 2p1+1, q = 2q1+1, trong đó p1 và q1 cũng là các số nguyên tố. Nhóm nhân * nZ đẳng cấu với tích ** qp xZZ . Cấp cao nhất của một phần tử trong * nZ là bội chung bé nhất của p-1 và q-1, tức là bằng 2p1q1. Giả sử  là một phần tử cấp 2p1q1 của * nZ . Nhóm tuần hoàn sinh bởi  đƣợc ký hiệu là G, bài toán tính logarit rời rạc theo cơ số  trong G đƣợc giả thiết là rất khó. Các số n và  là công khai. Chỉ TA biết p, q. TA chọn số mũ công khai e với UCLN(e, )(n ) = 1, và giữ bí mật ).(mod1 ned   Mỗi ngƣời dùng A có một danh tính ID(A), chọn ngẫu nhiên một số Ga A , giữ bí mật aA và tính nb a A modA  , rồi gửi aA, bA cho TA. TA thử lại điều kiện nb a A modA  , rồi cấp cho A một khoá công khai tự chứng thực pA = (bA-ID(A))d mod n. Trong khoá công khai pA không có thông tin về aA nhƣng TA cần biết aA để thử điều kiện nb a A modA  . Giao thức Girault trao đổi khoá giữa hai ngƣời dùng A và B đƣợc thực hiện bởi các bƣớc sau đây: 1) A chọn ngẫu nhiên GrA  , tính ns Ar A mod và gửi cho B các giá trị (ID(A), pA, sA). 2) B chọn ngẫu nhiên GrB  , tính ns Br B mod và gửi cho B các giá trị (ID(B), pB, sB). 3) A tính khoá ,mod))((A nVIDpsK Are B a B  B tính khoá .mod))((B nAIDpsK Bre A a A 
  • 137. Chƣơng VI: Quản lý khóa 128 Cả hai giá trị đó của K đều bằng nhau và bằng .modA nK arar BBA    . Bằng các lập luận tƣơng tự nhƣ ở mục trƣớc, ta dễ thấy rằng một ngƣời thứ ba C khó mà tạo ra các thông tin giả mạo để gửi đến A hoặc B, nếu tấn công bằng cách đánh tráo giữa đƣờng thì có thể phá rối để ngăn cản A và B tạo lập khoá chung nhƣng không thể đánh cắp thông tin trao đổi giữa A và B. Còn lại vấn đề: tại sao TA cần biết aA và thử điều kiện nb a A modA  trƣớc khi cấp pA cho A! Ta giả sử rằng TA không biết aA và cấp pA = (bA-ID(A))d mod n cho A , và thử xem có thể xảy ra chuyện gì? Một ngƣời thứ ba C có thể chọn một giá trị a‟A và tính nb a A mod' A'  , rồi tính b‟C = b‟A - ID(A) – ID(C) và đƣa (ID(C), b‟C) cho TA. TA sẽ cấp cho C một “khoá công khai tự chứng thực”: p‟C = (b‟C – ID(C))d mod n. Vì b‟C – ID(C) = b‟A – ID(A) nên thực tế C đã đƣợc cấp: p‟C = p‟A = (b‟A – ID(A))d mod n. Bây giờ giả sử A và B thực hiện giao thức trao đổi khoá và C xen vào ở giữa. Nhƣ vậy, A gửi cho B )mod,),(( npAID Ar A  , nhƣng do C đánh tráo nên B sẽ nhận đƣợc )mod,'),(( ' npAID Ar A  . Do đó, B và C tính đƣợc cùng một khoá: ,mod))((mod' '''' A nBIDpsnK AABBA re B a B arar    còn A tính đƣợc khoá .modA nK arar BBA    B và C có cùng một khoá khác với khoá của A nhƣng B vẫn nghĩ rằng mình có chung khoá với A. Vì thế, C có thể giải mã mọi thông báo mà B gửi cho A, tức đánh cắp thông tin từ B đến A. Việc TA biết aA và thử điều kiện nb a A modA  trƣớc khi cấp pA cho A là để loại trừ khả năng đánh tráo nhƣ vậy của một kẻ tấn công C. 4.Bài tập Bài tập 6.1: Giả sử A và B sƣ̉ dụng kỹ thuật phân phố i khó a Diffie -Hellman để truyền tin cho nhau vớ i số nguyên tố đƣợc chọn là p = 71 và phần tử nguyên thủy α = 7. a) Nế u khó a bí mật của A là XA = 5 thì khóa công khai của A là gì? b) Nế u khó a bí mật của B là XB = 12 thì khóa công khai của B là gì? c) Cho biế t khó a bí mật dù ng để truyề n tin? Bài tập 6.2: A và B sƣ̉ dụng kỹ thuật phân phố i khó a Diffie-Hellman để truyề n tin cho nhau vớ i p = 11 và phần tử nguyên thủy α = 2. a) Hãy chứng minh rằ ng α = 2 đú ng là phầ n tƣ̉ nguyên thủy của Z* 11. b) Nế u khó a công khai của A là YA = 9 thì khóa bí mật của A là bao nhiêu? (ID)A, p'A, Ar'  A C B (ID)A, pA, Ar  (ID)B, pB, Br  (ID)B, pB, Br 
  • 138. Chƣơng VI: Quản lý khóa 129 c) Giả sử B có khóa công khai là Y B = 3, hãy tìm khóa bí mật dùng để truyền tin giƣ̃a A và B.
  • 139. Chƣơng VII: Giao thƣ́ c mật mã 130 CHƢƠNG VII: GIAO THƢ́ C MẬT MÃ 1. Giao thức Định nghĩa: Một giao thức (protocol) chỉ đơn giản là một chuỗi các bước thực hiện trong đó có ít nhất 2 bên tham dự, được thiết kế để thực hiện một nhiệm vụ nào đó.[2] Định nghĩa này đơn giản nhƣng chặt chẽ: “một chuỗi các bƣớc” nghĩa là một dãy các bƣớc có thứ tự, có đầu có cuối, bƣớc trƣớc phải đƣợc kết thúc trƣớc khi thực hiện bƣớc sau. “Có ít nhất hai bên tham gia” nghĩa là có thể có nhiều ngƣời cùng tham gia thực hiện chuỗi bƣớc này, do đó nếu một ngƣời thực hiện một chuỗi các bƣớc thì không thể gọi là một giao thức đƣợc. Và cuối cùng một giao thức phải đƣợc thiết kế nhằm đạt đƣợc tới một kết quả nào đó. Một giao thức có những đặc tính nhƣ sau:  Các bên tham gia phải hiểu cách thức và các bƣớc thực hiện một giao thức khi tham gia thực hiện.  Các bên phải đồng ý tuyệt đối tuân thủ các bƣớc.  Giao thức phải rõ ràng, tất cả các bƣớc phải đƣợc viết tƣờng minh, không có chỗ nào gây nên khả năng hiểu nhầm.  Giao thức phải đầy đủ, tất cả các tình huống biến đổi đều phải đƣợc đƣa ra. Giao thức mật mã là một giao thức có vận dụng các kiến thức của lý thuyết mật mã để đạt đƣợc các mục tiêu về mặt an toàn và bảo mật cho hệ thống. Các thành phần tham gia có thể là bạn bè tin tƣởng lẫn nhau, nhƣng cũng có thể là những kẻ địch của nhau. Một giao thức mật mã có liên quan đến các thuật toán của mật mã nhƣng thông thƣờng mục đích của nó đi xa hơn là tính bảo mật thuần tuý. Các bên có thể tham dự vào việc chia sẻ các phần của một bí mật đƣợc dùng để chiết xuất ra một thông tin nào đó, có thể cùng kết hợp phát ra một chuỗi số ngẫu nhiên, có thể chứng minh danh tính của mình cho bên kia hay đồng thời ký vào một văn bản hợp đồng. Toàn bộ vấn đề của lý thuyết mật mã ở đây là làm sao dò ra và chống lại các khả năng nghe trộm hay lừa dối. Nguyên tắc để thiết kế giao thức: phải làm sao để không ai, không bên nào có thể thu đƣợc nhiều hơn, biết đƣợc nhiều hơn những gì mà thiết kế ban đầu giả định. 2. Mục đích của các giao thức Ngày nay, với sự phát triển vũ bão của hệ thống máy tính toàn cầu đi đến từng hộ gia đình, việc đƣa các nghi thức thủ tục làm ăn bình thƣờng của ngƣời ta thực hiện qua mạng cũng là không bao xa. Nhƣ vậy cần phải thiết kế những thủ tục làm việc tƣơng ứng cho máy tính để có thể thay thế cho các thủ tục trong đời thƣờng. Điểm khác biệt đặc trƣng ở đây là bây giờ ngƣời làm việc với nhau thông qua các máy tính mà không cần thấy mặt nhau nữa. Hơn nữa máy tính không phải là ngƣời, nó không thể dễ dàng thích nghi với thay đổi nhƣ chúng ta đây. Vì vậy cần tính đến mọi tình huống, mọi khả năng có thể của giao thức.
  • 140. Chƣơng VII: Giao thƣ́ c mật mã 131 Rất nhiều các thủ tục làm ăn hàng ngày của chúng ta đƣợc tin tƣởng dựa trên sự có mặt cùng nhau của các bên đối tác, chính vì thế nên việc xây dựng những giao thức trên máy tính là không còn đơn giản nhƣ các thủ tục đời thƣờng mà nó thay thế. Bạn cứ tự hỏi xem ngƣời ta có thể trao một chồng tiền mặt cho một ngƣời lạ để nhờ mua hàng có đƣợc không? Hay thử hỏi xem bạn có dám gửi thƣ cho chính phủ với phiếu bầu của bạn mà không có các thủ tục đảm bảo về việc giấu tên. Thật là ngây thơ nếu tin rằng mọi ngƣời làm việc trên mạng máy tính đều trung thực. Và cũng thật là cả tin nếu cho rằng các nhà quản trị mạng, hay thậm chí ngay cả các nhà thiết kế ra các mạng này là trung thực đến cùng. Dù hầu hết là nhƣ thế nhƣng chỉ cần một thiểu số những ngƣời không trung thực cũng đủ ngây ra thiệt hại nếu chúng ta không có các biện pháp đảm bảo. Với phƣơng pháp hình thức hoá, chúng ta có thể thử thiết kế các giao thức rồi tìm hiểu, kiểm tra khả năng của nó có vững hay không trƣớc mọi kiểu xâm phạm của các kẻ không trung thực; từ đó mà cải tiến, phát triển lên để chống lại các kiểu tấn công đó. Bằng cách đó mà ngƣời ta đã xây dựng các giao thức cho các máy tính giải quyết đƣợc các nhiệm vụ, các bài toán đời sống hàng ngày. Hơn nữa giao thức máy tính là một hình thức trừu tƣợng hoá và không quan tâm đến việc cài đặt cụ thể. Một giao thức là giống nhau dù nó đƣợc cài đặt trên bất cứ hệ điều hành nào. Vì thế một khi chúng đã có thể khẳng định đƣợc độ tin cậy của giao thức ta có thể áp dụng nó ở bất cứ đâu, dù là cho máy tính, cho điện thoại hay cho một lò vi sóng thông minh ... 3. Các bên tham gia vào giao thức (the players in protocol) Để có thể tiếp cận thống nhất với tất cả các giao thức thì một điều cần thiết là có một qui định thống nhất cách gọi tên tất cả các bên tham gia và dính líu có thể có trong giao thức: [6] Alice bên thứ nhất trong các giao thức. Bob bên thứ hai trong các giao thức. Carol bên tham gia thứ ba trong các giao thức. Dave bên tham gia thứ tƣ trong các giao thức. Eve kẻ nghe trộm (eavesdropper). Mallory kẻ tấn công chủ động có nhiều quyền lực trên mạng và rất nguy hiểm (malicious active attacker). Trent trọng tài (trusted arbitrator). Walter ngƣời canh gác (warden), có thể đứng canh gác Alice và Bob trong một số giao thức . Peggy ngƣời chứng minh (prover). Victor ngƣời thẩm tra (verifier), Peggy cần phải chứng minh với Victor về một quyền sở hữu nào đó chẳng hạn nhƣ danh tính của anh ta khai là đúng hay anh ta đúng là kẻ có thẩm quyền để đƣợc truy nhập vào một nơi quan trọng ...
  • 141. Chƣơng VII: Giao thƣ́ c mật mã 132 4. Các dạng giao thức 4.1. Giao thức có trọng tài Ngƣời trọng tài là ngƣời thoả mãn các điều kiện sau:  Không có quyền lợi riêng trong giao thức và không thiên vị cho một bên nào.  Các bên tham gia có quyền lợi trong giao thức đều tin tƣởng vào trọng tài rằng bất kỳ cái gì mà anh ta nói và làm đều là đúng và chính xác, đồng thời tin tƣởng anh ta sẽ hoàn thành trách nhiệm của mình trong giao thức. Nhƣ vậy trọng tài có thể đứng ra để giúp hoàn thành các giao thức giữa những bên tham gia không tin tƣởng lẫn nhau. Ví dụ 1: Alice muốn bán một chiếc xe cho một ngƣời lạ là Bob. Bob muốn trả bằng séc, tuy nhiên Alice lại không có cách nào để biết đƣợc séc đó có giá trị thật sự hay không. Do vậy, cô ta chỉ muốn đƣợc chuyển séc trƣớc khi giao xe cho Bob và đấy chính là mâu thuẩn bế tắc vì Bob cũng chẳng tin gì Alice nên anh ta sẽ không đƣa séc trƣớc khi nhận đƣợc chiếc xe. Cách giải quyết sẽ thông qua Trent (ngƣời mà cả Bob và Alice đều tin tƣởng) và một giao thức sẽ diễn ra nhƣ sau để đảm bảo tính trung thực:  Alice chuyển vật cần bán cho Trent  Bob đƣa tờ séc cho Alice.  Alice chuyển séc vào tài khoản của cô ta ở ngân hàng.  Đợi một khoảng thời gian nhất định đến khi séc đã chuyển xong, Trent sẽ giao hàng cho Bob. Nếu tờ séc không hợp lệ thì Alice sẽ báo cho Trent biết với bằng chứng cụ thể và Trent sẽ giao trả lại hàng cho cô ta. Trong giao thức này:  Alice tin tƣởng rằng Trent sẽ không trao hàng cho Bob trừ khi séc đƣợc chuyển xong và sẽ chuyển lại hàng cho cô ta nếu séc không có giá trị.  Bob tin tƣởng Trent sẽ giữ hàng trong thời gian séc đƣợc chuyển và sẽ giao nó cho anh ta một khi đƣợc chuyển xong.  Trent không quan tâm đến việc tờ séc có giá trị thật sự và có chuyển đƣợc hay không, anh ta làm phần việc của mình trong cả hai trƣờng hợp có thể xảy ra đúng nhƣ giao thức qui định, đơn giản vì anh ta sẽ đƣợc trả tiền công trong cả hai trƣờng hợp. Ví dụ 2: Nhà băng cũng có thể đứng ra làm trọng tài cho ALice và Bob. Bob sử dụng một cái séc có chứng nhận của nhà băng để mua bán với Alice:  Bob viết một séc và chuyển cho nhà băng.  Sau khi cầm một số tiền từ tài khoản của Bob bằng giá trị của tờ séc, nhà băng ký chứng nhận lên séc và chuyển trả lại cho Bob.
  • 142. Chƣơng VII: Giao thƣ́ c mật mã 133  Alice giao xe cho Bob cùng lúc Bob đƣa Alice tờ séc có chứng nhận của nhà băng.  Alice chuyển séc vào nhà băng. Giao thức này thực hiện đƣợc bởi vì Alice tin tƣởng vào chứng nhận của nhà băng, tin rằng nhà băng cầm giữ số tiền của Bob cho cô ta mà không sử dụng nó vào đầu tƣ ở bất cứ đâu. Tƣ tƣởng này đƣợc đem áp dụng vào thế giới máy tính, tuy nhiên ở đây xuất hiện một số vấn đề nhất định đối với hệ thống máy tính:  Có thể dễ dàng tìm thấy và đặt lòng tin vào một bên thứ ba trung gian (trọng tài) nếu ta biết và có thể nhìn tận mặt họ. Tuy nhiên nếu hai bên tham gia giao thức đã nghi ngờ nhau thì việc cùng đặt lòng tin vào một bên thứ ba nào đó nằm đâu đó khuất diện trên mạng máy tính cũng trở nên có thể đáng ngờ.  Mạng máy tính phải tốn thêm chi phí để quản lý và bảo trì máy tính trọng tài.  Luôn luôn có những khoảng trễ vốn gắn liền với bất kỳ một giao thức có trọng tài nào.  Trọng tài phải tham gia vào mọi giao dịch trên mạng, điều đó có nghĩa ở đó sẽ trở nên một điểm thắt nút cổ chai (bottleneck), dễ tắc trên mạng một khi giao thức đã đƣợc triễn khai cho một ứng dung rộng rãi. Tăng cƣờng số trọng tài có thể giúp tránh bế tắc này nhƣng lại làm tăng thêm chi phí để quản lý bảo trì những máy tính có trọng tài đó.  Bởi vì tất cả mọi ngƣời trên mạng đều tin trọng tài, dễ gây ra ở đây một điểm nhạy cảm chịu áp lực tấn công tập trung từ các kẻ rình rập để phá hệ thống. 4.2. Giao thức có ngƣời phân xử Để yên tâm giao dịch, Alice và Bob cần mời một trọng tài có uy tín cao, tuy nhiên ở đây sẽ nảy sinh vấn đề về việc phải trả số tiền xứng đáng cho ngƣời này, rõ ràng là không phải không đáng kể. Vì vậy ngƣời ta đã nảy sinh ý nghĩ chia giao thức có trọng tài tham dự (arbitrated protocol) thành hai phân giao thức (subprotocol) ở hai cấp dƣới:  Một là một giao thức không cần đến trọng tài, thực hiện bất kỳ khi nào muốn tiến hành giao dịch.  Hai là một arbitrated giao thức chỉ đƣợc sử dụng khi Alice và Bob cãi nhau và muốn có ngƣời phân xử. Vì thế trong trƣờng hợp này ta không dùng khái niệm ngƣời trọng tài (arbitrated) với nghĩa là ngƣời phải trực tiếp tham gia vào giao thức, mà sử dụng ngƣời phân xử (adjudicator), bao hàm ý nghĩa ngƣời này không cần phải có mặt khi Alice và Bob tiến hành giao dịch mà chỉ đƣợc mời đến khi Alice và Bob yêu cầu giải quyết tranh cãi. Cũng giống nhƣ trọng tài, ngƣời phân xử phải không có quyền lợi liên can đến giao dịch của Alice và Bob, và đƣợc cả hai ngƣời này tin tƣởng. Anh ta không tham gia trực tiếp vào giao dịch nhƣ trọng tài nhƣng sẽ đứng ra để xác định xem là giao dịch có đƣợc tiến hành đúng không và xác định bên sai bên đúng nếu nhƣ có tranh cãi.Nhƣng điểm khác biệt giữa trọng tài và ngƣời phân xử là ngƣời phân xử không phải luôn luôn cần thiết, nếu có tranh cãi thì mới cần ngƣời phân xử (không có tranh cãi thì thôi).
  • 143. Chƣơng VII: Giao thƣ́ c mật mã 134 Các thẩm phán là những ngƣời phân xử chuyên nghiệp. Khác với công chứng viên, một thẩm phán - ngƣời mà sẽ chỉ đƣợc biết đến hợp đồng này khi nào một trong hai ngƣời Alice hay Bob lôi ngƣời kia ra toà. Giao thức dùng cho ký kết hợp đồng này có thể đƣợc hình thức hoá nhƣ sau: Ví dụ: Tại mọi thời điểm:  Alice và Bob thoả thuận các điều khoản trong hợp đồng.  Alice ký hợp đồng.  Bob ký hợp đồng. Khi có tranh cãi cần giải quyết:  Alice và Bob đến gặp quan toà nhờ phân xử.  Alice đƣa ra chứng cớ của cô ta.  Bob trình bày các chứng cớ của anh ta.  Quan toà xem xét các chứng cớ và phán quyết. Ý tƣởng dùng ngƣời phân xử này có thể đem vào áp dụng trên máy tính. Trong những giao thức thế này nếu có một bên tham gia mà không trung thực thì dữ liệu lƣu đƣợc từ giao thức sẽ cho phép ngƣời phân xử sau này phát hiện đƣợc ai là ngƣời đã lừa dối. Nhƣ vậy thay vì ngăn chặn trƣớc sự lừa đảo, giao thức ngƣời phân xử sẽ phát hiện đƣợc lừa dối nếu xảy ra, thực tế này khi đƣợc phổ biến rộng rãi sẽ có tác dụng ngăn chặn, làm lùi bƣớc những kẻ có ý định lừa đảo. 4.3. Giao thức tƣ̣ phân xƣ̉ Giao thức tƣ̣ phân xƣ̉ là loại tốt nhất trong số các giao thức. Loại giao thức này tự bản thân nó có thể đảm bảo đƣợc tính công bằng, không cần đến trọng tài hay một thẩm phán để phân xử khi tranh cãi. Nghĩa là giao thức loại này đƣợc chế ra sao cho không thể có các kẽ hở cho tranh cãi nảy sinh. Nếu có bên nào cố ý sai luật thì tiến trình sẽ cho phép phía bên kia phát hiện ra ngay và giao thức dừng lại ngay lập tức. Điều mong muốn cho tất cả các giao thức đều nên chế tạo nhƣ thế, nhƣng đáng tiếc là không phải lúc nào cũng có giao thức loại này cho mọi tình huống. 5. Các dạng tấn công đối với giao thức Nếu nhƣ giao thức đƣợc coi nhƣ một nghi thức giao tiếp để các bên làm việc với nhau thì đối với cryptography giao thức, bên dƣới cái vỏ “ngoại giao” đó là các kỹ thuật, các thuật toán mật mã đƣợc vận dụng, cài đặt trong các bƣớc cụ thể của giao thức. Các tấn công của kẻ phá hoại nhằm phá hoại tính an ninh của hệ thống cũng nhƣ xâm phạm tính bí mật riêng tƣ của thông tin, có thể hƣớng vào một trong các yếu tố sau: các xử lý kỹ thuật, các thuật toán mật mã hay là chính bản thân giao thức. Trong phần này, chúng ta hãy gác lại khả năng thứ nhất - giả sử rằng các kỹ thuật và thuật toán mật mã đều là an toàn; chúng ta chỉ xem xét khả năng thứ hai, tức là phân tích các dạng tấn công có thể, trong đó kẻ thù lợi dụng các kẻ hở logic để kiếm lợi hay phá hoại. Các dạng tấn công có thể phân thành hai loại chính nhƣ sau:
  • 144. Chƣơng VII: Giao thƣ́ c mật mã 135  Với dạng tấn công thụ động: kẻ địch chỉ đứng ngoài nghe trộm chứ không can thiệp hay ảnh hƣởng gì đến giao thức. Mục đích của nó là cố gắng quan sát và thu lƣợm thông tin. Tuy nhiên thông tin nghe trộm đƣợc chỉ ở dạng mã hoá, do đó kẻ địch cần phải biết cách phân tích, giải mã thì mới dùng đƣợc (cipher only attack). Mặc dù hình thức tấn công này không mạnh nhƣng rất khó phát hiện vì kẻ địch không gây động.  Với dạng tấn công chủ động (active attack): kẻ địch là một thế lực trong mạng, nắm nhiều khả năng và phƣơng tiện để có thể chủ động tấn công can thiệp, gây ảnh hƣởng phức tạp đến giao thức. Nó có thể đóng giả với một cái tên khác can thiệp vào giao thức bằng những thông báo kiểu mới, xoá bỏ những thông báo đang phát trên đƣờng truyền, thay thế thông báo thật bằng thông báo giả, ngắt ngang các kênh thông tin hay sửa chửa vào các kho thông tin trên mạng. Các khả năng khác nhau này là phụ thuộc vào tổ chức mạng và vai trò của kẻ địch trên mạng. Kẻ tấn công trong tấn công thụ động (Eve) chỉ cố gắng thu lƣợm thông tin từ các bên tham gia giao thức, thông qua thu nhập các thông báo truyền tin giữa các bên để phân tích giải mã. Trong khi đó, kẻ tấn công chủ động (Mallory) có thể gây ra các tác hại rất phức tạp đa dạng. Kẻ tấn công có thể có mục đích đơn thuần là tóm đƣợc tin mà nó quan tâm, nhƣng ngoài ra nó có thể gây ra các phá hoại khác nhƣ phá hoại đƣờng truyền truy nhập vào những hệ thống thông tin mà chỉ dành cho những ngƣời có đủ thẩm quyền. Kẻ địch trong tấn công chủ động thật sự rất nguy hiểm, đặc biệt là trong các giao thức mà các bên khác nhau không nhất thiết phải tin nhau. Hơn nữa phải nhớ rằng kẻ địch không phải chỉ có thể là những kẻ xa lạ bên ngoài mà nó có thể là một cá nhân hợp pháp trong hệ thống, thậm chí ngay chính là ngƣời quản trị mạng. Ngoài ra còn có thể có nhiều cá nhân liên kết với nhau thành một nhóm kẻ địch, làm tăng lên sự nguy hiểm cho giao thức. Một điều cũng có thể xảy ra là Mallory lại chính là đối tác trong giao thức. Anh ta có thể có hành động lừa dối hoặc là không chịu tuân theo giao thức. Loại kẻ địch này đƣợc là kẻ lừa đảo (cheater). Kẻ lừa đảo thuộc loại thụ động thì có thể làm đúng theo giao thức nhƣng lại cố tình thu nhặt thêm thông tin từ các bên đối tác hơn là đƣợc phép theo qui định. Kẻ lừa đảo chủ động thì phá vỡ giao thức trong một cố gắng lừa dối. Rất khó để giữ an toàn cho một giao thức nếu nhƣ phần lớn các bên tham gia đều là những kẻ lừa đảo chủ động, tuy nhiên đôi khi ngƣời ta cũng có các biện pháp để các bên hợp pháp có thể dò ra đƣợc sự lừa đảo đang diễn ra. Tất nhiên các giao thức cũng cần phải đƣợc bảo vệ để chống lại những kẻ lừa đảo loại thụ động.
  • 145. Tài liệu tham khảo 136 TÀI LIỆU THAM KHẢO [1] Nik Goots, Boris Izotov, Alex Moldovyan and Nik Moldovyan, “Modern Cryptography- Protect Your Data with Fast Block Ciphers”, A-LIST Publishing , 2003. [2] Whitfield Diffie, Martin E. Hellman, “New Directions in Cryptography”, IEEE transactions on information theory, Vol. IT-22, No. 6, November 1976. [3] Randy Nichols (LANAKI), “Classical cryptography course”, 1995. http://www.forturecity.com/course/LANAKI.html [4] A.Menezes, P. van Oorchot, and S.Vanstone, “Hand book of Applied Cryptography”, CRC Press, 1996. http://www.cacr.math.uwaterloo.ca/hac [5] Douglas R.Stinson, “Cryptography: theory and practice”, CRC Press, 1995.http://www.mindspring.com/~pate/stinson/ [6] Bruce Schneier, “Applied Cryptography, Second Edition: Protocols, Algorthms, and Source Code in C (cloth)”, MIST Press, 1996. [7] Gil Held, “Learn Encryption Techniques with BASIC and C++”, CRC Press, 1998. [8] FIPS 186 - (DSS)http://www.itl.nist.gov/fipspubs/fip186.htm [9] Jean Berstel, Dominique, “Theory of code”, Academic Press Inc, 1985. [10] C. Shannon, “Communication theory of secret systems” (tạp chí khoa học), 1949. [11] RSA library. www.fpt.rsa.org/PKI [12] “System and Network Security”. http://www.cs.ncl.ac.uk/old/modules/2000- 01/csc331/notes/ [13] “Cryptography and Computer Security”. http://www.cs.adfa.edu.au/teaching/studinfo/csc/lectures/ [14] http://www.securitydynamics.com/rsalabs/changelenges/factoring/rsa155.html. [15] “Data security and cryptography”. http://www.islab.oregonestate.edu/koc/ece575 [16] “OPT8 Advanced Cryptography”. http://www.isg.rhul.ac.uk/msc/teaching/opt8/macs.pdf