và cho đến nay các nghiên cứu mới về tính an toàn của các hệ mã hóa khóa công khai cũng như cách thức xử lý số nguyên lớn, phương pháp tìm số nguyên tố lớn hiệu quả, chính xác liên tục
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
TRẦN ĐĂNG HIÊN
NGHIÊN CỨU VÀ PHÁT TRIỂN
HỆ MẬT MÃ KHÓA CÔNG KHAI ỨNG DỤNG TRONG BẢO MẬT DỮ LIỆU VÀ XÁC THỰC
CÁC GIAO DỊCH ĐIỆN TỬ
LUẬN VĂN THẠC SĨ
Hà Nội – 2010
Trang 2ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
TRẦN ĐĂNG HIÊN
NGHIÊN CỨU VÀ PHÁT TRIỂN
HỆ MẬT MÃ KHÓA CÔNG KHAI ỨNG DỤNG TRONG BẢO MẬT DỮ LIỆU VÀ XÁC THỰC
Trang 33 MỤC LỤC
LỜI CẢM ƠN 1
LỜI CAM ĐOAN 2
MỤC LỤC 3
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT 5
DANH MỤC CÁC BẢNG 6
MỞ ĐẦU 7
Chương 1 - GIỚI THIỆU CHUNG VÀ 10
CƠ SỞ TOÁN HỌC CỦA LÝ THUYẾT MẬT MÃ 10
1.1 Giới thiệu chung về mật mã 10
1.1.1 Sơ lược lịch sử về mật mã 10
1.1.2 Các hệ thống mã hóa 12
1.1.3 Mã hóa khóa đối xứng và mã hóa khóa công khai 14
1.1.4 Các bài toán về an toàn thông tin 15
1.1.5 Thám mã và tính an toàn của các hệ mã hóa 16
1.2 Cơ sở toán học của lý thuyết mật mã 17
1.2.1 Số học các số nguyên, thuật toán Euclid 17
1.2.2 Độ phức tạp tính toán 24
Chương 2 - PHƯƠNG PHÁP 29
KIỂM TRA VÀ SINH SỐ NGUYÊN TỐ 29
2.1 Số nguyên tố và định lý cơ bản của số học 29
2.1.1 Định nghĩa số nguyên tố 29
2.1.2 Chứng minh số nguyên tố là vô hạn 30
2.1.3 Sự phân bố của số nguyên tố 30
2.1.4 Các số nguyên tố có dạng đặc biệt 31
2.2 Phương pháp cổ điển kiểm tra và sinh số nguyên tố 33
2.2.1 Thuật toán Trial Division 33
2.2.2 Phương pháp sàng Eratosthenes 34
2.3 Phương pháp xác suất kiểm tra và sinh số nguyên tố 35
2.3.1 Thuật toán Fermat 35
2.3.2 Thuật toán Solovay – Strassen 37
2.3.3 Thuật toán Miller-Rabin 40
2.4 Phương pháp xác định 42
2.5 Phân tích thành thừa số nguyên tố 45
Chương 3 - ĐỀ XUẤT CẤU TRÚC DỮ LIỆU 48
VÀ THUẬT TOÁN XỬ LÝ SỐ NGUYÊN LỚN 48
3.1 Cấu trúc dữ liệu và sơ đồ hoạt động của hệ thống 48
3.1.1 Cấu trúc của các lớp 48
3.1.2 Bảng luỹ thừa 2 49
3.1.3 Sơ đồ hoạt động của hệ thống 50
3.2 Thuật toán chuyển đổi 50
3.2.1 Thuật toán từ hệ thập phân sang hệ nhị phân 50
3.2.2 Thuật toán từ hệ nhị phân sang hệ thập phân 51
3.3 Thuât toán chia (div, mod) 51
3.4 Thuật toán phân rã nhị phân tính luỹ thừa mod 52
3.5 Phương pháp tính logarit 53
3.6 Phương pháp tính căn bậc hai 54
Trang 43.7 Khả năng của thư viện 55
Chương 4 - MỘT SỐ HỆ MÃ HÓA KHÓA CÔNG KHAI 56
VÀ CẢI TIẾN HỆ MÃ HÓA RABIN 56
4.1 Sự ra đời của hệ mã hóa khóa công khai 56
4.2 Một số bài toán cơ bản 56
4.3 Một số hệ mã hóa khóa công khai 58
4.3.1 Sơ đồ chung hệ mã hóa khoá công khai 58
4.3.2 Hệ mã hóa RSA 59
4.3.3 Hệ mã hóa ElGamal 64
4.3.4 Hệ mã hóa Rabin 67
4.4 Cải tiến hệ mã hóa Rabin 74
4.4.1 Mở rộng hệ mã hóa Rabin với n=p*q*r 74
4.4.2 Sơ đồ hệ mã hóa Rabin với n = p*q*r 74
4.4.3 Tính đúng đắn 75
4.4.4 Công thức của phép biến đổi ngược (tính x) 75
4.4.5 Quy trình giải mã 77
4.4.6 Ví dụ 79
4.4.7 Nhận xét và đánh giá 81
4.5 Một số ứng dụng của mã hóa khóa công khai 83
4.5.1 Tạo vỏ bọc an toàn cho văn bản mật 83
4.5.2 Vấn đề xác thực chủ thể 83
4.5.3 Kết hợp với kỹ thuật thủy vân 85
KẾT LUẬN 86
TÀI LIỆU THAM KHẢO 88
PHỤ LỤC 91
Trang 55
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT
1 AKS Manindra Agrawal, Neeraj Kayal, và Nitin Saxena
Trang 6DANH MỤC CÁC BẢNG
Bảng 1.1.1 Bảng chữ cái và chỉ số tương ứng 13
Bảng 1.2.1 Mô tả quá trình tính toán của thuật toán Euclid 18
Bảng 1.2.2 Mô tả quá trình tính toán của thuật toán Euclid mở rộng 19
Bảng 2.1.1 Liệt kê một vài giá trị của (n) 30
Bảng 2.1.2 So sánh giá trị gần đúng và giá trị chính xác của (n) 31
Bảng 2.1.3 So sánh ln n và ) (n n , (n) và n n ln 31
Bảng 2.1.4 Liết kê một vài số Mersenne và cho biết số nào là nguyên tố 32
Bảng 2.2.1 Mô tả sàng Eratosthenes với 100 chữ số 35
Bảng 2.4.1 Số lượng các số nguyên tố r vớ k bít 44
Bảng 2.4.2 Thời gian thực hiện của thuật toán AKS 45
Bảng 2.5.1 Mô tả quá trình tính toán của thuật toán Pollar 46
Bảng 3.1.1 Dùng để lưu trữ giá trị thập phân của 2i 49
Bảng 3.7.1 liệt kê thời gian thực hiện phép toán lũy thừa mod 55
Trang 77
MỞ ĐẦU
Hiện nay, ở tất cả các nước phát triển cũng như đang phát triển, mạng máy tính đang ngày càng đóng vai trò thiết yếu trong mọi lĩnh vực hoạt động của toàn xã hội, và một khi nó trở thành phương tiện điều hành các hệ thống thì nhu cầu bảo mật an toàn
thông tin được đặt lên hàng đầu Nhu cầu này không chỉ có ở các bộ máy an ninh, quốc
phòng, quản lý nhà nước, mà đã trở thành bức thiết trong nhiều hoạt động kinh tế xã hội: tài chính, ngân hàng, thương mại, và thậm chí trong cả một số hoạt động thường ngày
của người dân (thư điện tử, thanh toán, tín dụng, )
Do ý nghĩa quan trọng mang tính sống còn mà lĩnh vực bảo mật an toàn thông tin thu hút được sự quan tâm của đông đảo các chuyên gia trên khắp thế giới Các hội nghị khoa học thường niên của Hiệp hội Quốc tế về Nghiên cứu Công nghệ Mã (IACR) được
tổ chức liên tục từ những năm 80 đến nay tại Châu Âu (EUROCRYPT), Hoa Kỳ (CRYPTO) và mới đây là Châu Á (ASIACRYPT) ngày càng thu hút được sự quan tâm của các chuyên gia trong nhiều lĩnh vực khoa học, công nghệ Trong đó nổi bật là các
công trình về xây dựng các hệ mã hóa khóa công khai gắn liền là các công trình về xử lý
số nguyên lớn, số nguyên tố của các tác giả: Diffie và Hellman, Rivest, Sharmir và
Adleman, Rabin, Elgamal, Pollard, Lenstra và cho đến nay các nghiên cứu mới về tính
an toàn của các hệ mã hóa khóa công khai cũng như cách thức xử lý số nguyên lớn,
phương pháp tìm số nguyên tố lớn hiệu quả, chính xác liên tục được công bố trên các tạp
chí chuyên ngành về mật mã nói riêng, toán học và tin học nói chung
Ở Việt Nam, gần đây cũng đã xuất hiện một số nghiên cứu về bảo mật an toàn thông tin như: đề tài “Mã hoá và bảo mật thông tin điện tử” - Viện Toán học thực hiện trong năm 2002, 2003, nhóm nghiên cứu ở Đại học Công nghệ - ĐHQG Hà Nội, nhóm nghiên cứu ở Đại học Khoa học Tự nhiên - ĐHQG Hồ Chí Minh, từ đó xuất bản được nhiều ấn bản chuyên ngành, giáo trình và các bài báo công bố ở các hội nghị khoa học trong và ngoài nước
Luận văn này được thực hiện nhằm mục đích nghiên cứu bảo mật an toàn thông tin Luận văn tập trung đi sâu vào nghiên cứu và phát triển hệ mã hóa khóa công khai và các vấn đề liên quan nhằm mục đích ứng dụng vào trong bảo mật và xác thực
Trang 8Nội dung chính của Luận văn:
(i) Trình bày thuật toán kiểm tra và sinh số nguyên tố lớn Nhằm tìm ra các số
nguyên tố lớn làm khóa cho các hệ mã hóa khóa công khai
(ii) Đề xuất cấu trúc dữ liệu và thuật toán xử lý số nguyên lớn từ đó có thể xây
dựng thư viện lập trình giúp ứng dụng các hệ mã hóa khóa công khai Thực tế xây dựng cho thấy khả năng xử lý của thư viện lên tới hàng nghìn chữ số và tốc độ thực hiện các phép toán nhanh như trong ngôn ngữ lập trình, thư viện đã có (nội dung này học viên đã
báo cáo, được phản biện và đăng trong Kỷ yếu hội thảo quốc gia lần thứ XII “Một số vấn
đề chọn lọc của công nghệ thông tin và truyền thông”, Đồng Nai, 8/2009, NXB KHKT 2010)
(iii) Đặc biệt luận văn đưa ra hướng cải tiến hệ mã hóa khóa công khai Rabin nhằm
nâng cao độ an toàn và đưa ra hướng khắc phục một số nhược điểm trong quá trình giải
mã của hệ mã hóa này Ngoài ra đưa ra một số công thức tính nghịch đảo để quy trình giải
mã của hệ mã hóa Rabin và Rabin cải tiến được dễ dàng
Ngoài phần mở đầu và kết luận, kết cấu của luận văn gồm 4 chương:
- Chương 1 “Giới thiệu chung và cơ sở toán học của lý thuyết mật mã” nhằm
trình bày các vấn đề chung nhất của mật mã, đưa ra các khái niệm cơ bản Phần cơ
sở toán học trình bày các kiến thức toán học làm nền cho các nội dung chính trong luận văn như: số học các số nguyên, thuật toán Euclid, thuật toán Euclid mở rộng,
lý thuyết đồng dư, thặng dư thu gọn, phần tử nguyên thủy, phương trình đồng dư tuyến tình và đồng dư bậc hai Ngoài ra trình bày về độ phức tạp thuật toán, hàm
một phía và cửa sập một phía
- Chương 2 “Phương pháp kiểm tra và sinh số nguyên tố” trình bày các định
nghĩa, định lý về số nguyên tố Giới thiệu một số phương pháp với các thuật toán kiểm tra và sinh số nguyên tố nói chung và số nguyên tố lớn nói riêng, đóng vai trò rất quan trọng trong việc cung cấp số nguyên tố lớn giúp thực thi, ứng dụng các hệ
mã hóa khóa công khai Các phương pháp được trình bày trong luận văn là: phương pháp cổ điển, phương pháp xác suất và phương pháp xác định Trong chương này cũng trình bày một phương pháp phân tích một số ra thừa số nguyên
tố
Trang 99
- Chương 3 “Đề xuất cấu trúc dữ liệu và thuật toán xử lý số nguyên lớn” trình
bày cụ thể cấu trúc dữ liệu và đề xuất các thuật toán để có thể xây dựng hoàn chỉnh thư viện xử lý số nguyên lớn Thực tế xây dựng thì khả năng xử lý của thư viện này lên tới hàng nghìn chữ số và tốc độ thực hiện các phép toán như trong các ngôn lập trình, tương đương với thư viện đã có (có bổ sung so với nội dung đăng
trong Kỷ yếu hội thảo quốc gia lần thứ XII “Một số vấn đề chọn lọc của công nghệ
thông tin và truyền thông”, Đồng Nai, 8/2009, NXB KHKT 2010)
- Chương 4 “Một số hệ mã hóa khóa công khai và cải tiến hệ mã hóa Rabin”
trình bày lịch sử ra đời, một số bài toán nền tảng xây dựng hệ mã hóa khóa công khai Trong chương này cũng trình bày một số hệ mã hóa khóa công khai RSA, ElGamal, Rabin Hơn nữa chương này đưa ra hướng cải tiến nhằm nâng cao độ an toàn của hệ mã hóa khóa công khai Rabin và hướng khắc phục một số nhược điểm trong quá trình giải mã Đưa ra một số công thức tính nghịch đảo để quy trình giải
mã của hệ mã hóa Rabin và Rabin cải tiến được dễ dàng
Trang 10Chương 1 - GIỚI THIỆU CHUNG VÀ
CƠ SỞ TOÁN HỌC CỦA LÝ THUYẾT MẬT MÃ
Tóm tắt chương: Trong chương này luận văn giới thiệu lịch sử mật mã, các hệ mã, các
bài toàn an toàn thông tin và bài toán thám mã Đưa ra được một số khái niệm cơ bản nhất của mã hóa như: bản rõ, bản mã, hệ mã hóa thám mã, khóa mã, mã hóa khóa công khai, mã hóa khóa đối xứng, mã theo khối, mã theo dòng.v.v…Ngoài ra nội dung chương cũng trình bày về số học các số nguyên, thuật toán Eucild, thuật toán Euclid mở rộng, lý thuyết đồng dư, thặng dư thu gọn, phần tử nguyên thủy, phương trình đồng dư tuyến tình
và đồng dư bậc hai Ngoài ra trình bày về độ phức tạp thuật toán, hàm một phía và cửa sập một phía Các nội dung của chương này được tổng hợp từ các tài liệu [7][16]
1.1 Giới thiệu chung về mật mã
1.1.1 Sơ lược lịch sử về mật mã
Nhu cầu sử dụng mật mã đã xuất hiện từ rất sớm, khi con người biết trao đổi và truyền đưa thông tin cho nhau, đặc biệt khi các thông tin đó đã được thể hiện dưới hình thức ngôn ngữ, thư từ Mật mã trước hết là một loại hoạt động thực tiễn, lúc này nội dung
chính của nó là để giữ bí mật thông tin từ một người gửi A đến một người nhận B Vì
bản gửi đi thường được chuyển qua các con đường công khai nên người ngoài có thể “lấy trộm” được, nên thay vì gửi bản rõ thì A gửi cho B bản mã mật của bản rõ người ngoài không hiểu được Nhưng B có thể giải bản mã mật này thành bản rõ để hiểu được là do giữa hai người đã có một thỏa thuận về một chìa khóa chung Chìa khóa chung đó được
gọi đơn giản là khóa mật mã Tất nhiên để thực hiện được một phép mật mã, còn cần có
một thuật toán biến bản rõ, cùng với khóa mật mã, thành bản mã mật, và một thuật toán ngược lại, biến bản mã mật, cùng với khóa mật mã, thành bản rõ Các thuật toán đó được
gọi là tương ứng là thuật toán lập mật mã và thuật toán giải mật mã Các thuật toán này thường không nhất thiết phải giữ bí mật, mà cái cần được giữ tuyệt mật luôn luôn là khóa
mật mã Trong thực tiễn, đã có hoạt động bảo mật thì cũng có hoạt động ngược lại là
khám phá bí mật từ các bản mật mã “lấy trộm” được, ta thường gọi hoạt động này là mã
thám, hoạt động này quan trọng không kém gì hoạt động bảo mật! Vì các thuật toán lập
mật mã và giải mật mã không nhất thiết là bí mật, nên mã thám thường được tập trung vào việc tìm khóa mật mã, do đó cũng có người gọi công việc đó là phá khóa
Suốt mấy nghìn năm lịch sử, các thông báo, thư từ được truyền đưa và trao đổi với nhau thường là các văn bản, tức là có dạng các dãy ký tự trong một ngôn ngữ nào đó; vì vậy, các thuật toán lập mật mã thường cũng đơn giản là thuật toán xáo trộn, thay đổi các
ký tự được xác định bởi các phép chuyển dịch, thay thế hay hoán vị các ký tự trong bảng
ký tự của ngôn ngữ tương ứng; khóa mật mã là thông tin dùng để thực hiện phép lập mật
mã và giải mật mã cụ thể, Lúc này mật mã chưa phải là một khoa học Do trong một thời gian dài bản thân hoạt động mật mã cũng được xem là một bí mật, nên các tài liệu kỹ thuật về mật mã được phổ biến đến nay thường chỉ ghi lại các kiến thức kinh nghiệm, thỉnh thoảng mới có một vài “phát minh” như các hệ mật mã Vigenère vào thế kỷ 16 hoặc
hệ mật mã Hill ra đời năm 1929 là các hệ mã thực hiện phép chuyển dịch (đối với mã Vigenère) hay phép thay thế (mã Hill) đồng thời trên một nhóm ký tự chứ không phải trên
Trang 1111 từng ký tự riêng rẽ Vấn đề thám mã, ngược lại, khi thành công thường đưa đến những cống hiến nổi trội và ấn tượng trong những tình huống gay cấn của các cuộc đấu tranh, và cũng thường đòi hỏi nhiều tài năng phát hiện với những kinh nghiệm và suy luận tinh tế hơn
Như vậy, trước đây mật mã chỉ được hiểu theo nghĩa hẹp, chủ yếu dùng đề bảo
mật dữ liệu, người ta quan niệm: mật mã học là khoa học nghiên cứu mật mã: tạo mã và phân tích mã (thám mã) [16]
Bước sang thế kỷ 20, với những tiến bộ liên tục của kỹ thuật tính toán và truyền thông, ngành mật mã cũng đã có những tiến bộ to lớn Vào những thập niên đầu của thế
kỷ, sự phát triển của các kỹ thuật biểu diễn, truyền và xử lý tín hiệu đã có tác động giúp cho các hoạt động lập và giải mật mã từ thủ công chuyển sang cơ giới hóa rồi điện tử hóa Các văn bản, các bản mật mã trước đây được viết bằng ngôn ngữ thông thường nay được chuyển bằng kỹ thuật số thành các dãy tín hiệu nhị phân, tức các dãy bit, và các phép biến đổi trên các dãy ký tự được chuyển thành các phép biến đổi trên các dãy bit, hay các dãy
số, việc thực hiện các phép lập mã, giải mã trở thành việc thực hiện các hàm số số học Toán học và kỹ thuật tính toán bắt đầu trở thành công cụ cho việc phát triển khoa học về mật mã Khái niệm trung tâm của khoa học mật mã là khái niệm bí mật Đó là một khái niệm phổ biến trong đời sống, nhưng liệu có thể cho nó một nội dung có thể định nghĩa
được một cách toán học không? Khái niệm bí mật thoạt đầu được gắn với khái niệm ngẫu
nhiên, rồi về sau trong những thập niên gần đây, với khái niệm phức tạp, cụ thể hơn là
khái niệm độ phức tạp tính toán Việc sử dụng lý thuyết xác suất và ngẫu nhiên làm cơ sở
để nghiên cứu mật mã đã giúp C.Shannon đưa ra khái niệm bí mật hoàn toàn của một hệ
mật mã từ năm 1948, khởi đầu cho một lý thuyết xác suất về mật mã Trong thực tiễn làm
mật mã, các dãy bit ngẫu nhiên được dùng để trộn với bản rõ (dưới dạng một dãy bit xác
định) thành ra bản mật mã Làm thế nào để tạo ra các dãy bit ngẫu nhiên? Có thể tạo ra bằng phương pháp vật lý đơn giản như sau: ta tung đồng xu lên, nếu đồng xu rơi xuống ở
mặt sấp thì ta ghi bit 0, ở mặt ngửa thì ta ghi bit 1; tung n lần ta sẽ được một dãy n bit, dãy
bit thu được như vậy có thể được xem là dãy bit ngẫu nhiên Nhưng tạo ra theo cách như vậy thì khó có thể sử dụng một cách phổ biến, vì không thể tìm ra quy luật để theo đó mà sinh ra dãy bit ngẫu nhiên được Ở đây ta gặp một khó khăn có tính bản chất: nếu qui luật thì đã không còn là ngẫu nhiên nữa rồi! Như vậy, nếu ta muốn tìm theo qui luật, thì không
bao giờ có thể tìm ra các dãy bit ngẫu nhiên, hay giả ngẫu nhiên, mà thôi Từ vài chục
năm nay, người ta đã nghiên cứu đề xuất nhiều thuật toán toán học để sinh ra các dãy bit giả ngẫu nhiên, và cũng đã đưa ra nhiều thuộc tính để đánh giá một dãy bit giả ngẫu nhiên
có đáng được xem là “gần” ngẫu nhiên hay không Một vài thuộc tính chủ yếu mà người
ta đã đề xuất là: cho một dãy bit X = (x 1 , x 2 , , x n , ); dãy đó được xem là giả ngẫu nhiên
“tốt” nếu xác suất xuất hiện bit 0 hay bit l trong toàn dãy đó cũng như trong mọi dãy con bất kỳ của nó đều bằng 1/2; hoặc một tiêu chuẩn khác: nếu mọi chương trình sinh ra được
đoạn đầu n bit của dãy đều phải có độ phức tạp (hay độ dài) cỡ n ký tự! Về sau này, khi lý
thuyết về độ phức tạp tính toán đã được phát triển thì tiêu chuẩn về ngẫu nhiên cũng được
quy về tiêu chuẩn phức tạp tính toán, cụ thể một dãy bit X được xem là giả ngẫu nhiên
“tốt” nếu mọi thuật toán tìm được bit thứ n(x n ) khi biết các bit trước đó (x 1 ,, ,x n-1) với xác
suất đúng > 1/2 đều phải có độ phức tạp tính toán thuộc lớp NP-khó!
Trang 12Lý thuyết về độ phức tạp tính toán ra đời từ giữa những năm 1960 đã cho một cách thích hợp để quy yêu cầu bí mật hoặc ngẫu nhiên về một yêu cầu có thể định nghĩa được
là yêu cầu về độ phức tạp tính toán Bây giờ có thể nói: một giải pháp mật mã là bảo đảm
bí mật, nếu mọi thuật toán thám mã, nếu có, đều phải được thực hiện với độ phức tạp tính toán cực lớn! Cực lớn là bao nhiêu? Là vượt quá giới hạn khả năng tính toán (bao gồm cả máy tính) mà người thám mã có thể có Về lý thuyết, có thể xem đó là những độ phức tạp
tính toán với tốc độ tăng vượt quá hàm mũ, hoặc thuộc loại NP-khó Tuy nhiên, lý thuyết
độ phức tạp tính toán không chỉ cống hiến cho ta một khái niệm để giúp chính xác hóa tiêu chuẩn bí mật của các giải pháp mật mã, mà còn mở ra một giai đoạn mới của ngành mật mã, biến ngành mật mã thành một khoa học có nội dung lý luận phong phú và có những ứng dụng thực tiễn quan trọng trong nhiều lĩnh vực của đời sống hiện đại Bước ngoặt có tính cách mạng trong lịch sử khoa học mật mã hiện đại xảy ra vào năm 1976 khi
hai tác giả Diffie và Hellman đưa ra khái niệm về mã hóa khóa công khai và một phương pháp trao đổi công khai để tạo ra một khóa bí mật chung mà tính an toàn được bảo đảm
bởi độ khó của một bài toán học cụ thể (là bài toán tính “logarit rời rạc”) Hai năm sau, năm 1978, Rivest, Shamir và Adleman tìm ra một hệ mã hóa khóa công khai và một sơ đồ
chữ ký điện tử hoàn toàn có thể ứng dụng trong thực tiễn, tính bảo mật và an toàn của
chúng được bảo đảm bằng độ phức tạp của một bài toán số học nổi tiếng là bài toán phân tích số nguyên thành các thừa số nguyên tố Sau khi phát minh ra hệ mã hóa đó (mà nay ta thường gọi là hệ RSA), việc nghiên cứu để phát minh ra các hệ mã hóa khóa công khai khác và ứng dụng các hệ mã hóa khóa công khai vào các bài toán khác nhau của an toàn thông tin đã được tiến hành rộng rãi, lý thuyết mật mã và an toàn thông tin trở thành một lĩnh vực khoa học được phát triển nhanh trong vài ba thập niên cuối của thế kỷ 20, lôi cuốn theo sự phát triển của một số bộ môn của toán học và tin học
Lúc này, mật mã được hiểu theo nghĩa rộng: mật mã là một trong những công cụ
hiệu quả bảo đảm an toàn thông tin nói chúng: bảo mật, bảo toàn, xác thực, chống chối cãi, …[16] Để thực hiện được người ta sử dụng các ký thuật mật mã: mã hóa, ký số, các giao thức mật mã, chống chối cãi,…[16]
1.1.2 Các hệ thống mã hóa
1.1.2.1 Sơ đồ hệ thống mã hóa
Giả sử một người gửi A muốn gửi đến một người nhận B một văn bản (chẳng hạn,
một bức thư) p, để bảo mật A lập cho p một bản mã hóa c, và thay cho việc gửi p, A gửi cho B bản mã hóa c, B nhận được c và “giải mã” c để lại được văn bản p như A định gửi
Để A biến p thành c và B biến ngược lại c thành p, A và B phải thỏa thuận trước với nhau các thuật toán lập mã và giải mã, và đặc biệt một khóa mã hóa chung K để thực hiện các thuật toán đó Người ngoài không biết các thông tin đó (đặc biệt, không biết khóa K), cho
dù có lấy trộm được c trên kênh truyền thông công cộng, cũng không thể tìm được văn
bản p mà hai người A, B muốn gửi cho nhau Sau đây sẽ đưa ra một định nghĩa hình thức
về sơ đồ mã hóa và cách thức thực hiện để lập mã (mã hóa) và giải mã
Định nghĩa 1.1.1 Một sơ đồ hệ thống mã hóa là một bộ năm [7][16][35][46]
Trang 13d k : C →P là hai hàm cho bởi:
xP e k (x) = E(K,x); yC: d k (y) = D(K, y)
e k và d k được gọi lần lượt là hàm lập mã và hàm giải mã ứng với khóa mã hóa K Các hàm đó phải thỏa mãn hệ thức:
x P: d k (e k (x))= x
Về sau, để thuận tiện gọi một danh sách (1.1.1) thỏa mãn các tính chất kể trên là
một sơ đồ hệ thống mã hóa, còn khi đã chọn cố định một khóa K, thì danh sách (P, C, e k ,
d k ) là một hệ mã hóa thuộc sơ đồ đó
Trong định nghĩa này, phép mã hóa (giải mã) được định nghĩa cho từng ký tự bản
rõ (bản mã) Trong thực tế, bản rõ của một thông báo thường là một dãy các ký tự bản mã,
tức là phần tử của tập C*, việc mở rộng các hàm e k và d k lên các miền tương ứng P* và
C* để được các thuật toán mã hóa và giải mã dùng trong thực tế sẽ được trình bày sau
Các tập ký tự bản rõ và bản mã thường dùng là các tập ký tự của ngôn ngữ thông thường
như tiếng Việt, tiếng Anh (ký hiệu tập ký tự tiếng Anh là A tức A = {a, b, c, , x, y, = } gồm 26 ký tự; tập ký tự nhị phân B chỉ gồm hai ký tự 0 và l; tập các số nguyên không âm
bé hơn một số n nào đó (ký hiệu tập này là Z n tức Z n = {0, 1, 2, , n-1}) Chú ý rằng có
thể xem B = Z 2 Để thuận tiện, cũng thường đồng nhất tập ký tự tiếng Anh A với tập gồm
26 số nguyên không âm đầu tiên Z26 = {0, 1, 2, 24, 25} với sự tương ứng sau đây:
0
2 1
1
2 1
2
2 1
3
2 1
4
2 1
5
1 1
6
1 1
7
1 1
8
1 1
1
2 2
2
2 2
3
2 2
4
2 2
5
Đôi khi cũng dùng với tư cách tập ký tự bản rõ hay bản mã là các tập tích của các
tập nói trên, đặc biệt là các tập A m , B m , Z n m
1.1.2.2 Mã theo khối và mã theo dòng [7]
Như đã nói ở trên, bản rõ của thông báo muốn gửi đi thường là một dãy ký tự, trong khi theo định nghĩa của sơ đồ mã hóa, hàm lập mã và hàm giải mã được định nghĩa cho từng ký tự Từ các định nghĩa của hàm lập mã và hàm giải mã, mở rộng thành thuật toán lập mã (và giải mã) xác định cho mọi bản rõ (bản mã) như sau:
Trang 14Theo cách mã theo khối (block cipher), trước hết xác định một độ dài khối (chẳng hạn là k), tiếp đó mở rộng không gian khóa từ K thành K* và với mỗi K = K 1 K kK*,
mở rộng e k và d k thành các thuật toán e k : P k →C k và dk: C k →P k như sau: với mọi x 1 x k
P k và y 1 y k C k, có
e k (x 1 x k ) = e k1 (x k ); d k (y l y k ) = d kl (Y l ) d kk (Y k )
Giả thử bản rõ muốn lập mã cho nó là dãy ký tự X P k Ta cắt X thành từng khối,
mỗi khối có độ dài K, khối cuối cùng có thể có độ dài < K, luôn có thể giả thiết là có thể
bổ sung vào phần cuối của khối một số ký tự qui ước nào đó để nó cũng có độ dài k Do
đó có thể giả thiết X = X l X m , trong đó mỗi X l , ,X m là một khối có độ dài k Và định nghĩa bản mã của X là:
ek(X)= ek(Xl Xm) = ek(Xl) ek(Xm)
Đặt Y = e k (X l e k (X m ), có thể viết Y = Y l Y m với Y i = e k (X i ) và do đó có
d k (Y) = d k (Y l ) d k (Y m )=X l X m = X
Cách mã theo khối đơn giản và thông dụng nhất là khi chọn độ dài khối k=1 Khi
đó với mọi bản rõ X-x l x m P* , có
e k (X) = e k (x l x m ) = e k (x l ) e k (x m )
Với cách mã theo dòng (stream cipher), trước hết phải xác định một dòng khóa, tức
là một phần tử K = K l K m K* với dòng khóa đó xác định với mọi bản rõ X =x l x m
là sơ đồ Vernam với
P = C = K = {0.1}
và các hàm lập mã và giải mã được xác định bởi
e k (x) = (x+K) mod 2, d k (y) = (y+K) mod 2 (K = 0 hoặc l);
dòng khóa là dãy bit ngẫu nhiên được sinh ra bởi một bộ tạo dãy bit ngẫu nhiên nào đó
1.1.3 Mã hóa khóa đối xứng và mã hóa khóa công khai [7][16]
Theo định nghĩa 1.1.1 về sơ đồ mã hóa, cứ mỗi lần truyền tin bảo mật, cả người
gửi A và người nhận B phải cùng thỏa thuận trước với nhau một khóa chung K, sau đó người gửi dùng e k để lập mã cho thông báo gửi đi, và người nhận dùng d k để giải mã bản
mã nhận được người gửi và người nhận cùng có một khóa chung K, được giữ như bí mật
Trang 1515 riêng của hai người, dùng cả cho lập mã và giải mã, gọi những hệ mã hóa với cách sử
dụng đó là mã hóa khóa đối xứng, đôi khi cũng gọi là mã hóa truyền thống, vì đó là cách
đã được sử dụng từ hàng ngàn năm nay
Tuy nhiên, về nguyên tắc hai hàm lập mã và giải mã là khác nhau, không nhất thiết
phải phụ thuộc cùng một khóa Nếu ta xác định mỗi khóa K gồm có hai phần K = (K’,
K’’), K’ dành cho việc lập mã (và ta có hàm lập mã e k ), K’’ dành cho việc giải mã (và có hàm giải mã d k ), các hàm lập mã và giải mã thỏa mãn hệ thức
d k (d k’ (x)) = x với x P,
thì được một hệ mã hóa khóa phi đối xứng Như vậy, trong một hệ mã hóa khóa phi đối xứng, các khóa lập mã và giải mã (K’ và K’’) là khác nhau, nhưng tất nhiên có quan hệ với nhau Trong hai khóa đó, khóa cần phải giữ bí mật là khóa giải mã K’’, còn khóa lập mã K’ có thể được công bố công khai; tuy nhiên điều đó chỉ có ý nghĩa thực tiễn khi việc biết K’ tìm K’’ là cực kỳ khó khăn đến mức hầu như không thể thực hiện được Một hệ mã hóa khóa phi đối xứng có tính chất nói trên, trong đó khóa lập mã K’ của mỗi người tham gia đều được công bố công khai, được gọi là hệ mã hóa khóa công khai Khái
niệm mã hóa khóa công khai mới được ra đời vào giữa những năm 1970, và ngay sau đó
đã trở thành một khái niệm trung tâm của khoa học mật mã hiện đại
1.1.4 Các bài toán về an toàn thông tin [7]
Có nhiều bài toán khác nhau về yêu cầu an toàn thông tin tùy theo những tình huống cụ thể khác nhau, nhưng tựu trung có một số bài toán chung nhất thường gặp trong thực tiễn là những bài toán sau đây:
- Bảo mật: giữ thông tin được bí mật đối với tất cả mọi người, trừ một ít người có
thẩm quyền được đọc, biết thông tin
- Toàn vẹn thông tin: bảo đảm thông tin không bị thay đổi hay xuyên tạc bởi những
kẻ không có thẩm quyền hoặc bằng những phương tiện không được phép
- Nhận thực một thực thể: xác nhận danh tính của một thực thể chẳng hạn một
người, một máy tính cuối trong mạng, một thẻ tín dụng…
- Nhận thực một thông báo: xác nhận nguồn gốc của một thông báo được gửi đến
- Chữ ký: một cách để gắn kết một thông tin với một thực thể, thường dùng trong
bài toán nhận thực một thông báo cũng như trong nhiều bài toán nhận thực khác
- Ủy quyển: chuyển cho một thực thể khác quyền được đại diện hoặc được làm một
việc gì đó
- Cấp chứng chỉ: cấp một sự xác nhận thông tin bởi một thực thể được tín nhiệm
- Báo nhận: xác nhận một thông báo đã được nhận hay một dịch vụ đã được thực
hiện
- Làm chứng: kiểm thử việc tồn tại một thông tin ở một thực thể khác với người
chủ sở hữu thông tin đó
- Không chối bỏ được: ngăn ngừa việc chối bỏ trách nhiệm đối với một cam kết đã
có (thí dụ đã ký vào một văn bản)
Trang 16- Ẩn danh: che giấu danh tính của một thực thể tham gia trong một tiến trình nào
đó (thường dùng trong gia dịch điện tử)
- Thu hồi: rút lại một giấy chứng chỉ hay ủy quyền dã cấp
mà tốt nhất là tìm ra được bản rõ gốc của bản mã hóa Tình huống thường gặp là bản thân
sơ đồ hệ thống mã hóa, kể cả các phép lập mã và giải mã (tức các thuật toán E và D), không nhất thiết là bí mật, do đó bài toán quy về việc tìm chìa khóa mã hóa K, hay chìa khóa giải mã K’’, nếu hệ mã hóa có khóa phi đối xứng Như vậy, có thể quy ước xem bài
toán thám mã cơ bản là bài toán tìm khóa mã hóa K (hay khóa giải mã K’’) Để giải bài toán đó, giả thiết người thám mã biết thông tin về sơ đồ hệ mã hóa được dùng, kể cả các phép lập mã và giải mã tổng quát E và D ngoài ra, người thám mã có thể biết thêm một
số thông tin khác, tùy theo những thông tin được biết thêm này mà ta có thể phân loại bài toán thám mã thành các bài toán cụ thể như sau:
- Bài toán thám mã chỉ biết bản mã: là bài toán phổ biến nhất, khi người thám mã chỉ biết một bản mã hóa Y;
- Bài toán thám mã khi biết cả bản rõ: người thám mã biết một bản mã hóa Y cùng với bản rõ tương ứng X;
- Bài toán thám mã khi có bản rõ được chọn: người thám mã có thể chọn một bản
rõ X, và biết bản mã hóa tương ứng Y Điều này có thể xảy ra khi người thám mã chiếm
được (tạm thời) máy lập mã;
- Bài toán thám mã khi có bản mã được chọn: người thám mã có thể chọn một bản
mã hóa Y, và biết bản rõ tương ứng X Điều này có thể xảy ra khi người thám mã chiếm
được tạm thời máy giải mã
1.1.5.2 Tính an toàn của một hệ mã hóa
Tính an toàn của một hệ thống mã hóa phụ thuộc vào độ khóa khăn của bài toán thám mã khi sử dụng hệ mã hóa đó Người ta đã đề xuất một số cách hiểu cho khái niệm
an toàn của hệ thống mã hóa, để trên cơ sở các cách hiểu đó nghiên cứu tính an toàn của nhiều hệ mã hóa khác nhau, sau đây ta giới thiệu vài cách hiểu thông dụng nhất:
- An toàn vô điều kiện: giả thiết người thám mã có được thông tin về bản mã Theo
quan niệm lý thuyết thông tin, nếu những hiểu biết về bản mã không thu hẹp được độ bất định về bản rõ đối với người thám mã, thì hệ mã hóa là an toàn vô điều kiện, hay theo
Trang 1717
thuật ngữ của C.Shannon, hệ là bí mật hoàn toàn Như vậy, hệ là an toàn vô điều kiện,
nếu độ bất định về bản rõ sau khi người thám mã có được các thông tin (về bản mã) bằng
độ bất định về bản rõ trước đó Tính an toàn vô điều kiện đã được nghiên cứu cho một số
hệ mã hóa khóa đối xứng mà ta sẽ trình bày trong chương 3
- An toàn được chứng minh: một hệ thống mã hóa được xem là có độ an toàn được chứng minh nếu ta có thể chứng minh được là bài toán thám mã đối với hệ thống đó khó
tương đương với một bài toán khó đã biết, thí dụ bài toán phân tích một số nguyên thành tích các thừa số nguyên tố, bài toán tìm lôgarit rời rạc theo một mô đun nguyên tố, v.v
(khó tương đương có nghĩa là nếu bài toán này giải được thì bài toán kia cũng giải được
với cùng một độ phức tạp như nhau)
- An toàn tính toán: hệ mã hóa được xem là an toàn (về mặt) tính toán, nếu mọi
phương pháp thám mã đã biết đều đòi hỏi một nguồn năng lực tính toán vượt mọi khả năng (kể cả phương tiện thiết bị) tính toán của một kẻ thù giả định An toàn theo nghĩa này, nói theo ngôn ngữ của lý thuyết về độ phức tạp tính toán, là bao hàm cả khải niệm an toàn theo nghĩa “được chứng minh” nói trên
Tính an toàn theo nghĩa được chứng minh hay tính toán được sử dụng nhiều trong việc nghiên cứu các hệ thống mã hóa hiện đại, đặc biệt là các hệ thống mã hóa khóa công khai
1.2 Cơ sở toán học của lý thuyết mật mã [7]
1.2.1 Số học các số nguyên, thuật toán Euclid
Ký hiệu Z là tập hợp các số nguyên, Z = { , -2, -1, 0, 1, 2, }, và Z+ là tập hợp các số nguyên không âm, Z+ = {0, 1, 2, } Trong mục này sẽ nhắc lại một số kiến thức
về số học của các số nguyên cần cho việc trình bày lý thuyết mật mã Vì để luận văn không quá dài dòng, các kiến thức sẽ được nhắc đến chủ yếu là các khái niệm, các mệnh
đề sẽ được sử dụng, v.v , còn các phần chứng minh sẽ được lược bỏ
1.2.1.1 Tính chia hết của các số nguyên
Tập hợp Z là đóng kín đối với các phép cộng, trừ và nhân, nhưng không đóng kín đối với phép chia: chia một số nguyên cho một số nguyên không phải bao giờ cũng được
kết quả là một số nguyên! Vì vậy, trường hợp chia hết, tức khi chia số nguyên a cho số nguyên b được thương là một số nguyên q, a = b.q, có một ý nghĩa đặc biệt Khi đó, nói a
chia hết cho b, b chia hết a, a là bội số của b, b là ước số của a, và ký hiệu là b/a Dễ thấy
ngay rằng số 1 là ước số của mọi số nguyên bất kỳ, số 0 là bội số của mọi số nguyên bất
kỳ, mọi số nguyên a là ước số, đồng thời là bội số của chính nó
Định lý 1.2.1 Nếu b > 0 và b/a thì gcd(a,b) = b
Nếu a = bq + thì gcd(a,b) = gcd(b,r)
Một số nguyên m được gọi là bội số chung của a và b nếu a/m và b/m Số m được gọi là bội số chung bé nhất của a và b, và được ký hiệu là lcm(a,b), nếu m>0, m là bội số chung của a và b, và mọi bội số chung của a và b đều là bội của m Ví dụ lcm(14,21)= 42
Với hai số nguyên dương a và b bất kỳ ta có quan hệ
Trang 18lcm(a,b).gcd(a,b) = a.b
Từ định lý 1.2.1 ta suy ra thuật toán sau đây thực hiện việc tìm ước số chung lớn
nhất của hai số nguyên bất kỳ:
Thuật toán Euclide tìm ước số chung lớn nhất:
INPUT: hai số nguyên không âm a và b, với a≥b
OUTPUT: ước số chung lớn nhất của a và b
1 Trong khi còn b>0, thực hiện:
1.1 đặt r a mod b,a b, b r
2 Cho ra kết quả (a)
Ví dụ: Dùng thuật toán Euclide tìm gcd(4864, 3458), lần lượt được các giá trị gán
cho các biến a, b và r như sau:
Bảng 1.2.1 Mô tả quá trình tính toán của thuật toán Euclid
Số q được gọi là số thương của phép chia a cho b, ký hiệu a div b và số r được gọi
là số dư của phép chia a cho b, ký hiệu a mod b Ví dụ: 25div 7 = 3 và 25 mod 7 = 4,
-25div 7 = -4 và – 25 mod 7 = 3
Một số nguyên d được gọi là ước số chung của hai số nguyên a và b nếu d/a và
d/b Số nguyên d được gọi là ước số chung lớn nhất của a và b nếu d>0, d là ước số
chung của a và b, và mọi ước chung của a và b đều là ước số của d Ký hiệu ước số chung lớn nhất của a và b là gcd (a,b) Ví dụ gcd (12, 18) = 6, gcd (-18, 27) = 3
Dễ thấy rằng với mọi số nguyên dương a ta có gcd (a, 0) = a, ta cũng sẽ qui ước xem rằng gcd (0,0) = 0
Một số nguyên a > 1 được gọi là số nguyên tố, nếu a không có ước số nào ngoài 1
và chính a; và được gọi là hợp số, nếu không phải là nguyên tố Ví dụ các số 2, 3, 5, 7 là
số nguyên tố; các số 6, 8, 10, 12, 14, 15 là hợp số Hai số a và b được gọi là nguyên tố với
Trang 1919
nhau, nếu chúng không có ước số chung nào khác 1, tức là nếu gcd (a,b) = 1 Một số
nguyên n > 1 bất kỳ đều có thể viết dưới dạng
n = p 1 a1 p 2 a2 p k ak
trong đó p 1 , p 2 , .,p k là các số nguyên tố khác nhau, a1, a2, .ak là các số mũ
nguyên dương Nếu không kể thứ tự các thừa số nguyên tố thì dạng biểu diễn đó là duy
nhất, ta gọi đó là dạng khai triển chính tắc của n Ví dụ dạng khai triển chính tắc của 1800
là 233252
Các số nguyên tố và các vấn đề về số nguyên tố có một vai trò quan trọng trong số học và trong ứng dụng vào lý thuyết mã hóa, sẽ xét riêng trong chương sau
Thuật toán cho kết quả: gcd (4864, 3458) = 38
Biết rằng nếu gcd (a,b) = d, thì phương trình bất định
a.x + b.y = d
có nghiệm nguyên (x,y), và một nghiệm nguyên (x,y) như vậy có thể tìm được bởi
thuật toán Euclide mở rộng như sau:
Thuật toán Euclide mở rộng:
INPUT: hai số nguyên không âm a và b với a ≥b
OUTPUT: d = gcd (a,b) và hai số x, y sao cho a.x +b.y = d
1 Nếu b = 0 thì đặt d a, x 1, y 0 và cho ra (d, x, y)
2 Đặt x 2 = 1, x 1 = 0, y 2 = 0, y 1 = 1
3 Trong khi còn b > 0 thực hiện:
3.1 q a divb, r a mod b, x x 2 – qx 1 , y y 2 – qy 1 3.2 a b, b r, x 2 x 1 , x 1 x, y 2 y 1 và y 1 y
4 Đặt d a, x x2, y y2, và cho ra kết quả (d, x, y)
Ví dụ: Dùng thuật toán Euclide mở rộng cho các số a = 4864 và b = 3458, lần lượt được các giá trị sau đây cho các biến a, b, q, r, x, y, x 1 , x 2 , y 1 , y 2 (sau mỗi chu trình thực hiện hai lệnh 3.1 và 3.2)
Bảng 1.2.2 Mô tả quá trình tính toán của thuật toán Euclid mở rộng
Trang 20Dễ thử lại rằng sau mỗi lần thực hiện chu trình gồm hai lệnh 3.1 và 3.2 các giá trị
x, y, r thu được luôn thỏa mãn 4864 x + 3458 y = r, và do đó khi kết thúc các vòng lặp
(ứng với giá trị b = 0), thực hiện tiếp lệnh 4 ta được kết quả d = 38 và y = -45, cặp số (32,
-45) thỏa mãn: 4864.32 + 3458 (-45) = 38
1.2.1.2 Đồng dư và phương trình đồng dư tuyến tính
Cho n là một số nguyên dương Hai số nguyên a và b là đồng dư với nhau theo mô
đun n, và viết a b (mod n), nếu n/a-b (tức cũng là nếu a – b chia hết cho n, hay khi chia
a và b cho n được cùng một số dư như nhau)
Ví dụ: 23 8 (mod 5), vì 23 – 8 = 5.3, -19 9 (mod 7) vì -19 – 9 = - 4.7
Quan hệ đồng dư (theo một môđun n) trên tập hợp các số nguyên có các tính chất
phản xạ, đối xứng và bắc cầu, tức là một quan hệ tương đương, do đó nó tạo ra một phân hoạch trên tập hợp tất cả các số nguyên Z thành ra các lớp tương đương: hai số nguyên
thuộc cùng một lớp tương đương khi và chỉ khi chúng cho cùng một số dư nếu chia cho n
Mỗi lớp tương đương như vậy được đại diện bởi một số duy nhất trong tập hợp Zn = {0, 1,
2, 3, , n-1}, là số dư chung khi chia các số trong lớp đó cho n Vì vậy, ta có thể đồng
nhất Zn với tập hợp tất cả các lớp tương đương các số nguyên theo mod n; trên tập đó ta
có thể xác định các phép tính cộng, trừ và nhân theo mod n
Ví dụ: Z25 = {0, 1, 2, 24} Trong Z25, 15 +14 = 4, vì 15 + 14 = 29 4 (mod 25) Tương tự, 15.14 10 trong Z25
Cho aZ n Một số nguyên x Z n được gọi là nghịch đảo của a theo modn, nếu a.x
1 (modn) Nếu có số x như vậy thì ta nói a là khả nghịch, và ký hiệu x là a -1 mod n Thí
dụ 22-1 mod 25 = 8, vì 22.8 = 186 1 (mod 25) Từ định nghĩa ta có thể suy ra rằng a là khả nghịch theo mod n khi và chỉ khi gcd (a,n) = 1, tức là khi a và n nguyên tố với nhau
Dịnh nghĩa phép chia trong Zn như sau:
a : b (mod n) = a.b -1 mod n
Phép chia chỉ thực hiện được khi b là khả nghịch theo mod n Thí dụ 15 : 22 (mod
Trang 21
)(mod
)(mod
2 2
2
1 1
1
k k
x
n a
x
n a
x
(1.2.2)
Ký hiệu: n = n 1 n 2 n k , N i = n/n i Có định lý sau đây:
Định lý 1.2.2 (định lý số dư Trung Quốc) Giả sử các số nguyên n 1 , n 2 , , n k là
từng cặp nguyên tố với nhau Khi đó, hệ phương trình đồng dư tuyến tính (1.2.2) có một
nghiệm duy nhất theo mod n
Nghiệm duy nhất nói trong định lý 1.2.2 được cho bởi biểu thức:
x = k
i=1 a i N i M i mod n,
trong đó M i = N i -1 mod n i (có M i vì N i và n i nguyên tố với nhau)
Vídụ: Cặp phương trình x 3 (mod 7) và x 7 (mod 13) có một nghiệm duy nhất x
59 (mod 91)
Nếu (n 1 , n 2 ) = 1, thì cặp phương trình x a (mod n 1 ) và x a (mod n 2) có nghiệm
duy nhất x a (mod n) theo mod n với n = n 1 n 2
1.2.1.3 Thặng dư thu gọn và phần tử nguyên thủy
Tập Zn = {0, 1, 2, , n-1} thường được gọi là tập các thặng dư đầy đủ theo mod n,
vì mọi số nguyên bất kỳ đều có thể tìm được trong Zn một số đồng dư với mình (theo mod n) Tập Zn là đóng đối với các phép tính cộng, trừ và nhân theo mod n, nhưng không đóng đối với phép chia, vì phép chia cho a theo mod n chỉ có thể thực hiện được khi a và n nguyên tố với nhau, tức khi gcd(a,n) = 1
Bây giờ ta xét tập Zn* = {a Zn : gcd(a,n) = 1}, tức Zn* là tập con của Zn bao gồm
tất cả các phần tử nguyên tố với n Ta gọi tập đó là tập các thặng dư thu gọn theo mod n
Mọi số nguyên tố với n đều có thể tìm thấy trong Zn* một đại diện đồng dư với mình theo
mod n Chú ý rằng nếu p là một số nguyên tố thì Zp* = {1, 2, , p-1}
Tập Zn* lập thành một nhóm con đối với phép nhân của Zn, vì trong Zn* phép chia
theo mod n bao giờ cũng thực hiện được, gọi Zn* là nhóm nhân của Zn
Theo đại học số học, gọi số các phần tử trong một nhóm là cấp của nhóm đó Ký
hiệu (n) là số các số nguyên dương bé hơn n và nguyên tố với n Như vậy, nhóm Zn* có cấp (n), và nếu p là số nguyên tố thì nhóm Zp* có cấp p-1
Trang 22Một phần tử g Zn* có cấp m, nếu m là số nguyên dương bé nhất sao cho g m = 1 trong Zn* Theo một định lý trong Đại số, có m/(n) Vì vậy, với mọi b Zn* luôn có b (n)
1 mod n
Nếu p là số nguyên tố, thì do (p) = p – 1, có với mọi b Zn*
bn-1 (mod p) (1.2.3)
Nếu b có cấp p-1, tức p-1 là số mũ bé nhất thỏa mãn công thức (1.2.3) thì các phần
tử b, b 2 , , b p-1 đều khác nhau và theo mod p, chúng lập thành Zp* Theo thuật ngữ đại số, khi đó ta nói Zn* là một nhóm cyclic và b là một phần tử sinh, hay phần tử nguyên thủy
của nhóm đó Trong lý thuyết số, người ta đã chứng minh được cái tính chất sau đây của các phần tử nguyên thủy:
1 Với mọi số nguyên tố p, Zp* là nhóm cyclic, và có (p-1) phần tử nguyên thủy
2 Nếu p-1= p1a1 p2a2 psas là khai triển chính tắc của p – 1 và nếu
) (mod 1 1 1
3 Nếu g là phần tử nguyên thủy theo mod p, thì ß = gi mod p với mọi i mà gcd (i,
p-1)=1, cũng là phần tử nguyên thủy theo mod p
Ba tính chất đó là cơ sở giúp ta tìm các phần tử nguyên thủy theo mod p, với p là
số nguyên tố bất kỳ Ngoài ra, cũng chú ý một số tính chất sau đây, có thể được sử dụng nhiều trong các chương trình sau:
a Nếu p là số nguyên tố và gcd(a,p) = 1, thì a p-1 1 (mod p) (định lý Fermat)
b Nếu aZn*, thì a(n)1(mod n) Nếu rs(mod(n)) thì a ras(mod n) (định lý
Euler)
1.2.1.4 Phương trình đồng dư bậc hai và thặng dư bậc hai
Xét phương trình đồng dư bậc hai có dạng đơn giản sau đây:
x2 a (mod n),
trong đó n là một số nguyên dương, a là số nguyên với gcd(a,n) = 1, và x là ẩn số Phương trình đó không phải bao giờ cũng có nghiệm, khi nó có nghiệm thì ta nói a là một thặng
dư bậc hai mod n; nếu không thì nói a là một bất thặng dư bậc hai mod n Tập các số
nguyên nguyên tố với n được phân hoạch thành hai tập con: tập Qn các thặng dư bậc hai
Trang 2323
a(p-1)/2 bi(p-1)/2 1 (mod p)
Phần tử b có cấp p – 1, do đó (p-1) chia hết i(p-1)/2, i phải là số chẵn, i = 2j, và a
có căn bậc hai là b j mod p
Cho p là một số nguyên tố lẻ Với mọi a ≥ 0 ta định nghĩa ký hiệu Legendre
Q a khi
p a
khi
1 1
) (mod 0 0
Từ định nghĩa ta suy ra ngay a là thặng dư bậc hai mod p khi và chỉ khi
p
a p
a p
1
) 8 (mod 1 ,
1
n khi
n khi
4 (mod 1 ,
) 4 (mod 3
&
) 4 (mod 3 ,
m n
khi m n
m n
khi m n
Trang 249283 là một số nguyên tố Do đó, giá trị - 1 của ký hiệu Jacobi
trị của cùng ký hiệu Legendre đó, và ta kết luận được rằng 7411 là bất thặng dư bậc hai mod 9283, hay phương trình
1 2 1
p a
1 ( 2
p a
a m
do đó x am+1 (mod p) là hai nghiệm của phương trình (1.2.4)
1.2.2 Độ phức tạp tính toán
1.2.3.1 Khái niệm về độ phức tạp tính toán
Lý thuyết thuật toán và các hàm số tính được ra đời từ những năm 30 của thế kỷ 20
đã đặt nền móng cho việc nghiên cứu các vấn đề “tính được”, “giải được” trong toán học, đưa đến nhiều kết quả rất quan trọng và lý thú Nhưng từ cái “tính được” một cách trừu tượng, hiểu theo nghĩa tiềm năng, đến việc tính được trong thực tế của khoa học tính toán bằng máy tính điện tử, là cả một khoảng cách rất lớn Vấn đề là do ở chỗ những đòi hỏi về không gian vật chất và về thời gian để thực hiện các tiến trình tính toán nhiều khi vượt quá xa những khả năng thực tế Từ đó, vào khoảng giữa những năm 60 (của thế kỷ trước), một lý thuyết về độ phức tạp tính toán bắt đầu được hình thành và phát triển nhanh chóng, cung cấp cho chúng ta nhiều hiểu biết sâu sắc về bản chất phức tạp của các thuật toán và các bài toán, cả những bài toán thuần túy lý thuyết đến những bài toán thường gặp trong thực tế Sau đây giới thiệu sơ lược một số khái niệm cơ bản và vài kết quả sẽ được dùng đến của lý thuyết đó
Trang 2525
Trước hết, hiểu độ phức tạp tính toán (về không gian hay về thời gian) của một
tiến trình tính toán là số ô nhớ được dùng hay số các phép toán sơ cấp được thực hiện trong tiến trình tính toán đó
Dữ liệu đầu vào đối với một thuật toán thường được biểu diễn qua các từ trong một
bảng ký tự nào đó Độ dài của một từ là số ký tự trong từ đó
Cho một thuật toán A trên bảng ký tự (tức có đầu vào là các từ trong ) Độ
phức tạp tính toán của thuật toán A được hiểu là một hàm số fA(n) sao cho với mỗi số n,
fA(n) là số ô nhớ, hay số phép toán sơ cấp tối đa mà A cần để thực hiện tiến trình tính toán
của mình trên các dữ liệu vào có độ dài n Ta nói thuật toán A có độ phức tạp thời gian
đa thức, nếu có một đa thức P(n) sao cho với mọi n đủ lớn ta có f A (n) P(n), trong đó
f A (n) là độ phức tạp tính toán theo thời gian của A
Về sau khi nói đến các bài toán, ta hiểu đó là các bài toán quyết định, mỗi bài toán
P như vậy được xác định bởi:
- Một tập các dữ liệu vào I (trong một bảng ký tự nào đó),
- Một câu hỏi Q trên các dữ liệu vào, sao cho với mỗi dữ liệu vào x1, câu hỏi Q
có một trả lời đúng hoặc sai
Bài toán quyết định P là giải được, nếu có thuật toán để giải nó, tức là thuật toán làm việc có kết thúc trên mọi dữ liệu vào các bài toán, và cho kết quả đúng hoặc sai tùy
theo câu hỏi Q trên dữ liệu đó có trả lời đúng hoặc sai Bài toán P là giải được trong thời
gian đa thức, nếu có thuật toán giải nó với độ phức tạp thời gian đa thức Sau đây là vài ví
dụ về các bài toán quyết định:
Bài toán SATISFIABILYTY (viết tắt là SAT):
- Mỗi dữ liệu vào là một công thức F của logic mệnh đề, được viết dưới dạng hội
chuẩn tắc, tức dạng hội của một số các “clause”
- Câu hỏi là: công thức F có thỏa được hay không?
Bài toán CLIQUE:
- Mỗi dữ liệu vào là một graph G và một số nguyên k
- Mỗi câu hỏi là: Graph G có một clique với ≥ k đỉnh hay không? (một clique của
G là một graph con đầy đủ của G)
Bài toán KNAPSACK:
- Mỗi dữ liệu là một bộ n + 1 số nguyên dương I = (s 1 , s n ; T)
- Câu hỏi là: có hay không một vectơ Boole (x 1 , ,x n) sao cho n
i xi si T
(vectơ Boole là vectơ có các thành phần là 0 hoặc 1)
Bài toán thặng dư bậc hai:
- Mỗi dữ liệu gồm hai số nguyên dương (a, n)
- Câu hỏi là: a có là thặng dư bậc hai theo mod n hay không?
Trang 26Bài toán hợp số:
- Mỗi dữ liệu là một số nguyên dương N
- Câu hỏi: N là hợp số không? Tức có hay không hai số m, n >1 sao cho N = m.n?
Tương tự, nếu đặt câu hỏi là “N là số nguyên tố hay không?” thì ta được bài toán
số nguyên tố
Đối với tất cả các bài toán kể trên, trừ bài toán hợp số và số nguyên tố, cho đến nay người ta đều chưa tìm được thuật toán giải chúng trong thời gian đa thức
1.2.3.2 Lớp phức tạp
Xét một vài lớp các bài toán được xác định theo độ phức tạp tính toán của chúng
Trước hết, định nghĩa P là lớp tất cả các bài toán có thể giải được bởi thuật toán trong thời
gian đa thức
Giả sử cho hai bài toán P1 và P2 với các tập dữ liệu trong hai bảng ký tự tương ứng
là 1 và 2 Một thuật toán f: *
1 → *
2 được gọi là một phép quy dẫn bài toán P1
về bài toán P2, nếu nó biến mỗi dữ liệu x của bài toán P1 thành một dữ liệu f(x) của bài toán P2, và sao cho câu hỏi của P1 trên x có trả lời đúng khi và chỉ khi câu hỏi của P2 trên
f(x) cũng có trả lời đúng Ta nói bài toán P1 quy dẫn được về bài toán P2 trong thời gian
đa thức, và ký hiệu P1 P2, nếu có thuật toán f với độ phức tạp thời gian đa thức qui dẫn bài toán P1 về bài toán P2 Dễ thấy rằng, nếu P1 P2 và P2P, thì cũng có P1P
Một lớp quan trọng các bài toán đã được nghiên cứu nhiều là lớp các bài toán khá thường gặp trong thực tế nhưng cho đến nay chưa có khả năng nào chứng tỏ là chúng có
thể giải được trong thời gian đa thức Đó là lớp các bài toán NP-đầy đủ được định nghĩa
sau đây:
Cùng với khái niệm thuật toán tất định thông thường (có thể mô tả chính xác chẳng
hạn bởi máy Turing tất định), xét khái niệm thuật toán không đơn định với một ít thay đổi như sau: nếu đối với máy Turing tất định, khi máy đang ở một trạng thái q và đang đọc một ký tự a thì cặp (q, a) xác định duy nhất một hành động kế tiếp của máy, còn đối với máy Turing không đơn định, qui ước rằng (q, a) xác định không phải duy nhất mà là một tập hữu hạn các hành động kế tiếp; máy có thể thực hiện trong bước kế tiếp một trong các hành động đó Như vậy, đối với một dữ liệu vào x, một thuật toán không đơn định được
(được xác định chẳng hạn bởi một máy Turing không đơn định) không phải chỉ có một tiến trình tính toán duy nhất, mà có thể có một số hữu hạn những tiến trình tính toán khác
nhau Ta nói thuật toán không đơn định A chấp nhận dữ liệu x, nếu với dữ liệu vào chấp nhận (tức với kết quả đúng) Một bài toán P được gọi là giải được bởi thuật toán không
đơn định trong thời gian đa thức nếu có một thuật toán không đơn định A và một đa thức p(n) sao cho với mọi dữ liệu vào x có độ dài n, x P (tức câu hỏi của P có trả lời đúng
trên x) khi và chỉ khi thuật toán A chấp nhận x bởi một tiến trình tính toán có độ phức tạp
thời gian p(n) Ta ký hiệu lớp tất cả với các bài toán giải được bởi thuật toán không đơn định trong thời gian đa thức là NP
Người ta đã chứng tỏ được rằng tất cả những bài toán trong các ví dụ kể trên và rất
nhiều các bài toán tổ hợp thường gặp khác đều thuộc lớp NP, dù rằng hầu hết chúng đều
Trang 273) Nếu P1, P2 NP, P1 P2, và P1 là NP- đầy đủ, thì P2 cũng là NP-đầy đủ
4) Nếu có P sao cho P là NP-đầy đủ và PP, thì P=NP
Từ các tính chất đó có thể xem rằng trong lớp NP, P là lớp con các bài toán “dễ” nhất, còn các bài toán NP đầy đủ là các bài toán “khó” nhất; nếu có ít nhất một bài toán
NP đầy đủ được chứng minh là thuộc P, thì lập tức suy ra P = NP, dù rằng cho đến nay
tuy đã có rất nhiều cố gắng nhưng toán học vẫn chưa tìm được con được nào hy vọng đi
đến giải quyết vấn đề [P = NP? ], thậm chí vấn đề đó còn được xem là một trong 7 vấn đề
khó nhất của toán học trong thiên niên kỷ mới!
1.2.3.3 Hàm một phía và cửa sập một phía
Khái niệm độ phức tạp tính toán cung cấp một cách tiếp cận mới đối với vấn đề bí
mật trong các vấn đề bảo mật và an toàn thông tin Dù ngày nay đã có những máy tính
điện tử có tốc độ tính toán cỡ hàng tỷ phép tính một giây, nhưng với những thuật toán có
độ phức tạp tính toán cỡ f(n) = 2n, thì ngay với những dữ liệu có độ dài khoảng n = 1000,
việc thực hiện các thuật toán đó đã không thể xem là khả thi, vì nó đòi hỏi thực hiện khoảng 10300 phép tính! Như vậy, một giải pháp mã hóa chẳng hạn có thể xem là có độ bảo mật cao, nếu để giải mã cần phải thực hiện một tiến trình tính toán có độ phức tạp rất lớn Do đó, việc phát hiện và sử dụng các hàm số có độ phức tạp tính toán rất lớn là có ý nghĩa hết sức quan trọng đối với việc xây dựng các giải pháp về mã hóa và an toàn thông tin
Hàm số số học y = f(x) được gọi là hàm một phía (one-way function), nếu việc tính thuận từ x ra y là “dễ”, nhưng việc tính ngược lại từ y tìm lại x là rất “khó”, ở đây các tính
từ “dễ” và “khó” không có các định nghĩa chính xác mà được hiểu một cách thực hành, có thể hiểu chẳng hạn dễ là tính được trong thời gian đa thức (với đa thức bậc thấp), còn khó
là không tính được thời gian đa thức! Thực tế thì cho đến hiện nay, việc tìm và chứng minh một hàm số nào đó là không tính được trong thời gian đa thức còn là việc rất khó, cho nến “khó” thường khi chỉ được hiểu một cách đơn giản chưa tìm được thuật toán tính
nó trong thời gian đa thức! Với cách hiểu tương đối như vậy về “dễ” và “khó”, người ta
đã đưa ra một số thí dụ sau đây về các hàm một phía
Ví dụ 1 Cho p là một số nguyên tố, và a là một phần tử nguyên thủy mod p Hàm
số y=ax mod p (từ Z*p vào Z*p) là một hàm một phía, vì hàm ngược của nó, tính từ y tìm x
mà ta ký hiệu x = loga(y), là một hàm có độ phức tạp tính toán rất lớn
Ví dụ 2 Cho n=p.q là tích của hai số nguyên tố lớn Hàm số y=x2mod n (từ Zn vào
Zn) cũng được xem là một hàm một phía
Trang 28Ví dụ 3 Cho n=p.q là tích của hai số nguyên tố lớn, và a là một số nguyên sao cho gcd (a, (n)) = 1 Hàm số y = xa mod n (từ Zn vào Zn) cũng là một hàm một phía, nếu giả
thiết là biết n nhƣng không biết p, q
Hàm y = f(x) đƣợc gọi là hàm cửa sập một phía (trapdoor one-way function), nếu việc tính thuận từ x ra y là “dễ”, việc tính ngƣợc từ y tìm lại x là rất “khó”, nhƣng có một cửa sập z để với sự trợ giúp của cửa sập z thì việc tính x từ y và z lại trở thành dễ
Ví dụ 4 (tiếp tục ví dụ 3) Hàm số y = x a mod n khi biết p và q là hàm cửa sập một phía Từ x tính y là dễ, từ y tìm x (nếu chỉ biết n,a) là rất khó, nhƣng vì biết p và q nên
biết (n) = (p-1)(q-1), và dùng thuật toán Euclide mở rộng, tìm đƣợc b sao cho a.b 1 (mod (n)), từ đó dễ tính đƣợc x = y b mod n Ở đây, có thể xem b là cửa sập
Trang 2929
Chương 2 - PHƯƠNG PHÁP KIỂM TRA VÀ SINH SỐ NGUYÊN TỐ
Tóm tắt chương: Trình bày các định nghĩa, định lý về số nguyên tố Đặc biệt giới
thiệu một số phương pháp với các thuật toán đang được dùng trong thực tế để kiểm tra và sinh các số nguyên tố lớn Ngoài các thuật toán cổ điển trong chương này trình bày phương pháp xác suất với các thuật toán: Fermat, Solovay-Stransen, Miller-Rabin với các đánh giá Phương pháp xác định với thuật toán AKS Trong chương này cũng trình bày một phương pháp phân tích một số ra thừa số nguyên tố Các nội dung của chương này được tổng hợp từ các tài liệu [7][16][19][20][31][33][38][50]
2.1 Số nguyên tố và định lý cơ bản của số học
2.1.1 Định nghĩa số nguyên tố
Định nghĩa 2.1.1: Số nguyên tố là số nguyên lớn hơn 1, không chia hết cho số
nguyên dương nào ngoài số 1 và chính nó Số nguyên lớn hơn 1 không phải là số nguyên
tố gọi là hợp số
Định lý 2.1.1 (Định lý cơ bản của số học): Mọi số nguyên lớn hơn 1 đều phân tích
được một cách duy nhất thành tích các số nguyên tố, trong đó các thừa số được viết với thứ tự không giảm
Chứng minh:
Xét tập F gồm tất cả các số nguyên lớn hơn 1 không biểu diễn được thành tích một số hữu hạn thừa số nguyên tố Ta chỉ cần chỉ ra F= Thật vậy, giả sử F Khi đó
có số nguyên dương nhỏ nhất m thuộc F Vì mF nên m phải là hợp số Khi đó có hai số
nguyên dương q 1 , q 2 >1 để m = q 1 q 2 Vì q 1 ,q 2 < m nên q 1 ,q 2 F Như vậy ta có phân tích:
q 1 = t 1 t 2 t h và
q 2 = u 1 u 2 u k
Ở đó các t i , u i, đều là các số nguyên tố Khi đó:
m = q 1 q 2 = t 1 t 2 t h u 1 u 2 u k
Điều này mâu thuẫn với giả thiết mF Như vậy F phải là tập rỗng Do đó mọi số
tự nhiên lớn hơn 1 đều phân tích thành tích của hữu hạn thừa số nguyên tố
Bây giờ giả sử một số được phân tích thành hai tích dạng A và B các thừa số nguyên tố Khi đó A = B Bằng cách lược bỏ tất cả các thừa số nguyên tố xuất hiện trong
cả A và B, ta nhận được đẳng thức tương đương C=D Ta cần phải chứng minh C=D=1
Thật vậy giả sử trái lại C = D 1 Gọi p là thừa số nguyên tố xuất hiện trong C
Khi đó p không thể là thừa số xuất hiện trong biểu thức tích của D Có nghĩa là D không phải là bội của p, và do đó C cũng không là bội của p (mâu thuẫn!) Vậy C = D = 1 Điều này chứng tỏ rằng sự phân tích ra các thừa số nguyên tố của một số nguyên >1 là duy
nhất nếu không kể đến thứ tự các thừa số
Trang 30Định lý 2.1.2: Mọi hợp số n đều có ước nguyên tố nhở hơn n
Chứng minh:
Thật vậy, vì n là một hợp số nên ta có thể viết n = ab, trong đó a và b là các số nguyên với 1<an<b Rõ ràng ta phải có a hoặc b không vướt quá n , giả sử đó là a Ước nguyên tố của a cũng đồng thời là ước nguyên tố của n
2.1.2 Chứng minh số nguyên tố là vô hạn
Giả sử p r là số nguyên tố lớn nhất và các số nguyên tố được ký hiệu là:
2.1.3 Sự phân bố của số nguyên tố
Định nghĩa 2.1.2: Hàm (n) được định nghĩa là số các số nguyên tố nhỏ hơn hay bằng n
Ví du, (5)=3 bởi vì 2, 3 và 5 là số nguyên tố Bảng dưới đây liệt kê một vài giá
trị của :
Bảng 2.1.1 Liệt kê một vài giá trị của (n)
Với n nhỏ dễ dàng tìm đươc giá trị của (n) bằng cách đếm số nguyên tố, nhưng
nó là cách biểu diễn đơn giản cho (n) với giá trị n lớn Nếu có biểu diễn của (n) thì dễ
dàng cho việc dự đoán số các số nguyên tố vì (n) sẽ tăng lên với mỗi số nguyên tố
Nhưng không có biểu diễn chính xác cho (n), nhưng có các giá trị xấp xỉ gần đúng
Dưới đây là định lý cho phép tính các giá trị gần đúng (n):
Trang 31(6 x 10 9 ) - (5 x 10 9 ) 2.66 x 10 8 – 2.24 x 10 8 = 4.26 x 10 8
Vậy 4.26 x 10 8 số nguyên tố trong khoảng 5 tỉ đến 6 tỉ Vậy có khoảng 4.3% các số trong khoảng này là số nguyên tố, như vậy trung bình cứ trong 23 số thì có 1 số là nguyên
tố Điều này rất có ích cho việc xây dựng các ứng dụng tìm số nguyên tố Ví dụ, một phần
mềm mã hoá cần sinh ngẫu nhiên một số nguyên tố trong khoảng 5 tỉ đến 6 tỉ thì trung bình nó cần kiểm tra 23 số ngẫu nhiên trước khi tìm ra một số
Một cách tổng quát, định lý số học nêu ra rằng để tìm một số nguyên tố trong
khoảng n cho trước cần phải kiểm tra khoảng ln n số nguyên chọn ngẫu nhiên Con số này giảm đi một nửa nếu chỉ chọn ngẫu nhiên các số lẻ trong khoảng n
2.1.4 Các số nguyên tố có dạng đặc biệt
2.1.4.1 Số nguyên tố Mersenne
Các số nguyên có dạng M q = 2 q – 1 được gọi là các số Mersenne, tên của nhà toán
học người Pháp Marin Mersenne Các số Mersenne là số nguyên tố được gọi là các số
Trang 32nguyên tố Mersenne Bảng dưới đây liết kê một vài số Mersenne và cho biết số nào là
nguyên tố:
Bảng 2.1.4 Liết kê một vài số Mersenne và cho biết số nào là nguyên tố
Từ bảng này, một phỏng đoán được đưa ra M q là số nguyên tố nếu và chỉ nếu q là
số nguyên tố, nhưng q = 11 là một phản ví dụ cho giả thuyết này Tuy nhiên, có điều đúng là q phải là số nguyên tố để M q là số nguyên tố Hai định lý dưới đây đưa ra để tìm
số nguyên tốt Mersenne Chúng được chứng minh bởi Crandrall và Pomerence [24]
Định lý 2.1.4: Nếu M q = 2 q – 1 là số nguyên tố, thì q là số nguyên tố
Định lý 2.1.5: Mọi số nguyên tố q > 2, mọi phân tích nguyên tố của M q tương đương với 1 mod q và 1 mod 8
Có hai định lý cho phép tìm kiếm các số nguyên tố Mersenne hiệu quả hơn các
cách tìm thông thường Chúng ta đưa ra một vài giới thiệu ngắn ở đây Chúng ta bắt đầu
kiểm tra M q chỉ với q là số nguyên tố Sau đó kiểm tra thoả mãn M q 1 mod r với một vài
các giá trị nguyên tố nhỏ của r thoả mãn r1mod q và r = 1 mod 8 Các số vượt qua
kiểm tra này sẽ là chủ đề nghiên cứu của kiểm tra Lucas-Lehmer, là kiểm tra nguyên tố
xác định, nó cần các thừa số của n +1 để xác định n là nguyên tố Từ biểu thức M q + 1 =
2 q , kiểm thử này dễ dàng áp dụng số nguyên tố Mersenne (Xem Crandall và Pomerance
2001 [24] để biết thêm về kiểm thử Lucas-Lehmer)
Phần lớn giá trị q không cho kết quả M q là số nguyên tố Số nguyên tố Mersenne lớn được tìm thấy năm 2006 là 2 32582657 – 1 Và có 45 số nguyên tố Mersenne được tìm
thấy trong năm 2008, vào ngày 23 tháng 8 năm 2008 tìm thấy số nguyên tố thứ 45 là
2 43122609 – 1 có số lượng không lồ các con số là 12 978 189 con số, được tìm ra tại đại học
California Los Angles (UCLA) [tham khảo tại www.mersenne.org]
2.1.4.2 Số nguyên tố Fermat
Các số Fermat có dạng F n =
n
2
2 + 1 Fermat đưa ra dự đoán vào năm 1637 rằng
các số dạng này là số nguyên tố, và chỉ ra sự đúng đắn của n từ 0 đến 4 Tuy nhiên, tất cả các số Fermat được kiểm tra sau đó đều cho kết quả là hợp số Euler là người đầu tiên bác
bổ dự đoán của Fermat, chứng minh rằng F 5 = 25
2 + 1 = 2 32 + 1 là hợp số Mặc dù không
có thêm số nguyên tố Fermat nào được tìm thấy, nó vẫn không được biết như là F n là hợp
số với tất cả n > 5 Cũng như với số nguyên tố Mersenne, hai định lý chặt chẽ dưới đây cho cách tìm các số nguyên tố Fermat Chúng được chứng minh bởi Candrall và
Pomerance năm 2001 [24]:
Định lý 2.1.6: Nếu p = 2m + 1 là số nguyên tố lẻ, thì m là luỹ thừa của 2
Định lý 2.1.7:Cho n 2, mọi số thừa số nguyên tố p của F n có dạng p 1 mod 2 n+2
Trang 3333
Định lý đầu tiên nói rằng bất kỳ số nguyên tố nào lớn hơn 2 là luỹ thừa của 2 cộng với 1 thì là số nguyên tố Fermat Định lý thứ hai, cả Euler, phân tích ra tích các thừa số nguyên tố đều được kiểm tra khi kiểm thử F n Các phương pháp khác nhau được sử dụng
để biểu diễn F n là hợp số cho n từ 5 đến 32 là phương pháp Trial Division và kiểm thử
Pepin (không trình bày trong luận văn này)
2.2 Phương pháp cổ điển kiểm tra và sinh số nguyên tố
2.2.1 Thuật toán Trial Division
Theo định nghĩa số nguyên tố là số chỉ có hai ước số là 1 và chính nó Do vậy, cách đơn giản để kiểm tra một số n là nguyên tố bằng cách kiểm tra các số từ 2 đến n-1 có
là ước số của n Để kiểm tra một số à là ước số của n, chúng ta sử dụng phép toán modulo
để kiểm tra khi phần dư của phép chia n cho a là zero Nếu a mod n = 0 thì a là ước số của
n, và n không phải là số nguyên tố Phương pháp này rất không hiệu quả, bởi vì với một
số n cần phải thực hiện n-2 phép chia Chúng ta sẽ có một cải tiến nhỏ làm cho thuật toán hiểu quả hơn theo quan sát sau: nếu n có ước a n thì nó phải có một ước số là b =
a
n
n Một cách hình thức nó được phát biệu bởi bổ đề dưới đây:
Bổ đề 2.2.1: Nếu n không có bất kỳ ước số a nào trong khoảng 1<a n , thì n là
số nguyên tố
Chứng minh: Giả sử n không có ước số a trong khoảng 1 < a n , và n không
phải số nguyên tố Theo giả thiết, n có một ước số b thoả mãn n < b < n, và có thể viết n
= bc với một số nguyên c thoả mãn n < c < n Tuy nhiên, điều này có nghĩa là bc >
n n = n, trái ngược với bc = n Do đó giả thuyết là sai, và n là số nguyên tố
Theo bổ đề trên có thuật toán xác định số nguyên tố như sau:
Thuật toán này thực hiện tối thiểu n phép toán để kiểm tra n là số nguyên tố
Nếu n=2 s thì thời gian thực hiện của thuật toán là O( s
2 ) = O(2 s/2 ), là hàm mũ của s
Có thể cái tiến thuật toán ở trên với một vài nhận xét sau Đầu tiên, biết rằng nếu n
không chia hết cho 2 thì nó cũng không, thì nó cũng không chia hết cho bất cứ số nào là bội của 2 Điều tương tự cũng được áp dụng cho bất cứ số nào khác, như vậy chúng ta chỉ cần kiểm tra các số nguyên tố nhỏ hơn n là ước số của n Điều này là dễ dàng nếu có sẵn danh sách các số nguyên tố nhỏ hơn n(cách tiếp cận này là sàng Eratosthenes) Thậm chí nếu không có danh sách số nguyên tố ta vẫn có thể dễ dàng loài đi các thừa số của các trường hợp không phải số nguyên tố
Trang 34Mọi số nguyên tố lớn hơn 2 đều là lẻ, như vậy tất cả các số chẵn có 2 là số chia Như vậy chỉ cần kiểm tra các số lẻ sau 2 Tương tự như vậy, tất cả các số nguyên tố sau không phải là bội số của 3, vì vậy chúng ta chỉ cần kiểm tra các số tương đương với 1
mod 6 hoặc 5 mod 6 Chiến lược này được cài đặt bằng cách lần lượt thêm 2 và 4 vào số
chia, nó khiến thuật toán phức tạp lên một chút Sự tối ưu có tiếp tục bằng cách loại các số
là bội của 5, 7, v.v Tuy nhiên, lưu lại các số kiểm tra trở thành cồng kềnh cho các giá trị lớn hơn, và sự lỗ lực đó trả giá bằng hiệu quả của thuật toán Dưới đây là thuật toán đã được cải tiến:
Thuật toán này bằng 2/3 số phép toán so với thuật toán ban đầu bằng cách chỉ kiểm tra các số chia tương đương với 1 mod 6 và 5 mod 6, nhưng độ phức tạp vẫn là hàm mũ
2.2.2 Phương pháp sàng Eratosthenes
Sàng Eratosthenes là thuật toán đơn giản để sinh ra bảng các số nguyên tố nhỏ hơn
n Nó làm việc rất đơn giản bằng cách loại đi các bội số của các số nguyên tố Đầu tiên là
số nguyên tố 2, nên sẽ loại bỏ tất cả bội của 2, số 3 không bị loại là số nguyên tố, nên lại loại bỏ tất cả bội của 3, số 5 không bi loại nên là số nguyên tố, và quá trình loại bỏ lại tiếp tục cho tới khi đạt tới n Cũng giống như thuật toán Trivial Division nếu một số ở giữa
n và n không phải là số nguyên tố, thì nó sẽ có một vài số chia nhỏ hơn hoặc bằng n, nên nó sẽ bị loại bỏ Dưới đây là mô tả sàng với 100 chữ số:
Trang 3535
Bảng 2.2.1 Mô tả sàng Eratosthenes với 100 chữ số
Thuật toán cho sàng Eratosthenes như sau:
Với mỗi số nguyên tố p nhỏ hơn n, vòng lặp bên trong sẽ thực hiện n/p lần Do
đó thời gian thực hiện thuật toán tương ứng với Mà , vì vậy độ phức tạp là Tuy nhiên nó phải tìm tất cả các số nguyên tố nhỏ hơn
n để kiểm tra n là số nguyên tố, để kiểm tra số nguyên tố rất lớn thì điều này là không khả thi
2.3 Phương pháp xác suất kiểm tra và sinh số nguyên tố
2.3.1 Thuật toán Fermat
Thuật toán Fermat là kiểm tra xác suất dựa trên định lý Fermat nhỏ (Fermat’s Little Theorem) Định lý được phát biểu như sau:
Định lý 2.3.1 (Định lý Fermat): Nếu p là số nguyên tố và a là số không chia hết
cho p thì:
a p-1 = 1 (mod p)
Hệ quả 2.3.1 : Nếu p là số nguyên tố và a là số nguyên dương thì:
a p = a (mod p)
Trang 36Kết quả trên xác nhận khi p là số nguyên tố, thì 2 p-1 = 1 mod p, và cũng cho một
phỏng đoán rằng p không phải là số nguyên tố, thì 2 p-1 1 mod p Tuy nhiên phỏng đoán
này lại không đúng, chẳng hạn nhƣ: n = 341 = 11 x 31 không phải là số nguyên tố, nhƣng
nó vẫn thoả mãn 2 341-1 = 1 mod 341 Do vậy định lý Fermat với a = 2 có thể đƣợc sử
dụng kiểm tra một số là hợp số nhƣng không thể dùng để kiểm tra một số chắc chắn là số
nguyên tố Các số mà thoả mãn định lý Fermat mà không phải là số nguyên tố gọi là số giả nguyên tố và đƣợc định nghĩa một cách nhƣ sau:
Định nghĩa 2.3.1 : Một số giả nguyên tố cơ sở a là một hợp số nguyên n thoả mãn
công thức a n-1 = 1 mod n
Nếu số giả nguyên tố cơ sở a không tồn tại, thì định lý Fermat cho một cách rất đơn giản để kiểm tra số nguyên tố: một số n là số nguyên tố nếu và chỉ nếu a n-1 =1 mod n
Đáng tiếc số giả nguyên tố cơ sở a lại tồn tại với mọi cơ sở, vì vậy định lý Fermat chỉ cho
một cách kiểm tra thiên về hợp số Thuật toán nhƣ sau:
Nếu một số vƣợt qua kiểm tra số giả nguyên tố với vài cơ sở thì khả năng nó là số nguyên tố khá chắc chắn (vẫn có một xác suất nào đó)
Thuật toán Fermat đƣợc xây dựng trên cơ sở thuật toán kiểm tra thiên về hợp số ở
trên Nó sẽ kiểm tra một số n là giả nguyên tố với k cơ sở đƣợc chọn một cách ngẫu nhiên
và kết luận là một số nguyên tố với xác suất nào đó nếu và chỉ nếu nó vƣợt qua k kiểm tra Thuật toán nhƣ sau:
Trang 3737
Thuật toán pseudoprime có độ phức tạp thời gian là O(logn) Thuật toán kiểm tra Fermat thực hiện thuật toán pseudoprime k lần vì vậy độ phức tạp thời gian O(k logn) hay O(k s) Do vậy nó là thuật toán xác suất kiểm tra số nguyên tố rất hiệu quả
2.3.2 Thuật toán Solovay – Strassen
Định nghĩa 2.3.2: thặng dư bậc hai (quadratic residue) mod n là một số nguyên a
thoả mãn phương trình x 2 = a mod n có nghiệm x Ngược lại a là bất thăng dư bậc hai mod n
Ví dụ: 4 là thặng dư mod 5 vì 3 2 = 9 = 4 mod 5 Trong trường hợp khác, 3 là bất
thặng dự bởi vì không có số nguyên nào trong tập hợp {0, 1, 2, 3, 4} bình phương bằng 3
mod 5 Ở đây xin nhắc lại khái niệm vẻ ký hiệu Legendre và Jacobi:
Định nghĩa 2.3.3: nếu p là một số nguyên tố lẻ Với mọi a 0 ta định nghĩa ký hiệu Legendre
Khi n = p là số nguyên tố thì giá trị của ký hiệu Legendre và Jacobi là như nhau
Định lý 2.3.2 (tiêu chuẩn Euler): nếu n là số nguyên tố lẻ, thì:
= a (n-1)/2 mod n với a thoả mãn 1 a n-1
Định nghĩa 2.3.5: với n là một hợp số nguyên lẻ Nếu gcd(a,n)>1hoặc a (n-1)/2
mod n, thì a là giả mạo Euler (Euler liar) của n
Sau đây là thuật toán xác định a là bằng chứng Euler(Euler witness) của n là hợp
số:
Trang 38Bước đầu tiên của thuật toán là tính r = a (n-1)/2
mod n, giống như với thuật toán
Fermat Nếu r = 1 mod n, thì r2 = a n-1 =1mod n, nên n là hợp số bằng thuật toán
Fermat Bước tiếp theo là tính Jacobi
Giống như thuật toán Fermat, thuật toán Solovay-Strassen một số nguyên n là hợp
số bằng cách thực hiện thuật toán euler-witness với vài giá trị ngẫu nhiên của a Nếu có k giá trị a cho trả lời đúng thì n là hợp số Ngược lại thì k là số nguyên tố với xác suất nào
đó, thuật toán được trình bày như sau:
Nó không hiệu quả để kiểm tra tất cả các giá trị có thể của a, nên chúng ta muốn biết sự giống nhau giữa cách chọn lựa của a như thế nào, nếu n là hợp số, một giá trị a
ngẫu nhiên là bằng chứng Euler (Euler witness) cho n là hợp số Trong kiểm tra Fermat, chúng ta tìm thấy một tập chắc chắn các số là số Carmichael, có rất ít bằng chứng Định lý dưới đây sẽ đảm bảo rằng tiêu chuẩn Euler không giống số Carmichael Định lý sử dụng phi hàm Euler:
Định lý 2.3.3: nếu n là hợp số nguyên lẻ, thì có nhiều nhất (n)/2 giả mạo Euler (Euler liar) cho n trong đoạn [2, n-1]
Chúng ta biết rằng (n)<n, nên với mỗi hợp số n lẻ, ít hơn n/2 sự chọn lựa là giả
mạo Euler (Euler liars), và do đó có ít nhất n/2 chọn lựa là bằng chứng (Euler witness)
Điều này ngụ ý rằng nếu n là hợp số, thì có ít nhật 50% cơ hội cho mỗi giá trị ngẫu nhiên
của a trong thuật toán Solovay-Strassen sẽ là bằng chứng (witness) Nếu kiểm tra phân
loại một số là hợp số thì không có một sai sót nào Nếu kiểm tra phân loại một số là số nguyên tố thì có thể là không chính xác Xác suất sai được cho bởi một hệ quả sau đây:
Trang 3939
Hệ quả 2.3.2: Nếu thuật toán Solovay-Strassen với tham số n và k phân loại n là
số nguyên tố, thì xác suất sai nhiều nhất là (1/2) k
Vì vậy, chúng ta có thể đạt đƣợc xác suất n là số nguyên tố cao hơn đơn giản bằng cách tăng k lên một giá trị cần thiết Hơn nữa, thuật toán Solovay-Strassen bảo đảo xác suất giống nhau của phân loại đúng bất chấp độ lớn của n Điều này rất hữu ích vì chúng
ta muốn tìm kiếm số nguyên tố lớn
Để tiện theo dõi ở đây nhắc lại cách tính Jacobi:
Định lý 2.3.4: Với m, n >1 là số nguyên lẻ và với a, b là số nguyên bất kỳ Thì ký
hiệu Jacobi có các tính chất sau:
(iv) Nếu a=b mod n thì
Trang 40Định nghĩa đệ quy này được diễn giải bởi thuật toán sau, thuật toán hiệu quả để tính
mà không cần phải phân tích n thành thừa số nguyên tố:
Thời gian chạy của thuật toán tính Jacobi là O(log 2 n) Thuật toán Euler-witness
thực hiện với hai phép tính chính: a (n-1)/2 mod n và
n) Các toán tử so sánh có thời gian
chạy coi như không đáng kể, vì vậy độ phức tạp thời gian của thuật toán euler-witness là
O(log 2 n) Kiểm tra Solovay-Strassen thực hiện thuật toán k lần nên có thời gian thực hiện
là O(k log 2 n)
Với thuật toán Solovay-Strassen, chúng ta có (1/2)k khả năng phân loại sai cho thời
gian thực hiện O(k log 2 n) Như vậy là chậm hơn thuật toán Fermat O(k.log n), nhưng
thuật toán Fermat không đưa ra một giá trị cụ thể nào đảm bảo sự chặc chắn của mình kể
cả sự tồn tại của số Carmichael
2.3.3 Thuật toán Miller-Rabin
Thuật toán Miller Rabin là phiên bản sửa đổi của thuật toán Fermat sử dụng ý tưởng đơn giản trình bày dưới đây để tạo ra kiểm tra thiên về hợp số rất mạnh Nó thay thế thuật toán Solovay-Strassen như là một chọn lựa đầu tiên để kiểm tra xác suất vì hiệu quả cao hơn và xác suất chính xác cũng cao hơn
Định lý 2.3.5: Nếu x 2 = 1 mod n có nghiệm không tầm thường, thì n là hợp số