Tải bản đầy đủ (.docx) (23 trang)

Tiểu luận môn toán học cho khoa học máy tính MÃ HÓA TRONG TIN HỌC LÝ THUYẾT VÀ ỨNG DỤNG

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

ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

CAO HỌC KHÓA 8
BÀI THU HOẠCH MÔN HỌC
TOÁN CHO KHOA HỌC MÁY TÍNH
ĐỀ TÀI
MÃ HÓA TRONG TIN HỌC - LÝ THUYẾT VÀ ỨNG
DỤNG
Giảng viên hướng dẫn: PGS.TSĐỗ Văn Nhơn
Học viên thực hiện: CH1301031 - Nguyễn Thành Phương
TP. Hồ Chí Minh, tháng 12 năm 2013
MỤC LỤC
GVHD: PGS.TS Đỗ Văn Nhơn HV: Nguyễn Thành Phương
Trang 3
CHƯƠNG 1: TỔNG QUAN
1.1 Đặt vấn đề
Với sự phát triển mạnh mẽ của công nghệ thông tin, đặt biệt là sự phát triển của mạng
Internet, ngày càng có nhiều thông tin được lưu giữ trên máy vi tính và gửi đi trênmạng
Internet. Và do đó xuất hiện nhu cầu về an toàn và bảo mật thông tin trên máy tính. Có thể
phân loại mô hình an toàn bảo mật thông tin trên máy tính theo hai hướng chính như sau:
1) Bảo vệ thông tin trong quá trình truyền thông tin trên mạng (Network Security)
2) Bảo vệ hệ thống máy tính, và mạng máy tính, khỏi sự xâm nhập phá hoại từ bên
ngoài (System Security).
Mã hóa dữ liệu (cryptography), là một phần cơ bản thiết yếu của bảo mật thông tin. Mật mã
đáp ứng được các nhu cầu về tính bảo mật (confidentiality), tính chứng thực (authentication)
và tính không từ chối (non-repudiation) của một hệ truyền tin.
Báo cáo này sẽ tập trung tìm hiểu các khái niệm lý thuyết về mã hóa đối xứng và mã hóa bất
đối xứng, chúng đóng vai trò quan trọng trong mật mã hiện đại.
1.2 Mục tiêu đề tài
- Tìm hiểu lý thuyết về mã hóa đối xứng và mã hóa bất đối xứng


- Viết một chương trình đơn giản minh họa hai kĩ thuật mã hóa trên
GVHD: PGS.TS Đỗ Văn Nhơn HV: Nguyễn Thành Phương
Trang 4
CHƯƠNG 2: LÝ THUYẾT MÃ HÓA
2.1 Tổng quan về mã hóa
Trong mật mã học, một ngành toán học ứng dụng cho công nghệ thông tin, mã hóa là phương
pháp để biến thông tin (phim ảnh, văn bản, hình ảnh ) từ định dạng bình thường sang dạng
thông tin không thể hiểu được nếu không có phương tiện giải mã.
Giải mã là phương pháp để đưa từ dạng thông tin đã được mã hóa về dạng thông tin ban đầu,
quá trình ngược của mã hóa.
Một hệ thống mã hóa bao gồm các thành phần:
• thông tin trước khi mã hóa, kí hiệu là P
• thông tin sau khi mã hóa, kí hiệu là C
• chìa khóa, kí hiệu là K
• phương pháp mã hóa/giải mã, kí hiệu là E/D.
Quá trình mã hóa được tiến hành bằng cách áp dụng hàm toán học E lên thông tin P, vốn được
biểu diễn dưới dạng số, để trở thành thông tin đã mã hóa C.
Quá trình giải mã được tiến hành ngược lại: áp dụng hàm D lên thông tin C để được thông tin
đã giải mã P.
2.1.1 Lịch sử mật mã học
Mật mã học là một ngành khoa học có một lịch sử khoảng 4000 năm. Các cổ vật của ngành
khảo cổ học thu được đã cho thấy điều này. Những người Ai cập cổ đại đã sử dụng các chữ
tượng hình như là một dạng mã hóa đơn giản nhất trên các bia mộ của họ. Các tài liệu viết tay
khác cũng cho thấy các phương pháp mã hóa đơn giản đầu tiên mà loài người đã sử dụng là
của người Ba Tư cổ và người Do Thái cổ.
Tuy vậy có thể chia lịch sử mật mã học thành hai thời kỳ như sau:
Thời kỳ tiền khoa học: Từ trước công nguyên cho tới năm 1949. Trong giai đoạn này
mật mã học được coi là một nghệ thuật nhiều hơn là một môn khoa học mặc dù đã được ứng
dụng trong thực tế.
Lịch sử của mật mã học được đánh dấu vào năm 1949 khi Claude Shannon đưa ra lý

