Phân tích dùng phương pháp của Pollard

Một phần của tài liệu Một số ứng dụng của số học trong lý thuyết mật mã (Trang 45 - 48)

2 Một số ứng dụng của số học trong lý thuyết mật mã

2.3.3 Phân tích dùng phương pháp của Pollard

Giả sử ta cần phân tích một số nguyên n và p là một ước nguyên tố (chưa biết) của n. Nếu (p−1) không có các ước nguyên tố lớn thì thuật toán sau đây tỏ ra rất hữu hiệu.

Thuật toán

1. Chọn một số k sao cho nó chia hết cho tất cả hoặc hầu hết các số nguyên nhỏ hơn một số B nào đó. Chẳng hạn, k làB!, hoặc k là bội chung nhỏ nhất của tất cả các số từ 1 đến B.

2. Chọn một số a trong khoảng từ 2 đến (n−2). Chẳng hạn a = 2 hoặc

a = 3, hoặc số nguyên ngẫu nhiên.

3. Tính ak (mod n) (bằng thuật toán bình phương liên tiếp). 4. Tính (ak −1, n) (bằng thuật toán Euclid).

5. Nếu d = (ak −1, n) không phải là một ước thực sự của n, ta lặp lại quá trình trên với một số a khác, hoặc k khác (hoặc cả a và k khác).

Khả năng thành công của thuật toán:

Giả sử k chia hết cho mọi số nguyên dương nhỏ hơn hoặc bằng B, và p

là ước nguyên tố của n sao cho (p− 1) là tích các luỹ thừa nguyên tố bé, mỗi thừa số đều nhỏ hơn hoặc bằng B. Khi đó k là bội của (p−1)nên theo định lý Fermat, ak ≡ 1 (mod p). Do p|(ak −1, n), nên khả năng duy nhất để ta không tìm được ước thực sự của n là ak −1 ≡ 0 (mod n)

Ví dụ 1: Phân tích số n = 199423.

Chọn B = 9 và lấy k = 9! = 362880, a = 3 ta tìm được:

3362880 mod n≡ 96783 và (96783−1, n) = 217

Từ đó suy ra 199423 = 217.919 Nhận xét:

nhóm nhân (Z/pZ)∗, bằng cách nâng lên luỹ thừa của một số a cho trước với số mũ k chọn trước. Với mỗi ước p(của n) cố định, nhóm (Z/pZ)∗ cũng cố định, nên nếu tất cả các nhóm đó (khi p chạy hết các ước của n) đều có bậc chia hết cho một số nguyên tố lớn, hoặc luỹ thừa với số mũ lớn của một số nguyên tố, thì (p−1) phương pháp của Pollard không hiệu quả.

Ví dụ 2:

Giả sử n = 445201. Khi đó chỉ có thể tìm được ước nguyên tố của n theo phương pháp trên, nếu chọn B ≥ 173 (quá lớn đối với một số cỡ như n). Thật vậy do n = 347.2831, mà 347 - 1 = 2.173, 1283 - 1 = 2.641 và cả hai số 173, 641 đều là số nguyên tố.

Ta lập một thủ tục sau để tìm một ước số của hợp số N. restart;

with (numtheory); pollard := proc (N, B, M) local i, a, b, k, d, ID;

k := B!; randomize(); ID:=1;

while true do

if (ID = 1) then a:= 2; elif (ID = 2) then a:=3; else

while true do

a:= rand(); a:= a mod N; if a> 1 and a< N −1 then d:= gcd(a,N);

if(d > 1) then RETURN(d); else break; end if; end if;

end do; end if;

b:= a&∧k mod N;

d:= gcd(b−1, N) mod N;

if d > 1 then RETURN(d) end if; ID:=ID+1;

if ID > M then RETURN(1) end if; end do;

end;

Bây giờ muốn tìm một ước số của hợp số N, bằng (p−1) phương pháp của Pollard, ta chỉ cần thực hiện lệnh:

pollard (N, B, M); Trong đó M là số bước lặp có thể. Ví dụ 3: Tìm một ước số của N với:

N = 12233344445555566666677777788888888999999999123456789 1234567891

pollard (N, 11, 3); Ta có một ước là 23.

.Nếu chọn B < 11 thì ta chưa tìm được ước của N.

.Nếu B ≥ 11 những giá trị khác nhau, thì ta có thể sẽ được thêm những

ước khác của N (nếu có). Chẳng hạn, chọn B = 6661 được ước 8885797.

Như nhận xét ở trên (p−1) không có ước nguyên tố lớn, trong đó p là một ước nguyên tố (chưa biết) của N, mặc dù cỡ của N có thể lớn đến vài trăm chữ số trong hệ thập.

Tài liệu tham khảo

[Đ] Phạm Huy Điển : Tính toán, lập trình và giảng dạy toán học trên Maple. NXB KH và KT Hà nội, 2002.

[KĐ] Hà Huy Khoái và Phạm Huy Điển : Số học thuật toán - Cơ sở lý thuyết và tính toán thực hành. NXB ĐHQG Hà nội, 2003.

[KĐ] Hà Huy Khoái và Phạm Huy Điển : Mã hoá thông tin - Cơ sở toán học và ứng dụng. NXB ĐHQG Hà nội, 2004.

Một phần của tài liệu Một số ứng dụng của số học trong lý thuyết mật mã (Trang 45 - 48)

Tải bản đầy đủ (PDF)

(48 trang)