1. Trang chủ
  2. » Luận Văn - Báo Cáo

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ử

91 914 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 91
Dung lượng 2,09 MB

Nội dung

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 3

3 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 4

3.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 5

5

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 6

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

7

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 8

Nộ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 9

9

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

Chươ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 11

11 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 12

Lý 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 13

d 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 14

Theo 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 15

15 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 17

17

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 18

lcm(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 19

19

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 20

Dễ 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 aZ 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 22

Mộ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 aZn*, 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 23

23

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 24

9283 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 25

25

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 26

Bà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à P2P, thì cũng có P1P

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 27

3) 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 28

Ví 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 29

29

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 2F Như vậy ta có phân tích:

q 1 = t 1 t 2 t h

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 32

nguyê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 33

33

Đị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<an , 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 34

Mọ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 35

35

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 36

Kế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-11 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 37

37

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 38

Bướ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 39

39

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ố

Ngày đăng: 25/03/2015, 10:00

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
3. Phạm Văn Ất (1999), Kỹ thuật lập trình C, NXB Khoa học và Kỹ thuật Sách, tạp chí
Tiêu đề: Kỹ thuật lập trình C
Tác giả: Phạm Văn Ất
Nhà XB: NXB Khoa học và Kỹ thuật
Năm: 1999
4. Phạm Văn Ất (2000), C++ &amp; lập trình hướng đối tượng, NXB Khoa học và Kỹ thuật Sách, tạp chí
Tiêu đề: C++ & lập trình hướng đối tượng
Tác giả: Phạm Văn Ất
Nhà XB: NXB Khoa học và Kỹ thuật
Năm: 2000
5. Phạm Văn Ất (2005), Lập trình Windows dùng ngôn ngữ C và các hàm API của Windows, NXB GTVT Sách, tạp chí
Tiêu đề: Lập trình Windows dùng ngôn ngữ C và các hàm API của Windows
Tác giả: Phạm Văn Ất
Nhà XB: NXB GTVT
Năm: 2005
6. Nguyễn Văn Ba (2006), Lý thuyết ngôn ngữ và tính toán, NXB ĐHQG HN Sách, tạp chí
Tiêu đề: Lý thuyết ngôn ngữ và tính toán
Tác giả: Nguyễn Văn Ba
Nhà XB: NXB ĐHQG HN
Năm: 2006
7. Phan Đình Diệu (2006), Lý thuyết mật mã và An toàn thông tin, NXB ĐHQG HN Sách, tạp chí
Tiêu đề: Lý thuyết mật mã và An toàn thông tin
Tác giả: Phan Đình Diệu
Nhà XB: NXB ĐHQG HN
Năm: 2006
8. Nguyễn Xuân Dũng (2007), Bảo mật thông tin mô hình &amp; ứng dụng, NXB Thống kê Sách, tạp chí
Tiêu đề: Bảo mật thông tin mô hình & ứng dụng
Tác giả: Nguyễn Xuân Dũng
Nhà XB: NXB Thống kê
Năm: 2007
9. Đặng Văn Đức, Lê Quốc Hƣng (2003), Lập trình Windows bằng Visual C++, NXB Giáo dục Sách, tạp chí
Tiêu đề: Lập trình Windows bằng Visual C++
Tác giả: Đặng Văn Đức, Lê Quốc Hƣng
Nhà XB: NXB Giáo dục
Năm: 2003
10. Nguyễn Xuân Huy (2007), Sáng tạo trong thuật toán và lập trình, tập 1, NXB Giáo dục Sách, tạp chí
Tiêu đề: Sáng tạo trong thuật toán và lập trình
Tác giả: Nguyễn Xuân Huy
Nhà XB: NXB Giáo dục
Năm: 2007
11. Bùi Doãn Khanh, Nguyễn Đình Thúc (2004), Giáo trình Mã hóa Thông tin, NXB Lao động Xã hội Sách, tạp chí
Tiêu đề: Giáo trình Mã hóa Thông tin
Tác giả: Bùi Doãn Khanh, Nguyễn Đình Thúc
Nhà XB: NXB Lao động Xã hội
Năm: 2004
12. Bùi Doãn Khanh, Nguyễn Đình Thúc, Trần Đan Thƣ (2007), Cơ sở lí thuyết số trong an toàn - bảo mật thông tin, NXB Giáo dục Sách, tạp chí
Tiêu đề: Cơ sở lí thuyết số trong an toàn - bảo mật thông tin
Tác giả: Bùi Doãn Khanh, Nguyễn Đình Thúc, Trần Đan Thƣ
Nhà XB: NXB Giáo dục
Năm: 2007
13. Hà Huy Khoái, Phạm Huy Điển (2003), Số học thuật toán: Cở sở lý thuyết và tính toán thực hành, NXB ĐHQG HN Sách, tạp chí
Tiêu đề: Số học thuật toán: Cở sở lý thuyết và tính toán thực hành
Tác giả: Hà Huy Khoái, Phạm Huy Điển
Nhà XB: NXB ĐHQG HN
Năm: 2003
14. Hà Huy Khoái, Phạm Huy Điển (2004), Mã hoã thông tin: Cơ sở toán học và ứng dụng, NXB ĐHQG HN Sách, tạp chí
Tiêu đề: Mã hoã thông tin: Cơ sở toán học và ứng dụng
Tác giả: Hà Huy Khoái, Phạm Huy Điển
Nhà XB: NXB ĐHQG HN
Năm: 2004
15. PGS. TS. Trịnh Nhật Tiến (2009), Bài giảng cao học: An ninh Cơ sở dữ liệu, ĐH Công nghệ, ĐHQG HN Sách, tạp chí
Tiêu đề: Bài giảng cao học: An ninh Cơ sở dữ liệu
Tác giả: PGS. TS. Trịnh Nhật Tiến
Năm: 2009
16. PGS. TS. Trịnh Nhật Tiến (2008), Giáo trình: An toàn dữ liệu, ĐH Công nghê, ĐHQG HN Sách, tạp chí
Tiêu đề: Giáo trình: An toàn dữ liệu
Tác giả: PGS. TS. Trịnh Nhật Tiến
Năm: 2008
17. Nguyễn Ngọc Trung (2008), Các thuật toán tối ưu trong bảo mật thông tin, Luận văn thạc sĩ, Khoa Công nghệ thông tin, Trường Đại học Thái Nguyên Sách, tạp chí
Tiêu đề: Các thuật toán tối ưu trong bảo mật thông tin
Tác giả: Nguyễn Ngọc Trung
Năm: 2008
18. Vũ Thanh Vân (2005), Một số vấn đề xác thực và ứng dụng, Luận văn thạc sĩ, Trường Đại học Bách khoa Hà Nội Sách, tạp chí
Tiêu đề: Một số vấn đề xác thực và ứng dụng
Tác giả: Vũ Thanh Vân
Năm: 2005
19. Manindra Agrawal (2005), “Primality tests based on Fermat’s little theorem”, Department of CS, Indian Institute of Technology, Kanpur Sách, tạp chí
Tiêu đề: Primality tests based on Fermat’s little theorem”, "Department of CS, Indian Institute of Technology
Tác giả: Manindra Agrawal
Năm: 2005
20. Manindra Agrawal, Neeraj Kayal, Nitin Saxena (2004), “PRIMES is in P”, Ann. of Math, (2), 160(2): 781-793 Sách, tạp chí
Tiêu đề: PRIMES is in P”, "Ann. of Math
Tác giả: Manindra Agrawal, Neeraj Kayal, Nitin Saxena
Năm: 2004
21. A.O.L. Atkin, F. Morain (1993), “Elliptic curves and primality proving”, Math. Comp., 61(203): 29-68 Sách, tạp chí
Tiêu đề: Elliptic curves and primality proving”, "Math. "Comp
Tác giả: A.O.L. Atkin, F. Morain
Năm: 1993
22. Dan Boneh (1999), “Twenty years of attacks on RSA cryptosystem”, Notices of the AMS, vol. 2, n. 6, pp. 203-213 Sách, tạp chí
Tiêu đề: Twenty years of attacks on RSA cryptosystem”, "Notices of the AMS
Tác giả: Dan Boneh
Năm: 1999

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w