thuyết thông tin. Sau thời kỳ này một loạt các nghiên cứu quan trọng của nghành mật mã học
đã được thực hiện chẳng hạn như các nghiên cứu về mã khối, sự ra đời của các hệ mã mật
khóa công khai và chữ ký điện tử.
Qua nhiều thế kỷ phát triển của mật mã học chủ yếu được phục vụ cho các mục đích
quân sự (gián điệp, ngoại giao, chiến tranh…). Một ví dụ điển hình là 2000 năm trước đây
hoàng đế La mã Julius Caesar đã từng sử dụng một thuật toán thay thế đơn giản mà ngày nay
được mang tên ông trong cuộc chiến tranh Gallic.
Blaise De Vegenere cũng là tác giả của hệ mã mang tên ông, hệ mã này đã từng được
xem là an toàn tuyệt đối và được sử dụng trong một thời gian dài, tuy nhiên Charles Babbages
đã thực hiện thám mã thành công vào năm 1854 nhưng điều này được giữ bí mật. Một thuật
GVHD: PGS.TS Đỗ Văn Nhơn HV: Nguyễn Thành Phương
Trang 5
toán thám mã được phát hiện độc lập bởi một nhà khoa học người Phổ (thuộc nước Đức ngày
nay) có tên là Friedrich Kasiski. Tuy vậy do việc thiếu các thiết bị cải tiến nên các biến thể
của thuật toán mã hóa này vẫn còn được sử dụng trong những năm đầu của thế kỷ 20 mà tiêu
biểu nhất là việc thám mã thành công máy điện tín Zimmermann của quân Đức (một trong các
sự kiện tiêu biểu của mật mã học) trong thế chiến thứ nhất và kết quả là sự tham gia của Mỹ
vào cuộc chiến.
Với sự xuất hiện của các hệ thống máy tính cá nhân và mạng máy tính các thông tin
văn bản ngày càng được lưu trữ và xử lý nhiều hơn trên các máy tính do đó nảy sinh yêu cầu
về an toàn bảo mật đối với các thông tin được lưu trữ, xử lý và truyền giữa các máy tính.
Vào đầu những năm 1970 là sự phát triển của các thuật toán mã hóa khối đầu tiên:
Lucipher và DES. DES sau đó đã có một sự phát triển ứng dụng rực rỡ cho tới đầu những
năm 90.
Vào cuối những năm 1970 chứng kiến sự phát triển của các thuật toán mã hóa khóa
công khai sau khi Whitfield Diffie và Martin Hellman công bố bài báo “New Directions in
Cryptography” làm nền tảng cho sự ra đời của các hệ mã khóa công khai và các hệ chữ ký
điện tử.
Do nhược điểm của các hệ mã mật khóa công khai là chậm nên các hệ mã khối vẫn
tiếp tục được phát triển với các hệ mã khối mới ra đời để thay thế cho DES vào cuối thế kỷ 20

như IDEA, AES hoặc 3DES (một cải tiến của DES).
Gần đây nhất là các sự kiện liên quan tới các hàm băm MD5 (một hàm băm thuộc họ
MD do Ron Rivest phát triển) và SHA1. Một nhóm các nhà khoa học người Trung Quốc
(Xiaoyun Wang, Yiqun Lisa Yin, Hongbo Yu) đã phát triển các phương pháp cho phép phát
hiện ra các đụng độ của các hàm băm được sử dụng rộng rãi nhất trong số các hàm băm này.
Đây là một sự kiện lớn đối với ngành mật mã học do sự ứng dụng rộng rãi và có thể xem là
còn quan trọng hơn bản thân các hệ mã mật của các hàm băm. Do sự kiện này các hãng viết
phần mềm lớn (như Microsoft) và các nhà mật mã học đã khuyến cáo các lập trình viên sử
dụng các hàm băm mạnh hơn (như SHA-256, SHA-512) trong các ứng dụng.
Bruce Schneier (một trong những nhà mật mã học hàng đầu, tác giả của hệ mã
Blowfish) đã từng nói rằng các hình thức tấn công đối với hệ mã mật riêng và tấn công đối
với các hệ thống máy tính nói chung sẽ ngày càng trở nên hoàn thiện hơn “Attacks always get
better; they never get worse.” và lịch sử phát triển của mật mã học chính là lịch sử phát triển
của các hình thức tấn công đối với các hệ mã mật đang được sử dụng.
2.1.2 Phân loại các thuật toán mật mã học
Có nhiều cách khác nhau để chúng ta có thể phân loại các thuật toán mật mã học sẽ
được học trong chương trình. Ở đây chúng ta sẽ phân loại các thuật toán mật mã học dựa vào
hai loại tiêu chí.
Tiêu chí thứ nhất là dựa vào các dịch vụ an toàn bảo mật mà các thuật toán cung cấp,
dựa vào số lượng khóa sử dụng (0, 1, 2) chúng ta có các thuật toán mã hóa sau:
1. Các thuật toán mã hóa khóa bí mật tương ứng với các hệ mã mật khóa bí mật hay
khóa đối xứng SKC (Symmetric Key Cryptosytems), do vai trò của người nhận và người gửi
GVHD: PGS.TS Đỗ Văn Nhơn HV: Nguyễn Thành Phương
Trang 6
là như nhau, cả hai đều có thể mã hóa và giải mã thông điệp, như Caesar, DES, AES … Khóa
sử dụng cho các thuật toán này là 1 khóa cho cả việc mã hóa và giải mã.
2. Các thuật toán mã hóa khóa công khai tương ứng với các hệ mã khóa công khai
PKC (Public Key Cryptosystems). Đôi khi các hệ mã này còn được gọi là các hệ mã khóa bất
đối xứng (Asymmetric Key Cryptosytems). Khóa sử dụng cho các thuật toán này là 2 khóa,
một cho việc mã hóa và một cho việc giải mã, khóa mã hóa được công khai hóa.

3. Các thuật toán tạo chữ ký điện tử (Digital Signature Algorithms). Các thuật toán tạo
chữ ký điện tử tạo thành các hệ chữ ký điện tử. Thông thường mỗi hệ chữ ký điện tử có cùng
cơ sở lý thuyết với một hệ mã mật khóa công khai nhưng với cách áp dụng khác nhau. Trong
chương trình học chúng ta sẽ học một số hệ chữ ký điện tử phổ biến là RSA, ElGammma…
4. Các hàm băm (Hash functions). Các hàm băm là các thuật toán mã hóa không khóa
hoặc có khóa và thường được sử dụng trong các hệ chữ ký điện tử hoặc các hệ mã khóa công
khai.
Tiêu chí thứ hai phân loại các thuật toán mã hóa dựa trên cách thức xử lý input của
thuật toán (tức là bản rõ), dựa trên tiêu chí này chúng ta có hai loại thuật toán mã hóa sau:
1. Các thuật toán mã hóa khối (chẳng hạn như DES, AES …) xử lý bản rõ dưới các
đơn vị cơ bản là các khối có kích thước giống nhau.
2. Các thuật toán mã hóa dòng (RC4 …) coi bản rõ là một luồng bit, byte liên tục.
Trong các phần tiếp theo, báo cáo sẽ đi sâu vào hai loại là mã hóa đối xứng và mã hóa bất đối
xứng.
2.2 Mã hóa đối xứng
2.2.1 Tổng quan
Trong mật mã học, các thuật toán khóa đối xứng (tiếng Anh: symmetric-key algorithms) là
một lớp các thuật toán mật mã hóa trong đó các khóa dùng cho việc mật mã hóa và giải mã có
quan hệ rõ ràng với nhau (có thể dễ dàng tìm được một khóa nếu biết khóa kia).
Khóa dùng để mã hóa có liên hệ một cách rõ ràng với khóa dùng để giải mã có nghĩa chúng
có thể hoàn toàn giống nhau, hoặc chỉ khác nhau nhờ một biến đổi đơn giản giữa hai khóa.
Trên thực tế, các khóa này đại diện cho một bí mật được phân hưởng bởi hai bên hoặc nhiều
hơn và được sử dụng để giữ gìn sự bí mật trong kênh truyền thông tin.
2.2.2 Mã DES (Data Encryption Standard)
Mã DES là một ví dụ điển hình của mã hóa đối xứng, nó có các tính chất sau:
• Là mã thuộc hệ mã Feistel gồm 16 vòng, ngoài ra DES có thêm một hoán
• vị khởi tạo trước khi vào vòng 1 và một hoán vị khởi tạo sau vòng 16
• Kích thước của khối là 64 bít: ví dụ bản tin „meetmeafterthetogaparty‟
• biểu diễn theo mã ASCII thì mã DES sẽ mã hóa làm 3 lần, mỗi lần 8 chữ
• cái (64 bít): meetmeaf - tertheto - gaparty.

• Kích thước khóa là 56 bít
• Mỗi vòng của DES dùng khóa con có kích thước 48 bít được trích ra từ khóa chính.
GVHD: PGS.TS Đỗ Văn Nhơn HV: Nguyễn Thành Phương
Trang 7
Hình dưới đây minh họa các vòng của mã DES
Sơ đồ mã DES trên gồm ba phần, phần thứ nhất là các hoán vị khởi tạo và hoán vị
kết thúc. Phần thứ hai là các vòng Feistel, phần thứ ba là thuật toán sinh khóa con.
2.2.3 Hoán vị khởi tạo và hoán vị kết thúc
Ta đánh số các bít của khối 64 bít theo thứ tự từ trái sang phải là 0, 1, …, 62, 63:
b0b1b2…b62b63
Hoán vị khởi tạo sẽ hoán đổi các bít theo quy tắc sau :
GVHD: PGS.TS Đỗ Văn Nhơn HV: Nguyễn Thành Phương
Trang 8
Hoán vị kết thúc hoán đổi các bít theo quy tắc sau:
Hoán vị kết thúc chính là hoán vị nghịch đảo của hoán vị khởi tạo. Đối với knownplaintext
hay chosen-plaintext attack, hoán vị khởi tạo và hoán vị kết thúc không có ý nghĩa
bảo mật, sự tồn tại của hai hoán vị trên được nhận định là do yếu tố lịch sử.
2.2.4 Các vòng của DES
Hình sau minh họa một vòng Feistel của DES:
GVHD: PGS.TS Đỗ Văn Nhơn HV: Nguyễn Thành Phương
Trang 9
Trong DES, hàm F của Feistel là:
F(Ri-1, Ki) = P-box(S-boxes(Expand( Ri-1) Ki))
Trong đó hàm Expand vừa mở rộng vừa hoán vị Ri-1 từ 32 bít lên 48 bít. Hàm S
Boxes nén 48 bít lại còn 32 bít. Hàm P-box là một hoán vị 32 bít. Mô tả của các hàm trên
là như sau:
• Expand: đánh số các bít của Ri-1 theo thứ tự từ trái sang phải là 0, 1, 2, …, 31.
Hàm Expand thực hiện vừa hoán vị vừa mở rộng 32 bít thành 48 bít theo quy tắc:
• S-boxes:
Hàm S-boxes của DES biến đổi một số 48 bít thành một số 32 bít. Tuy nhiên,

