Để hỗ trợ giải quyết các vấn đề trên, đề tài này tập trung vào việc xây dựng một số thuật toán tối ưu hóa nhằm tăng hiệu quả các phép tính toán thực hiện với số nguyên lớn.. Từ tính cấp
Trang 1KHOA CÔNG NGHỆ THÔNG TIN ĐẠI HỌC THÁI NGUYÊN
Thái Nguyên 03/2008
Trang 2LỜI CẢM ƠN
Tôi xin gửi lời cảm ơn tới Khoa CNTT – ĐHTN, nơi các thầy cô đã tận tình truyền đạt các kiến thức quý báu cho tôi trong suốt quá trình học tập Xin cảm ơn Ban chủ nhiệm khoa và các cán bộ đã tạo điều kiện tốt nhất cho chúng tôi học tập và hoàn thành đề tài tốt nghiệp của mình
Đặc biệt, tôi xin gửi tới PGS TSKH Nguyễn Xuân Huy, thầy đã tận tình chỉ bảo tôi trong suốt quá trình thực hiện đề tài lời cảm ơn và biết ơn sâu sắc nhất Bên cạnh những kiến thức khoa học, thầy đã giúp tôi nhận ra những bài học về phong cách học tập, làm việc và những kinh nghiệm sống quý báu
Tôi xin bày tỏ lòng biết ơn tới gia đình, bạn bè, đồng nghiệp và những người thân đã động viên khích lệ tinh thần và giúp đỡ để tôi hoàn thành luận văn này
Thái Nguyên, ngày 10 tháng 11 năm 2008
Nguyễn Ngọc Trung
Trang 3LỜI CAM ĐOAN
Tôi xin cam đoan, toàn bộ nội dung liên quan tới đề tài được trình bày trong luận văn là bản thân tôi tự tìm hiểu và nghiên cứu, dưới sự hướng dẫn
khoa học của Thầy giáo PGS TSKH Nguyễn Xuân Huy
Các tài liệu, số liệu tham khảo được trích dẫn đầy đủ nguồn gốc Tôi xin chịu trách nhiệm trước pháp luật lời cam đoan của mình
Học viên thực hiện
Nguyễn Ngọc Trung
Trang 4MỤC LỤC
Trang
LỜI CẢM ƠN
LỜI CAM ĐOAN
MỤC LỤC
DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ
MỞ ĐẦU 1
CHƯƠNG 1 - LÝ THUYẾT MẬT MÃ 6
1.1 MỘT SỐ KHÁI NIỆM CƠ BẢN VỀ MÃ HÓA 6
1.2 LÝ THUYẾT ĐỘ PHỨC TẠP 10
1.3 CƠ SỞ TOÁN HỌC CỦA MẬT MÃ 13
CHƯƠNG 2 - NGHIÊN CỨU CƠ CHẾ HOẠT ĐỘNG CỦA HỆ MẬT KHÓA CÔNG KHAI 20
2.1 GIỚI THIỆU VỀ HỆ MẬT VỚI KHÓA CÔNG KHAI 20
2.2 HỆ MẬT MÃ KHÓA CÔNG KHAI RSA 22
2.3 HỆ MẬT MÃ KHÓA CÔNG KHAI RSA WITH CRT 29
2.4 CƠ CHẾ HOẠT ĐỘNG CỦA RSA 34
2.5 KHẢ NĂNG BỊ BẺ KHÓA CỦA HỆ MÃ CÔNG KHAI RSA 36
2.6 HỆ MẬT MÃ KHÓA CÔNG KHAI ELGAMAL 40
CHƯƠNG 3 - MỘT SỐ GIẢI THUẬT XỬ LÝ SỐ HỌC ÁP DỤNG ĐỂ TỐI ƯU HÓA QUÁ TRÌNH MÃ HÓA VÀ GIẢI MÃCỦA HỆ MÃ RSA ……… 41
3.1 PHÂN TÍCH CÁC PHÉP XỬ LÝ TOÁN HỌC TRONG HỆ MÃ RSA 41
3.2 ỨNG DỤNG GIẢI THUẬT FAST FOURIER TRANSFORM TRONG XỬ LÝ PHÉP NHÂN SỐ LỚN 45
3.1 CÀI ĐẶT THỬ NGHIỆM CÁC PHÉP TOÁN VỚI SỐ LỚN 53
CHƯƠNG 4: ỨNG DỤNG TRONG XÂY DỰNG HỆ MÃ RSA 56
4.1 XÂY DỰNG HỆ MÃ RSA THỬ NGHIỆM 56
4.2 ĐÁNH GIÁ VÀ NHẬN XÉT KẾT QUẢ 59
CHƯƠNG 5 – KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 60
Trang 5DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT
CRT Chinese Remainder Theorem
DES Data Encryption Standard
RSA Rivest ShamirAdleman
GCD Great Comon Divisor
FFT Fast Fourier Transform
Trang 6DANH MỤC CÁC BẢNG
Trang
Bảng 1.1: Bảng chi phí thời gian để phân tích số nguyên n ra thừa số nguyên tố 12 Bảng 2.1: Tóm tắt các bước tạo khoá, mã hoá, giải mã của Hệ ElGamal 25 Bảng 2.2: Bảng chi phí thời gian cần thiết để phân tích các số nguyên N 28 Bảng 2.3: Tóm tắt các bước tạo khoá, mã hoá, giải mã của Hệ ElGamal 42
Trang 7DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ
Trang
Hình 1.1: Mô hình mã hóa khóa đối xứng 7
Hình 1.2: Mô hình mã hóa khóa bất đối xứng 10
Hình 2.1: Đồ thị so sánh chi phí tấn công khóa bí mật và khóa công khai 39
Hình 3.1: Sơ đồ thực hiện giải thuật nhân nhanh sử dụng DFT 49
Hình 3.2: Giao diện thực hiện phép cộng 54
Hình 3.3: Giao diện thực hiện phép nhân 55
Hình 4.1: Giao diện chương trình mô phỏng hệ RSA 56
Hình 4.2 và 4.3: Giao diện thực hiện mã hóa và giải mã file văn bản 57
Trang 8MỞ ĐẦU
1 Lý do chọn đề tài
Các hệ mã công khai như RSA thực hiện tính toán với các số nguyên lớn hàng trăm chữ số Độ phức tạp trong việc giải mã các hệ mã này tỉ lệ thuận với độ lớn của các số nguyên tham gia vào việc tạo khóa mã hóa và khóa công khai Do đó để hệ mã an toàn, cần tăng kích thước của các số nguyên
Mặt khác, khi kích thước của các số nguyên cần xử lý lớn thì thời gian
xử lý của chương trình mã hóa cũng tăng lên
Thông tin cần mã hóa ngày càng đa dạng và có khối lượng lớn, đòi hỏi
hệ mã giảm thiểu thời gian xử lý
Các công cụ và giải thuật nhằm bẻ khóa các hệ mật mã được cải tiến đòi hỏi hệ mã cần được nâng cấp tính bảo mật
Tuy nhiên, việc nghiên cứu và triển khai các nâng cấp trong việc tối ưu hóa về mặt thuật toán trong các phép xử lý số học của các hệ mã còn hạn chế trong phạm vi các chương trình độc quyền
Để hỗ trợ giải quyết các vấn đề trên, đề tài này tập trung vào việc xây dựng một số thuật toán tối ưu hóa nhằm tăng hiệu quả các phép tính toán thực hiện với số nguyên lớn
Các kết quả của đề tài sẽ được ứng dụng trong việc hỗ trợ cho các phép
xử lý số học của các hệ mã Từ đó làm tăng tốc độ xử lý và tính bảo mật của các hệ mã
Từ tính cấp thiết của vấn đề tối ưu hóa các hệ mã công khai, đồng thời được sự hướng dẫn và gợi ý của PGS.TSKH Nguyễn Xuân Huy tôi đã chọn
đề tài cho luận văn tốt nghiệp Cao học ngành khoa học máy tính là:
“Các thuật toán tối ưu hóa trong bảo mật thông tin”
Trang 9o Về phát triển và triển khai ứng dụng:
Các kết quả của đề tài sẽ được ứng dụng trong việc hỗ trợ cho các phép xử
lý số học với số nguyên lớn trong các hệ mã Từ đó làm tăng tốc độ xử lý và tính bảo mật của các hệ mã
Nhiệm vụ
- Nghiên cứu các quá trình thực hiện mã hóa và giải mã của các hệ mã công khai
- Tìm hiểu các thuật toán xử lý số học được dùng trong các hệ mã
- Phát hiện các giải thuật tính toán cần tối ưu hóa
- Thực hiện đưa ra giải pháp tối ưu hóa các giải thuật này
- Ứng dụng trong một hệ mã cụ thể
- So sánh với kết quả thực thi của hệ mã khi chưa thực hiện tối ưu hóa
3 Phương pháp nghiên cứu
- Nghiên cứu dựa trên việc tìm hiểu các giải thuật xử lý với số nguyên lớn của các hệ mã Cụ thể là hệ mã hóa RSA, từ kết quả nghiên cứu có được sẽ định hướng lựa chọn thuật toán nào cần tối ưu hóa
- Thực hiện việc tối ưu hóa các giải thuật bằng cách tối ưu các phép xử lý với
số học lớn Thao tác này sử dụng kết hợp các phương pháp tính toán với số học
nhằm tăng hiệu năng của từng bước xử lý
- Thu thập các tài liệu đã xuất bản, các bài báo trên các tạp chí khoa học và các tài liệu trên mạng Internet có liên quan đến vấn đề đang nghiên cứu
- Tìm hiểu, vận dụng và kế thừa các thuật toán và qui trình mã đã công bố kết quả
Trang 10- Thực nghiệm cài đặt ứng dụng để minh họa các vấn đề trình bày trong đề tài
4 Đối tượng và phạm vi nghiên cứu
Đối tượng nghiên cứu :
Các hệ mật mã khóa công khai, trong đó hệ mật mã RSA được sử dụng làm đối tượng nghiên cứu chính của đề tài nhằm phát hiện các phép xử lý toán học cần tối ưu Từ các kết quả thu được bước đầu đề tài đưa ra một cách xây dựng thử nghiệm hệ mã RSA áp dụng các kết quả tối ưu hóa
Phạm vi nghiên cứu
Đề tài thực hiện việc tối ưu hóa với một số phép tính toán với số nguyên lớn
Ứng dụng thử nghiệm trong một hệ mã nhằm so sánh hiệu năng xử lý của
hệ mã trước và sau khi tối ưu
Đề tài giới hạn trong phạm vi nghiên cứu để đưa ra giải pháp, việc triển khai ứng dụng thực tiễn cần có thêm các điều kiện về thời gian và quy mô
5 Ý nghĩa khoa học và thực tiễn của luận văn
Ý nghĩa khoa học
- Trình bày các kiến thức toán học cơ bản, lý thuyết độ phức tạp của thuật toán, các thuật toán thường dùng trong các hệ mật mã khoá công khai
- Trình bày các phương pháp mật mã gồm: Phương pháp mã hoá khóa bí mật
và phương pháp mã hoá khóa công khai Với phương pháp mã hóa khóa công khai thì tập trung vào các thuật toán mã hóa RSA Với phương pháp mã hóa khóa bí mật chỉ giới thiệu sơ lược để so sánh với phương pháp mã hóa khóa công khai
- Tối ưu các phép xử lý số học với số nguyên lớn là một yêu cầu cần thiết trong việc xây dựng các hệ mã hóa có tốc độ xử lý và độ an toàn cao
Ý nghĩa thực tiễn
- Cài đặt hoàn chỉnh các giải thuật xử lý số học với số nguyên lớn cỡ hàng trăm chữ số
Trang 11- Đưa ra được chương trình thử nghiệm các giải thuật xây dựng được trong một hệ mã
- Đưa ra kết quả so sánh hiệu năng xử lý của hệ mã trước và sau khi tối ưu
6 Bố cục của luận văn
Mở đầu
1 Lý do chọn đề tài
2 Mục đích và ý nghĩa
3 Phương pháp nghiên cứu
4 Đối tượng và phạm vi nghiên cứu
5 Ý nghĩa khoa học và thực tiễn của luận văn
Chương 1: Nghiên cứu lý thuyết và thực tiển về mã hóa dữ liệu
1.1 Một số khái niệm cơ bản về mã hóa
1.2 Lý thuyết độ phức tạp của thuật toán
1.3 Các phép xử lý số học cơ bản – Cơ sở toán học của mật mã
Chương 2: Các thuật toán xử lý số học trong các hệ mã thông dụng
2.1 Giới thiệu về hệ mật mã với khóa công khai
2.2 Hệ mật mã công khai RSA
2.3 Hệ mật mã công khai RSA with CRT
2.4 Phân tích cơ chế hoạt động của hệ mã RSA
2.5 Các phép xử lý số học trong hệ mã RSA
2.6 Khả năng bị bẻ khóa của hệ mã công khai RSA
2.7 Hệ mật mã khóa công khai ELGAMAL
Chương 3: Tối ưu hóa một số giải thuật xử lý số học
Trang 124.2 Kiểm nghiệm và so sánh kết quả đạt được trước và sau khi tối ưu hóa
Chương 5: Kết luận
5.1 Đánh giá và nêu ưu nhược điểm của đề tài
5.2 Định hướng phát triển đề tài
7 Đóng góp của luận văn
- Luận văn hệ thống các cơ sở lý thuyết cơ bản về hệ mật mã khóa công khai
- Xây dựng chương trình thử nghiệm ứng dụng bảo mật và xác thực trong giảng dạy Từ đó có thể mở rộng và hoàn thiện thêm một số chức năng để đưa vào ứng dụng trong thực tiễn
Trang 13CHƯƠNG 1 – NGHIÊN CỨU LÝ THUYẾT VÀ THỰC TIỄN
VỀ MÃ HÓA DỮ LIỆU
1.1 MỘT SỐ KHÁI NIỆM CƠ BẢN VỀ MÃ HÓA
Lịch sử của mật mã học đã có từ rất sớm, ban đầu con người cố gắng tìm một cách để bảo vệ thông tin, tránh việc thông tin bị giải mã khi người khác có được chúng Các cách áp dụng đó thường mang tính mẹo mực đơn giản và có thể dễ dàng
bị giải mã nếu thông tin về cách thức che giấu bị lộ hoặc bị suy đoán Mật mã học ban đầu được áp dụng nhiều trong lĩnh vực quân đội Các phương pháp mã hóa cổ điển đã được áp dụng như Caesar, Playfair, …
Các hệ mật mã cổ điển được sử dụng nhiều nhưng dần dần chúng bộc lộ một hạn chế lớn Do các cách mã hóa đều dựa trên phương pháp mã khóa bí mật, khi gửi bản mã đi thì cần phải gửi kèm theo cả cách giải mã Bên cạnh đó, nếu cách mã hóa
là quen thuộc hoặc đơn giản thì người có được thông tin đã bị mã hóa có thể tiến hành các cách để dò ra luật mã hóa để có được văn bản gốc
Ngày nay cũng với sự trợ giúp của máy tính điện tử, các phương pháp mã hóa với khóa bí mật được sử dụng chung cho quá trình mã hóa và giải mã (hay còn gọi
là mã hóa cổ điển) có thể dễ dàng bị giải mã
Sự cần thiết phải có các phương pháp mã hóa an toàn hơn đã được đáp ứng bằng việc áp dụng các kết quả nghiên cứu của toán học Sự thay đổi về phương pháp mã hóa cũng như độ an toàn của các hệ mã mới đã đưa lịch sử của mật mã học sang trang mới Các hệ mật mã với khóa mã đối xứng đã góp phần to lớn trong việc củng cố vai trò của mật mã học trong các ứng dụng của con người Đưa mật mã đến với cả các ứng dụng trong cuộc sống đời thường của con người, mật mã không còn chỉ được nhắc đến nhiều trong lĩnh vực quân sự Ứng của mật mã học đã trở thành một công cụ cần thiết cho mọi người, cần thiết cho các hoạt động thường ngày Các phương pháp mã hóa khác nhau có những ưu, nhược điểm khác nhau Khi
sử dụng các phương pháp mã hóa, người dùng sẽ cân nhắc để lựa chọn phương pháp mã hóa thích hợp nhất đối với mình Có thể lựa chọn môi trường cần phải an
Trang 14toàn tuyệt đối bất kể thời gian và chi phí hoặc lựa chọn môi trường lại cần giải pháp dung hòa giữa bảo mật và chi phí
Các mô hình mã hóa có chung một số thuật ngữ như sau:
Bản rõ: Là nội dung của thông điệp cần gửi đi và cần được bảo vệ an toàn Nó
có thể là xâu các bít, các file văn bản, các file có cấu trúc
Mã hoá: Là quá trình xử lý thông điệp cần bảo mật trước khi gửi đi
Bản mã: Là kết quả thu được khi mã hóa bản rõ theo qui trình mã hóa của
phương pháp đang được chọn
Giải mã: Là quá trình xử lý ngược, tiến hành giải mã bản mã để thu lại bản rõ
Ví dụ: Mã hóa văn bản có nội dung là “ABC” với luật mã là tịnh tiến vòng 1
đơn vị đối với mã ASCII của mỗi kí tự
Vậy ta có:
Bản rõ: “ABC”
Mã hóa: Thực hiện mã hóa theo luật mã
Biến đổi các kí tự thành các số theo mã ASCII của kí tự đó
A 65, B 66, C 67
Thu được các mã mới sau khi tịnh tiến là: 66 - 67 - 68
Biến đổi các mã mới thành kí tự
Bản mã: “BCD”
Giải mã: Thu được bản rõ là “ABC”
1.1.1 Khái niệm chung về mật mã
Hệ mật mã hiện đại thường gồm 5 thành phần (P, C, K, E, D) trong đó:
P (Plaintext) tập hợp hữu hạn các bản rõ có thể (không gian các bản rõ)
C (Ciphertext) tập hợp hữu hạn các bản mã có thể (không gian các bản mã)
K (Key) tập hợp các bản khoá có thể
E (Encrytion) tập hợp các qui tắc mã hoá có thể
D (Decrytion) tập hợp các qui tắc giải mã có thể
Nội dung cần mã hóa thể hiện dưới dạng bản rõ (P) Người gửi sử dụng qui tắc (E) và khóa (K) mã hoá bản rõ (P), kết quả thu được gọi là bản mã (EK(P) = C) Bản
Trang 15mã này được gửi đi trên một đường truyền tới người nhận, sau khi nhận được bản
mã (C) người nhận sử dụng qui tắc (D) và khóa (K) giải mã nó để hiểu được nội dung thông điệp gốc (DK(C) = P)
1.1.2 Những yêu cầu đối với hệ mật mã hiện đại
Hệ mật mã hiện đại cần đảm bảo được hai yêu cầu sau:
- Đảm bảo tính bảo mật
- Đảm bảo tính xác thực
Bảo mật: Ngăn không để người lạ thực hiện việc trích chọn, sửa đổi thông tin
từ các bản mã được gửi trên các kênh truyền phổ biến (thường không an toàn) Xác thực: Đảm bảo chỉ có người nhận đúng mới có thể giải mã nội dung bản
mã, đồng thời cũng đảm bảo người gửi không thể phủ nhận nội dung đã gửi
1.1.3 Các phương pháp mã hóa
1.1.3.1 Hệ thống mã hóa đối xứng
Cả hai quá trình mã hóa và giải mã của hệ thống mã hóa đối xứng đều sử dụng chung một khóa bí mật Do đó, khi bị mất khóa bí mật này thì tính bảo mật của hệ mã bị phá vỡ
Ban đầu, bản rõ được người gửi A mã hóa với khóa k Sau đó bản mã được gửi tới người nhận B Khi nhận được bản mã, người B sử dụng khóa k giải mã để thu được bản rõ Do đó, nếu một người khác có được khóa k thì hệ thống mã hóa này sẽ bị tấn công (Hình 1.1)
Hình 1.1: Sơ đồ hoạt động của mã hóa khóa đối xứng
Các hệ mật mã như DES, 3DES-Triple DES được xây dựng trên phương pháp mã hóa khóa đối xứng
Bản mã
Khóa bí mật
Trang 16Nhận xét:
- Trong các giao dịch trên mạng, khóa k phải được truyền đi trên môi trường này Do đó nó có thể bị lấy cắp Để an toàn hơn, việc bảo mật cho khóa k cần phải được chú trọng Thường phải dùng thêm các cơ chế và giải thuật khác trong việc quản lý, trao đổi khóa giữa các đối tượng
- Nội dung của bản rõ không thể xác thực được nguồn gốc cũng như không
có tính chất không thể phủ nhận của chủ thể
- Khi số lượng khóa bí mật tăng lên, việc quản lý các khóa này trở nên phức tạp và khó khăn cho công việc khi một người phải giữ nhiều khóa bí mật khi giao dịch với nhiều đối tượng khác nhau
Những nhược điểm trên dẫn đến hệ mã với khóa mã đối xứng khó có thể áp dụng rộng rãi Trong nội dung của đề tài này, các phương pháp mã hóa với khóa mã công khai được nghiên cứu để thực hiện mục đích của đề tài
1.1.3.2 Hệ thống mã hóa bất đối xứng
Hệ thống mã hóa bất đối xứng hay còn gọi là mã hóa với khóa công khai đã được Martin Hellman, Ralph Merkle và Whitfield Diffie thuộc Đại học Stanford giới thiệu vào năm 1976
Hệ mã này được áp dụng các kết quả của toán học đã khắc phục được các hạn chế của các phương pháp mã hóa khóa đối xứng Phương pháp mã hóa bất đối xứng
sử dụng hai loại khóa trong cùng một cặp khóa: Khóa công khai (public key) được công bố rộng rãi và sử dụng để mã hóa các thông điệp, khóa riêng (private key) chỉ
do chủ thể nắm giữ và được sử dụng để giải mã thông điệp đã được mã hóa bằng khóa công khai
Các lý thuyết toán học dựa trên cơ sở khai thác những ánh xạ f mà việc thực hiện ánh xạ ngược f -1 rất khó so với việc thực hiện ánh xạ f được sử dụng trong các phương pháp mã hóa này Việc thực hiện ánh xạ ngược f -1 chỉ tiến hành được khi biết được khóa riêng
Trang 17Hình 1.2 Sơ đồ hoạt động của mã hóa khóa bất đối xứng
Khi thực hiện mã hóa bất đối xứng, người A sử dụng khóa công khai do người
B tạo để mã hóa thông điệp và gửi cho người B Do biết được khóa riêng nên B mới
có thể giải mã được thông điệp mà A đã mã hóa Trong trường hợp bản mã bị một người thứ ba có được, nếu chỉ kết hợp với thông tin về khóa công khai đã được công bố, cũng rất khó có khả năng giải mã được bản mã này trong khoảng thời gian chấp nhận được do không nắm được khóa riêng của B
Khóa công khai và khóa riêng có quan hệ toán học với nhau theo nghĩa từ khóa riêng có thể tính toán để suy ra được khóa công khai, nhưng để từ khóa công khai suy ra khóa riêng sẽ rất phức tạp vì số lượng phép tính toán là rất lớn dẫn đến thời gian thực hiện để giải mã là không khả thi khi chiều dài của khóa đủ lớn
Đây cũng là mấu chốt của vấn đề bảo mật và tấn công trong các hệ mã khóa công khai Đề tài này sẽ đề cập đến vấn đề an toàn của hệ mã công khai Nghiên cứu đưa ra các giải pháp hỗ trợ làm tăng tính an toàn của các hệ mã này bằng cách
cố gắng áp dụng các thuật toán xử lý nhanh với số lớn Từ đó có thể tăng chiều dài của khóa mà vẫn đảm bảo yếu tố thời gian mã hóa và giải mã chấp nhận được
1.2 LÝ THUYẾT ĐỘ PHỨC TẠP
1.2.1 Khái niệm độ phức tạp của thuật toán
Khi tiến hành chạy cùng một thuật toán trên nhiều máy tính với cấu hình khác nhau ta sẽ thu được thời gian thực hiện thuật toán khác nhau Do đó ta không thể lấy thời gian thực hiện của thuật toán trên một máy tính để đánh giá độ phức tạp của thuật toán
Bản mã
Trang 18Độ phức tạp của một thuật toán sẽ được tính bằng số các phép tính cơ sở máy tính thực hiện khi tiến hành chạy thuật toán (các phép tính cơ sở: đọc, ghi, phép so sánh) Ngoài ra, số lượng phép tính còn phụ thuộc vào kích cỡ đầu vào của thuật toán Như vậy, độ phức tạp của thuật toán phải là một hàm số theo độ lớn của đầu vào Việc xác định chính xác hàm này có thể rất phức tạp, tuy nhiên khi biết cỡ của chúng thì ta đã có được một ước lượng chấp nhận được
Độ phức tạp của một thuật toán được đo bằng số các phép tính bit Phép tính bit là một phép tính logic hay số học thực hiện trên các số một bit 0 và 1 Để ước lượng độ phức tạp của thuật toán, ta dùng khái niệm bậc O-lớn
Định nghĩa 1.1:
Giả sử f(n) và g(n) là hai hàm xác định trên tập hợp các số nguyên dương Ta nói f(n) có bậc O-lớn của g(n), và viết f(n) = O(g(n)) hoặc f=O(g), nếu tồn tại một hằng số C > 0 sao cho với n đủ lớn Ta có 0 < f(n) < Cg(n)
Định nghĩa 1.2:
Một thuật toán được gọi là có độ phức tạp đa thức, hoặc có thời gian đa thức, nếu số các phép tính cần thiết khi thực hiện thuật toán không vượt quá O(logkn), trong đó n là độ lớn của đầu vào, và k là số nguyên dương nào đó
Nói cách khác, nếu đầu vào là các số m-bit thì thời gian thực hiện thuật toán là O(md), tức là tương đương với một đa thức của m
Các thuật toán với thời gian O(αn), α > 1, được gọi là các thuật toán với độ phức tạp mũ, hoặc thời gian mũ
Một thuật toán có độ phức tạp O(g), thì cũng có thể nói nó có độ phức tạp O(h) với mọi hàm h > g Tuy nhiên, ta luôn luôn cố gắng tìm ước lượng tốt nhất có thể được để tránh hiểu sai về độ phức tạp thực sự của thuật toán
Tồn tại những thuật toán có độ phức tạp trung gian giữa đa thức và mũ Các thuật toán đó được gọi là thuật toán dưới mũ
Độ phức tạp không phải là tiêu chuẩn duy nhất để đánh giá thuật toán Có những thuật toán, về lý thuyết thì có độ phức tạp cao hơn một thuật toán khác, nhưng khi sử dụng lại cho kết quả nhanh hơn
Trang 19Bảng dưới đây đưa ra các thông số về thời gian và số lượng phép toán trên bit
để thực hiện việc phân tích một số nguyên n ra thừa số nguyên tố áp thuật toán tốt nhất trên máy tính có tốc độ xử lý một triệu phép tính trên một giây:
Giải thuật này có độ phức tạp dưới mũ: exp lognlog logn.
Bảng 1.1: Bảng chi phí thời gian phân tích số nguyên n ra thừa số nguyên tố
1.2.2 Các bài toán khó tính toán và ứng dụng trong mật mã học
Một hệ mật phải cố gắng gây khó khăn cho người giải mã khi không biết khóa giải nhưng lại dễ dàng giải mã khi biết được khóa giải mã
Một hệ mã như vậy sẽ có một thông tin “cửa sập” bí mật được chèn thêm vào bài toán dựa trên tính khó khăn khi thực hiện nghịch đảo một hàm một chiều
Định nghĩa 1.3:
Cho các tập hữu hạn S, T Hàm f : S T được gọi là hàm một chiều
(one-way function) nếu như:
Trang 20- Hàm f dễ tính toán, nghĩa là x S, có thể dễ dàng tính y = f(x)
- Hàm ngƣợc f -1 (y) khó tính, nghĩa là cho y T thì khó tính đƣợc x = f -1 (y)
Định nghĩa 1.4:
Hàm một chiều cửa sập (trapdoor one-way function) là hàm một chiều f đƣợc
thêm vào thông tin cửa sập (trapdoor information) để có thể dễ dàng tính x khi biết
bất kỳ y T thoả mãn x = f -1 (y)
Ví dụ về hàm một chiều:
- f(p,q) = p*q, là hàm một chiều với p, q là các số nguyên tố lớn Nhƣ vậy, ta
có thể thực hiện phép nhân p * q (độ phức tạp đa thức); nhƣng tính f -1 lại là bài toán
cực khó (bài toán phân tích ra thừa số nguyên tố - độ phức tạp mũ)
- fg ,N : x gx mod N là hàm một chiều Thực vậy, phép tính gx mod N có độ
phức tạp đa thức; nhƣng tính f -1 lại là bài toán cực khó (bài toán logarithm rời rạc)
- fk ,N : x xk mod N là hàm một chiều, với N = pq, p và q là các số nguyên tố lớn, kk’ 1(mod φ(N)) Thực vậy, phép tính xk mod N có độ phức tạp đa thức,
nhƣng tính f -1 lại cực khó Tuy nhiên, nếu biết k’ có thể dễ dàng tính đƣợc f từ công
2 Hàm phi Euler là hàm có tính nhân: Nếu gcd(m,n) = 1 thì φ(m.n) =
φ(m).φ(n) (trong đó gcd(m, n) là ký hiệu ƣớc số chung lớn nhất của m và n)
Nếu n = p1e1p2e2…pkek trong đó p1, p2, , pk là các thừa số nguyên tố của n thì:
Trang 21Định nghĩa 1.6
Cho a và b là các số nguyên, a được gọi là đồng dư với b theo modulo n, ký hiệu
là a b (mod n) nếu n chia hết (a-b) Số nguyên n được gọi là modulo của đồng dư
* Tính chất của đồng dư: Cho a, a1, b, b1, c Z Ta có các tính chất sau:
i a a(mod n) (phản xạ);
ii Nếu a b(mod n) b a(mod n) (đối xứng);
iii Nếu a b(mod n), b c(mod n) a c(mod n) (bắc cầu);
iv Nếu a a1(mod n), b b1(mod n) a + b (a1 + b1)(mod n), ab (a1b1) (mod n), an (a1)n(mod n), với mọi n Z
Ta có khái niệm lớp tương đương như sau: Lớp tương đương của một số nguyên a là tập hợp các số nguyên đồng dư với a theo modulo n Từ các tính chất i,
ii và iii ta thấy: Cho n cố định, các số đồng dư theo modulo n trong không gian Z được xếp vào một lớp tương đương Nếu a = qn + r, trong đó 0 ≤ r < n thì a r (mod n) Vì vậy mỗi số nguyên a là đồng dư theo modulo n với duy nhất một số nguyên trong khoảng [0, n-1] và được gọi là thặng dư nhỏ nhất của a theo modulo n, a và r cùng thuộc một lớp tương đương Do đó r có thể đơn giản được sử dụng để thể hiện lớp tương đương
1.3.3 Không gian Z n
* Các định nghĩa trong không gian Z n
- Các số nguyên theo modulo n ký hiệu Zn là một tập hợp các số nguyên {0, 1, 2, 3,…, n - 1} Các phép toán cộng, trừ, nhân trong Zn được thực hiện theo modulo n
- Cho aZn Nghịch đảo nhân của a theo modulo n là một số nguyên x Zn
sao cho a*x 1(mod n) Nếu x tồn tại thì đó là giá trị duy nhất và a được gọi là khả nghịch, nghịch đảo của a ký hiệu là a -1
- Cho a, bZn Phép chia của a cho b theo modulo n là tích của a và b -1 theo modulo n, và chỉ được xác định khi b có nghịch đảo theo modulo n
* Các tính chất trong không gian Z n
Trang 22Cho a Zn, a có nghịch đảo khi và chỉ khi a và n nguyên tố cùng nhau (gcd(a,n) = 1), trong đó gcd(a,n) là ước số chung lớn nhất của a và n
Giả sử d = gcd(a,n) Phương trình đồng dư ax b (mod n) có nghiệm x nếu
và chỉ nếu b chia hết cho d, trong trường hợp các nghiệm d nằm trong khoảng [0, 1] thì các nghiệm đồng dư theo modulo n/d
n-1.3.4 Nhóm nhân Z * n
* Các định nghĩa trong nhóm nhân Z * n
- Nhóm nhân của Zn ký hiệu là Z*n = {a Zn | gcd (a, n) = 1} Nếu n là số nguyên tố thì Z*n = {aZn | 1 ≤ a ≤ n-1}
- Cho aZn* Bậc của a ký hiệu là ord(a) là số nguyên dương t nhỏ nhất sao cho at ≡ 1(mod n)
- Cho aZn* Bậc của a ký hiệu là ord(a) là số nguyên dương t nhỏ nhất sao cho a t 1 (mod n)
Định lý 1.2 (Fermat)
Cho p là số nguyên tố
Nếu gcd(a, p) = 1 thì ap-1 1(mod p)
Nếu r s(mod(p-1)) thì ar as(mod p) với mọi số nguyên a
ap a (mod p) với mọi số nguyên a
1.3.5 Thặng dư
Định nghĩa 1.7
Cho aZn* , a được gọi là thặng dư bậc 2 theo modulo n hoặc căn bậc 2 theo
modulo n nếu tồn tại xZn* sao cho x2 a(mod n) Nếu không tồn tại x thì a được
Trang 23gọi là thặng dư không bậc 2 theo modulo n Tập hợp các thặng dư bậc 2 theo modulo n ký hiệu là Qn và tập hợp các thặng dư không bậc 2 theo modulo n ký hiệu là _Qn
Theo định nghĩa ta có 0 Zn* nên 0 Qn và 0 _Qn
Cho a Qn Nếu a Zn* thoả mãn x2 a (mod n) thì x được gọi là căn bậc 2
của a theo modulo n
* Tính chất (số căn bậc 2)
Nếu p là một số nguyên tố lẻ và a Qn thì a có đúng 2 căn bậc 2 theo modulo p Tổng quát hơn: cho n = p1e1p2 e2…pk ek trong đó pi là các số nguyên tố lẻ phân biệt và ei ≥1 Nếu a Qn thì a có đúng 2k căn bậc 2 theo modulo n
1.3.7 Các thuật toán trong Z n
Cho n là số nguyên dương Như đã nói ở trước, các phần tử trong Zn được thể hiện bởi các số nguyên {0, 1, 2,…, n-1} Ta thấy rằng: nếu a, b Zn thì:
Trang 24* Thuật toán tính nghịch đảo nhân trong Z n
Bài toán phát biểu như sau: Cho a Zn, hãy tìm a-1 mod n nếu có
Bước đầu, dùng thuật toán Euclid mở rộng sau để tìm các số nguyên x và y sao cho:
ax + ny = d với d = gcd(a,n)
Nếu d > 1 thì a-1 mod n không tồn tại Ngược lại, return (x)
* Thuật toán Euclid mở rộng(N + ={1,2,3,…,} là tập các số nguyên dương)
Trang 251.3.8 Thuật toán kiểm tra tính nguyên tố
Ta thấy rằng, để kiểm tra tính nguyên tố của một số nguyên bằng phương pháp Monte Carlo (thuật toán Miller-Rabin, Soloway-Strassen) đều có tốc độ thực hiện
khá nhanh (khoảng O(n2), với n là số bit của số cần kiểm tra) Tuy nhiên, những thuật toán này không đưa ra một kết luận chính xác về tính nguyên tố của con số,
mà luôn có một xác suất sai sót Như vậy để có một sai số cực nhỏ chấp nhận được,
ta phải thực hiện thuật toán kiểm tra nhiều lần Vậy thì, với khoảng bao nhiêu số nguyên dương ngẫu nhiên (có chiều dài xác định) thì có thể tìm ra được một số nguyên tố Theo lý thuyết thì số các số nguyên tố nhỏ hơn N là: N/ln(N)
Giả sử ta chọn p là số nguyên có chiều dài 512-bits, thì xác suất để số p nguyên tố là 1/354 Mặt khác, do chúng ta chỉ quan tâm đến những số lẻ, nên xác suất để p nguyên tố là 2/354 = 1/177 Vậy thì, trung bình khoảng 177 số lẻ ngẫu nhiên sẽ có 1 số nguyên tố
Người ta đã cũng chứng minh được, thuật toán Miller-Rabin dùng kiểm tra tính nguyên tố của một số nguyên dương lẻ với sai số nhiều nhất là 1/4 Nếu thực hiện thuật toán này t lần thì sai số nhiều nhất sẽ là 1/4t, để đảm bảo chắc chắn tính nguyên tố cho số kiểm tra nên chọn số t > 20 Thuật toán này được sử dụng trong quá trình tạo khóa ở hệ mật mã RSA
Thuật toán Miller-Rabin: Kiểm tra tính nguyên tố của một số dạng 2 k m+1
Input n > 2, n = 2km + 1 Output [True, False] (True: n là số nguyên tố, False: n là hợp số)
1 Giả sử n = 2km + 1; ( với m lẻ)
2 Chọn số ngẫu nhiên a {2, , n-1};
3 Tính b = am (mod n);
Trang 264 if (b 1 and b (n – 1)) Return True; /* n nguyên tố */
5 i = 1;
6 while (i < k and b (n – 1)) { b = b2 (mod n);
if (b = 1) Return False; /* n là hợp số */
i ++;
}
7 if (b! = (n – 1)) Return False; /* n hợp số */
8 Return True; /* n là số nguyên tố */
Thuật toán: Kiểm tra tính nguyên tố của một số dạng 2 k m+1 với t lần thực hiện (t > 20)
Input n > 2, n = 2km + 1 Output {True, False} (True: n là số nguyên tố, False: n là hợp số)
Trang 27CHƯƠNG 2 - NGHIÊN CỨU CƠ CHẾ HOẠT ĐỘNG CỦA HỆ MẬT KHÓA
CÔNG KHAI
2.1 GIỚI THIỆU VỀ HỆ MẬT VỚI KHÓA CÔNG KHAI
Vào năm 1976, các nhà khoa học Whitfield Diffie, Martin Hellman và Ralph Merkle tại Đại học Stanford giới thiệu ý tưởng về hệ thống mật mã khóa công khai,
có thể khắc phục các nhược điểm của phương pháp mật mã khoá đối xứng Các phương pháp Diffie-Hellman của Martin Hellman và Whitfield Diffie được công
bố Năm 1977 nhóm tác giả Ronald Rivest, Adi Shamir và Leonard Adleman đã công bố phương pháp RSA, phương pháp mã hóa khóa công khai RSA hiện được sử dụng rất nhiều trong các ứng dụng mã hóa và bảo mật thông tin RSA nhanh chóng trở thành chuẩn mã hóa khóa công khai trên toàn thế giới do tính an toàn và khả năng ứng dụng của nó
Độ an toàn của hệ thống mật mã mới này, không phải được đo bằng độ phức tạp của các thuật toán mã hóa, mà nó dựa vào một khám phá mới vô cùng quan trọng trong ngành khoa học máy tính, đó là lý thuyết độ phức tạp tính toán: Chủ yếu
đề cập đến sự phân tích các thuật toán và đặc biệt là số các bước tính toán cần thiết
để phát hiện khóa bí mật Từ đó xác định độ an toàn của bất kỳ hệ mật mã khóa công khai nào
Một hệ thống mật mã khóa công khai sử dụng hai loại khóa trong cùng một cặp khóa: Khoá công khai (public key) được công bố rộng rãi và sử dụng trong
mã hóa thông tin, khóa riêng (private key) sử dụng để giải mã thông tin đã được
mã hóa bằng khóa công khai Các phương pháp mã hóa này khai thác những ánh xạ
f mà việc thực hiện ánh xạ ngược f -1 rất khó so với việc thực hiện ánh xạ f Chỉ khi
biết được khóa riêng thì mới có thể thực hiện được ánh xạ f -1
2.1.1 Các quan điểm cơ bản của hệ mật mã khoá công khai
- Hệ mật mã khoá công khai dựa trên quan điểm hàm một chiều (one-way function) và khoá công khai, để biến đổi một bản rõ thành bản mã với thời gian tính
Trang 28toán hợp lý Nhưng nếu muốn tính ngược lại (inverse function) thì phải mất nhiều thời gian và khó thực hiện được Vì vậy, các thám mã rất khó có thể tính toán để thu được bản rõ từ bản mã chặn được
- Một quan điểm khác dùng trong hệ mật mã khoá công khai, là thông tin “cửa sập” (trap door) mà hàm một chiều phải có Thông tin bí mật (khoá riêng) chỉ được đưa vào bởi người sở hữu cặp khóa Khi có được thông tin “cửa sập” thì công việc giải mã sẽ trở nên dễ dàng
- Các hệ mật mã khóa công khai được xây dựng dựa trên những bài toán khó như: bài toán logarithm rời rạc trong trường hữu hạn Zp (hệ ElGamal) và bài toán phân tích một số nguyên lớn ra các thừa số nguyên tố (hệ RSA)
2.1.2 Hoạt động của hệ mật mã khóa công khai
Đối với hệ thống mã hóa khóa công khai: Mỗi người sử dụng phải tạo riêng cho mình một cặp khóa Trong đó, một khóa công khai (public key) cùng với thuật
toán mã hóa E, được công bố rộng rãi tại thư mục dùng chung cho mọi người sử
dụng Còn lại là khóa riêng (private key) cùng với thuật toán giải mã D được giữ bí mật bởi người sử dụng
Như vậy, người A muốn gửi thông điệp R đến cho người B (Hình 2.1)
Giả sử: Khóa công khai của B là: KB , Khóa riêng của B là: M B
Khóa công khai của A là: K A , Khóa riêng của A là: M A
Thuật toán mã hóa: E , thuật toán giải mã: D
Người A tìm khóa công khai KB của người B trong thư mục dùng chung và tính C = E(KB, R), sau đó gửi bản mã C cho người B Khi nhận bản mã C người B
sẽ giải mã dựa vào khóa riêng MB của mình để tính R = D(MB, C)
2.1.3 Các mô hình ứng dụng của hệ mật mã khóa công khai
Thông qua từng lĩnh vực ứng dụng cụ thể mà người gửi sử dụng khóa bí mật của mình, khóa công khai của người nhận hoặc cả hai để hình thành một số các ứng dụng phù hợp như sau:
- Tính mật: Người gửi A thực hiện mã hóa thông điệp R bằng khóa công khai
KB của người nhận B: C = E(KB,R) Còn người nhận giải mã bằng khóa riêng MB
Trang 29của mình: R = D(MB,C) Vậy, có duy nhất người B mới giải mã được thông điệp,
điều này gọi là tính mật của hệ
- Tính xác thực: Người gửi A thực hiện mã hóa một thông điệp R bằng khóa
riêng MA: C = E(MA,R) Người nhận B giải mã bằng khóa công khai KA của người gửi A: R = D(KA,C) Như vậy chỉ có duy nhất A là người có khóa riêng để mã hóa,
cho nên thông điệp nhận được là của A, điều này gọi là tính xác thực của hệ
- Tính mật và xác thực: Người gửi A thực hiện mã hoá thông điệp hai lần, lần
thứ nhất sử dụng khóa bí mật MA của mình E(MA,R), lần thứ hai sử dụng khóa công khai KB của người nhận B: C = E(KB,(E(MA,R))) Khi nhận bản mã, người nhận B cũng thực hiện giải mã hai lần, đầu tiên dùng khóa riêng MB của mình D(MB,C), sau
đó dùng khóa công khai KA của người gửi A: R = D(KA,D(MB,C)) Như vậy chỉ người gửi mới có khóa riêng để mã hoá và cũng chỉ người nhận mới có khóa riêng
để giải mã, đây chính là tính mật và tính xác thực của hệ
2.1.4 Các yêu cầu của hệ mật mã khóa công khai
- Dễ tính toán đối với các thành viên khi muốn tạo một cặp khóa (khóa công khai và khóa riêng)
- Người gửi dễ tính toán khi biết khóa công khai và thông điệp R cần mã hoá thành một bản mã tương ứng C = E(KB,R)
- Người nhận dễ tính toán khi sử dụng khóa riêng để giải mã bản mã C, khôi phục lại thông điệp ban đầu: R = D(MB,C)
- Đối với người thám mã, khi biết được khóa công khai KB, muốn xác định khóa bí mật MB hoặc biết được khóa công khai KB và bản mã C để khôi phục lại thông điệp R ban đầu: Điều này không thể tính toán nổi
2.2 HỆ MẬT MÃ KHÓA CÔNG KHAI RSA
Hệ mật RSA được xây dựng năm 1978 bởi ba tác giả R.L.Rivest, A.Shamir và L.Adleman Hệ mật RSA được thiết kế làm việc trên trường số ZN, dựa trên cơ sở
độ khó giải của bài toán phân tích số nguyên N lớn thành các thừa số nguyên tố p và
q khác nhau
2.2.1 Bài toán phân tích số nguyên
Trang 30Bài toán 2.1 (Bài toán phân tích số nguyên):
Cho một số nguyên dương N, tìm các thừa số nguyên tố pi của N để N = p1e1
p2e2 pkek , với pi là những số nguyên tố phân biệt và ei 1 là các số nguyên (với i = 1, , k)
Ví dụ : Với N=12, ta có N=22.31
Bài toán này khó giải khi N là một số nguyên lớn, có nhiều thuật toán để giải bài toán này Nhưng hiện nay vẫn chưa có thuật toán nào hiệu quả để phân tích số nguyên N có khoảng 232 chữ số thập phân (768-bits) trở lên
Bài toán 2.2 (Bài toán RSA):
Cho số nguyên dương N, N=p*q với p và q là các số nguyên tố phân biệt,
số nguyên e sao cho thỏa mãn gcd(e, (p – 1) * (q – 1)) = 1, và số nguyên c Tìm một
số nguyên m sao cho me c (mod N)
Bài toán RSA cũng có độ khó tương tự như bài toán phân tích số nguyên, nhưng nó dễ dàng được giải nếu như biết được hai số nguyên tố p và q
2.2.2 Định nghĩa các tập làm việc của hệ RSA
Tạo hai số nguyên tố phân biệt p và q lớn, sao cho bài toán phân tích thật sự
là khó giải (kích cỡ mỗi số khoảng 512 bits 1024 bits)
Tính N = p* q và φ(N) = (p – 1) * (q – 1)
Chọn một số nguyên ngẫu nhiên e sao cho 1 < e < φ(N) và gcd(e, φ(N)) = 1
Sử dụng thuật toán Euclid mở rộng, để tính số nguyên d duy nhất, sao cho 0
< d < φ(N) và e * d 1 mod φ(N) (d là nghịch đảo của e modulo N)
Hai số (e, N) làm khóa công khai, còn (d, N) được giữ bí mật làm khóa riêng Các số nguyên tố p, q sẽ bị xóa khi kết thúc quá trình tạo khóa
Trang 31Giả sử để gửi thông điệp M cho người B Người A thực hiện như sau:
Lấy khóa công khai của người nhận B: (e, N)
Biến đổi thông điệp M thành những số nguyên Mi tương ứng sao cho Mi <
N, (i = 1,…, k) Theo phép biến đổi sau:
- Biến đổi các ký tự trong thông điệp M thành các số nguyên tương ứng, thí dụ theo qui tắc: Dấu cách 00, A 01, B 02, , Z 26
- Chia thông điệp vừa biến đổi thành k nhóm có chiều dài bằng nhau, mỗi nhóm biểu diễn một số nguyên Mi {0,…, N – 1} (với 1 ≤ i ≤ k)
Thực hiện mã hóa lần lượt cho từng số Mi Ci bằng cách:
Ci = Eke(Mi) = Mie (mod N)
Tập các số nguyên {C1, C2, ,Ck} là bản mã để gửi đến người nhận B
c) Giải mã:
Người nhận B thực hiện các bước sau:
Thực hiện giải mã lần lượt từng số nguyên Ci Mi bằng cách:
Mi = D(Ci) = Cid (mod N) với 0 ≤ Mi < N, (d là khoá bí mật của B)
Thực hiện phép biến đổi ngược lại từ các số Mi thành các chuỗi ký tự tương ứng để khôi phục lại nội dung thông điệp M ban đầu
Bảng 2.2: Tóm tắt các bước tạo khoá, mã hoá, giải mã của Hệ RSA
Tạo khoá: Tạo 2 số nguyên tố lớn p và q
* Tính N = p * q và Tính φ(N) = (p-1) * (q-1)
* Chọn 1< e < φ(N): gcd(φ(N), e) = 1
* Tính d = e-1 mod φ(N) (dùng thuật toán Euclid mở rộng)
Khóa công khai: (e, N) Khóa riêng: (d, N)
Mã hóa: Khối bản rõ M < N
* Tính: C = Me mod N
* Gửi khối bản mã (số nguyên) C đến người nhận
Giải mã: Khối bản mã C < N
Trang 322.3.4 Tính đúng của quá trình giải mã
Trường hợp 2: Nếu gcd(M, p) = p M 0 (mod p) Đồng thời lũy thừa số
M lên một số nguyên bất kỳ, thì cũng chia hết cho p Nghĩa là Med 0 (mod p ) Vậy trường hợp 2 cũng thỏa mãn phương trình (6)
Với cách tính tương tự với q, từ (2) Med M (mod q) (7)
Từ (6) & (7) Med M (mod pq) M (mod N)
Ví dụ 2.1 : Minh họa của hệ mật mã RSA
Trang 33 Tìm phần tử nghịch đảo d = 179 (dùng thuật toán Euclid mở rộng) ;
Công bố khóa công khai là cặp số ( e = 49, N = 2747), còn số d = 179 được giữ làm khóa riêng
b) Mã hóa: Giả sử nội dung cần mã hoá là M = “MA HOA CONG KHAI ”
Biến đổi các ký tự của thông điệp thành các số tương ứng như sau: