Tải bản đầy đủ (.doc) (73 trang)

đồ án tốt nghiệp hệ mật khóa công khai rsa (rivets - shamir - adleman)

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 (352.64 KB, 73 trang )

Website: Email : Tel (: 0918.775.368
Lời nói đầu
Bài toán phân tích số nguyên ra thừa số nguyên tố đã đợc ra đời từ rất lâu
và đã có rất nhiều nhà toán học trên thế giới nghiên cứu và giải quyết vấn đề về
nó. Ngoài ý nghĩa lý thuyết của bản thân bài toán thì ngời ta còn phát hiện ra rất
nhiều ý nghĩa thực tiễn đặc biệt là trong mật mã.
Thứ nhất nó là cơ sở cho sự ra đời của một hệ mật khoá công khai nổi
tiếng ra đời trong năm 1978, đó là hệ mật RSA của Revert - Shamir - Adlemal.
Hệ mật này mà độ mật của nó dựa vào tính khó của việc phân tích số N=pq (p, q
nguyên tố ) ra thừa số.
Tiếp đến trong những việc thiết kế nên các bộ tạo dãy giả ngẫu nhiên một
trong những nguyên liệu của nó là các đa thức nguyên thuỷ mà để tạo đợc các đa
thức nguyên thuỷ bậc m thì điều đầu tiên phải giải quyết là phân tích hoàn toàn
với 2
m
-1 ra thừa số nguyên tố.
Để giải quyết vấn đề đợc đặt ra trong đồ án này, chúng tôi đa ra một số cơ
sở lý thuyết.
Chơng 1 sẽ trình bầy về các số Mersenne. Các số có dạng M
q
=2
q
-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.
Chơng 2 xem xét loại bài toán quen thuộc hơn đó là bài toán phân tích số
nguyên ra thừa số. Sự đóng góp có tính khoa học của chúng tôi thề hiện bởi việc
trình bày các thuật toán về phân tích số nguyên tố theo cách hiểu của mình.
Chơng 3 là phần cơ bản của đề án, trong đó trình bày các t tởng của thuật toán
phân tích ra thừa số nguyên tố của những số nguyên lớn. Tiếp theo trong chơng
này trình bày các cài đặt cụ thể cho những thuật toán liên quan đến việc phân
tích ra thừa số nguyên tố, ví dụ nh các phép : +, -, *, / và luỹ thừa các số lớn.


Chúng tôi còn đặc biệt lu ý tới việc cài đặt thuật toán Pollard thứ nhất một thuật
toán rất hiêụ quả trong việc phân tích những hợp số lớn.
Một vấn đề không thể không nói trớc là những vấn đề đợc hiểu thấu đáo sẽ
đợc chúng tôi trình bày chi tiết ở mức độ thuật toán khả thi trong việc lập trình,
còn một số kết quả cần đến những chuẩn bị toán học cao siêu thì chỉ đợc dẫn các
đánh giá tơng ứng về thời gian tính đủ rút ra các thông số cần thiết để xây dựng
Website: Email : Tel (: 0918.775.368
các tiêu trí. Chúng tôi nghĩ rằng chỉ có thể trình bày bản báo cáo này theo cách
nh vậy mới đảm bảo tính cân đối trong cấu trúc bởi vì để làm cho tờng minh dù
chỉ một trong những vấn đề đã né tránh trên chúng ta cũng phải cần đến hàng tập
tài liệu dầy, đấy là cha kể đến việc chúng ta có đủ kiến thức cần thiết đến mức để
có thể trình bày nó cho mọi ngời rõ hay không.
Website: Email : Tel (: 0918.775.368
Chơng i. Đặt vấn đề và ý nghĩa của bàI toán
Bài toán phân tích số nguyên ra thừa số nguyên tố đã đợc ra đời từ rất lâu
và đã cuốn hút nhiều bộ óc vĩ đại nhất trên thế giới để giải quyết vấn đề về nó.
Ngoài ý nghĩa lý thuyết của bản thân bài toán thì ngời ta còn phát hiện ra rất
nhiều ý nghĩa thực tiễn đặc biệt là trong mật mã.
Thứ nhất, nó là cơ sở cho sự ra đời của một hệ mật khoá công khai nổi
tiếng vào năm 1978, đó là hệ mật mã RSA ( RSA là từ viết tắt của ba ngời:
Rivets Shamir Adleman ). Hệ mật này có nội dung đề cập đến việc phân
tích số nguyên tố ngẫu nhiên lớn (chẳng hạn có 80 chữ số) ra thừa số. Một vấn
đề quan trọng là cần phải kiểm tra bao nhiêu số nguyên ngẫu nhiên (với kích th-
ớc xác định) cho tới khi tìm đợc một số nguyên tố. Một kết quả nỗi tiếng trong
lý thuyết số (đợc gọi là định lý số nguyên tố) phát biểu rằng: số các số nguyên tố
không lớn hơn N xấp xỉ bằng N/ln N. Bởi vậy, nếu p đợc chọn ngẫu nhiên thì xác
suất p là một số nguyên tố sẽ vào khoảng 1/ln p. Với một mođun 512 bít, ta có
1/ln p 1/77. Điều này có nghĩa là tính trung bình, cứ 177 số nguyên ngẫu nhiên
p với kích thớc tơng ứng sẽ có một số là số nguyên tố. Dĩ nhiên, nếu chỉ hạn chế
xét các số nguyên lẻ thì xác suất sẽ tăng gấp đôi tới khoảng 2/177). Bỡi vậy trên

thực tế, hoàn toàn có khả năng tạo đợc các nguyên tố đủ lớn và do đó về mặt
thực thể ta có thể thiết lập đợc một hệ mật RSA.
Tiếp đến trong những việc thiết kế nên các bộ tạo dãy giả ngẫu nhiên một
trong những nguyên liệu của nó là các đa thức nguyên thuỷ mà để tạo đợc các đa
thức nguyên thuỷ bậc m thì điều đầu tiên phải giải quyết là phân tích hoàn toàn
với 2
m
-1 ra thừa số nguyên tố. Để kiểm tra tính nguyên thuỷ của chúng bằng
cách dùng thuật toán xác suất Monte- Carlo thời gian đa thức, đây là thuật toán
nhanh (tức là một số nguyên n đợc kiểm tra trong thời đa thức theo log
2
n, là số
các bít trong biểu diện nhị phân của n). Tuy nhiên, vẫn có khả năng là thuật toán
cho rằng n là số nguyên tố trong khi thực tế n là hợp số. Bởi vậy, bằng cách thay
đổi thuật toán nhiều lần, có thể giảm xác suất sai số dới một mức ngỡng cho
phép.
Bản đồ án không đi sâu vào các phân tích của những ý nghĩa nêu trên mà
đã đặt nhiệm vụ chính là giải quyết bài toán phân tích số nguyên ra thừa số
nguyên tố nh là một việc làm trung gian của một ứng dụng thực tiễn cụ thể. Đã
có một khối lợng khổng lồ các tài liệu về các thuật toán phân tích thừa số và việc
nghiên cứu kỹ lỡng sẽ đòi hỏi phải có một cuốn sách dày trang hơn quyển sách
này. ở đây chỉ cố gắng đa ra một cái nhìn khái quát bao gồm việc thảo luận sơ l-
Website: Email : Tel (: 0918.775.368
ợc về các thuật toán phân tích thừa số tốt nhất hiện thời và cách sử dụng chúng
trong thực tế. Các thuật toán nổi tiếng khác (những thuật toán toán có trớc) bao
gồm thuật toán p+1 của Williams, phơng pháp và thuật toán p-1 của Pollard,
thuật toán liên phân số và dĩ nhiên cả những phép chia thử.
Website: Email : Tel (: 0918.775.368
Chơng iI. Số Mersenne và việc phân tích
2.1 Số Mersenne

Nếu một số có dạng 2
m
-1 là một số nguyên tố thì m=q là một số nguyên
tố. Không khó khăn lắm, có thể chứng minh đợc rằng nếu 2
m
-1 là luỹ thừa của
một số Prime Power thì nó phải là một số nguyên tố và do vậy m cũng là một số
nguyên tố.
Các số có dạng M
q
=2
q
-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 thời đại của Mersenne, ngời ta đã biết rằng một vài số Mersenne là
số chính phơng và một vài số khác là hợp số. Ví dụ, M
2
=3, M
3
=7, M
5
=31,
M
7
=127 là nguyên tố, trong khi M
11
=23*89.
Vào năm 1640 , Mersenne đã cho rằng M
q
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(những số nhỏ hơn 257) vào danh sách trên. Những số này cũng 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à:
Bài toán: Nếu q là một số nguyên tố đồng d modulo 4(q3(mod 4)) thì M
q
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ì
M
q
là hợp số.
Chứng minh: Cho n=2q+1 là một thừa số của M. Vì 2
2
#1 (mod n) nên 2
q
#1
(mod n), và 2
2q
-1=(2
q
+1)M
q
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ì p7(mod 8) nên (2/p)=1, do
vậy tồn tại m sao cho 2m

2
(mod p). Điều này chứng tỏ rằng 2
q
2
(p-1)/2
m
p-
1
1(mod p) Vì vậy M
q
chia hết cho p.
Website: Email : Tel (: 0918.775.368
Hơn nữa, nếu q>3 thì M
q
=2
q
-1>29+1=p, vì vậy M
q
là hợp số. Vì vậy nếu
q=11, 23, 83, 131, 179, 191, 239, 251, thì M
q
có các ớc tơng ứng là 23, 47, 167,
263, 350, 383, 479, 503. Cũng 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 M
q
chia hết cho n thì n

1 (mod 8) và n


1 (mod q)"
Chứng minh: Chỉ cần chỉ ra rằng mọi thừa số nguyên tố p của M
q
có dạng trên
là đủ.
Thật vậy, nếu p là ớc của Mq=2
q
-1 thì 2
q
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ì vậy:
122)
2
(
2/)1(

qkp
p
(mod p).
Do đó p1 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 dãy đệ qui do Lucas
(1878) và Lehmer (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ẻ, n3 thì M
n
=2
n
-17 (mod 12). Đồng thời, nếu N7 (mod 12) thì
ký hiệu Jacobi:

1)1)(
3
()
3
(
2/)1(
==
N
N
N
2.2. Phép thử nguyên tố cho các số Mersenne
Cho p=2,Q=-2 và xét các dãy Lucas kép (U
m
)
m

0
,(V
m
)
m

0
, có biệt gthức
D=12. N=M
n
là một số nguyên tố khi và chỉ khi V(N-1)/2 chia hết cho N.
Chứng minh: Cho N là một số nguyên tố.
Ta có:
V

2
(N+1)/2
=V
N+1
+2Q
(N-1)/2
=V
N-1
-4(-2)
(N-1)/2
V
N+1
-4(-2/N) V
N+1
+4(mod N)
Website: Email : Tel (: 0918.775.368
Vì (-2/N)=(-1/N)(2/N)=-1. Vì vậy chỉ cần chỉ ra rằng N7 (mod N). Theo
(IV.4): 2V
N-1
=V
N
V
1
+DU
N
U
1
=2V
N
+12U

N
; do vậy theo (IV.14) và (IV.13):
V
N+1
=V
N
+6V
N
2+6(12/N) 2-6-4(mod N). Ngợc lại, giả sử rằng V
(N+1)/2
chia hết
cho N. Thế thì theo (IV.2), V
N+1
chia hết cho N. Đồng thời, theo(IV.6):
V
2
(N+1).2
)=1 (gcd_ớc chung lớn nhất). Vì vậy gcd(N,2)=1, nên thu phép thử một
(Phần V), N là một số nguyên tố.
Để cho tính toán, ngời ta thay dẫy Lucas (V
m
)
m>=0
bằng dẫy (S
k
)
k>=1
đợc
định nghĩa nh sau:
S

0
=4; S
k+1
=S
2
k
-2;
Vì thế dẫy này sẽ khởi đầu bằng 4,14,194, và phép thử nguyên tố đợc
phát biểu lại nh sau:
M
n
=2
n
-1 là nguyên tố khi và chỉ khi M
n
là ớc của S
n-2
.
Chứng minh: S
0
=4=V
2
/2. Giả sử rằng S
k-1
=V
2k
/
1
2
2

k
;
thì S
k
=S
2
k-1
-2=
k
k
k
k
k
k
V
V
kV
2
2
2
22
2
2
2
2
2
2
2
2
1121

+++
==
+
. Theo phép thử này thì M
n
là nguyên
tố khi và chỉ khi M
n
là ớc của V
(Mn+1).2
=
2
2
2
2
2
1



=
n
SV
n
n
, hay tơng đơng M
n
là ớc
của S
n-2

. Tính lặp của các phép tính này đã làm cho phép thử trở nên phù hợp.
Bằng cách này, tất cả các ví dụ về các số nguyên tố Mersenne lớn đã đợc tìm ra.
Năm 1876 , Lucas đã tự mình tìm ra M
127
là nguyên tố và M
67
là hợp số. Sau đó
không lâu, Pervushin đã chỉ ra rằng M
61
cũng là nguyên tố. Cuối cùng, vào năm
1927 Lehmer chứng minh đợc M
257
cũng là hợp số. Chú ý rằng M
127
có 39 chữ số
và là số nguyên tố lớn nhất đợc biết tới trớc kỷ nguyên của máy tính.
Các số nguyên tố Mersenne với q<= 127 đợc tìm ra trớc khi có máy tính
điện tử. Năm 1951, Turing đã lần đầu tiên thử dùng một máy tính để tìm các số
nguyên tố Mersenne nhng bị thất bại. Năm 1952, Robinson đã tiến hành phép
thử của Lucas trên một máy SWAC. Ông đã tìm ra các số nguyên tố Mersenne :
M
521
, M
607
_những số đầu tiên tìm đợc bằng máy tính. Các số nguyên tố
M
1279
,M
2203
,M

2281
cũng đợc tìm ra trong cùng năm ấy. Số nguyên tố Mersenne lớn
nhất đã tìm đợc là M
21609
, nó có 65050 chữ số do Slowinski phát hiện năm 1985.
Số nguyên tố Mersenne đợc tìm ra cuối cùng là M
110503
do Colquitt và Welsch
Website: Email : Tel (: 0918.775.368
phát hiện năm 1988. Năm 1989, Bateman, Selfridge và Wagstaff đã đa ra một
phỏng đoán liên quan đến các số nguyên tố Mersenne:
Cho p là một số tự nhiên lẻ (không nhất thiết phải là nguyên tố). Nếu hai
trong các điều kiện sau đây thoả mãn thì điều kiện thứ 3 cũng thoả mãn:
a) p2
k
1 hoặc p=4
k
3
b) Mp là một số nguyên tố
c)
3
12 +p
là một số nguyên tố
Phỏng đoán này đã đợc kiểm chứng là đúng đối với mọi p<100.000.
Những số nguyên tố p<100.000 thoả mãn cả ba điều kiện là p=3, 5, 7, 13, 17, 19,
31, 61, 127. Có thể tin rằng những số này là các số nguyên tố duy nhất thoả mãn
cả ba điều kiện nói trên.
Cũng nh đối với các số Fermat, hiện còn có rất nhiều vấn đề mở về các số
Mersenne:
(1) Liệu có vô hạn các số nguyên tố Mersenne không?

(2) Liệu có vô hạn các số Mersenne là hợp số không?
Câu trả lời cho cả hai câu hỏi trên chắc là có
(3) Có phải mọi số Mersenne đều là không chính phơng không?
Website: Email : Tel (: 0918.775.368
Kỷ lục: Có 31 số nguyên tố Mersenne đã đợc biết. Dới đây là danh sách đầy đủ
của chúng cùng với tên ngời và năm tìm ra.
q Năm Ngời phát hiện
2
3
5
7
13
17
19
31
61
89
107
127
521
607
1279
2203
2281
3217
4253
4423
9689
9941
11213

19937
21701
23209
44497
86243
110503
132049
216091
1461
1588
1588
1750
1883
1911
1913
1876
1952
1952
1952
1952
1952
1957
1961
1961
1963
1963
1963
1971
1978
1979

1979
1982
1988
1983
1985
Anonymous
*
P.A.Cataldi
P.A.Cataldi
L.Euler
I.M.Pervushin
R.E.Powers
E.Fauquembergue
E.Lucas
R.M.Robinson
R.M.Robinson
R.M.Robinson
R.M.Robinson
R.M.Robinson
H.Riesel
A.Hurwitz
A.Hurwitz
D.B.Gillies
D.B.Gillies
D.B.Gillies
B.Tuckerman
L.C.Noll & L.Nickel
L.C. Noll
H.Nelson & D. Slowinski
D.Slowinski

W.N.Colquitt & L. Welsch, Jr.
D.Slowonski
D.Slowonski
See Dicksons History of the Theory of Numbers, Vol. I.p.6.
Website: Email : Tel (: 0918.775.368
Chơng iII. Một số thuật toán và phơng pháp phân
tích số
3.1 Thuật toán sàng Eratosthenes
Thuật toán phân tích số nguyên N đợc mô tả nh sau:
Thuật toán 3.1( sàng Eratosthenes )
(1) p=1.
(2) p=p+1.
(3) Tính r=N mod p.
Nếu r>0 quay về (2).
Ngợc lại p là ớc của N. Dừng chơng trình
Đây là thuật toán có tính phổ thông và mặc dù nh chúng ta đã biết là thuật
toán rất tồi vì thời gian tính của nó là O(
N
) nhng nếu N có ớc nhỏ thì việc áp
dụng thuật toán này lại rất hiệu quả. Hơn thế nữa, thuật toán này cũng có thể lấy
điểm xuất phát của bớc (1) là p=[
N
] và tiến hành bớc (2) là p=p-1 thì rõ ràng
nó cũng hiệu quả nếu ớc của N rất gần với.
3.2 Thuật toán sàng đồng d
Thuật toán 3.2:
Lấy ngẫu nhiên hai số a và b ngẫu nhiên

Z
*

N
.
Kiểm tra gcd((a-b) mod N, N) hoặc gcd((a+b) mod N, N)>1 là xác suất nh sau:
Nếu đúng thì gcd((a-b) mod N, N) hoặc gcd((a+b) mod N, N)>1 là ớc của N.
Dừng chơng trình.
Ngợc lại quay về (1).
Bây giờ chúng ta hãy tạm dừng để phân tích thuật toán dới góc độ xác suất
nh sau:
Cho p là ớc nguyên tố nhỏ nhất của N, thế thì cần có tối thiểu bao nhiêu
cặp a, b đợc xét đến xác suất { có ít nhất một cặp a, b chia hết cho p} > 0.5.
Website: Email : Tel (: 0918.775.368
Bài toán trên còn đợc gọi là bài toán trùng ngày sinh và số m tối thiểu
cần tìm trong bài toán sẽ là mCp với C là một hằng số tính đợc nào đó ( việc
giải chi tiết bài toán trên có thể xem trong [Riesel]). Nh vậy chúng ta có thể
thành công trong thuật toán với xác suất >0.5 sau không quá m bớc.
Hiển nhiên bằng cách duyệt dần thì thời gian tính của thuật toán của
chúng ta cũng chẳng khác gì thời gian tính của phép sàng. Trong [Pollard], tác
giả J. M. Pollard đã sử dụng một phơng pháp còn đợc gọi là phơng pháp p
nhằm chỉ cần thông qua
m
bớc có thể duyệt đợc m cặp khác nhau nh đã nêu
trong thuật toán. Việc thể hiện phơng pháp này có thể mô tả nh sau:
Chọn dãy giả ngẫu nhiên {x
i
mod N:i=1,2, } đợc xác định nh sau
x
i-1

(x
i

2
+a) mod N với a#0 và #-2 còn giá trị đầu x
0
tuỳ ý.
3.3 Thuật toán sàng bậc hai
Tử tởng chủ đạo của một loạt khá lớn các thuật toán phân tích số nh phơng
pháp đặc biệt của Euler, phơng pháp phân tích các dạng chính phơng của Danien
Shanks, phơng pháp khai triển liên phân số của Morrison và Brillhart, phơng
pháp sàng bậc hai của Pomerance là cố tìm đồng d thức x
2
=y
2
mod N sao cho
x#y mod N, còn kỹ thuật tìm cụ thể nh thế nào thì chính là nội dung riêng của
từng thuật toán.
Đối với thuật toán sàng bậc hai của Pomerance đợc thực hiện nh sau:
- Chọn k số nguyên tố đầu tiên và gọi là cơ sở phân tích.
- Chọn B là một số nào đó gọi là ngỡng tìm các thặng d bậc hai nhỏ.
- Tìm k+1 các thặng d bậc hai nhỏ hơn B và phân tích đợc hoàn toàn trong tập cơ
sở trong lớp các số dạng Q(x)((m+x)
2
-N mod N với k là số phần tử của cơ sở,
m=
N
còn x=0, 1, 2,
- Xây dựng đồng d thức x
2
y
2
mod N từ k+1 thặng d bậc hai tìm đợc trên.

Cơ sở của thuật toán chủ yếu dựa vào thứ nhất là khả năng tìm đợc k+1
thặng d bậc hai và tiếp đến là việc xây dựng đồng d thức x
2
y
2
mod N nh thế
nào.
Trớc hết chúng ta cùng xem xét đến vấn đề thứ hai.
Website: Email : Tel (: 0918.775.368
Giả sử thặng d bậc hai thứ i tìm đợc ở trên là r
i
=x
i
2
=q
1
1
.q
1
2
q

k
k
( q
j
là số
nguyên tố thứ j của B), ta đặt tơng ứng với véc tơ v
i
GF(2)

2
nh sau v
i
=(
1
mod 2,

2
mod 2, ,
k
mod 2). Chý ý rằng có thể có nhiều giá trị r
i
khác nhau đợc ứng
cùng với một véc tơ v nhng một cách hình thức ta có thể coi k+1 véc tơ khác
nhau thu từ việc ứng k+1 giá trị r có đợc ở trên.
Hiển nhiên trong không gian k chiều GF(2)
k
thì tập k+1 véc tơ v
i
(i=1,2, k+1) chắn chắn phụ thuộc tuyến tính, giả sử ta có tổ hợp tuyến tính đặc
trng cho sự phụ thuộc đó là:

+
=
=
1
1
k
i
ii

va

, với là véc tơ không và a
i
không đồng thời bằng không.
Khi đó

=1
1
1
)(
a
xQ
theo định nghĩa sẽ là x
2
mod N, mặt khác do điều kiện đặt ra ở
trên là Q(x
i
) phân tích đợc hoàn toàn trong tập cơ sở cùng với điều kiện

+
=
=
1
1
k
i
ii
va


tức là vế phải của tích

=1
1
1
)(
a
xQ
chứa toàn các số mũ chẵn đối với các
thừa số trong cơ sở do vậy nó cũng là một thặng d bậc hai y
2
nào đó. Nếu xy
mod N thì chúng ta sẽ thành công trong việc phân tích N với các thừa số tơng
ứng là gcd(xy, N). Ngời ta cũng chỉ ra rằng khả năng thành công xảy ra với xác
suất là
2
1
do vậy thời gian tính của thuật toán chủ yếu phụ thuộc tuyến tính
(thông thờng bằng phép khử Gauss).
Với việc tìm các thặng d bậc hai nhỏ thoạt nhọửn chúng ta nhận thấy rằng
do Q(x+rp

)[(m+x+rp


)
2
-N mod N{[(m+x)
2
-N]+rp


[2(m+x)+rp

]}mod
NQ(x)+rp

[2(m+x)+rp

] mod N nên:
Nếu p

là ớc của Q(x) thì nó cũng là ớc của Q(x+rp

) với mọi số nguyên r.
Từ kết quả trên chúng ta thấy rằng nếu tồn tại giá trị x theo yêu cầu Q(x)
phân tích hoàn toàn trong cơ sở và không quá B thì ta có thể tìm đợc nó chỉ cần
trong lân cận B của 0.
Ngoài ra một số kết quả (xem [Riesel]) khác cũng không kém phần quan trọng
đó là:
Website: Email : Tel (: 0918.775.368
Điều kiện cần và đủ để x sao cho p là ớc của Q(x) là kí hiệu Legendge
(N/p)=1.
Nh vậy không phải toàn bộ các số nguyên tố trong đều cần phải đợc biểu
diễn (đúng hơn là chỉ có khoảng một nửa số nguyên tố trong cơ sở là có mặt
trong biểu diễn của các Q(x)) do đó để thu đợc hệ phụ thuộc tuyến tính nêu trong
phân tích trên thì thờng chỉ cần số phơng trình khoảng già nửa số các nguyên tố
trong cơ sở là đủ.
Nếu p3 mod 4 thì giá trị xmN
(p+1)/4
mod p là các giá trị <p thoả mãn p

là ớc của Q(x). Nếu p1 mod 4 thì việc tìm các giá trị x tơng tự có thể bằng một
thuật toán gần đa thức.
Nếu x<p

thoả mãn p

là ớc của Q(x) và p

+1
không là ớc của Q(x) thì giá trị
y<p

+1
có p

+1
là ớc của Q(y) có thể tìm đợc là y=x+rp

với r là nghiệm của ph-
ơng trình đồng d bậc nhất sau
0)(2
)(
2
++
+
rmx
P
Nmx

mod p ( chú ý rằng ph-

ơng trình trên luôn luôn có duy nhất nghiệm).
Với hai kết quả trên rõ ràng chúng ta luôn tìm đợc toàn bộ giá trị x trong
một phạm vi B cho trớc nào đó mà với chúng Q(x) có ớc lẻ trong tập cơ sở phân
tích. Trờng hợp p=2 việc thu đợc kết quả na ná nh trên có phức tạp hơn, chúng
tôi không đủ tài liệu để mô tả tờng minh việc dò tìm đó ở đây.
Tóm lại quá trình tìm các thặng d bậc hai nhỏ có thể mô tả nh sau:
- Chọn một ngỡng B nào đó và sàng để tìm các giá trị x nhỏ nhất < B mà với
chúng p

là ớc của Q(x).
- Các thặng d bậc hai nhỏ Q(x)=R
2
=q

1
1
.q

2
2
q

k
k
, ở đây x
0
là giá trị nhỏ nhất để
q

1

1
.q

2
2
q

k
k
là ớc của Q(x) mà ta có thể phát hiện đợc ở bớc trên.
Tất cả các phân tích đợc nêu ở trên mặc dù cha đủ chặt chẽ cho sự đảm
bảo thành công của việc tìm các thặng d bậc hai nhỏ trong lớp Q(x) mà chỉ dừng
ở mức độ thể hiện một mô tả bớc tìm kiếm này sẽ đợc thông qua một quá trình
sàng theo cơ sở của những kết quả nêu trên nhằm loại bỏ các giá trị không thể
là ứng cử viên cho các thặng d bậc hai nhỏ. Một số tài liệu (xem [Dixon],
[Lenstra], ) đã phân tích về thời gian tính của thuật toán và số liệu khả quan
nhất về vấn đề này của Lenstra là:
Website: Email : Tel (: 0918.775.368
)(
2
1
)lnln))(ln0(1(
e
NN
O
+
với O(1) là một hàm tiến tới 0 khi N tiến tới .
3.4 Thuật toán Dixon và sàng bậc hai
Thuật toán Dixon đợc xây dựng trên ý tởng đó là: nếu tìm đợc x y (mod
n) sao cho x

2
y
2
(mod n) thì UCLN(x-y,n) là ớc không tầm thờng của n.
Phơng pháp này sử dụng cơ sở nhân tử là một tập b chứa các số nguyên tố
bé. Trớc tiên ta nhận đợc một vài số nguyên x sao cho tất cả các thừa số nguyên
tốcủa x
2
(mod n) nằm trong cơ sở b (cách thực hiện điều này sẽ đợc thảo luận
sau). ý tởng thực hiên ở đây là lấy tích của một vài giá trĩ sao cho mỗi số nguyên
tố trong cơ sở đợc sử dụng một số chẵn lần. Điều này dẫn đến một đồng d thức
dạng mong muốn x
2
y
2
(mod n) mà ta hy vọng sẽ đa đến việc phân tích n.
Ta sẽ minh hoạ bằng một ví dụ đã đợc dự tính kỹ lỡng.
Ví dụ :
Giả sử n=15770708441. Giả sử b = {2,3,5,7,11,13}. Xét ba đồng thức sau:
8340934156
2
3 ì 7 (mod n)
12044942944
2
1 ì 7 ì 13 (mod n)
2773700011
2
=2 ì 3 ì 13 (mod n)
Nếu lấy tích của ba đồng d thức trên:
(8340934156 ì 2044942944ì2773700011)

2
(2ì 3ì 7ì 13)
2
(mod n)
Rút gọn các biểu thức bên trong các dấu ngặc theo modulo n, ta có:
9503435785
2
546
2
(mod n)
Sau đó tính:
UCLN(9503435785-546, 15770708441)=115759
Website: Email : Tel (: 0918.775.368
Ta thấy 115759 là một thừa số của n.
Giả sử B = {p
1
, . . . .p
B
}là một cơ sở nhân tử. Giả sử c lớn hơn B một chút
(chẳng hạn C=B+10) và giả sử ta đã có C đồng d thức:
x
j
2
p
1

1j
ì p
2


2j
ì . . .ì p
B

Bj
(mod n)
với 1 j C. Với mỗi j xét véctor :
a
j
= (
1j
mod 2,
2j
mod 2, . . .,
Bj
mod 2) (Z
2
)
B
Nếu có thể tìm đợc một tập con các a
j
sao cho tổng theo modulo 2 là vector
(0,. . ., 0) thì tích của các x
j
tơng ứng sẽ sử dụng mỗi nhân tử trong B một số
chẵn lần.
Ta sẽ minh hoạ bằng cách trở lại ví dụ trên. Trong trờng hợp này nếu C < B,
vẫn tìm đợc sự phụ thuộc tuyến tính.
Ví dụ :(tiếp)
Cho 3 vector a

1
, a
2
, a
3
:
a
1
=(0, 1, 0, 1, 0, 0)
a
2
=(1, 0, 0, 1, 0, 1)
a
3
= (1, 1, 0, 0, 0, 1)
Dễ dàng thấy rằng:
a
1
+a
2
+ a
3
= (0, 0, 0, 0, 0, 0) mod 2
Đây là lý do cho thấy đồng d thức (thiết lập theo tích) sẽ phân tích thành công đ-
ợc n.
Nhận thấy rằng, bài toán tìm một tập con C vector a
1
, a
2
, . . ., a

C
sao cho
tổng theo modulo 2 là một vector toàn chứa số 0 chính là bài toán tìm sự phụ
thuộc tuyến tính (trên Z
2
) của các vector này. Với C > B, sự phụ thuộc tuyến tính
này nhất định phải tồn tại và ta có thể dễ dàng tìm đợc bằng phơng pháp loại trừ
Gaux. Lý do giải thích tại sao lấy C > B+1 là do không có gì bảo đảm để một
đồng d thức cho trớc bất kỳ sẽ tạo đợc phân tích n. Khoảng 50% thuật toán cho
Website: Email : Tel (: 0918.775.368
ra x y (mod n). Tuy nhiên nếu C > B+1 thì có thể nhận đợc một vài đồng d
thức nh vậy. (Nảy sinh từ các phụ thuộc tuyến tính khác của các a
j
). Hy vọng là
ít nhất một trong các đồng d thức kết quả sẽ dẫn đến việc phân tích n.
Vấn đề còn lại là phải làm thế nào để nhận đợc các số nguyên x
j
mà các
giá trị x
j
2
mod n có thể phân tích hoàn toàn trên cơ sở b. Một vài phơng pháp có
thể thực hiện đợc điều đó. Biện pháp sàng
bậc hai do Pomerance đa ra dùng các số nguyên dạng x
j
=j +
,j=1,2 Tên sàng bậc hai lấy từ thủ tục sàng (không mô tả ở đây) dùng để
xác định các x
j
phân tích đợc trên b.

ở đây dĩ nhiên là một sự thoả hiệp: nếu B = | B | là một số lớn thì thích hợp
hơn cả là nên phân tích số nguyên x
j
trên b. Tuy nhiên khi B càng lớn thì ta càng
phải gom nhiều đồng d thức hơn trớc khi có thể tìm đợc một quan hệ phụ thuộc.
3.5 Phơng pháp p-1: Thuật toán Pollard thứ nhất
Thuật toán kiểu p-1 là thuật toán phân tích số nguyên N dựa vào phân tích
của p-1 với p là một ớc nguyên tố của N. Thuật toán còn đợc gọi là thuật toán
phân tích thứ nhất của Pollard, đây là một thuật toán có tác dụng nếu ta biết đợc
các ớc nguyên tố của một thừa số p của N nói chung và đặc biệt nếu N có một
thừa số nguyên tố p mà p-1 chỉ gồm những ớc nguyên tố nhỏ thì thuật toán đợc
trình bày trong phần này sẽ có hiệu quả.
ý tởng của thuật toán là tìm một cách ngẫu nhiên số aZ
*
n
có bậc không
là ớc của p-1. Số a nếu tìm đợc hiển nhiên phải thoả mãn ba
p-1
mod N#1, điều
này có ý nghĩa N không là ớc của b-1. Mặt khác do p nguyên tố nên theo định lý
Fermat ta có b mod p(a
p-1
mod N) mod p=1 nh vậy b-1 0 mod p và do đó có
ngay p | gcd(b-1,N). Hai điều kéo theo p=gcd(b-1,N).
Một số vấn đề cha tờng minh trong việc thực hiện nói trên là:
[ ]
n
Website: Email : Tel (: 0918.775.368
Do p là số cha biết nên dấu hiệu nhận biết giá trị a cần tìm là a
p-1

mod N#1 cũng
cha xác định. Tất nhiên ở đây điều kiện nhận biết có thể đợc làm nhẹ bớt đó là
ta có thể thay số p-1 cha biết bằng số Q giả định có thể là chọn trớc và tính ba
Q
mod N, nếu N>gcd(b-1, N)>0 thì việc chọn của chúng ta đã thành công và có
p=gcd(b-1, N). Hiển nhiên việc giả định Q chỉ có nghĩa khi và chỉ khi p-1 là ớc
của Q, trong trờng hợp p-1 chỉ có các ớc nguyên tố nhỏ tức là p-1=
qq
N
k
q
N
q
k
loglog
1

1
.
Tất nhiên các số mũ trong khai triển của Q là quá d thừa do đó các lựa chọn tiếp
theo của chúng ta sẽ là cố giảm các số mũ này đến mức thấp nhất có thể, cách
làm cụ thể cho việc này sẽ đợc mô tả cụ thể trong thuật toán.
Vấn đề kế tiếp là việc tìm kiếm có khả thi hay không, nói một cách khác
chúng ta phải trả lời câu hỏi liệu có tồn tại hay không số a có bậc không là ớc
của p-1?. Trớc hết chúng ta giới hạn phạm vi số N cần đợc phân tích là N=pq
với p và q là các số nguyên tố khác nhau, khi này bậc cao nhất của các phần tử
trong Z
*
N
sẽ là (N)=1cm(p-1, q-1). Do p khác q nên chắc chắn hoặc p-1 hoặc q-

1 là ớc thực sự của (N) và câu hỏi đã đợc trả lời có. Đến đây mức độ khó hay
dễ của việc tìm đợc số a sẽ liên quan đến mật độ này nh sau: Mật độ nói trên sẽ
nghịch biến với gcd(p-1,q-1). Nh vậy nếu gcd(p-1,q-1) nhỏ thì việc tìm ra a sẽ
thuận lợi, ngợc lại trong trờng hợp khó khăn hơn (gcd(p-1,q-1) lớn) thì trong
phần 2.3 sau này chúng tôi sẽ chỉ ra một phơng pháp phân tích hiệu quả hơn.
Các bớc của thuật toán Pollard. (dùng để phân tích N có ớc p với p-1 chỉ
gồm các ớc nguyên tố trong k số nguyên tố đầu tiên).
(1) Q=
qq
N
k
q
N
q
k
loglog
1

1
, i=1,j=0.
(2) Lấy a ngẫu nhiên trong Z
*
N
, tính ba
Q
mod N.
(3) Xét đẳng thức b=1.
Nếu đúng chuyển sang (4).
Ngợc lại chuyển sang (6).
(4) Xét j<log

qi
N.
Nếu đúng thì j=i+1, Q=Q|qi, quay về (3).
Ngợc lại: chuyển sang (5).
Website: Email : Tel (: 0918.775.368
(5) Xét i<k.
Nếu đúng thì : i=i+1, j=0, nếu b#1 thì Q=Q.q
i
. Quay về (4).
Ngợc lại quay về (1).
(6) Xét gcd (b-1, N)>1.
Nếu đúng có ớc của n là gcd (b-1,N). Dừng chơng trình.
Ngợc lại quay về (4)
Chú ý: Thuật toán của Pollard mà chúng tôi trình bày ở trên giống bất cứ thuật
toán trình bày trong các tài liệu khác nh của [Riesel], [Stinson] tuy nhiên một
số chi tiết nh giá trị xuất phát Q ở các thuật toán khác đều lấy là Q=q
1
! q
k
!, tiếp
đến là mỗi giá trị a chỉ đợc xét đúng một lần với giá trị ba
Q
mod N, thậm chí
trong [Stinson] chỉ luông xét với a=2.
Thứ nhất ta có thể kiểm chứng đợc rằng nếu p-1 chỉ có các ớc trong k số
nguyên tố đầu tiên thì cha chắc p-1 đã là ớc của Q= q
1
! q
k
! trong khi đó giá trị

Q=
qq
N
k
q
N
q
k
loglog
1

1
mà chúng tôi lựa chọn chắc chắn đáp ứng đợc yêu cầu này. Chính
yếu tố cha đáp ứng mà các thuật toán khác sẽ gặp phải gcd(b-1, N)=1 ngay cả
khi b-1#0 đúng hơn là ngay cả khi a là phần tử có bậc không là ớc của p-1 trong
khi của thuật toán của chúng tôi với trờng hợp này chắc chắn sẽ thành công.
Tiếp đến trong thuật toán của chúng tôi, mỗi khi xét một giá trị a chúng
tôi vét toàn bộ khả năng về bậc của nó. Giá trị b#1 tìm đợc trong (2) đảm bảo
bậc của a không là ớc của p-1, mỗi giá trị b#1 tìm đợc trong các phần sau đó
thành công ở (6) cũng đảm bảo một kết luận tơng tự. Giá trị Q cuối cùng trong
trờng hợp không thành công của thuật toán chính là bậc của a và khi này Q|p-1.
3.6 Phơng pháp : Thuật toán Pollard thứ hai
Bớc tiến đáng kể nhất trong các thuật toán hiệu quả trong việc tìm các ớc
nhỏ là thuật toán dựa vào phơng pháp còn đợc gọi là thuật toán Pollard thứ hai.
Thời gian tính của thuật toán này chỉ còn là O (
p
) với p là ớc nguyên tố nhỏ
nhất của N. Nh vậy trong trờng hợp tồi nhất (p
N
) thì thời gian tính cũng chỉ


3
N
.
Website: Email : Tel (: 0918.775.368
ý tởng phơng pháp p của Pollard rất đơn giản nh sau: Tìm hai phần tử a và
b đồng d modulo p ( ab mod p) nhng không đồng d modulo N. Khi này p sẽ
là ớc của gcd(N,(ab ) mod N).
Thuật toán 2.3 (Thuật toán Pollard thứ hai)
(1) i=0
(2) i=i+1
(3) Xét gcd((x
2i
- x
i
)mod N,N)>1
- Nếu đúng ta có gcd((x
2i
- x
i
)mod N,N).Dừng chơng trình
- Ngợc lại quay về (2).
Bây giờ chúng ta phân tích thời gian tính của thuật toán.
Một điều dễ dàng nhận ra là:
x
2i
-x
i
(X
2

2i-1
+a)-(X
i-1
2
+a)X
2
2i-1
-X
2
i-1
(x
2i-1
-x
i-1
)(x
2i-1
+x
i-1
)
(x
2i-1
+x
i-1
)(x
2i-2
+x
i-2
) (x
i
+x

0
)(x
i
+x
0
)
Nh vậy tại bớc thứ i chúng ta đã xét đến i+1 cặp khác nhau và cũng dễ
dàng nhận ra rằng các cặp đợc xét trong mọi bớc là không giống nhau do đó hiển
nhiên với
p
bớc chúng ta đã có p cặp khác nhau đợc xét đến và nh đã phân tích
ở trên, thuật toán sẽ thành công với xác xuất >0.5.Nói một cách khác thuật toán
của Pollard đợc thực hiện trong (
p
) bớc.
Nhận xét
Với các thuật toán đơn giản đợc giới thiệu trong phần này chúng ta cùng
thống nhất đa ra yêu cầu sau đối với các module hợp số.
Điều kiện 2.4.Về ớc bé nhất của module hợp số N.
-p phải là một số lớn
- Các ớc phải có kích thớc xấp xỉ nhau.
- Các ớc không đợc xấp xỉ nhau về giá trị.
Website: Email : Tel (: 0918.775.368
Yêu cầu thứ nhất là đơng nhiên tuy vậy định lợng cho tiêu chuẩn lớn ở đây
cha đợc đặt ra.Yêu cầu thứ hai chính là bài toán phân tích về lớp khó nhất của
chúng, còn yêu cầu cuối cùng đợc coi là mội ví dụ chi việc tránh các trờng hợp
cá biệt. Điều kiện 2.4 đã loại bỏ tất cả các module không an toàn trớc tấn công
bởi các thuật toán đã nêu trong mục này.
3.7 Phơng pháp p1: Thuật toán Williams.
Để tiện tiếp thu phơng pháp p1 trớc hết chúng tôi xin điểm lại một số kết

quả chính yếu nhất liên quan đến dãy Lucas ( các định nghĩa liên quan và các
chứng minh của các kết quả đợc đa ra có thể tìm đọc trong [Riesel], [Kranakis]
hay một sách giáo khoa số học bất kỳ).
Định nghĩa 2.5. (Dãy Lucas)
Cho a, b là hai nghiệm của phơng trình x
2
-Px+Q=0 (*).
Kí hiệu U
m
=
ba
ba
mm


và V
m
=a
m
+b
m
(**).
Các dãy {U
m
}, {V
m
} m=0,1,2, gọi là dãy Lucas của phơng trình (*). Ngợc lại
phơng trình (*) gọi là phơng trình đặc trng của dãy (**)
Tính chất 3.6. Nếu i là ớc của j thì U
i

là ớc của U
j

Tính chất 3.7. (Công thức tính các phần tử của dãy Lucas).
Ta có U
0
=0, U
1
=1, V
0
=2, V
1
=P và m>1 thì U
m
và V
m
đợc tính theo công
thức sau:

01
00
11
11
















=






++
VU
VU
QP
VU
VU
m
mm
mm
Định lý 3.8. { U
m
} là dãy Lucas của phơng trình (*) với P
2
-4Q=d
2

có không
có ớc chính phơng (hay còn gọi là bình phơng tự do).
Nếu p không là ớc của Q thì
0










P
p
mod p ở đây






P

là kí hiệu Legendre
Nếu nh cơ sở của phơng pháp p-1 là dựa vào kết quả của định lý Fermat
thì với kết quả của Lucas ( định lý 2.4) chúng ta cũng phát triển thành một phơng
pháp phân tích số nguyên một cách tơng tự nhng dựa vào kết quả phân tích của
Website: Email : Tel (: 0918.775.368

p1 với p là ớc mguyên tố của N. Chúng ta có thể hinh dung về thuật toán nh
sau:
Thuật toán 3.9. (Thuật toán p1 của Williams).
(1). Q=
q
N
qk
N
k
log
log
1

2
2
, i=1, j=0.
(2). Lấy không có ớc chính phơng ngẫu nhiên trong Z
*
N
, tìm R, S nguyên sao
cho R
2
-4S=d
2
với d#0 nào đó. Xét gcd(Q.N)>1.
Nếu đúng ta có ớc của N là gcd(Q.N). Dừng chơng trình.
Ngợc lại tính bU
Q
mod N (phần tử thứ Q trong dãy Lucas của phơng trình x
2

-
Rx+S=0).
(3). Xét đẳng thức b=0.
Nếu đúng chuyển sang (4).
Ngợc lại chuyển sang (6).
(4). Xét j<log
qi
N.
Nếu đúng j=j+1, j=0, nếu b#1 thì Q=Q.qi. Quay về (3).
Ngợc lại: chuyển sang (5).
(5). Xét i<k.
Nếu đúng thì: i=i+1, j=0, nếu b#1 thì Q=Q.qi. Quay về (4).
Ngợc lại quay về (1).
(6). Xét gcd(b, N)>1.
- Nếu đúng có ớc của n là gcd(b,N). Dừng chơng trình.
Ngợc lại quay về (4)
Phân tích thuật toán
Trớc hết ta thấy rằng các bớc và việc làm trong mỗi bớc của thuật toan gần
nh giống hệt với thuật toán của Pollard nhằm để vét hết các khả năng p+1 (trong
trờng hợp






P

=-1) và p-1 (trong trờng hợp







P

=1) là ớc của Q. Việc xét đẳng
thức b=0 trong mỗi bớc, nếu sai nhằm đảm bảo cho ta b không là bội của N và
Website: Email : Tel (: 0918.775.368
nếu p+1 hoặc p-1 là ớc của Q thì theo các kết quả 2.7 và 2.9 cho ta b là bội của p
và nh vậy gcd(b, N) là ớc thực sự của N.
Thuật toán trên rõ ràng có hiệu quả trong cả hai trờng hợp p+1 hoặc p-1
chỉ gồm các ớc nguyên tố nhỏ, tuy nhiên căn cứ vào công thức tính các giá trị
của dãy Lucas ta thấy ngay rằng hệ số nhân của thuật toán này là lớn hơn nhiều
so với thuật toán của Pollard trong trờng hợp cùng phân tích đợc N với ớc p của
nó có p-1 chỉ gồm những ớc nhỏ boỉ vì thay cho việc tính một luỹ thừa thông th-
ờng thì thuật toán của Lucas phải tính một luỹ thừa của một ma trận.
3.8 Phơng pháp của Pollard
Trong phơng pháp này còn đợc gọi là phơng pháp phân tích ra thừa số thứ
hai của Pollard. Nó dựa trên một ý tởng thống kê và đã đợc R.Brent cải tiến.
Các ý tởng liên quan đến việc tìm ra ớc số p của số N đợc mô tả nh sau:
(1) Xây dựng một dãy số nguyên {x
i
} hồi qui tuần hoàn (mod p).
(2) Tìm ra chu kỳ, tức là tìm i và j, sao cho x
i
=x
j
(mod p)

(3) Nhận dạng thừa số p của N.
Bớc 1 yêu cầu tìm ra một dãy tuần hoàn (mod m), trong đó m là một số
nguyên tuỳ ý, là rất dễ thoả mãn. Xét một dãy bất kỳ đợc định nghĩa đẹ qui theo
kiểu sau ( s đợc giá thiết là một hằng số, tức là độc lập với i, và F là một đa
thức):
x
i
F(x
i-1
,x
i-2
, ,x
i-s
) (mod m)
với các giá trị đã cho đối với x
1
, x
2
, ,x
s
. Sau đó x
s+1
, x
s+2
, có thể đợc tính lần lợt
theo công thức đã cho. Tuy nhiên, vì tất cả các x
k
, đợc cho theo modulo m, nên
mỗi x
k

chỉ có thể nhận một trong m giá trị khác nhau (0,1, ,m-1) và vì vậy chỉ
có nhiều nhất là m
s
dãy phân biệt x
i-1
,x
i-2
, ,x
i-s
của s số x
k
liên tiếp. Nh vậy sau
cùng lắm là m
s
+1 bớc đệ qui, hai dãy giống hệt nhau gồm s số liên tiếp phải xuất
hiện. Chúng ta gọi hai dãy này là x
i-1
,x
i-2
, ,x
i-s
, và x
j-1
, x
j-2
, ,x
k-s
, nên rõ ràng là,
nếu các dãy của các giá trị này trùng khớp nhau đối với hai giá trị khác nhau của
k, thì các giá trị x

i
và x
j
, đợc tính từ các giá trị đằng trớc theo cùng một cách sẽ
giống nhau.
Vì vậy, chúng ta có hai dẫy mới gồm s giá trị:
Website: Email : Tel (: 0918.775.368
x
i
, x
i-1
, ,x
i-s+1
và x
j
, x
j-1
, , x
j-s+1
với tính chất là x
i
=x
j
, x
i-1
=x
j-1
, ,x
i-s+1
. Từ đây dẫn

đến kết quả là x
i+1
đồng nhất với x
j+1
và cứ thế tiếp tục.
Nhng điều này có nghĩa là dẫn {x
i
} là tuần hoàn lặp lại có thể chỉ trừ ra
một phần khi bắt đầu dãy. Phần này đợc gọi là không có chu kỳ.
Chúng ta xét một ví dụ để cho dễ hiểu: Dẫy Finabocci (mod 11). Dãy này
đợc định nghĩa nh sau:
x
i
x
i-1
+x
i-2
(mod 11) với x
1
x
2
1.
Chúng ta nhận đợc liên tiếp các phần tử sau đây của dẫy:
1, 1, 2, 3, 5, 8, 2, 10, 1, 0, 1, 1, 2, 3, (mod 11)
Sau 10 phần tử dẫy này lặp lại. Đây là dẫy tuần hoàn ngay từ bắt đầu.
Bây giờ sang bớc 2 của thuật toán : tìm chu kỳ. Để xác định nó trong trờng
hợp tổng quát, ta cần phải tìm ra vị trí mà tại đó một dẫy các phần tử liên tiếp bắt
đầu lặp lại nếu chu kỳ dài. Đây là một việc cực khó và rất tốn công sức. Tuy
nhiên, trong trờng hợp đơn giản nhất khi mà x
i

đợc định nghĩa chỉ qua x
i-1

không qua bất kỳ một x
k
nào khác thì dẫy này đợc lặp lại theo chu kỳ ngay khi
một phần tử x
j
bất kỳ bằng một phần tử trớc nó. Vì vậy, trờng hợp này chỉ yêu
cầu một phép so từng giá trị x
j
mới với các x
k
đứng trớc để tìm ra chu kỳ. Tuy
vậy, nếu chu kỳ rất dài (một vài triệu phần tử ) thì rất khó có thể ghi lại tất cả các
phần tử và so sánh chúng từng cặp. Thay vào đó, ta có thể sử dụng kỹ thuật sau:
Giả sử dẫy tuần hoàn {x
i
} (mod m) với phần không tuần hoàn có độ dài a
và một chu kỳ có độ dài l. Thế thì, chu kỳ này cuối cùng sẽ đợc phát hiện ra
bằng phép thử: x
2i
x
i
(mod m)?
Chứng minh: Trớc hết, nếu x
2i
x
i
(mod m) thì dẫy này rõ ràng là tuần hoàn từ x

2i
trở đi, thậm chí có thể còn trớc nữa. Ngợc lại, đối với một dẫy tuần hoàn bất kỳ
với độ dài chu kỳ l, x
j
x
i
(mod m) đối với j=i+k |, k=1,2,3, và mọi i>a (tức là
đối với tất cả các phần tử sau phần không tuần hoàn) rút cuộc sẽ có một i với
x
2i
x
i
(mod m). Giá trị đầu tiên nh vậy của i là i=(l+1)[a/l]. Nếu a>b, thì cách tìm
này sẽ phát hiện ra chu kỳ chỉ sau một vài chu kỳ đầy đủ đã bỏ qua, nhng cuối
cùng thế nào cũng tìm đợc chu kỳ của dẫy.
Website: Email : Tel (: 0918.775.368
Bây giờ làm thế nào để có thể so sánh x
2i
với các x
i
mà không cần phải lu
giữ tất cả các x
i
? Đơn giản ta chỉ cần tính lại các x
i
song song với các x
2i
. Giả sử
x
i+1

=f(x
i
). Thuật toán tìm chu kỳ có thể mô tả bằng đoạn mã chơng trình sau:
x:=x
1
; y:=f(x
1
);
WHILE x<>y DO
BEGIN
x:=f(x); y:=f(y); y:=f(x);
END;
Khi thực hiện đợc đến đây có nghĩa là x=y và chu kỳ đã đợc chạy qua.
Cuối cùng, ta xét các yêu cầu thứ ba và cuối cùng của phơng pháp p của
Pollard. Nếu chúng ta có một dãy {x
i
} tuần hoàn (mod p) thì bằng cách nào
chúng ta có thể tìm đợc ớc p cha biết của N? cũng giống nh cách chúng ta đã làm
trong phơng pháp p-1, đơn giản bằng cách dùng thuật toán Euclit để tìm ớc
chung lớn nhất d của x
2i
-x
i
(mod N) và N. Thờng thì d sẽ quay về 1, nhng ngay
khi x
2i
x
i
(mod P) thì d sẽ chia hết cho p.
Bây giờ, chúng ta sẽ bàn đến một thuật toán tìm thừa số hiệu quả dựa vào

các ý tởng trên dãy sẽ có dạng nh thế nào. Thứ nhất, dẫy {x
i
} nên là một dẫy thật
dễ tính toán ( bởi vì phải tính nó hai lần). Thứ hai, độ dài chu kỳ nên ngắn thôi.
Thứ ba, việc sử dụng thuật toán Euclid cần đợc tổ chức một cách hữu hiệu sao
cho thời gian tính toán không quá nhiều trong phép tìm ớc chung lớn nhất (N,
x
2i
-x
i
) (mod N)=1.
Pollard đã phát hiện ra trong một dẫy {x
i
} các số nguyên ngẫu nhiên (mod
P) một phần tử thờng hay lặp lại chỉ sau
PC
bớc. Điều này cũng dễ hiểu nếu
chúng ta xem xét lời giải của bài toán Ngày sinh:
Cần phải chọn bao nhiêu ngời một cách ngẫu nhiên để cho xác suất có ít
nhất hai ngời trong số đó trùng ngày sinh lớn hơn 1/2 ?
Lời giải: Xác suất để q ngời không có cùng ngày sinh là
)
365
19
1) (
365
3
1)(
365
2

1)(
365
1
1(


Biểu thức này nhỏ hơn <0.5 khi q23.
Website: Email : Tel (: 0918.775.368
Tổng quát hoá: q phải bằng bao nhiêu để cho ít nhất hai số nguyên đợc chọn
ngẫu nhiên trong q số sẽ là đồng d (mod p) với xác suất >1/2.
Điều này sẽ xảy ra nếu
2
1
)
1
1) (
3
1)(
2
1)(
1
1( <


p
q
ppp
Vế trái đợc ớc lợng bằng:
e
pqq

q
p
q
2/)1(
1
)
2
1(



.
Biểu thức này bằng 0.5 nếu.
2ln
2
)1(
=

p
qq
, tức là nếu
.18.15.02ln2 ppq +
Đến đây chúng ta có thể phát biểu thuật toán phân tích ra thừa số của
Pollard. Thay cho các số nguyên ngẫu nhiên {x
i
}, chúng ta phải tính một cách đệ
qui một dãy đợc gọi là các số nguyên giả_ngẫu nhiên. Cách lựu chọn đơn giản
nhất là chọn x
i+1
ax

i
(mod p) với một giá trị cố định của a.
Tuy nhiên, lại xảy ra một vấn đề là sự lựa chọn này không sinh ra đợc các
số nguyên đủ ngắn nhiên để cho một chu kỳ ngắn chỉ gồm
PC
bớc đối với dẫy
{x
i
}. Một cách lựa chọn đơn giản nữa là sử dụng một biểu thức bậc 2:
x
i+1
=x
2
i
+a (mod p)
Về mặt trực giác thì có thể phép chọn này đáp ứng đợc các tính chất cần
thiết (ít ra là khi a không bằng 0 cũng không bằng 2) nhng nó cũng cha đợc
chứng minh đầy đủ.
Chúng ta sẽ thực hiện việc tìm p bằng thuật toán Euclid trên x
2i
-x
i
(mod N)
và N trong mỗi chu trình nh thế nào? Một lần nữa, ta lại sử dụng các mẹo nh đã
làm trong phơng pháp (p-1) : Tích luỹ tích
Q
i
=
)(
1

2 j
i
j
j
xx

=
(mod N).
và áp dụng thuật toán Euclid chỉ khi i là bôi của 100. Bằng cách này, chi phí cho
việc sử dụng thuật toán Euclid đợc giảm một phép nhân và một phép rút gọn
(mod N) trên một chu trình.

×