nếu chỉ lập một bảng tra cứu như ở TinyDES thì bảng này phải có 2^16
GVHD: PGS.TS Đỗ Văn Nhơn HV: Nguyễn Thành Phương
Trang 10
dòng và 2^32 cột, dẫn đến số phần tử của bảng rất lớn. Để giảm kích thước của bảng tra cứu,
người ta chia hàm S-boxes thành 8 hàm S-box con, mỗi hàm biến đổi số 6 bít thành số 4
bít
Hàm S-box đầu tiên, hộp S có nội dung như sau:
Chi tiết các hộp còn lại được trình bày trong Phụ lục 1. Có thể thấy, mỗi hàm S-box con là
một phép thay thế Substitution. Các hàm S-box con không khả nghịch,
do đó hàm S-boxes cũng không khả nghịch. Sự phức tạp này của S-boxes là yếu tố
chính làm cho DES có độ an toàn cao.
• P-box: hàm P-box cũng thực hiện hoán vị 32 bít đầu vào theo quy tắc:
2.2.5 Thuật toán sinh khóa con của DES
Khóa K 64 bít ban đầu được rút trích và hoán vị thành một khóa 56 bít (tức chỉ sử
dụng 56 bít) theo quy tắc:
GVHD: PGS.TS Đỗ Văn Nhơn HV: Nguyễn Thành Phương
Trang 11
Khóa 56 bít này được chia thành 2 nửa trái phải KL0 và KR0 , mỗi nửa có kích thước 28
bít. Tại vòng thứ i (i = 1, 2, 3,…,16), KLi-1 và KRi-1 được dịch vòng trái ri bít để có
được KLi và KRi, với ri được định nghĩa:
Cuối cùng khóa Ki của mỗi vòng được tạo ra bằng cách hoán vị và nén 56 bít của KLi
và KRi thành 48 bít theo quy tắc:
2.2.6 Hiệu ứng lan truyền
Một tính chất quan trọng cần thiết của mọi thuật toán mã hóa là chỉ cần một thay đổi
nhỏ trong bản rõ hay trong khóa sẽ dẫn đến thay đổi lớn trong bản mã. Cụ thể, chỉ cần thay
đổi một bít trong bản rõ hay khóa thì dẫn đến sự thay đổi của nhiều bít bản mã. Tính chất
này được gọi là hiệu ứng lan truyền. Nhờ có tính chất này mà người phá mã không thể giới
hạn miền tìm kiếm của bản rõ hay của khóa (dù phá mã theo known-plaintext hay
chosen-plaintext) nên phải thực hiện vét cạn khóa.
DES là một phương pháp mã hóa có hiệu ứng lan truyền này. Xét hai bản rõ sau (64

bít):
P1: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
P2: 10000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
GVHD: PGS.TS Đỗ Văn Nhơn HV: Nguyễn Thành Phương
Trang 12
Hai bản rõ trên được mã hóa bằng DES với khóa:
K: 0000001 1001011 0100100 1100010 0011100 0011000 0011100 0110010
Chỉ cần đến vòng thứ 2, số bít khác nhau giữa hai bản mã đã là 21 bít, sau 16 vòng số
bít khác nhau là 34 bít (khoảng 1/2 tổng số bít của bản rõ)
Xét bản rõ sau (64 bít):
P: 01101000 10000101 00101111 01111010 00010011 01110110 11101011 10100100
Dùng hai khóa sau đây để mã hóa bản rõ trên (hai khóa này chỉ khác nhau 1 bít):
K1: 1110010 1111011 1101111 0011000 0011101 0000100 0110001 11011100
K2: 0110010 1111011 1101111 0011000 0011101 0000100 0110001 11011100
2.2.7 Độ an toàn của DES
Ta hãy xem xét tính an toàn của DES trước một vài phương pháp tấn công phá mã.
• Tấn công vét cạn khóa (Brute Force Attack):
Vì khóa của mã DES có chiều dài là 56 bít nên để tiến hành brute-force attack,
cần kiểm tra 2^56 khóa khác nhau. Hiện nay với những thiết bị phổ dụng, thời gian
gian để thử khóa là rất lớn nên việc phá mã là không khả thi (xem bảng). Tuy nhiên
vào năm 1998, tổ chức Electronic Frontier Foundation (EFF) thông báo đã xây dựng
được một thiết bị phá mã DES gồm nhiều máy tính chạy song song, trị giá khoảng
250.000$. Thời gian thử khóa là 3 ngày. Hiện nay mã DES vẫn còn được sử dụng
trong thương mại, tuy nhiên người ta đã bắt đầu áp dụng những phương pháp mã hóa
khác có chiều dài khóa lớn hơn (128 bít hay 256 bít) như TripleDES hoặc AES.
• Phá mã DES theo phương pháp vi sai (differential cryptanalysis):
Năm 1990 Biham và Shamir đã giới thiệu phương pháp phá mã vi sai. Phương
pháp vi sai tìm khóa ít tốn thời gian hơn brute-force. Tuy nhiên phương pháp phá mã
này lại đòi hỏi phải có 2^47 cặp bản rõ - bản mã được lựa chọn (chosen-plaintext). Vì
vậy phương pháp này là bất khả thi dù rằng số lần thử có thể ít hơn phương pháp

