Tải bản đầy đủ (.pdf) (58 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 (1.32 MB, 58 trang )

..

THÁI NGUYÊN - 2016
ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
_____________

______________

TẠ THỊ HẰNG

SỐ NGUYÊN TỐ VÀ ỨNG DỤNG TRONG PHƯƠNG PHÁP
CHỨNG MINH KHÔNG TIẾT LỘ THƠNG TIN
Chun ngành: Khoa học máy tính
Mã số: 60 48 0101

LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH
Người hướng dẫn khoa học: TS. Nguyễn Thị Hồng Minh

THÁI NGUYÊN - 2016

i
Số hóa bởi Trung tâm Học liệu – ĐHTN




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 đã
hồ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.

ii
Số hóa bởi Trung tâm Học liệu – ĐHTN




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à hồ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 hồ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 q 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 q 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
iii
Số hóa bởi Trung tâm Học liệu – ĐHTN




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 tố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

iv
Số hóa bởi Trung tâm Học liệu – ĐHTN




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

v
Số hóa bởi Trung tâm Học liệu – ĐHTN




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 xun và ngày
phổ biến hơn. Chính vì vậy mà việc bảo mật, đảm bảo an tồ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 tồ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 tồ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 ln đ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.
vi
Số hóa bởi Trung tâm Học liệu – ĐHTN





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 tố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ố ngun 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 tốn kiểm tra số ngun 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 tố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ả q trình bỏ lá phiếu điện
tử.

vii
Số hóa bởi Trung tâm Học liệu – ĐHTN




1
Số hóa bởi Trung tâm Học liệu – ĐHTN





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
Nếu d không nguyên tố

1.

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
(a,p) = p


(a p)

(a,p) = 1

(a p)

N; a

0. Khi đó

 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ố ngun 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à tố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à tốn
học Eratosthenes, dùng phương pháp này có thể tìm ra các số ngun 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à tố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ố ngun 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ố ngun tố lớn nhất mà lồ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ố ngun 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ố ngun 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ố ngun 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 tố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(pºmp - 1º1(mod p) Vì vậy Mq chia hết cho p.


1)/2

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
tố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 tố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ố ngun 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 p 212 ... p m1m

a n  p1 m1 p 2 m 2 ... p m 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ố ngun tố
đó ra thừa số.
Nội dung chính chương giúp hiểu được số ngun tố và mơ hình hóa lập kế
hoạch giải quyết các bài tố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 tố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ố ngun 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ố ngun tố.
Thuật tố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 tốn với thời
gian lớn. Có thể làm giảm bớt thời gian tính tốn trong thuật tố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à ngun 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
vịng lặp đến

n , vậy chúng ta chỉ cần thực hiệ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 tố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 tố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 hồ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
ngun tố của n có thể có chi phí là O
 log log n


 .Thật vậy với n  N , n  1 , n là số



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



nguyên tố. Nếu F1  n 4 n , với  là số dương khơng đổi, thì việc kiểm tra tính
ngun 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 tố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
M : Mp j , A : A j ;
p


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 tố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 ngồ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

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

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
tố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 ngun tố hay dùng nhất là các thuật tố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) an  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 a561  a(mod 561) sẽ tương đương với hệ
a561  a(mod 3) , a561  a(mod 11) , a561  a(mod 17) . Nếu 3|a, thì a561  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ó a560  1(mod 3) , hay
a561  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 tốn tính nhanh luỹ thừa theo mođun, thời gian thi hành của
thuật tố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
ad .2  1(mod n) , với 0  r  s .
r

Vậy cho nên nếu n là số nguyên tố, thì a n 1  1(mod n) , tức là a2 d  1(mod n) .
s

Từ đây ta có a2
như a2

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 ngun 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 tố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ố ngun
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 tố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 2m ,..., a 2

s 1

m


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

a 2 m  1(mod n)
i

Với 0  i  s 1
Theo định lý Fermat ta có
a 2 m  1(mod n)
s

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

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

m

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

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


Theo định lý trên như vậy, nếu n là hợp số thì khả năng kiểm tra này trả lời
TRUE xảy ra với xác suất không vượt quá

1
1
, nghĩa là P(B|A)  . Tuy nhiên để
4
4


tính xác suất sai của kiểm tra Miller-Rbin cần tính xác suất diều kiện P(A|B).
Dựa trên định lý về ước lượng số các số nguyên tố ta đưa ra ước lượng
P( A)  1 

2
ln n  2

ln n
ln n

Theo định lý Bayes trong lý thuyết xác suất ta có cơng thức để tính xác suất
sai của kiểm tra Miller-Rabin là:
P( A | B) 

P(B | A )  P( A)
P( B | A)  P( A)

P( B)
P( B | A)  P( A)  P( B | A)  P( A)

1
4

Trong công thức này P(A) đã biết ở trên, P(B|A)  , còn P( B | A)  1 vì khi n
là số nguyên tố thì chắc chắn mệnh đề Q(n,a) là đúng và P( A)  1  P( A) 

2
.
ln n


Từ đây ta có
P( A | B) 

P( B | A)  (ln n  2)
P( B | A)  (ln n  2)  2

Kiểm tra Miller-Rabin lặp:
Theo cơng thức tính xác suất sai trên đây, với n lớn (cỡ 130 chữ số thập
phân), nếu thực hiện phép thử Miller-Rabin chỉ một lần, xác suất sai là khá lớn,
tới trên 90%. Để giảm xác suất sai, ta lặp lại phép thử k lần với k số ngẫu nhiên
a khác nhau, nếu n vượt qua 50 lần thử thì P(B|A) 

1
, khi thay vào công thức
4k

với 50 lần thử nếu cả 50 lần, phép thử đều "dương tính" thì xác suất sai giảm
xưống chỉ cịn là một số rất nhỏ khơng vượt q 9 10 29 .
2.1.6. Thuật toán kiểm tra số nguyên tố của Solovay – Stransen
Theo Euler là mệnh đề Q(p,a). Khi đó Q(p,a) đúng với mọi số nguyên tố p và
mọi số tự nhiên a, 1  a  p . Thay số nguyên tố p bằng số lẻ n ta định nghĩa: Hợp
số n được gọi là số giả nguyên tố Euler cơ sở a(1  a  n ) nếu:
17


×