Tải bản đầy đủ (.pdf) (59 trang)

Số nguyên tố và ứng dụng trong phương pháp chứng minh không tiết lộ thông tin

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

Mục lục
Mục lục …………………………………………………………..………….. 



Lời cam kết…………………………………………………………………... 

iii 

Lời cảm ơn…………………………………………………………………… 

iv 

Danh mục viết tắt…………………………………………………...…………….... 



Danh mục các hình vẽ và bảng biểu………………………………………………... 

vi 

 Lời nói đầu…………………………………………………………………………       vii 

Chương 1: Số nguyên tố và các bài toán liên quan………………………. 



    1.1. Định nghĩa về số nguyên tố………………………………………….. 




    1.2. Tính chất của số nguyên tố…………………………………………… 



    1.3. Sinh số nguyên tố và phân tích thừa số nguyên tố…………………… 



       1.3.1. Sinh số nguyên tố……………………………………………..… 



       1.3.2. Phân tích thừa số nguyên tố……………………………….……… 



    1.4. Kết luận chương……………………………………………………… 



Chương 2: Số nguyên tố và ứng dụng trong phương pháp chứng minh
không tiết lộ thông tin.



    2.1. Thuật toán kiểm tra số nguyên tố…………………….………………. 



        2.1.1. Kiểm tra số nguyên tố bằng thuật toán Konigin – Pomerans…… 




        2.1.2. Kiểm tra tính nguyên tố bằng thuật toán Miller………………… 

11 

        2.1.3. Kiểm tra tính nguyên tố của số bằng phép kiểm tra xác suất…… 

11 

        2.1.4. Kiểm tra trên cơ sở định luật nhỏ Fermat……..…………………. 

12 

        2.1.5. Kiểm tra bằng Miller – Ranbin………………………………… 

15 

        2.1.6. Kiểm tra bằng Solovay – Stransen……………………………… 

17 

        2.1.7. Kiểm tra tính nguyên tố của số bằng thuật toán đa thức………… 

19 

   2.2. Thuật toán sinh số nguyên tố……………………………….………… 

21 


       2.2.1.Thuật toán sinh số nguyên tố xác xuất…………………………… 

21 

       2.2.2.Thuật toán sinh số nguyên tố tất định……………………….......... 

22 

i


Chương 3: Ứng dụng của số nguyên tố lớn trong phương pháp chứng
minh không tiết lộ thông tin

26 

   3.1. Phương pháp chứng minh không tiết lộ thông tin……………………... 

26 

   3.2.Ứng dụng CMKTLTT trong bỏ phiếu điện tử…………………………. 

32 

   3.3.Ứng dụng CMKTLTT trong tiền điện tử……………………………… 
   3.4. Kết luận chương……………………………………………………….. 

47 
47 


Kết luận của luận văn …………………………………………………… 

48 

TÀI LIỆU THAM KHẢO…………………………………………………. 

49 

ii


Lời cam kết
 
    Tài liệu được sử dụng trong luận văn được thu thập từ các nguồn kiến thức 
hợp  pháp,  có  trích  dẫn  nguồn  tài  liệu  tham  khảo.  Chương  trình  sử  dụng  mã 
nguồn mở, có xuất xứ. 
 
     Dưới sự giúp đỡ nhiệt tình và chỉ bảo chi tiết của giáo viên hướng dẫn, tôi đã 
hoàn thành luận văn của mình. Tôi xin cam kết luận văn này là của bản thân tôi 
làm và nghiên cứu, không hề trùng hay sao chép của bất kỳ ai.  

iii


Lời cảm ơn

            Trước hết tôi xin gửi lời cảm ơn đến TS. Nguyễn Thị Hồng Minh, Phó
Chủ nhiệm khoa Sau đại học, Đại học Quốc gia Hà Nội người đã hướng dẫn và
giúp đỡ tôi rất nhiều trong suốt quá trình tìm hiểu nghiên cứu và hoàn thành

khóa luận này. Sự hướng dẫn nhiệt tình của Tiến sĩ đã giúp tôi quyết tâm hoàn
thành luận văn, qua đó bản thân tôi đã mở rộng hiểu biết về vấn đề bảo mật
thông tin và các ứng dụng trong thự tế của nó.
Tôi cũng xin chân thành cảm ơn quý Thầy, Cô trong trường Đại học Công
nghệ Thông tin & Truyền thông - Đại học Thái Nguyên; quý Thầy, Cô trong
Viện Công nghệ thông tin đã tận tình truyền đạt kiến thức cho chúng tôi trong 2
năm học tập và nghiên cứu. Với vốn tiếp thu trong khóa học không chỉ là nền
tảng cho quá trình nghiên cứu luận văn này mà còn là hành trang quý báu, nền
tảng vững chắc để tôi tiếp tục nghiên cứu, hoạt động trong lĩnh vực công nghệ
thông tin.
Cuối cùng xin cảm ơn gia đình, bạn bè, đồng nghiệp đã giúp đỡ và động
viên tôi trong công việc và học tập cũng như trong quá trình thực hiện luận văn
này.
Xin chúc mọi người luôn mạnh khoẻ, đạt được nhiều thành tích cao
trong công tác, học tập và nghiên cứu khoa học!
 

Trân trọng cảm ơn! 
Thái Nguyên, ngày 12 tháng 5 năm 2016
Tác giả

Tạ Thị Hằng

iv


Danh mục viết tắt
Viết tắt

Giải thích


Đpcm 

Điều phải chứng minh 

CMKTTTT 

Chứng minh không tiết lộ thông tin 

UCLL 

Ước chung lớn nhât 

TTĐT 

Thanh toán điện tử 

CT 

Cử Tri 

KP 

Kiểm Phiếu 

TMĐT 

Thương mại điện tử 

GMR 


Goldwasser, Micali và Rackoff  

TT 

Thông tin 

BKP 