brute-force.
• Phá mã DES theo phương pháp thử tuyến tính (linear cryptanalysis)
Năm 1997 Matsui đưa ra phương pháp phá mã tuyến tính. Trong phương pháp
này, cần phải biết trước 2^43 cặp bản rõ-bản mã (known-plaintext). Tuy nhiên 2^43
cũng là một con số lớn nên phá mã tuyến tính cũng không phải là một phương pháp khả thi.
2.3 Mã hóa bất đối xứng
Mã hóa đối xứng dù rằng đã phát triển từ cổ điển đến hiện đại, vẫn tồn tại hai điểm
GVHD: PGS.TS Đỗ Văn Nhơn HV: Nguyễn Thành Phương
Trang 13
yếu sau:
• Vấn đề trao đổi khóa giữa người gửi và người nhận: Cần phải có một kênh an toàn để
trao đổi khóa sao cho khóa phải được giữ bí mật chỉ có người gửi và người nhận biết.
Điều này tỏ ra không hợp lý khi mà ngày nay, khối lượng thông tin luân chuyển trên
khắp thế giới là rất lớn. Việc thiết lập một kênh an toàn như vậy sẽ tốn kém về mặt chi
phí và chậm trễ về mặt thời gian.
• Tính bí mật của khóa: không có cơ sở quy trách nhiệm nếu khóa bị tiết lộ. Vào năm
1976 Whitfield Diffie và Martin Hellman đã tìm ra một phương pháp mã hóa khác
mà có thể giải quyết được hai vấn đề trên, đó là mã hóa khóa công khai (public key
cryptography) hay còn gọi là mã hóa bất đối xứng (asymetric cryptography). Đây có
thể xem là một bước đột phá quan trọng nhất trong lĩnh vực mã hóa.
Có nhiều phương pháp mã hóa thuộc loại mã hóa khóa công khai. Đó là các phương pháp
Knapsack, RSA, Elgaman, và phương pháp đường cong elliptic ECC…. Mỗi phương pháp có
cách thức ứng dụng hàm một chiều khác nhau. Bài thu hoạch này chỉ tập trung vào tìm hiểu
phương pháp RSA.
2.3.1 Tống quan RSA
Thuật toán RSA có hai khóa: khóa công khai (hay khóa công cộng) và khóa bí mật (hay khóa
cá nhân). Mỗi khóa là những số cố định sử dụng trong quá trình mã hóa và giải mã. Khóa
công khai được công bố rộng rãi cho mọi người và được dùng để mã hóa. Những thông tin
được mã hóa bằng khóa công khai chỉ có thể được giải mã bằng khóa bí mật tương ứng. Nói
cách khác, mọi người đều có thể mã hóa nhưng chỉ có người biết khóa cá nhân (bí mật) mới

có thể giải mã được.
Ta có thể mô phỏng trực quan một hệ mật mã khoá công khai như sau: Bob muốn gửi cho
Alice một thông tin mật mà Bob muốn duy nhất Alice có thể đọc được. Để làm được điều này,
Alice gửi cho Bob một chiếc hộp có khóa đã mở sẵn và giữ lại chìa khóa. Bob nhận chiếc
hộp, cho vào đó một tờ giấy viết thư bình thường và khóa lại (như loại khoá thông thường chỉ
cần sập chốt lại, sau khi sập chốt khóa ngay cả Bob cũng không thể mở lại được-không đọc
lại hay sửa thông tin trong thư được nữa). Sau đó Bob gửi chiếc hộp lại cho Alice. Alice mở
hộp với chìa khóa của mình và đọc thông tin trong thư. Trong ví dụ này, chiếc hộp với khóa
mở đóng vai trò khóa công khai, chiếc chìa khóa chính là khóa bí mật.
2.3.2 Lý thuyết số
1. Phép chia modulo:
Phép chia modulo là phép chia lấy phần dư. Ví dụ: 27 mod 8 = 3, 35 mod 9 = 8.
Một cách tổng quát:
GVHD: PGS.TS Đỗ Văn Nhơn HV: Nguyễn Thành Phương
Trang 14
2. Ước số
Nếu a mod n = thì có nghĩa là a chia hết cho n, hay n là ước số của a.
Ước số chung lớn nhất của hai số: ký hiệu gcd(a, b) . Để tìm USCLN của hai
số a, b, chúng ta có thể dùng thuật toán Euclid.
3. Số nguyên tố
Một số p được gọi là số nguyên tố nếu p chỉ chia hết cho 1 và chính nó, ngoài ra không
chia hết cho số nào khác từ 2 đến p - 1.
4. Số nguyên tố cùng nhau
Hai số nguyên a, b được gọi là nguyên tố cùng nhau nếu USCLN của a và b là 1.
2.3.3 Phép lũy thừa module và RSA
1. Phép lũy thừa modula
Định nghĩa:
Cho x ∈Z
m
, và p ∈N

*
; p = Σ
0

i

1
p 2 . Phép toán y = x
p
mod m được
gọi là phép lũy thừa modulo. Ta có : x
p
=x *(x)
p1
* ( x) * * (x)
Thuật giải:
Input : x ∈Z
m,
p = Σ
0

i

1
p 2
Output : y = x
p
mod m
(1) y =1 Nếu p=0, return y
(2) A = x nếu p

0
= 1 thì y = x
(3) Cho i chạy từ 1 đến I, do :
a. A= A mod m ;
b. Nếu p =1 thì y = (A*y) mod m
(4) return y
Thuật giải tính lũy thừa từ trái sang phải
Input : x ∈Z
m,
p = Σ
0

