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 đầ
Trang 1Website: http://www.docs.vn Email : lienhe@docs.vn 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 2m-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 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.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
Trang 2quan đế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 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
Trang 3Chơ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 2m-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
Trang 4thờ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 log2n, 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ợ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ử
Trang 5Chơng iI Số Mersenne và việc phân tích
2.1 Số Mersenne
Nếu một số có dạng 2m-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 2m-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 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 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ụ, M2=3,
M3=7, M5=31, M7=127 là nguyên tố, trong khi M11=23*89
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(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(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ố
Chứng minh: Cho n=2q+1 là một thừa số của M 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-1)/2≡mp-1≡1(mod p) Vì vậy Mq chia hết cho p
Trang 6Hơ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ũ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 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ì
1 )(
3 ( )
3
( = N − (N− 1 / 2 = −
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 (Um)m ≥ 0,(Vm)m ≥ 0, có biệt gthức D=12 N=Mn 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ố Theo (IV.2) ta có
V2
(N+1)/2=VN+1+2Q(N-1)/2=VN-1-4(-2)(N-1)/2
≡ VN+1-4(-2/N) ≡VN+1+4(mod N)
Trang 7Vì (-2/N)=(-1/N)(2/N)=-1 Vì vậy chỉ cần chỉ ra rằng N≡7 (mod N) Theo (IV.4): 2VN-1=VNV1+DUNU1=2VN+12UN; do vậy theo (IV.14) và (IV.13): VN+1=VN+6VN≡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), VN+1 chia hết cho N Đồng thời, theo(IV.6): V2
(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 (Vm)m>=0 bằng dẫy (Sk)k>=1
đợc định nghĩa nh sau:
S0=4; Sk+1=S2
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
V V
k V
2
2 2
2 2 2
2 2
2
2 2
2 2
1 1
M61 cũng là nguyên tố Cuối cùng, vào năm 1927 Lehmer chứng minh đợc
M257 cũng là hợp số Chú ý rằng M127 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 : M521, M607_những số đầu tiên tìm đợc bằng máy tính Các số nguyên tố M1279,M2203,M2281 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à M21609, nó có 65050 chữ
Trang 8số do Slowinski phát hiện năm 1985 Số nguyên tố Mersenne đợc tìm ra cuối cùng là M110503 do Colquitt và Welsch 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:
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?
Trang 9Kỷ 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
235713
Anonymous*
P.A.CataldiP.A.CataldiL.EulerI.M.PervushinR.E.PowersE.FauquembergueE.Lucas
R.M.RobinsonR.M.RobinsonR.M.RobinsonR.M.RobinsonR.M.RobinsonH.Riesel
A.HurwitzA.HurwitzD.B.GilliesD.B.GilliesD.B.GilliesB.TuckermanL.C.Noll & L.NickelL.C Noll
H.Nelson & D SlowinskiD.Slowinski
W.N.Colquitt & L Welsch, Jr
D.SlowonskiD.Slowonski
“See Dickson’s History of the Theory of Numbers, Vol I.p.6
Trang 10Chơ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 )
Đâ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
Trang 11Cho 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”.
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à m≈Cp 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 mbớ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 {xi mod N:i=1,2, } đợc xác định
nh sau xi-1 ≡(xi2+a) mod N với a#0 và #-2 còn giá trị đầu x0 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 x2=y2 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,
Trang 12- Xây dựng đồng d thức x2≡y2 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 x2≡y2 mod N
Hiển nhiên trong không gian k chiều GF(2)k thì tập k+1 véc tơ vi
(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à:
a
x
Q theo định nghĩa sẽ là x2 mod N, mặt khác do điều kiện
đặt ra ở trên là Q(xi) phân tích đợc hoàn toàn trong tập cơ sở cùng với điều
1
) (
a
x
Q 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 y2
nào đó Nếu x≠±y 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(x±y, 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à
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
Trang 13Từ 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ếu p≡3 mod 4 thì giá trị x≡m±N(p+1)/4 mod p là các giá trị <p thoả mãn p là ớc của Q(x) Nếu p≡1 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 ( ) 2 ( ) 0
2
≡ + +
− +
r m x P
N m x
( 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)=R2=qα 1
1.qα 2
2 qα k
k, ở đây x0 là giá trị nhỏ nhất để qα1 qα2 qαk là ớc của Q(x) mà ta có thể phát hiện đợc ở bớc trên
Trang 14Tấ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à:
)
1 ) ln
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 x2≡y2 (mod n) thì UCLN(x-y,n) là ớc không tầm ờng của n
th-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 x2 (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 x2 ≡ y2 (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:
83409341562≡ 3 ì 7 (mod n)
120449429442 ≡ 1 ì 7 ì 13 (mod n)
27737000112 =2 ì 3 ì 13 (mod n)
Trang 15Nế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ó:
95034357852 ≡ 5462 (mod n)Sau đó tính:
UCLN(9503435785-546, 15770708441)=115759
Ta thấy 115759 là một thừa số của n
Giả sử B = {p1, pB}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:
xj2 ≡ p1 α 1j ì p2 α 2j ì ì pB α Bj(mod n)
với 1≤ j ≤ C Với mỗi j xét véctor :
aj = (α1j mod 2, α2j mod 2, , αBj mod 2) ∈ (Z2)B
Nếu có thể tìm đợc một tập con các aj sao cho tổng theo modulo 2 là
vector (0, ., 0) thì tích của các xj 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
Trang 16Đâ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 a1, a2, , aC 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 Z2) 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 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 aj) 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 xj mà các giá trị xj2 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 xj=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 xj 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 xj 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ố a∈Z* 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 b≡ap-1
[ ]n
Trang 17mod 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≡(ap-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à:
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à ap-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 b≡aQ 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=q q q N k
N q
k
log log
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 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
gcd(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=q q N q k
N q
k
log log
1 1 , i=1,j=0
(2) Lấy a ngẫu nhiên trong Z*
N, tính b≡aQ mod N
Trang 18(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<logqiN
Nếu đúng thì j=i+1, Q=Q|qi, quay về (3)
Ngợc lại: chuyển sang (5)
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=q1! qk!, tiếp đến là mỗi giá trị a chỉ đợc xét đúng một lần với giá trị
b≡aQ 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= q1! qk! trong khi
đó giá trị Q=q q N q k
N q
k
log log
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á
Trang 19trị 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ỉ là 3 N
ý 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 ( a≡±b mod p) nhng không đồng d modulo N Khi này p sẽ là ớc của gcd(N,(a±b ) mod N)
Thuật toán 2.3 (Thuật toán Pollard thứ hai)
(x2i-1+xi-1)(x2i-2+xi-2) (xi+x0)(xi+x0)
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.
Trang 20- 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ị
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 p ± 1: Thuật toán Williams.
Để tiện tiếp thu phơng pháp p±1 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 x2-Px+Q=0 (*)
Kí hiệu Um=
b a
Các dãy {Um}, {Vm} 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ì Ui là ớc của Uj
Tính chất 3.7 (Công thức tính các phần tử của dãy Lucas).
Ta có U0=0, U1=1, V0=2, V1=P và ∀m>1 thì Um và Vm đợc tính theo công thức sau:
Trang 210
1 1 1
V U Q P V
Định lý 3.8 { Um} là dãy Lucas của phơng trình (*) với P2-4Q=d2∆ 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ì p−∆P≡ 0 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 p±1 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 p±1 của Williams)
(1) Q= N q qk N
k
log log
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 R2-4S=∆d2 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 b≡UQ mod N (phần tử thứ Q trong dãy Lucas của phơng trình x2-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<logqiN
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)
Trang 22ta b không là bội của N và 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 {xi} 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 xi=xj (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
Trang 23nghĩ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):
xi≡ F(xi-1,xi-2, ,xi-s) (mod m)với các giá trị đã cho đối với x1, x2, ,xs Sau đó xs+1, xs+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 xk, đợc cho theo modulo m, nên mỗi xk 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à ms dãy phân biệt xi-1,xi-2, ,xi-s
của s số xk liên tiếp Nh vậy sau cùng lắm là ms+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à xi-1,xi-2, ,xi-s, và xj-1, xj-2, ,xk-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ị
xi và xj, đợ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ị:
xi, xi-1, ,xi-s+1 và xj, xj-1, , xj-s+1 với tính chất là xi=xj, xi-1=xj-1, ,xi-s+1 Từ
đây dẫn đến kết quả là xi+1 đồng nhất với xj+1 và cứ thế tiếp tục
Nhng điều này có nghĩa là dẫn {xi} 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:
xi≡ xi-1+xi-2(mod 11) với x1≡x2≡1
Chúng ta nhận đợc liên tiếp các phần tử sau đây của dẫy:
và rất tốn công sức Tuy nhiên, trong trờng hợp đơn giản nhất khi mà xi
đ-ợc định nghĩa chỉ qua xi-1 và không qua bất kỳ một xk nào khác thì dẫy này đợc lặp lại theo chu kỳ ngay khi một phần tử xj bất kỳ bằng một phần
Trang 24tử 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ị xj
mới với các xk đứ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 {xi} (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ử: x2i≡xi(mod m)?
Chứng minh: Trớc hết, nếu x2i≡xi(mod m) thì dẫy này rõ ràng là tuần hoàn từ x2i 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, xj≡xi (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 x2i≡xi (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
Bây giờ làm thế nào để có thể so sánh x2i với các xi mà không cần phải lu giữ tất cả các xi? Đơn giản ta chỉ cần tính lại các xi song song với các x2i Giả sử xi+1=f(xi) Thuật toán tìm chu kỳ có thể mô tả bằng đoạn mã chơng trình sau:
Trang 25toán Euclit để tìm ớc chung lớn nhất d của x2i-xi (mod N) và N Thờng thì
d sẽ quay về 1, nhng ngay khi x2i≡xi (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 {xi} 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, x2i-xi) (mod N)=1
Pollard đã phát hiện ra trong một dẫy {xi} 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 C P 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
1 9 1 ) (
365
3 1 )(
365
2 1 )(
365
1
1
Biểu thức này nhỏ hơn <0.5 khi q≥23
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 )(
p p
( − − ≈ − −
Biểu thức này bằng 0.5 nếu
2 ln 2
) 1
Trang 26mộ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 xi+1≡ axi(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 C P
bớc đối với dẫy {xi} 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:
xi+1=x2
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 x2i-xi
(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
3.9 Mô tả đại số của phơng pháp ρ của Pollard
Có những lý luận đại số khá đơn giản để chỉ ra tại soa một thừa số p của N đợc tìm thấy sau O( p ) chu trình trong p của Pollard Lý luận này
=( x2i-1+ xi-1)=( x2i-1+ xi-1)( x2i-2+ x2i-2)( x2i-2- xi-2)
Trang 27Vì vậy, thừa số yi tham gia trong tích Qi dùng để tính (Qi, N) chứa
ít nhất i+1 thừa số đại số Một thừa số điển hình xk-xi chứa bao nhiêu thừa
số nguyên tố khác nhau ≤p? Ngời ta cho rằng số các thừa số nguyên tố
≤G của một số N là vào khoảng lnlnG nếu N đủ lớn Các số xk tăng cực kỳ nhanh, số chữ số của nó tăng gấp đôi kể từ một chỉ số k nào đó tới chỉ số tiếp theo do phép bình phơng xk+1=x2
k+a
Bây giờ xk sẽ tăng theo cấp số nhân của x2k
0, và sẽ vợt qua ranh giới
đợc gọi là đủ lớn rất nhanh.Vì thế chúng ta thấy rằng số lợng các thừa số nguyên tố ≤G của yi (tích của i+1 số của lớn) sẽ xấp xỉ (i+1) lnlnG Chạy thuật toán p của Pollard n chu trình, chúng ta tích luỹ trong Qn các số nguyên tố của tất cả thừa số y1,y2, ,yn và cộng tất cả lại, hy vọng sẽ gồm:
lnlnG∑
=
≈ +
n i
G n
i
1
2 ln ln 5
0 ) 1
các thừa số nguyên tố ≤G Chúng ta phải tiếp tục nh thế nào nữa để có thể
đảm bảo rằng tất cả các số nguyên tố nhỏ hơn một thừa số p nào đó của N
đợc tích lại trong Qn? Dới p có π (p) ≈ p/ lnp số nguyên tố, và do đó n buộc phải lớn vào khoảng
2 / 1
) ln ln
ln
(
*
p p
p
C
n= , trong đó C là một hằng số Vì vậy độ phức tạp của
phép tìm một thừa số p bằng phơng pháp của Pollard lớn hơn C p một chút Trực giác có thể cho thấy rằng phơng pháp p của Pollard là C p và
do vậy có thể kết luận rằng thừa số C mà ta đa ra trong thực tế không hẳn
là hừng số mà nó thay đổi rất chậm cùng với p
Mô hình đại số của phơng pháp p Pollard có gì đó hơi thô, nhng tuy nhiên chúng ta vẫn có thể sử dụng để nghiên cứu cải tiến phơng pháp này và cũng sử dungj để bàn về một vấn đề rất quan trọng : Tốc độ của một thuật toán phân tích thừa số
3.10 Một chơng trình cho phơng pháp ρ của Pollard:
Sau đây là một chơng trình đợc viết bằng Pascal thể hiện những gì mà chúng ta đã trình bày ở trên:
Trang 28Program Pollard;
Label 1,2;
Var a, x1,x,y,Q,i,p,N: Integer;
Function Euclid(a,b: Integer): Integer;
1: Write(‘Input a<>0, 2 and x1 ‘); Read(a);
If a=0 Then goto 2;
Trang 29Goto 1;
2: End.
Chú ý rằng thuật toán này có thể không đúng Nếu N có một vài ớc, thì có thể xảy ra hiện tợng một số ớc này bị rút ra giữa hai lần tính toán liên tiếp sử dụng thuật toán Euclid giống hệt nh trong phơng pháp (p-1)
Đúng ra trong trờng hợp đó chúng ta phải lu lại tất cả các giá trị của Q100k,
x100k và x200k và chạy lại tính toán từ điển này trở đi với việc sử dụng thuật toán Euclid thờng xuyên hơn Nếu thuật toán hỏng thì toàn bộ thuât toán phải chạy lại từ đầu với môt giá trị khác nhau của a Cũng lu ý rằng chơng trình Pascal trên đây chỉ là mô hình của mã máy tính có thể thực hiện ph-
ơng pháp Pollard Nó chạy nhng chỉ đối với các giá trị nhỏ của N, nghĩa là các giá trị sao cho N2 nhỏ hơn số nguyên lớn nhất có thể đợc lu trữ trong một biến Để có thể chuyển mô hình này thành một chơng trình có thể chạy trên máy, chúng ta phải sử dụng ít nhấ là các biến có thể chạy trên máy, chúng ta phải sử ít nhất là các biến có độ chính xác gấp đôi, hoặc tốt hơn là với độ chính xác cao hơn nữa để sao cho các phép nhân không gây
ra sự tràn ô Hơn nữa, sẽ có lợi nếu không thực hiện các tính toán tìm ớc
số chúng lớn nhất bằng thuật toán Euclid tại những điểm cách đều mà nên dùng một khoảng nhỏ hơn khi bắt đầu, rồi sau đó mới tăng dần khoảng này lên tới 100 hoặc lớn hơn Điều đó là để không phải nhận tất cả các thừa số nhỏ của N nhân với nhau tại một giai đoạn nào đó
Vì chi phí phải bỏ ra để có đợc một thừa số p là tơng đơng với p
nên chỉ sử dụng thuật toán Pollard trên các số mà đã đợc biết là hợp số
Ví dụ: Hãy phân tích ra thừa số 91643 với xi+1=xi-1-1, x0=3
x1=8 x2=63 y1=63-8=55 (55,N)=1;
x3=3968 x4 ≡74070 y3≡x4-y2≡74004 (74004,N)=1
x5≡65061 x6≡35191 y3=x6-x3≡31225 (31225, N)
x7≡83746 x8≡45368 y4≡x8-x4≡62941 (62441,N)=113 => N=113.811
Trang 30Q=2 a=Random(N)
d=gcd(a-1, N)>1
a ≡ a Q mod N
d lµ íc cña N
Kh«ng ph©n tÝch ®îc
Trang 31Nhận xét: nếu N có các ớc p mà p-1 phân tích hoàn toàn trong Q thì
gcd(a-1, N)>1 với a=aQ! mod N
(≈∀ ớc p của N, đều có ớc nguyên tố lớn của p-1 thì Q rất lớn, và ta có thể lấy Q≈ N)
Thoả hiệp, khống chế số bớc tìm Q<Q0
- Chỉ sau ≤Q0 bớc là thuật toán dừng
- Trong trờng hợp mọi ớc nguyên tố p của N ta đều có p-1 có ớc >
Q0 thì không tìm đợc ớc của N Khi này ta nói N không phân tích
đợc bằng thuật toán Pollard với ngỡng Q0
4.2 Phân tích hệ thống
Căn cứ vào sơ đồ xuất phát cần phải có các quy tắc để biểu diễn các số lớn trên máy tính, các cách thực hiện các phép toán số học +, -, *, / , và luỹ thừa trên các số lớn này
4.2.1 Khai báo số lớn
Biểu diễn q phần một số nguyên N
Định nghĩa: Cho q>0 khi đó ∀N ∃ duy nhất bộ n0, n1, ,nk, với 0≤ni<q, sao cho
(1) đợc gọi là biểu diễn q phân của số N
Nhận xét: Nh vậy, muốn biểu diễn N ta chỉ cần biết bộ (n0, n1, ,nk) Nếu
q là một số nhỏ thì việc tìm ra các ni tơng đối dễ dàng ở đây chúng ta chọn q=216(=65536)
3.2.2.Phép cộng số lớn
Cho 2 số lớn X và Y:
Trang 32X=(x0, x1, , xn)
Y=(y0, y1, , yn)
Z=X+Y=( (x0+y0) mod q , (x1+y1+nho0) mod q, ,(xn+yn+nhon-1) mod q )
trong đó nhoi=(xi+yi+nhoi-1)/q
Dới đây là hàm dùng để cộng hai số lớn
Trang 33j k j i i k
k
z Y
* X
Trang 35nho+=thap(r);
}
KEP[i]=(WORD) nho; nho>>=16;
nho+=t1;
t1=0;
}
for (i=C;i<=d+C-1;i++) {j=i-C+1;
Trang 36NÕu x div y=q th×
X div Y=q hoÆc q-1
§Þnh lý lµ c¬ së gióp ta ®o¸n nhanh th¬ng cña 2 sè lín X/Y víi ®iÒu kiÖn X<qY