Ban kiểm phiếu 

CSDL 

Cơ sở dữ liệu 

BDK 

Bàn Đăng Ký 

BKP 

Ban kiểm phiếu 

 

v


Danh mục các hình và bảng


Hình 1.1: Sơ đồ quy trình bỏ lá phiếu điện tử…………………………….

35 

Hình 1.2: Sơ đồ giai đoạn đăng ký bỏ phiếu………………………………  36 
Hình 1.3: Sơ đồ giai đoạn bỏ phiếu……………………………………….  38 
  
 
 

vi


Lời nói đầu 
        Ngày  nay,  công  nghệ  thông  tin  đang  phát  triển  mạnh  mẽ,  Internet  đã  trở 
thành  một  phần  không  thể  thiếu  trong  cuộc  sống hàng  ngày  thì  các  hoạt  động 
trao đổi thông tin, mua bán,…trên mạng Internet diễn ra thường xuyên và ngày 
phổ biến hơn. Chính vì vậy mà việc bảo mật, đảm bảo an toàn thông tin đang là 
nhu cầu cấp thiết. Trước các nhu cầu cấp thiết đó, lý thuyết về mật mã thông tin 
đã ra đời nhằm đảm bảo tính an toàn dữ liệu tại nơi lưu trữ cũng như khi dữ liệu 
đang được truyền trên mạng. Mật mã học là một trong những vấn đề quan trọng 
trong lĩnh vực bảo  mật và an toàn thông tin.Trên thế giới  mật mã học được ra 
đời từ thời La Mã cổ đại và ngày  càng được nghiên cứu, phát  triển đạt những 
thành tựu to lớn. Trong mật mã học thì vấn đề bảo mật luôn đi đôi với vấn đề 
xác thực thông tin, đặc biệt trong hệ thống mã hóa khóa công khai vấn đề xác 
thực là vô cùng quan trọng, để giải quyết vấn đề trên người ta đưa ra một cách 
giải quyết hiệu quả, đó là phương pháp chứng minh không tiết lộ thông tin. Với 
sự bùng nổ của mạng Internet hiên nay, mạng máy tính đang ngày càng đóng vai 
trò thiết  yếu  trong  lĩnh vực hoạt động xã hội, và 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  thông  tin  được  đặt  lên  hàng  đầu. 