i

1
p 2
GVHD: PGS.TS Đỗ Văn Nhơn HV: Nguyễn Thành Phương
Trang 15
Output : y = x
p
mod m
(1) y =1
(2) Cho i chạy từ 1 đến I, do :
a. y= y mod m ;
b. Nếu p =1 thì y = (x*y) mod m
(3) return y
thuật giải:
Input : x ∈Z
m,
p = Σ

0

i

1
p 2
Output : y = x
p
mod m
(1) x
0
=1. cho i chạy từ 1 đến b-1, do :
x
i
= (x
i-1
*x) mod m
(2) y=1 cho i chạy từ I đến 0, do :
a. y = y
b
mod m
b. Nếu p
i
= 1 thì y = (y* x
pi
) mod m.
(3) return y
Ghi chú: Xét x
k
(mod pq), trong đó p,q hai số nguyên tố khác nhau

Với k
1
= k mod(p-1), k
2
= k mod(q-1), ∃ n
1
, n
2
:
k = k
1
+n
1
(p-1) = k
2
+n
2
(q-1)
thì x
k
(mod p) = ( x (mod p))( x (mod p)) , x mod p =1 (định lý
Fermat)
Vì thế x
k
(mod p) = x (mod p)
Ta có x
k
(mod q) = x (mod q) (tính đối xứng), Vì thế x
k
(mod p) = x

(mod p), x
k
(mod q) = x (mod q)
Ta có :
V(x) = v(x mod pq)
= (v(x) mod p, v (x) mod q)
= (v(x) mod p, v (x) mod q)
Trong đó :
V(x) = (v (x), v (x))=(x mod p,x mod q),
GVHD: PGS.TS Đỗ Văn Nhơn HV: Nguyễn Thành Phương
Trang 16
k = k mod (p-1), k = k mod (q-1)
Lưu ý : thuật giải tính lũy thừa từ trái sang phải có thể mở rộng với
nhiều số nguyên tố phân biệt. Ví dụ, khi q,p,r phân biệt, ta có :
v(x) k = v(x mod pqr)
= ( v (x) mod p, v (x) mod q, v (x) mod r
= v ( x) mod p, v (x) mod q, v (x) mod r)
Trong đó :
v(x) = ( v (x), v (x), v (x))
= ( x mod p, x mod q, x mod r),
k = k mod (p-1),
k = k mod (q-1),
k = k mod (r-1).
5. Định lý Revert Sammer Ademan (RSA)
Cho p và q là hai số nguyên tố phân biệt, n = pq,
ϕ = ϕ(n) = (p-1)(q-1), 1 < e <ϕ, e và ϕ nguyên tố cùng nhau,
d = e
-1
mod ϕ, 1 < d <ϕ, 0 ≤ m < n, và c = m
e

mod n.
Thì m = c
d
mod n.
Chứng minh:
Do ed=1 mod ϕ, ∃ k thỏa mãn ed =1+ kϕ (định lý Euler)
Ta có m =1 mod N, vì thế:
( m mod N)
k
= 1
k
mod N = 1 mod N,
(( m mod N)
k
mod N) m = (1 mod N)m= m mod N = m,
M=(m mod N)(m mod N) = m mod N = m mod N
Vì thế c
d
mod N = (m ) mod N = m mod N.
6. RSA
Hệ mật RSA, viết tắt từ tên của 3 nhà toán học đã phát minh ra hệ mã RSA: R. Rivest, A.
Shamir, L. Adleman, là một hệ thống khóa công khai hiện được dùng phổ biến nhất.
Sau đây là một số khái niệm và kí hiệu liên quan về vấn đề mã hóa dữ liệu :
-Mã hóa (Encryption): Quá trình chuyển đổi dữ liệu gốc thành dữ liệu được mã hóa
sao người khác không thể đọc hiểu được (kí hiệu E);
GVHD: PGS.TS Đỗ Văn Nhơn HV: Nguyễn Thành Phương
Trang 17
- Giải mã (Decryption): Quá trình ngược lại của mã hóa, biến đổi dữ liệu đã được mã
hóa thành dạng gốc ban đầu (kí hiệu D);
- Thông điệp (Message), bản gốc (Plaintext): Tệp dữ liệu chưa mã hóa (kí hiệu M).

- Bản mã (Ciphertext): Tệp dữ liệu đã được mã hóa (kí hiệu C).
Theo quy ước, khi mã hóa thì C = E(M) và khi giải mã thì M = D(C) = D(E(M))
• Thuật giải phát sinh khóa cho RSA:
B1 : Tính N = pq và ϕ = ϕ(n) = (p-1)(q-1) ; p,q là 2 số nguyên tố phân biệt
đủ lớn.
B2 : Chọn ngẫu nhiên một số nguyên e ∈ ] 1, ϕ[ thỏa mãn gcd(e,ϕ) = 1
B3 : Sử dụng thuật giải Bezout tính số nghịch đảo d ∈ ]1, ϕ[ của e ; ed =1
mod ϕ.
B4 : Cặp (N,e) là khóa công khai, và (N,d) là khóa cá nhân.
- Thuật giải RSA:
[1] Mã hóa
(1) Từ khóa công khai (n, e) và thông điệp dưới dạng một sốnguyên m ∈
[0, n), m được gọi là bản rõ (plaintext).
(2) Tính c = m
e
mod n, c được gọi là bản mã (ciphertext).
[2] Giải mã
Tìm lại bản rõ m từ bản mã c, sử dụng khóa cá nhân d để tính
M = c
d
mod n. (dùng định lý RSA)
2.3.4 Ví dụ RSA
p = 2357, q = 2551.
n = pq = 6012707, ϕ = (p-1)(q-1) = 6007800.
Với e = 3674911 ∈ (1, ϕ), thuật giải Bezout cho ta
d = e
-1
mod ϕ = 422191.
Vì thế khóa công khai là cặp (n = 6012707, e = 3674911) và khóa cá nhân là
d = 422191.

Để mã hóa bản tin m = 5234673 ta tính c = m
e
mod n = 3650502.
Để giải mã c, ta tính c
d
mod n = 5234673.
2.3.5 Độ an toàn RSA
Sau đây ta sẽ xem xét một số các tấn công phương pháp RSA.
• Vét cạn khóa: cách tấn công này thử tất cả các khóa d có thể có để tìm ra bản giải mã
có ý nghĩa, tương tự như cách thử khóa K của mã hóa đối xứng. Với N lớn, việc
tấn công là bất khả thi.
GVHD: PGS.TS Đỗ Văn Nhơn HV: Nguyễn Thành Phương
Trang 18
• Phân tích N thành thừa số nguyên tố N = pq: Chúng ta đã nói rằng việc phân tích phải
là bất khả thi thì mới là hàm một chiều, là nguyên tắc hoạt động của RSA. Tuy nhiên,
nhiều thuật toán phân tích mới đã được đề xuất, cùng với tốc độ xử lý của máy tính
ngày càng nhanh, đã làm cho việc phân tích N không còn quá khó khăn như trước
đây. Năm 1977, các tác giả của RSA đã treo giải thưởng cho ai phá được RSA có kích
thước của N vào khoảng 428 bít, tức 129 chữ số. Các tác giả này ước đoán phải mất
40 nghìn triệu triệu năm mới có thể giải được. Tuy nhiên vào năm 1994, câu đố này
đã được giải chỉ trong vòng 8 tháng. Bảng sau liệt kê kích thước N của các RSA đã
phá mã được cho đến hiện nay
Dĩ nhiên là việc phá mã trên chỉ được thực hiện trong phòng thí nghiệm. Tuy nhiên
người ta cho rằng kích thước của N phải khoảng 1024 bít (309 chữ số) thì mới bảo
đảm an toàn thật sự.
• Đo thời gian: Đây là một phương pháp phá mã không dựa vào mặt toán học củthuật
toán RSA, mà dựa vào một “hiệu ứng lề” sinh ra bởi quá trình giải mã RSA. Hiệu ứng
lề đó là thời gian thực hiện giải mã. Giả sử người phá mã có thể đođược thời giải
mã M = c^d mod N dùng thuật toán bình phương liên tiếp. Trongthuật toán bình
phương liên tiếp, nếu một bít của d là 1 thì xảy ra hai phépmodulo, nếu bít đó

là 0 thì chỉ có một phép modulo, do đó thời gian thực hiện giải mã là khác nhau.
Bằng một số phép thử chosen-plaintext, người phá mã có thể biết được các bít của d
là 0 hay 1 và từ đó biết được d.Phương pháp phá mã này là một ví dụ cho thấy việc
thiết kế một hệ mã an toàn rất phức tạp. Người thiết kế phải lường trước được hết các
tình huống có thể xảy ra.
GVHD: PGS.TS Đỗ Văn Nhơn HV: Nguyễn Thành Phương
Trang 19
CHƯƠNG 3: CHƯƠNG TRÌNH MINH HỌA
3.1 Tổng quan về chương trình minh họa
Chương trình minh họa được viết bằng ngôn ngữ python, dùng để minh họa cho hai thuật toán
mã hóa là DES và RSA.
Chương trình được viết dưới dạng command line, tập trung hiện thực các thuật toán DES và
RSA các thông số đầu vào giả lập một cách đơn giản.
3.2 Mã hóa đối xứng DES
Các hàm mô tả thuật toán trong file pyDes.py
Chương trình demo trong file des_demo.py
3.3 Mã hóa bất đối xứng RSA
Các hàm mô tả thuật toán và chương trình chính trong file rsa_demo.py
3.4 Chạy thử chương trình
3.4.1 DES
Chuỗi dữ liệu:
“Demo thuat toan ma hoa doi xung - DES. Nguyen Thanh Phuong, CH08 - CH1301031 - Dai
Hoc Cong Nghe Thong Tin, Dai Hoc Quoc Gia Thanh Pho Ho Chi Minh. abcd”
Chuỗi mã hóa thu được:
“\xa0\xb5\x84\xa50\x8c\x1e\x87\xa3^\xf6kJ\xbd\x11L\x8b\xdf\x96\n\x0b\x18n|\x0e)0#S\xf8
e\'a\x8a\r\x98C\x0c\x94\xd6\x0e\x97\xbd\x8e\x8d\xb7{\xb0y\xd0\xf1T6=\xa1\x13\x83\xc3\x
das\xec\xee\xe5\x06\xda*\xb4\x1eBA\xd7\\\x13\xba\xa1\xd7\xeem\xe0\x93\xfe|
^\x97\xe3"\xaeoL#\x9fE:c&N\xc1\xa7\xfetQ\xc3\xb0&V\xdc\x96\xa2\x84\xf1\xccWX\x9a\x
d3|\x06/\xc9\xa5\xcch\xd0u\xfb\x86\xeb\x7f5:\xb46B\xb2$\xdf\xa2\xde\xad\xc4\xa5D[\xdf@
\xb69b$=\x97\xa6”

Chuỗi giải mã:
GVHD: PGS.TS Đỗ Văn Nhơn HV: Nguyễn Thành Phương
Trang 20
“Demo thuat toan ma hoa doi xung - DES. Nguyen Thanh Phuong, CH08 - CH1301031 - Dai
Hoc Cong Nghe Thong Tin, Dai Hoc Quoc Gia Thanh Pho Ho Chi Minh. abcd”
3.4.2 RSA
n =
746280947725256009101703438735173932755538730725123279360176339968716700891
942148296337082512262625486807738509743783779593608266032161776826032100552
230114366270663698503269885952228768349486778871767
e =
214946788112656176137226403054894502613091108838948015610079086852095828797
064721967283474541501197440214346811799639036996006284653659699708728437969
347766630662694674706871810432364857352919859878403
d =
462429686781790208167806820772858542554977908458069973996651768937389018502
328196926160046101402390938203093139965624916234102066861036116851459041176
046733502174588458558276668672484813897516345238107
Chuỗi dữ liệu:
Demo thuat toan ma hoa bat doi xung - RSA.Nguyen Thanh Phuong, CH08 -
CH1301031 - Dai Hoc Cong Nghe Thong Tin,Dai Hoc Quoc Gia Thanh Pho Ho Chi Minh.
Chuỗi mã hóa:
GVHD: PGS.TS Đỗ Văn Nhơn HV: Nguyễn Thành Phương
Trang 21
[16183983423243977431978587969799176073626560369999037012229706074467314458
175204023027705590210825454930439903312914601316374058122223511156187526812
4799938752828052633592608387954834047735969186062563L,
729662395017478867414801062181242727569377221005547744028805323632178464225
296396252786537858963370127920501081746507590418549911933761028019062611557
56522472703821844053535016177324388748167243866203L,

218773948178516640737984002312469481464567359026215455789663895029642503903
173323062540132626868958332955371936569694736784945104217692360512383807852
188027170609191756441115541929400107847952245774280L,
684199251839425555443498152170838908020908792282996855007259734045995676616
574541843124804370849518143569143378502041472144450127855993299228683493199
953057068322179379854267616854239751683552578823020L,
243055503202230847305924927816918018981961542545638452834678734753763046083
708620105267531631373318114508083194465920230059256229296776980056798237616
189296237507033101795861767493567445893635000659030L,
175007104095714210613561400115172615276519467872088516705951672872984972153
268419408184988636763968431164716588031189546022873422716919981554758111240
097270071571682148358147278399382031441284505070952L,
243509316860064330713120818825015893515602722178084589521594683895784580974
184695158815619570550916992166010658616239976487489599352689050290261459133
099249880350615176578202214524552925268597983439655L,
711556129083204448047538149890258470833768885800735072368102293793491148278
120958171770083780476463288711327360435810098500035802381056680796685034470
515229357048323986350592295667511699612526435981558L,
516624569644976215621608529862820815797806619030153234362444051668850077761
225901588621323909118451595298769179948112574555887355354485580951267908016
642639674829511648824549842812456240361679749713616L,
244078542310269942722310956484997013026287658117958832003334921313127387074
027959294772798145877144741773295411462028459044744063354497607360116698779
467598161364466474363798187201125677183710590973362L,7425447008499713722957
674046477062178033047264219084082092569537580244636311013100467023923001537
215405796339790914032177077722678724501985770220157164264086489611558238875
90723826045806402808928689703L,
555318564365117410425955791004017476179811010948094399368754998689071111565
899385442590022950985765697622930671229216495016303035181816701059675125572
377681840995449507379896465538160981902050528349237L]

Chuỗi giải mã:
Demo thuat toan ma hoa bat doi xung - RSA. Nguyen Thanh Phuong, CH08 - CH1301031 -
Dai Hoc Cong Nghe Thong Tin, Dai Hoc Quoc Gia Thanh Pho Ho Chi Minh.
GVHD: PGS.TS Đỗ Văn Nhơn HV: Nguyễn Thành Phương
Trang 22
CHƯƠNG 4: KẾT LUẬN
4.1 Kết quả
Tổng hợp lý thuyết của mã hóa và các ví dụ minh họa.
Chương trình demo đơn giản để hiện thực các thuật toán mã hóa.
4.2 Hạn chế
Chương trình demo còn đơn giản, chưa có giao diện người dùng.
GVHD: PGS.TS Đỗ Văn Nhơn HV: Nguyễn Thành Phương
Trang 23
TÀI LIỆU THAM KHẢO
[1]PGS.TS Đỗ Văn Nhơn, “Toán Cho Máy Tínhslide”.
[2]Trần Minh Văn, “Bài giảng An Toàn Và Bảo Mật Thông Tin”.
[3]William Stallings, “Cryptography and Network Security Principles and Practices”,
4
th
Edition.
GVHD: PGS.TS Đỗ Văn Nhơn HV: Nguyễn Thành Phương

×