Việc sử dụng phương pháp chứng minh không tiết lộ thông tin  là một giải pháp 
hữu  hiệu,  ngày  càng  được  ứng  dụng  nhiều  trong  thực  tế,  không  chỉ  giới  hạn 
trong nghành công nghệ thông tin, mật mã học mà còn được áp dụng nhiều trong 
lĩnh vực khác như ngân hàng, viễn thông…”Chứng minh không tiết lộ thông tin 
(zero  Knowledge  Proofs”  là  phương  pháp  chứng  minh  không  có  nghĩa  là  “ 
không để lộ thông tin” mà là “để lộ thông tin ở mức thấp nhất” về sự vật, sự việc 
cần chứng minh. Với việc “không để lộ” người xác minh sẽ không có nhiều hiểu 
biết về sự vật, sự việc, họ chỉ thu được chút ít thông tin (coi như là không) về 
tính chất của nó nhưng vẫn đảm bảo được nhận thức về tính đúng của đối tượng 
cần xác minh.  

vii


Số nguyên tố, một phát minh kì diệu của con người, được quan tâm không 
chỉ bởi cộng đồng toán học mà cả cộng đồng tin học do tính chất đặc biệt của nó 
và cả những ứng dụng thực tế hiệu quả.  Ứng dụng chính của số nguyên tố là 
trong  lĩnh  vực  mã  hóa  (cryptography),  trong  đó  chúng  ta  cần  tạo  ra  những  số 
nguyên  tố  với  hàng  trăm  chữ  số.  Kiểm  tra  một  số  có  phải  số  nguyên  tố  hay 
không, làm sao sinh được các số nguyên tố càng lớn càng tốt là những bài toán 
khá quan trọng trong khoa học máy tính.  
Trong đề tài này em tập trung nghiên cứu về một số vấn đề liên quan tới số 
nguyên tố lớn và ứng dụng trong phương pháp chứng minh không tiết lộ thông 
tin (bỏ lá phiếu điện tử và tiền điện tử). 
      Bố cục luận văn gồm 3 chương. Chương 1 giới thiệu số nguyên tố và các bài 
toán liên quan và cách phân tích thừa số nguyên tố.Tiếp theo chương 2 trình bày 
về thuật toán kiểm tra số nguyên tố lớn và ứng dụng trong phương pháp chứng 
minh không tiết lộ thông tin như bỏ lá phiếu điện tử, tiền điện tử từ đó chúng tôi 
sẽ có những vị trí đặt trạm làm tiền đề cho chương 3 với thuật toán kiểm tra số 
nguyên tố lớn để ứng dụng trong bỏ lá phiếu điện tử. Chương 3 sẽ trình bày một 

số  kết  quả  thực  nghiệm  để  kiểm  chứng  hiệu  quả  của  thuật  toán  trên  hệ  thống 
máy  tính  để  kiểm  tra  và  sinh  số  nguyên  tố  lớn,  lồng  ghép  vào  chương  trình 
chứng minh không tiết lộ thông tin trong việc mô tả quá trình bỏ lá phiếu điện 
tử. 

viii


1


Chương 1: Số nguyên tố và các bài toán liên quan 
1.1. Định nghĩa số nguyên tố
Số tự nhiên p, lớn hơn 1 gọi là số nguyên tố nếu như nó chỉ chia hết cho 1 và 
chính nó. Định lý cơ bản của số học nói rằng, bất kỳ số tự nhiên n, lớn hơn 1 có 
thể phân tích thành tích các số  nguyên tố. Tức là một số tự nhiên n có thể biểu 
diễn dưới dạng sau: 
n  p1 1 ... pk k , 

ở đây  p1  p2  ...  pk  - là các số nguyên tố khác nhau,  1 ,..., k  N . 

1.2. Tính chất của số nguyên tố
   Ký hiệu "b   a" nghĩa là b là ước của a, ký hiệu a  b nghĩa là a chia hết cho b. 


Ước tự nhiên khác 1 nhỏ nhất của một số tự nhiên là số nguyên tố. 

Chứng minh: Giả sử d   a; d nhỏ nhất; d  1. 
Nếu d không nguyên tố     d = d1.d2; d1, d2 > 1 
 d1|a với d1 < d: mâu thuẫn với d nhỏ nhất. Vậy d là nguyên tố. 

 Cho p là số nguyên tố; a   N; a   0. Khi đó 
(a,p) = p 

 (a p) 

(a,p) = 1   (a p) 
 Nếu tích của nhiều số chia hết cho một số nguyên tố p thì có ít nhất một 
thừa số chia hết cho p. 
 Ước số dương bé nhất khác 1 của một hợp số a là một số nguyên tố không 
vượt quá 

 

 2 là số nguyên tố nhỏ nhất và cũng là số nguyên tố chẵn duy nhất 
 Tập hợp các số nguyên tố là vô hạn. 

1


1.3. Sinh số nguyên tố và phân tích thừa số nguyên tố 
1.3.1. Sinh số nguyên tố
     Vậy  làm  sao  chúng ta  có thể tìm  ra  được các số  nguyên  tố  trong số  các  số 
nguyên dương  (hay số tự nhiên dương)?  Trong tập hợp các số tự nhiên, có bao 
nhiêu số nguyên tố? Cho đến nay, người ta vẫn chưa biết được, bởi vì quy luật 
của nó rất khó tìm, giống như đứa trẻ bướng bỉnh vậy, nó nấp ở phía đông, chạy 
ở phía tây, thách thức các nhà toán học. 
Có lẽ chúng ta cũng đã từng nghe đến phương pháp sàng lọc của nhà toán 
học Eratosthenes, dùng phương pháp này có thể tìm ra các số nguyên tố rất tiện 
lợi.  Nó  giống  như  là  sàng  lấy  sỏi  trong  cát,  sàng  lọc  lấy  những  số  nguyên  tố 
trong tập hợp số tự nhiên, bảng các số nguyên tố chính là được làm theo phương 

pháp này. 
Thế nhưng, các nhà toán học chưa thỏa mãn với việc dùng phương pháp 
này để tìm ra số nguyên tố, bởi vì nó có chút mò mẫm nhất định, bạn không thể 
biết trước được số nguyên sẽ “sàng” ra số nào. Điều mà các nhà toán học muốn 
là tìm ra quy luật của số nguyên tố để nghiên cứu sâu hơn về nó. 
Từ trong bảng các số nguyên tố, chúng ta có thể thấy chúng được phân bố 
như sau: từ 1  đến 1000  có  168  số nguyên  tố; từ  1000 đến  2000  có  135 số; từ 
2000 đến 3000 có 127 số; từ 3000 đến 4000 có 120 số; từ 4000 đến 5000 có 119 
số. Khi số các số tự nhiên càng lớn thì tỉ lệ phân bố các số nguyên tố càng thưa. 
Số nguyên tố đã "hoá trang" cho mình rồi lẩn khuất trong các số tự nhiên, khiến 
việc tìm ra chúng trở nên khó khăn hơn.  
Ví dụ, 101, 401, 601, 701 đều là số nguyên tố, nhưng 301 và 901 thì lại 
không phải. Có người thử tính như thế này: 12 + 1 + 41 = 43, 22 + 2 + 41 = 47, 
32 + 3 + 41 = 53, ..., 392 + 39 + 41 = 1601. Có 39 số từ 43 cho đến 1601 đều là 
số nguyên tố, thế nhưng tiếp sau đó: 402 +40 +41 =1681 = 41 x 41 thì lại là một 
hợp số. 

2


Nhà toán học người Pháp Ferma từng nghiên cứu lâu dài về số nguyên tố, 
ông từng đưa ra một suy đoán thế này: số (22n + 1) (với n là số nguyên) thì nhất 
định  là  số nguyên tố.  Ferma đã thử 5  "số Ferma"  đầu thì đều là số nguyên  tố, 
nhưng đến số "ferma" thứ sáu thì lại là hợp số, hơn nữa từ số "Ferma thứ 6" trở 
đi, không thể phát hiện  thấy số  nguyên  tố  nào  nữa, toàn là hợp số.  Xem  ra  số 
nguyên tố đã cố trêu đùa Ferma. 
Năm 1644, nhà toán học người Pháp Mason đã đưa ra "số Mason", hình 
thức của nó là (2p - 1). Khi ông còn sống, ông tìm ra 11p để cho (2p - 1) là số 
nguyên tố, người ta tiến hành kiểm chứng đối với 8p, chúng đều là số nguyên tố. 
250 năm sau, năm 1903, các nhà toán học tìm ra số Mason thứ 9 không phải là 

số nguyên tố mà là hợp số. Mặc dù Mason cũng không thực sự tìm ra quy luật 
của số nguyên tố, nhưng dùng phương pháp của ông, người ta tìm được nhiều số 
nguyên tố hơn. Trong đó, số nguyên tố Mason thứ 33 được tìm ra nhờ máy tính 
điện tử , nó có 378632 là số nguyên tố lớn nhất mà loài người tìm được đến lúc 
đó. 
Mersenne,  tu  sĩ  người  Pháp  sinh  năm  1588,  đã  khám  phá  ra  dạng  số 
nguyên tố 2p-1 Một nhóm các nhà khoa học thuộc Đại học Missouri (Mỹ) đã sử 
dụng hơn 700 máy tính để tìm ra số nguyên tố lớn nhất cho đến nay, một con số 
khổng  lồ  với  9.152.052  con  số.  Phát  hiện  này  được  thực  hiện  vào  ngày 
15/12/2005 và đã được xác nhận lại vào ngày 24/12/2005. Sự kiện này đánh dấu 
lần thứ hai trong năm nay dự án kết hợp máy tính có tên Tìm kiếm số nguyên tố 
Mersenne trên Internet (GIMPS - Great Internet Mersenne Prime Search) tìm ra 
số nguyên tố lớn nhất. Nhưng cũng tương tự như phát hiện hồi tháng Hai, con số 
mới được tìm ra này vẫn chưa đạt được kích thước 10 triệu con số cần thiết để 
giành  được  giải  thưởng  100.000  USD  từ  Quỹ  điện  tử  có  tên  là  Electronic 
Frontier Foundation. Dự  án  GIMPS khai thác sức mạnh của hơn 200.000  máy 
tính được cung cấp một cách tình nguyện với nhiệm vụ tìm kiếm tất cả các số 
nguyên  tố  Mersene.  Một  số  nguyên  tố  là  một  số  chỉ  có  thể  chia  hết  cho  1  và 

3


chính nó, và một số nguyên tố Mersenne là một dạng đặc biệt có công thức 2p-1 
trong đó p cũng là một số nguyên tố.  
Ví dụ: 7 cũng là một số nguyên tố Mersenne bởi nó là một số nguyên tố và bằng 
2x7 - 1. Đã vài năm nay, những số nguyên tố lớn nhất được phát hiện đều là các 
số nguyên tố Mersenne. Chúng được đặt tên theo tên của Marin Mersenne, một 
tu  sĩ  người  Pháp  sinh  năm  1588,  người  đã  khám  phá  ra  dạng  số  này.  Các  số 
nguyên tố Mersenne trong nhiều trường hợp đã được các cá nhân tìm ra, nhưng 
lần này thì thành quả lại là của một nhóm tình nguyện viên. Nhóm này tới nay 

đã cống hiến một năng lực xử lý nhiều hơn bất cứ ai: tương đương với khả năng 
xử lý của của một máy tính Pentium 90MHz chạy liên tục trong... 67.000 năm. 
Hai giáo sư Curtis Cooper và Steven Boone là những người phụ trách dự án này. 
Con số nguyên tố được phát hiện lần này là số nguyên tố Mersenne thứ 43 được 
tìm ra. 
1.3.2. Phân tích ra thừa số nguyên tố
Các  số  có  dạng  Mq =  2q -  1  (với  q  là  nguyên  tố)  được  gọi  là  các  số 
Mersenne và đã được nghiên cứu công phu. 
Vào  năm  1640  ,  Mersenne  đã  cho  rằng  Mq là  số  nguyên  tố  đối  với 
q=13,17,19,31,67,127,257; ông đã nhầm đối với 67 và 257 và đã không đưa 61, 
89  và  107  vào  danh  sách  trên.  Những  số  này  còn  sinh ra  các  số  nguyên  tố 
Mersenne. Phát hiện của ông thực sự đáng kinh ngạc về mặt độ lớn của các số. 
Một bài toán khá hiển nhiên là: Xét  xem  một số Mersenne có là số nguyên tố 
không, và nếu không thì xác định các thừa số của nó ( hay còn gọi là bài toán 
phân tích ra thừa số). Một kết quả cổ điển do Euler đưa ra năm 1750 và sau đó 
được Lagrange (1775) và Lucas (1875) chứng minh là: 
Nếu q là một số nguyên tố đồng dư modul log 4(q(3) (mod 4)) thì Mq chia hết 
cho 2q + 1 khi và chỉ khi 2q + 1 là nguyên tố; trong trường hợp này, nếu q> 3 thì 
Mq là hợp số. 

4


Thật vậy: Cho n = 2q + 1 là một thừa số của  M q Vì 22# 1 (mod n) nên 2q# 1 
(mod n), và 22q - 1 = (2q+1)Mqº0 (mod n), từ đó bằng phép thử của Lucas suy ra 
n là một số nguyên tố. 
Ngược  lại,  cho  p  =  2q  +  1  là  một  số  nguyên  tố.  Vì  pº7(mod  8)  nên 
(2/p)=1, do vậy tồn tại m sao cho 2ºm2 (mod p). Điều này chứng tỏ rằng 2qº2(p1)/2

ºmp - 1º1(mod p) Vì vậy Mq chia hết cho p. 

Hơn nữa, nếu q > 3 thì Mq = 2q-1>29+1=p, vì vậy Mq là hợp số. Vì vậy 

nếu  
q =11, 23, 83, 131, 179, 191, 239, 251, thì Mq có các ước tương ứng là 23, 
47, 167, 263, 350, 383, 479, 503. Còn rất dễ để xác định hình dạng của các thừa 
số của các số Mersenne: 
" Nếu Mq chia hết cho n thì nº±1 (mod 8) và nº1 (mod q)" 
Vậy cho nên ta chỉ cần chỉ ra rằng mọi thừa số nguyên tố p của Mq có dạng trên 
là đủ. 
Thật vậy, nếu p là ước của Mq = 2q - 1 thì 2qº1 (mod q); Vì vậy theo bài 
toán  nhỏ  của  Fermat  thì  q  là  ước  của  p-1,  tức  là  p  -  1  =  2kq  (vì  p#2).  Vì 
2
p

vậy:  ( )  2 ( p 1) / 2  2 qk  1 (mod p). 
Do đó pº±1 mod (8). 
Phương pháp tốt nhất hiện nay dùng để xác định Mq là một số nguyên tố 
hay là một hợp số được phát triển dựa vào việc tính toán một số đệ qui do Lucas 
(1878)  và  Lemer  (1930)  đưa  ra.  Tuy  nhiên,  bằng  cách  này  vẫn  không  tìm  ra 
được các thừa số cụ thể. 
Nếu n lẻ, n³3 thì Mn = 2n - 1º7 (mod 12). Đồng thời, nếu Nº7 (mod 12) thì 
ký hiệu Jacobi: 
(

3
N
)  ( )(1) ( N 1) / 2  1  
N
3


5


Như vậy khi phân tích một số a > 1thành một tích những thừa số nguyên tố, 
ta  có  thể  gặp  cùng  một  thừa  số  nhiều  lần.  Nếu  p1,p2,...,pn  xuất  hiện  theo  thứ 
tự α1,...,αn lần thì ta có: a = p1α1 p2α2... pnαn. 
Đây là dạng phân tích chính tắc tiêu chuẩn của a. 
Ví dụ: 360 = 23.32.5. 
Giả sử a = p1α1 p2α2... pnαn là dạng phân tích chính tắc của số tự nhiên a > 1. 
Khi đó nếu d là một ước dương của a 
        d = p1β1 p2β2... pnβn với 0 ≤ βi ≤ αi ; i =  1, n  
Vậy nên nếu  cho n số tự nhiên lớn hơn 1 

a1  p111 p212 ...pm1m

 
an  p1m1 p2m2 ...pmmn
Khi đó: (a1, ..., an) = p1β1 ... pmβm với βj = min (αij); i = 1, n   ; j =  1, m . 
[a1, ..., an] = p1ƴ1 ... pmƴm, ƴj = max(αij); i=  1, n  ; j =   1, m . 
1.4. Kết luận chương
        Như  vậy,  chương  1  đã  tổng  quan  về  số  nguyên  tố  và  phân  tích  thừa  số 
nguyên tố. Đây là kiến thức cơ sở chuẩn bị cho những nghiên cứu tiếp theo của 
bản luận văn này. 
       Phần đầu nói về định nghĩa và các tính chất của số nguyên tố. 
       Tiếp theo là những vấn đề về sinh số nguyên tố và phân tích số nguyên tố 
đó ra thừa số. 
       Nội dung chính chương giúp hiểu được số nguyên tố và mô hình hóa lập kế 
hoạch giải quyết các bài toán về số nguyên tố. Đây là cơ sở quan trọng để tiến 
hành xây  dựng  các thuật  toán  kiểm  tra  số  nguyên  tố  và  sinh  số  nguyên  tố  lớn 
đảm bảo hiệu quả, sẽ trình bày ở các chương tiếp theo. 


6


Chương 2: Số nguyên tố lớn và ứng dụng trong chứng minh không tiết lộ
thông tin.
2.1. Thuật toán kiểm tra số nguyên tố
Bài toán
 Cho một số nguyên n, kiểm tra xem đó có phải là số nguyên tố hay không? 
Giải thuật 1:
- Nếu n là 1, thì n không là số nguyên tố 
- Xét tất cả số nguyên i nhỏ hơn (n - 1), kiểm tra xem n có chia hết x không, 
nếu tất cả không thì n là số nguyên tố. 
Thuật toán có thể viết dạng giả mã như sau: 

 

Giải thuật 1: Kiểm tra số nguyên tố 
Input: n (lớn hơn 2) 
Output: 1 nếu n là số nguyên tố, 0 nếu ngược lại 
Begin 
for (i=2; iif (n%i==0) return 0; 
 
return 1; 
End. 
Chúng ta có thể nhận thấy rằng giải thuật 1 kiểm tra số nguyên tố có số lần 

lặp tuỳ thuộc vào giá trị của n, nếu n quá lớn, giải thuật sẽ tính toán với thời 
gian lớn. Có thể làm giảm bớt thời gian tính toán trong thuật toán 1 bằng cách 

thêm và điều chỉnh một số lệnh như sau: 
- Thêm  lệnh kiểm  tra  trường hợp  n  là  số  chẵn  (n%2==0) kết thúc thuật 
toán trả về giá trị 0. 
- Điều chỉnh vòng lặp for với i chạy từ 2 tới  n   mà vẫn nhận được kết 
quả đúng. Vì nếu một số n không là nguyên tố có ước a thì sẽ có ước n/a, một 
trong hai giá trị a hoặc n/a sẽ có nhỏ hơn  n , vậy chúng ta chỉ cần thực  hiện 
vòng lặp đến  n  để tìm ra ước của n nếu có. Giải thuật 2 có thể được viết lại 
như sau: 
7


 
Giải thuật 2: Kiểm tra số nguyên tố 
Input: n (lớn hơn 2) 
Output: 1 nếu n là số nguyên tố, 0 nếu ngược lại 
Begin 
if (n%2==0) return 0; 
for (i=2; iif (n%i==0) return 0; 
 
return 1; 
End.
Độ phức tạp của giải thuật 2 trong trường hợp xấu nhất là O( n ). Tuy 

 

có giảm được thời gian tính  toán  so với giải thuật 1, nhưng với  giá trị n rất 
lớn thì đây cũng chưa phải là giải thuật có thể đáp ứng được yêu cầu về mặt 
thời gian tính toán. Chúng ta sẽ xem xét một số kĩ thuật phân tích và thiết kế 
thuật toán kiểm tra số nguyên tố lớn một cách hiệu quả trong những phần tiếp 

theo của chương này. 
2.1.1. Kiểm tra số nguyên tố bằng thuật toán Konigin-Pomerans
Nếu  n  N  và một số được phân tích ra thừa số nguyên tố n-1, thì để kiểm 
tra n là hợp số hay là số nguyên tố ta đánh giá độ phức tạp theo đa thức.  
 
Input: n 
Output: Số n cần kiểm tra là hợp số hay số nguyên tố.
Thuật toán Konigin-Pomerans
                                      
        Đặt F(1):=1.  log 2 n 1 . 
   Sau đó đối với từng số a=2,3,…,  log 2 n 1 chúng ta thực hiện cho đến khi 
chúng ta không chứng minh được n là hợp số hay nguyên tố. 

8


1.  Nếu  a  là  hợp  số,  thì  F (a) : F (a  1) và  nhảy  lên  bước  6.  Nếu  a  là  số 
nguyên  tố,  và  a F ( a 1)  1(mod n) ,  thì  F (a) : F (a  1)   và  nhảy  đến  bước  6. 
Ngược lại chúng ta kiểm tra điều kiện sau, xem có thỏa mãn không: 
a n1  1(mod n) . 

Nếu như không, thì n là hợp số. 
2. Khi phân tích n-1 ra thừa số nguyên tố, ta tìm bậc của a (mod n), nghĩa 
là số tự nhiên nhỏ nhất E(a), thỏa mãn  a E ( a )  1(mod n) . 
3. Kiểm tra điều kiện sau có thỏa mãn hay không: 
UCLN (  (a E ( a ) / q  1) , q là số nguyên tố. 
q| E ( a )

Nếu như điều kiện trên không hoàn thành thì n là hợp số. 
4.  F (a) : BCNN ( F (a  1), E (a)) , BCNN-bội số chung nhỏ nhất. 

5. Nếu như  F (a)  n , thì n là số nguyên tố. 
6.  Nếu như  a  log 2 n, thì quay  về tầng 2 với a  là giá trị tiếp theo. Nếu 
như  a  log 2 n 1 , thì n là hợp số. 

Đánh giá độ phức tạp của thuật toán Konigin- Pomerans
k

   Nếu giả sử  n  N , n  1 , n là số lẻ,  n  1   q aj .Lúc này việc kiểm tra tính 
j

j 1

 log n 17 / 7 
 .Thật vậy với  n  N , n  1 , n là số 

 log log n 

nguyên tố của n có thể có chi phí là  O

lẻ,  n  1  F1 .R1 ,  ở  đây  UCLN ( F1 , R1 )  1 ,  và  biết  được  sự  phân  chia  F1   ra  thừa  số 
nguyên  tố.  Nếu  F1  n

1

4n

,  với   là  số  dương  không  đổi,  thì  việc  kiểm  tra  tính 

nguyên tố của n có thể chi phí là  O((log n) c ( ) ) (  c( )  là số nguyên dương không 
đổi, phụ thuộc vào   . 

          Chúng ta chứng minh tính đúng đắn của thuật toán và nhận đánh giá về độ 
phức tạp của thuật toán. 

9


Bảng liệt kê số nguyên tố thực hiện trên tầng 1 nhờ sự giúp đỡ của sàng 
Eratosfen với độ phức tạp  O(log 4 n) . 
Giá trị hiện tại của F(a) là ước số của n-1, cho nên bước 1 của tầng mất 
O (log n)  lệnh. 

Bước 2 của tầng tốn  O(log 3 n)  lệnh nhờ sự giúp đỡ của thuật toán hỗ trợ 
sau : 
 
N

Input:  a, n  N , n  1   pj -  tức  là  biết  được  sự  phân  tích  ra  thừa  số 
j

j 1

nguyên tố của số n-1.  
Output :là bậc của a (mod n) trong  Z n . 
Thuật toán tìm bậc của phần tử
 
1.  M  n  1, j : 0 . 
2.  j : j  1, M : M / pj , A : a M . 
j

3.(Chu  trình).  Đối  với  l  0,1,...,  j ,  kiểm  tra  xem  điều  kiên  sau  có 

thỏa mãn không 
A  1(mod n) . 

Nếu như đúng thì nhảy sang bước 4. Ngược lại 
p

M : Mp j ,  A : A j ; 

Và chuyển đến giá trị tiếp theo của l trong chu trình. 
4. Nếu như jTính đúng đắn của thuật toán tìm bậc của phần tử thì quá rõ ràng. Để nhận 
được đánh giá về độ phức tạp của thuật toán này ta chú ý rằng 
N

n  1   p j  2 N , 
j 1

10


từ đây  N  O(log n), p j  O(log n), j  O(log n) . Cho nên bên trong và bên ngoài chu 
trình thực  hiện  O(log n)  bước, và trong từng bước thực hiện  O(log n) lệnh. Tổng 
độ phức tạp là  O(log 3 n)  lệnh. 
 
2.1.2.Kiểm tra tính nguyên tố bằng thuật toán Miller
Cho  f : N  R * -  hàm  số  trên  tập  số  tự  nhiên,  với  f(n)Konhiagin-Pomerans chúng ta xem thuật toán Miller 
Input :Số tự nhiên lẻ n, n>1. 
Output : Flase nếu n là số nguyên, True nếu n là hợp số. 
Thuật toán Miller

1.  Kiểm  tra  điều  kiện  sau  có  thỏa  mãn  hay  không n  m s ,  với 
s, m  N , s  2 . Nếu như thỏa mãn, thì n là hợp số, và thuật toán dừng. 

2. Thực hiện các bước nhỏ (i)-(iii) đối với tất cả  a  f (n)  
(i)

Kiểm tra điều kiện a|n 

(ii)

Kiểm tra điều kiện  a n1  (mod n)  

(iii)

Kiểm  tra  xem  có  đúng  hay  không,  với  một  số  giá  trị  của  k, 
1  k  v2 (n  1) , 
n1
k

1  UCLN (a 2  1(mod n), n)  n  

Nếu  như  một  trong ba điều  kiện  (i)-(iii) thỏa  mãn  thì n là hợp  số,  và  thuật 
toán dừng. 
3. Nếu như chúng ta đi đến được bước này thì n là số nguyên tố. 
2.1.3. Kiểm tra tính nguyên tố của số bằng phép kiểm tra xác suất.
  Các  phép  kiểm  tra  tính  nguyên  tố  hay  dùng  nhất  là  các  thuật  toán  ngẫu 
nhiên.  Giả sử có  một  mệnh  đề  Q(p,a) nào  đó đúng  với mọi  số nguyên tố p và 
một số tự nhiên a <= p. Nếu n là một số tự nhiên lẻ và mệnh đề Q(n,a) đúng với 
một a<= n được lấy ngẫu nhiên, khi đó a có khả năng là một số nguyên tố. Ta 
đưa ra một thuật toán, kết luận rằng n là số nguyên tố. Nó là một thuật toán ngẫu 

11


nhiên hay thuật toán xác suất. Trong các thuật toán loại này, dùng để kiểm tra 
ngẫu nhiên không bao giờ kết luận một số nguyên tố là hợp số nhưng có thể kết 
luận  một  hợp  số  là  số  nguyên  tố.  Xác  suất  sai  của  phép  kiểm  tra  có  thể  giảm 
xuống  nhờ  việc  chọn  một  dãy  độc  lập  các  số  a nếu  với  mỗi  số  a xác  suất  để 
thuật toán kết luận một hợp số là số nguyên tố là nhỏ hơn một nửa thì sau k lần 
thử độc lập, xác suất sai là nhỏ hơn 2 k,độ tin cậy của thuật toán sẽ tăng lên theo 
k. 
Cấu trúc cơ bản của một phép kiểm tra ngẫu nhiên là: 
Input: n 
Output: Số n cần kiểm tra là hợp số hay là số nguyên 
Thuật toán kiểm tra xác suất
1: Chọn một số ngẫu nhiên a.  
2: Kiểm tra một hệ thức nào đó giữa số a và số n đã cho. Nếu hệ 
thức sai thì chắc chắn n là một hợp số (số a là "bằng chứng" chứng 
tỏ n là hợp số) và dừng thuật toán.  
3:  Lặp  lại  bước  1  cho  đến  khi  đạt  được  số  lần  đã  định  hoặc  gặp 
bước 2.  
Sau một loạt lần kiểm tra, nếu không tìm được bằng chứng chứng tỏ n là hợp 
số thì ta kết luận n là số nguyên tố. 
Các phép kiểm tra tính nguyên tố ngẫu nhiên là: Phép kiểm tra tính nguyên tố 
của Fermat (kiểm tra Fermat). Đây là phép thử heuristic, tuy nhiên ít người sử 
dụng phép thử này. Được sử dụng nhiều hơn là Kiểm tra Miller-Rabin và Kiểm 
tra Solovay-Strassen.Với mỗi hợp số n, ít nhất 3/4 (với kiểm tra Miller-Rabin) 
hoặc 1/2 (Với kiểm tra Solovay-Strassen) các số a là bằng chứng chứng tỏ n là 
hợp số). 
2.1.4. Kiểm tra trên cơ sở định luật nhỏ của Fermat
Phương pháp này dựa trên định luật nhỏ của Fermat: Nếu như n là số nguyên 

tố thì bất kỳ số  a  Z thỏa mãn phương trình sau 

12


(1)  a n  a(mod n)  
Nếu như  UCLN (a, n)  1 , thì  
(2)  a n 1  1(mod n) . 
Cho nên để kiểm tra tính nguyên tố của n, chúng ta chọn một số bất kỳ  a  Z  
và kiểm tra xem có thỏa mãn định lý của Fermat hay không? Nếu như định lý 
Fermat không thỏa với một giá trị a nào đó thì n là hợp số. Nếu thỏa mãn, thì 
chúng ta cũng không thể kết luận rằng n là số nguyên tố, bởi nó chỉ đúng trong 
điều kiện cần. Vì vẫn tồn tại n là hợp số, thì đối với bất kỳ số  a  Z , thì ta vẫn có 
được đằng thức  a n  a(mod n) , số này còn được gọi là số giả nguyên tố. 
Ví dụ, chúng ta xem số 561=3.11.17. Chúng ta chứng số này là số giả nguyên 
tố. Đồng dư thức  a 561  a(mod 561) sẽ tương đương với hệ 
a 561  a (mod 3) , a 561  a (mod11) , a 561  a (mod17) . Nếu 3|a, thì  a 561  a  0(mod 3) . Nếu 

như 3 không là ước của a, thì  a 2  1(mod 3) , từ đây ta có  a 560  1(mod 3) , hay 
a 561  a (mod 3) . Tương tự kiểm tra đối với hai số 11 và 17. 

Như vậy việc kiểm số nguyên tố theo Fermat là có khuyết điểm. 
Ta có thể nêu ra các bước kiểm tra tính nguyên tố như sau: 
Input : Chọn ngẫu nhiên a tập  1,2,..., n  1 
Output: Số n cần kiểm tra là hợp số hay là số nguyên. 
Thuật toán kiểm tra của Fermat
1:    Kiểm tra điều kiện UCLN(a,n)=1 
2:   Nếu như điều kiện trên không thỏa mãn thì n là hợp số 
3:   Kiểm tra đẳng thức (2) 
4:    Nếu như đẳng thức (2) không thỏa mãn thì trả lời n là hợp số 

5:   Nếu như đẳng thức đúng thì trả lời là chưa biết, nhưng có thể kiểm tra 
lại một số lần với các a khác nhau. 
Giải thuật Fermat kiểm tra tính nguyên tố của số

13


Input: n: giá trị để kiểm tra tính nguyên tố; k: tham số tham gia vào quá trình 
kiểm tra . 
Output: Số n cần kiểm tra là hợp số, hay là nguyên tố xác suất.  
Begin 
repeat k times:  
lấy a ngẫu nhiên trong [1, n   1]  
if an   1 mod n ≠ 1 then  
return hợp số  
return nguyên tố xác suất  
End. 
Khi dùng thuật toán tính nhanh luỹ thừa theo mođun, thời gian thi hành của 
thuật toán là O(k × log3n), ở đó k là số lần kiểm tra với mỗi số a ngẫu nhiên, và 
n là giá trị ta muốn kiểm tra. Và từ việc kiểm tra này dẫn ta đến phần sau. 
Cho  n>1  là  số  tự  nhiên  lẻ,  n  1  22.d ,  ở  đây  d  là  số  lẻ.  Số  n  gọi  là  số  giả 
nguyên tố  
Chặt chẽ trong cơ sở a,  a  N , nếu như  UCLN (a, n)  1  hoặc  a d  1(mod n) , hoặc                 
r

a d .2  1(mod n) , với  0  r  s . 
s

Vậy cho  nên nếu n là số  nguyên tố, thì  a n 1  1(mod n) , tức là  a 2 d  1(mod n) . 
Từ đây ta có  a 2

như  a 2

s 1

d

s 1

d

 1(mod n) . Nếu như  a 2

s 1

d

 1(mod n) , thì chúng ta dừng, nếu 

 1(mod n) , thì chúng ta lại khai căn cho đến khi tìm được  a d  hay căn đó 

đồng dư với -1. 
Để kiểm tra tính nguyên tố của các số lẻ n,  7  n  25.109 , ta dùng quá trình 
như sau: 
Bước 1: Kiểm tra tính chặt chẽ giả nguyên tố của n trong cơ sở 2,3,5,7. Nếu 
n không là chặt chẽ giả nguyên tố một trong các cơ sở đó thì n là hợp số. 
Bước 2: Nếu n = 3215031751, thì n là hợp số, ngược lại n là số nguyên tố. 

14



Như vậy chúng ta thấy việc kiểm tra trên cơ sở tính chặt chẽ giả nguyên tố là 
hiệu  quả  đối  với  việc  tìm  số  hợp số,  thế nhưng  cách  này  cũng  chỉ  đúng trong 
một điều kiện cần thiết.  
 
2.1.5. Kiểm tra bằng Miller-Rabin 
Kiểm tra Miller-Rabin là một thuật toán xác suất để kiểm tra tính nguyên tố. 
Nó được đề  xuất đầu  tiên bởi Gary  L.  Miller như  một  thuật  toán tất định, dựa 
trên giả thiết Riemann tổng quát; Michael O. Rabin đã sửa chữa nó thành một 
thuật toán xác suất. 
    Khi  sử  dụng  kiểm  tra  Miller-Rabin  chúng  ta  căn  cứ  vào  một  mệnh  đề 
Q(p,a)đúng với các số nguyên tố p và mọi số tự nhiên  a  A  N và kiểm tra xem 
chúng  có  đúng với  số  n  muốn  kiểm  tra  và  một  số  a  A được  chọn ngẫu nhiên 
hay không? Nếu mệnh đề Q(n,a) không đúng, tất yếu n không phải là số nguyên 
tố, còn nếu Q(n,a) đúng, số n có thể là số nguyên tố với một xác suất nào đó. 
Khi tăng số lần thử, xác suất để n là số nguyên tố tăng lên. 
Giải thuật kiểm tra Miller-Rabin
Input : Số tự nhiên lẻ n. 
Output : FALSE nếu n là hợp số, nếu không TRUE 
Begin
1. Phân tích n - 1 =  2 s  m  trong đó  s  1  và m là số tự nhiên lẻ  
2. Chọn ngẫu nhiên số tự nhiên a   {2,...,n-1}.  
3. Đặt b = am(mod n)  
4. Nếu  b  1(mod n)  thì trả về TRUE. Kết thúc.  
5. Cho k chạy từ 0 đến s-1:  
a. Nếu b  1(mod n)  thì trả về TRUE. Kết thúc.  
b. Thay b:=b2(mod n).  
6. Trả lời FALSE.  
           End. 

15



Chúng ta xem tính chặt chẽ của thuật giải trên. Bây giờ chúng ta xem, nếu 
như thuật toán trả lời FALSE mà trong khi đó n là số nguyên tố. Vì n là hợp số 
nên ta có  a m  1(mod n) . Bây giờ xét dãy các giá trị b được kiểm tra trong bước 2 
của thuật toán. Vì b được bình phương qua bước 5, nên ta kiểm tra các giá trị 
a m , a 2 m ,..., a 2

s 1

m

. Vì kết quả thuật giải là FALSE nên ta cũng có: 

i

a 2 m  1(mod n)  

Với  0  i  s  1  
Theo định lý Fermat ta có 
a2

s

m

 1(mod n)  

Khi  đó  a 2
a2


s 1

m

có a 2

s 1

m

  là  căn  bậc  2  của  1  modulo  n,  theo  bổ  đề  ta  có  hoặc 

 1(mod n)   hoặc a 2

s 1

m

s 1

m

 1(mod n) , nên  a 2

 1(mod n) .  Mà  theo  giả  thuyết  chứng  minh  ta 
s 1

m


 1(mod n) . Và ta có  a 2

s2

m

 là căn bậc 2 của 1. Bằng 

cách tương tự: 
a2

s 1

m

 1(mod n)  

Và lặp lại lập luận trên, cuối cùng ta có 
a m  1(mod n)  

Điều này là mâu thuẫn. 
Xác suất trả lời sai:
Theo Fermat nếu n là hợp số dương lẻ thì trong các số a {2,..,n-1}tồn tại 
không quá 

n 1
cơ sở a để n là số giả nguyên tố mạnh Fermat[F. Sarrus vào năm
4

[[1820]] đã tìm thấy 341 = 11×31 là số giả nguyên tố đầu tiên,với cơ sở 2].

Gọi A là biến cố "Số n là hợp số". B là biến cố "Kiểm tra Miller-Rabin trả lời 
n là số nguyên tố". Khi đó xác suất sai của kiểm tra này là xác suất để số n là 
hợp số  trong khi  thuật toán  cho câu trả lời TRUE,  nghĩa là xác  suất điều kiện 
P(A|B).  

16


×