Danh sách kí hiệu 5
MỞ ĐẦU 6
Chương 1. Thám mã và một số thuật toán phân tích số nguyên cổ điển 8
1.1 Thám mã và phân tích số nguyên . . . . . . . . . . . . . . . . . . 8
1.2 Phân tích Fermat . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3 Phân tích Pollard p−1 . . . . . . . . . . . . . . . . . . . . . . . 17
Chương 2. Một số thuật toán hiện đại phân tích số nguyên 20
2.1 Sự kiểm tra ước . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2 Thuật toán phân tích r của Pollard . . . . . . . . . . . . . . . . . 21
2.3 Phương pháp phân tích Brent . . . . . . . . . . . . . . . . . . . . 24
2.4 Phương pháp phân tích dùng đường cong elliptic . . . . . . . . . . 26
2.5 Phương pháp phân tích bằng sàng trường số . . . . . . . . . . . . 28
2.6 Khả năng phân tích số bằng các “chip” chuyên dụng . . . . . . . . 30
KẾT LUẬN VÀ KIẾN NGHỊ 32
TÀI LIỆU THAM KHẢO 33
34 trang |
Chia sẻ: honganh20 | Ngày: 28/02/2022 | Lượt xem: 395 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Luận văn Một số thuật toán phân tích số nguyên hiện đại và ứng dụng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
các giả
thuyết lớn tồn tại trong Số học thường là các giả thuyết về số nguyên tố.
Thậm chí, có những nhà toán học cho rằng, vẻ đẹp của số học có được nhờ
sự xa rời thực tiễn của nó.
Ngày nay, những ứng dụng lớn lao và bất ngờ của Số học vào mật mã
cho ta thấy rằng quan niệm trên đã hoàn toàn thay đổi. Vẻ đẹp của Số học
không chỉ thể hiện trong ý nghĩa “thuần tuý” của nó, mà cả trong những
ứng dụng bất ngờ vào thực tiễn. Cách đây khoảng 30 năm, khó có thể hình
dung được rằng, một số kết quả lý thuyết trong Số học lại làm nên một
cuộc cách mạng trong bảo mật thông tin trong Lý thuyết mật mã. Cơ sở
của những ứng dụng đó chính là Số học thuật toán, lĩnh vực nghiên cứu các
thuật toán trong Số học. Trong lĩnh vực Lý thuyết mật mã, mật mã khóa
công khai là một dạng mật mã cho phép người sử dụng trao đổi các thông
tin mật mà không cần phải trao đổi các khóa chung bí mật trước đó. Điều
này được thực hiện bằng cách sử dụng một cặp khóa có quan hệ toán học
với nhau là khóa công khai và khóa cá nhân (hay khóa bí mật). Cơ sở toán
học của vấn đề này là việc phân tích các số tự nhiên và một số vấn đề liên
7quan đến chúng.
Luận văn này có mục đích tìm hiểu sơ lược về cơ sở toán học của Lý
thuyết mật mã, đồng thời phân tích sâu hơn các thuật toán phân tích số tự
nhiên để làm cơ sở toán học cho ứng dụng. Ngoài các phần Mở đầu, Kết
luận, Tài liệu tham khảo, nội dung của luận văn được trình bày trong hai
chương:
• Chương 1. Thám mã và một số thuật toán cổ điển phân tích số nguyên.
Trong chương này chúng tôi trình bày các kiến thức cơ sở về thám mã
và sau đó là một số thuật toán cổ điển phân tích số nguyên, làm cơ sở
so sánh và phát triển cho chương tiếp theo.
• Chương 2. Một số thuật toán hiện đại phân tích số nguyên. Đây là nội
dung chính của luận văn. Chúng tôi sẽ trình bày một số thuật toán hiện
đại phân tích số nguyên như thuật toán phân tích Pollard, phân tích
dùng đường cong elliptic hoặc sàng trường số.
Thái Nguyên, ngày 10 tháng 7 năm 2017
Tác giả
Nguyễn Thị Bình
8Chương 1
Thám mã và một số thuật toán cổ điển
phân tích số nguyên
1.1 Thám mã và phân tích số nguyên
Phần này em sẽ trình bày về thám mã. Thám mã là một vấn đề phức tạp
nên trong luận văn này em xin phép chỉ đề cập những vấn đề đơn giản nhất.
Phần đầu trong trình bày chúng tôi dựa vào [2].
Thám mã (hay phân tích mã - cryptanalysis) là việc nghiên cứu các
phương pháp “phá vỡ” bức màn ngụy trang văn bản (do việc mã hóa tạo
nên) để có thể hiểu được nội dung văn bản.
Hiện nay, trên quan điểm thám mã, người ta phân các hệ mã thành ba
loại:
• Loại đã bị phá;
• Loại chưa được nghiên cứu phân tích (vì còn mới, hoặc vì chưa được
dùng rộng rãi);
9• Loại đã được nghiên cứu nhưng chưa bị phá (RSA, IDEA, các hệ mã
sử dụng logarit rời rạc, đường cong elliptic, . . . ).
Có ba cách thông dụng trong việc chuyển hóa văn bản mã thành văn
bản gốc:
• Ăn trộm, hối lộ, hoặc mua (với giá rất cao) để có được chìa khóa;
• Khai thác tính cẩu thả hoặc lỏng lẻo của người dùng khóa (ví dụ : có
người hay dùng tên người thân để làm mật khẩu hoặc chìa khóa);
• Phân tích mã (tức là thám mã).
Bây giờ, ta sẽ thảo luận về một số phương pháp thám mã. Thực tế, thám
mã sẽ phức tạp hơn nếu người ta không biết hệ mật mã đã được sử dụng.
chúng ta giả sử người thám mã đã biết rõ hệ mật mã được sử dụng khi tiến
hành phân tích mã. Mục đích là thiết kế được một hệ mật mã an toàn bảo
mật.
Dưới đây ta sẽ liệt kê các loại tấn công vào hệ mật mã. Mức độ tấn công
sẽ phụ thuộc vào hiểu biết của người thám mã đối với hệ mật mã được sử
dụng :
• Tấn công chỉ biết bản mã (ciphertext-only): người thám mã chỉ có
bản tin mã hóa.
• Tấn công biết bản tin rõ (known plaintext): người thám mã có bản
tin rõ và bản mã.
10
• Tấn công chọn bản tin rõ (chosen plaintext): người thám mã tạm
thời có quyền truy xuất tới bộ mã hóa, do đó người thám mã có khả
năng chọn bản tin rõ và xây dựng bản mã tương ứng.
• Tấn công chọn bản mã (chosen ciphertext): người thám mã tạm thời
có quyền truy xuất tới bộ giải mã, do đó anh ta có khả năng chọn bản
mã và xây dựng lại bản tin rõ tương ứng.
Bây giờ ta sẽ liệt kê các phương pháp thám mã
1. Thám mã tích cực là việc thám mã sau đó tìm cách làm sai lạc các dữ
liệu truyền, nhận hoặc các dữ liệu lưu trữ phục vụ mục đích của người
thám mã.
2. Thám mã thụ động là việc thám mã để có được thông tin về bản tin rõ
phục vụ mục đích của người thám mã.
3. Thám mã affine. Trong mật mã affine, đầu tiên bảng chữ cái của thông
điệp cần mã hóa có kích thước m sẽ được chuyển thành các con số
tự nhiên từ 0, . . . ,m− 1. Sau đó dùng một hàm modulo để mã hóa và
chuyển thành bản mã. Hàm mã hóa cho một ký tự như sau:
e(x) = (ax+b) (mod m)
với m là kích thước của bảng chữ cái, a và b là khóa mã. Giá trị a được
chọn sao cho a và m là nguyên tố cùng nhau.
Giả sử Trudy đã lấy được bản mã sau đây:
11
FMXVEDKAPHFERBNDKRXRSREFMORUD
SDKDVSHVUFEDKAPRKDLYEVLRHHRH
Trudy thống kê tần suất xuất hiện của 26 chữ cái như trong bảng sau:
A 2 N 1
B 1 O 1
C 0 P 3
D 6 Q 0
E 5 R 8
F 4 S 3
G 0 T 0
H 5 U 2
I 0 V 4
J 0 W 0
K 5 X 2
L 2 Y 1
M 2 Z 0
Các chữ cái trong bản mã xuất hiện tổng là 57 lần, nhưng phương pháp
này tỏ ra hiệu quả để thám mã affine. Ta thấy tần suất xuất hiện các
chữ cái theo thứ tự là: R là 8, D là 6, E, H, K là 5 và F , S, V là 4. Vì
vậy dự đoán đầu tiên của ta có thể là R là mã của e, D là mã của t.
Theo đó, eK(4) = 17 và eK(19) = 3. Mà ta có eK(x) = ax+b. Để tìm
12
K = (a,b) ta giải hệ phương trình:
4a+b≡ 17 (mod 26)
19a+b≡ 3 (mod 26) .
Giải hệ phương trình này ta được a = 6, b = 19. Đây không phải là
khóa vì gcd(a,26) = 2 > 1. Ta lại tiếp tục phỏng đoán rằng R là mã
của e, E là mã của t. Ta nhận được a= 13, chưa thỏa mãn. Tiếp tục với
H, ta có a= 8. Cuối cùng, với K ta tìm được K = (3,5). Sử dụng khóa
mã này ta có được bản tin rõ là
algorithmsrequiregeneraldefinitionsofarithmeticprocesses
(algorithms require general definitions of arithmetic processes)
1.2 Phân tích Fermat
Trước khi thảo luận về các thuật toán phân tích số nguyên, ta sẽ giới thiệu
một số quy ước về thuật ngữ và khái niệm cơ sở.
Ta sẽ bắt đầu với các thuật ngữ của sẽ được dùng trong trình bày:
• Kí hiệu O lớn (big O notation). Hàm f (x) là O(g(x)) khi x→ ∞ nếu
và chỉ nếu có các số dương c và k sao cho với mọi x> k, ta có
0< f (n)≤ cg(n).
Ta xét ví dụ f (x) = 2x2+ x+1 là O(x2) khi x→ ∞ với c= 2, k = 0.
13
Kí hiệu O lớn được áp dụng trong thời gian chạy (running time) hoặc
trong yêu cầu lưu trữ (storage requirements) của một thuật toán. Trong
trình bày, để ngắn gọn ta cũng có thể chỉ cần viết O(g(x)), và được giả
thiết là ta xét với x→∞. Khi ta xét hàm nhiều biến, thì biến mà dần tới
vô hạn sẽ được chỉ ra. Như một phần trong định nghĩa của O(g(x)), tất
cả các sự kiện xảy ra sẽ được xét với x→ ∞.
• Phân tích tầm thường (trivial factor). Phân tích tầm thường là phân
tích mà nhân tử là s= 1 hoặc s= N.
• Phân tích không tầm thường (nontrivial factor). Phân tích không tầm
thường là phân tích một số nguyên mà trong phép phân tích có nhân tử
s thỏa mãn 1< s< N.
• Số nguyên tố (prime number). Một số nguyên dương lớn hơn 1 được
gọi là nguyên tố nếu nó chỉ chia hết cho 1 và chính nó.
Với các khái niệm trên, ta có Định lý cơ bản của số học đó là : Mọi số tự
nhiên lớn hơn 1 có thể viết một cách duy nhất (không kể sự sai khác về thứ
tự các thừa số) thành tích các thừa số nguyên tố.
Luận văn này có mục đích trình bày về thuật toán phân tích số nguyên.
Ta hãy xem xét một lý do dẫn đến việc làm này.
Định lý cơ bản của số học kéo theo nhận xét rằng mọi số nguyên đều
có thể được phân tích thành tích .
14
Xét số
N = 25195908475657893494027183240048398571429282126204
03202777713783604366202070759555626401852588078440
69182906412495150821892985591491761845028084891200
72844992687392807287776735971418347270261896375014
97182469116507761337985909570009733045974880842840
17974291006424586918171951187461215151726546322822
16869987549182422433637259085141865462043576798423
38718477444792073993423658482382428119816381501067
48104516603773060562016196762561338441436038339044
14952634432190114657544454178424020924616515723350
77870774981712577246796292638635637328991215483143
81678998850404453640235273819513786365643912120103
97122822120720357.
Số nguyên này được biết như là RSA-2048. Vào tháng 3/1991, Phòng thí
nghiệm RSA (RSA Laboratories) đã thông báo giải thưởng USD 200.000
cho sự phân tích thành công số nguyên này. Tính đến tháng 11/2004, số
này vẫn chưa được phân tích.
Nếu biết trước hai số nguyên tố lớn thì ta sẽ có một thuật toán nhanh
để nhân chúng với nhau. Tuy nhiên, trong tình huống ngược lại, nếu cho
tích của hai số nguyên tố, rất khó phân tích ngược lại để tìm ra hai số như
vậy. Thuật toán nhanh nhất được biết đến hiện nay có tên gọi Sàng trường
15
số tổng quát (General Number Field Sieve (GNFS)), mà nếu lấy trung bình
thì sẽ cần
S= O
(
exp
[(
64
9
n
)1/3
(logn)2/3
])
bước để phân tích một số nguyên với n chữ số thập phân.
Thời gian chạy thuật toán bị chặn dưới bởi hàm đa thức, và bị chặn trên
bởi hàm mũ theo n. Chính sự khó khăn của việc phân tích các số nguyên
lớn sẽ là cơ sở cho một số thuật toán mật mã hiện đại.
Bây giờ ta sẽ trình bày về phân tích Fermat. Thuật toán này được phát
minh bởi nhà toán học Pierre de Fermat trong những năm 1600 (xemWeis-
stein E.W. [5]). Để làm phân tích Fermat, ta viết một hợp số N thành hiệu
của hai bình phương,
N = x2− y2.
Hiệu này của các bình phương dẫn đến sự phân tích của N
N = (x+ y)(x− y).
Giả sử rằng s và t là các nhân tử không tầm thường lẻ của N thỏa mãn
st = N và s ≤ t. Ta tìm x và y sao cho s = (x− y) và t = (x+ y). Giải
phương trình này, ta tìm x= (s+ t)/2 và y= (t− s)/2. Ở đây, x và y là các
số tự nhiên, do hiệu số giữa hai số lẻ là chẵn, và một số chẵn là bội của 2.
Do s> 1 và t ≥ s, ta tìm x≥ 1 và y≥ 0. Trong trường hợp riêng, các số x, y
thỏa mãn s= (x−y) và t = (x+y), vì vậy x=
√
N+ y2, và do đó x≥√N.
Cũng vậy, x= (s+ t)/2≤ 2t/2≤ N.
Đối với thuật toán này, ta chọn x1 =
√
N, và xi+1 = xi+1. Với mỗi i, ta
16
kiểm tra khi nào thì yi=
√
x2i −N là một số nguyên và khi nào thì (xi+yi),
(xi− yi) là các nhân tử không tầm thường N. Nếu cả hai điều kiện đó xảy
ra, ta có được một phân tích không tầm thường. Nếu không, ta tiếp tục với
i tiếp theo.
Dưới đây là thuật toán.
function fermatFactor(N)
for x from ceil(sqrt(N)) to N
ySquared := x * x - N
if isSquare(ySquared) then
y := sqrt(ySquared)
s := (x - y)
t := (x + y)
if s 1 and s N then
return s, t
end if
end if
end for
end function
trong đó hàm isSquare(z) đúng nếu z là một số chính phương và sai nếu
ngược lại.
17
1.3 Phân tích Pollard p−1
Phương pháp phân tích Pollard p−1 được giới thiệu bởi Pollard J.M. năm
1974 (xem Weisstein E.W. [8]). Nó dựa trên Định lí Fermat nhỏ được phát
biểu như sau:
Định lí 1.3.1 (Định lí Fermat nhỏ). Nếu p là một số nguyên tố, a là một số
tự nhiên và p 6 | a thì ap−1 ≡ 1 (mod p).
Giả sử chúng ta có một số nguyên dương k ≥ 1 và một số nguyên tố
p> 2 sao cho (p−1) | k!. Bây giờ ta áp dụng Định lí Fermat nhỏ với a= 2,
2p−1 ≡ 1 (mod p).
Nhưng do (p− 1) | k! nên ta có thể viết k! = (p− 1)q với một số nguyên
dương q nào đó. Ta có
2k! ≡ (2p−1)q ≡ 1q ≡ 1 (mod p).
Do vậy p | 2k!− 1. Nếu N là một số nguyên có nhân tử nguyên tố không
tầm thường p, thì p là ước của 2k!−1+Nt với mọi số nguyên t. Ta có thể
tính xk ≡ 2k!− 1 (mod N) với k = 1,2,3, . . . , và với mỗi xk kiểm tra xem
có tồn tại một số nguyên rk = gcd(xk,N) mà là ước của cả xk và N. Nếu
(p−1) | k! thì p | xk và do đó rk là một nhân tử không tầm thường của N.
Nếu rk không phải là một nhân tử không tầm thường của N, thì nó là một
nhân tử tầm thường của N, tức là rk = 1 hoặc rk = N. Thuật toán như sau:
• Tính rk = gcd(2k!− 1,N) với k = 1,2,3 . . .. Nếu rk /∈ {1,N} thì rk là
một nhân tử không tầm thường và ta hoàn thành công việc cần làm.
18
• Ta có thể viết 2k! ≡ (2(k−1)!)k (mod n), sao cho nếu 2(k−1)! là đã biết
theo (mod n), thì 2k! có thể tính được chỉ với một phép toán lũy thừa
modulo một số.
Ta trình bày thuật toán.
function pollard_p1(N)
# Initial value 2^(k!) for k = 0.
two_k_fact := 1
for k from 1 to infinity
# Calculate 2^(k!) (mod N) from 2^((k-1)!).
two_k_fact := modPow(two_k_fact, k, N)
rk := gcd(two_k_fact - 1, N)
if rk 1 and rk N then
return rk, N/rk
end if
end for
end function
Trong đó modPow(a, b, m) lại là số nguyên nhỏ nhất không âm sao cho
ab ≡ y (mod m). Hàm này được gọi là “số mũ modular”.
Ta trình bày thuật toán hiệu quả đối với số mũ modular. Ta viết b trong
hệ nhị phân dưới dạng
b= b020+b121+ . . .+bn−12n−1
19
và thấy rằng ab có thể viết lại dưới dạng
ab = ab02
0
ab12
1
. . .2bn−12
n−1
=
(
a2
0
)b0 (
a2
1
)b1
. . .
(
a2
n−1)bn−1
.
Chú ý với mỗi k,
(
a2
k
)bk
là 1 nếu bk = 0 và a2
k
nếu ngược lại. Do đó ta có
ab =
n−1
∏
k=0,bk 6=0
a2
k
.
Chú ý rằng a2
k+1
= a2·2k =
(
a2
k
)2
. Bằng phương pháp bình phương liên
tiếp, ta có thể thiết kế một thuật toán tìm kiếm số tự nhiên nhỏ nhất sao cho
ab ≡ y (mod m).
function modPow(a, b, m):
ans := 1
a := a % m
for k from 0 to infinity
if 2^k>b then
return ans
end if
if (bit k of b is nonzero) then
ans := (ans * a) % m
a := (a * a) % m
end for
end function
20
Chương 2
Một số thuật toán hiện đại
phân tích số nguyên
Trong Chương 2 này, chúng tôi sẽ thảo luận về một số thuật toán hiện
đại phân tích số nguyên.
2.1 Sự kiểm tra ước
Sự kiểm tra ước là thuật toán đơn giản nhất để phân tích số nguyên. Giả
sử rằng s và t là các nhân tử không tầm thường của N sao cho st = N và
s≤ t. Để thực hiện thuật toán kiểm tra ước, một cách đơn giản là kiểm tra
xem s | N với s = 2, . . . ,⌊√N⌋. Khi một nhân tử như vậy s được tìm thấy
thì t = N/s cũng là một nhân tử, và một phép phân tích đã được tìm thấy
cho N. Ràng buộc trên s≤ bNc được cung cấp bởi định lí sau đây:
Định lí 2.1.1. Nếu N có nhân tử không tầm thường s, t với st = N và s≤ t,
thì s≤√N.
Chứng minh. Do s là nhân tử của N nên ta có s > N. Khi đó t ≥ s >√N,
21
và st > N, mà điều này lại mâu thuẫn với giả thiết rằng st = N. Do đó
s≤ N.
Thuật toán như sau
function trialDivision(N)
for s from 2 to floor(sqrt(N))
if s divides N then
return s, N/s
end if
end for
end function
Nếu thuật toán này cho hợp số N, thì nó đưa ra một cặp nhân tử không tầm
thường s, t với s≤ t. Phát biểu s | N tương đương với s≡ 0 (mod N).
2.2 Thuật toán phân tích ρ của Pollard
Phương pháp phân tích ρ của Pollard là một phương pháp xác suất để phân
tích một hợp số N bởi phép lặp một modulo đa thức N. Phương pháp này
được công bố bởi J.M. Pollard năm 1975. Giả sử chúng ta xây dựng dãy
x0 ≡ 2 (mod n),
xn+1 ≡ x2n+1 (mod n).
Dãy này là dãy tuần hoàn kể từ một chỉ số nào đó. Có thể chứng minh rằng
độ dài của chu trình nhỏ hơn hoặc bằng N bằng phương pháp phản chứng:
22
Giả sử rằng độ dài của chu trình là L lớn hơn N, tuy nhiên ta chỉ có N giá
trị phân biệt xn trong chu trình có độ dài L> N, vì vậy phải tồn tại hai giá
trị xn là đồng dư nhau, và chúng có thể được xác định là “các điểm xuất
phát” của một chu trình có độ dài nhỏ hơn hoặc bằng N. Các lập luận xác
suất chứng tỏ rằng thời gian dự kiến để dãy này theo mod n rơi vào một
chu trình và độ dài dự kiến của chu trình là tỷ lệ với
√
N, với hầu hết N
(xem Weisstein E.W. [6]). Các giá trị ban đầu và các hàm lặp thường dùng
khác nhau, nhưng hàm f (n) = x2n+1 cho thấy là làm việc tốt trong thực tế
bài toán phân tích số nguyên.
Giả sử rằng s và t là các nhân tử không tầm thường của N thỏa mãn
st = N và s ≤ t. Bây giờ giả sử rằng ta đã tìm được các số nguyên không
âm i và j với i < j sao cho xi ≡ x j (mod s) nhưng xi 6≡ x j (mod n). Do
s | (xi− x j) và s | N, ta có s | gcd(xi− x j,N). Bởi giả thiết s ≥ 2, ta có
gcd(xi−x j,N)≥ 2. Bởi định nghĩa, ta có gcd(xi−x j,N) |N. Ngoài ra, ta có
N 6 | (xi−x j) và do đó N 6 | gcd(xi−x j,N). Chúng ta cũng có N 6 | gcd(xi−
x j,N), gcd(xi− x j,N)> 1 và gcd(xi− x j,N) | N. Như vậy, gcd(xi− x j,N)
là một nhân tử không tầm thường của N.
Bây giờ ta phải tìm i, j sao cho xi ≡ x j (mod s) và xi 6≡ x j (mod n).
Nhận thấy rằng các dãy xn (mod s) là tuần hoàn với độ dài của chu trình
tỷ lệ với s. Pollard đã đề xuất là xn được so sánh với x2n, với n= 1,2,3, . . ..
Với mỗi n, ta kiểm tra xem d(xn− x2n,N) có là một nhân tử không tầm
thường của N hay không, ta lặp lại quá trình cho đến khi một nhân tử được
tìm thấy. Nếu không có nhân tử được tìm thấy, thuật toán sẽ không chấm
23
dứt.
Thuật toán là
function pollardRho(N)
# Initial values x(i) and x(2*i) for i = 0.
xi := 2
x2i := 2
do
# Find x(i+1) and x(2*(i+1))
xiPrime := xi ^ 2 + 1
x2iPrime := (x2i ^ 2 + 1) ^ 2 + 1
# Increment i: change our running values
for x(i), x(2*i).
xi := xiPrime % N
x2i := x2iPrime % N
s := gcd(xi - x2i, N)
if s 1 and s N then
return s, N/s
end if
end do
end function
trong đó a % m là toán tử modulo, nó cho ta số nguyên không âm nhỏ nhất
sao cho ab ≡ y (mod m).
24
2.3 Phương pháp phân tích Brent
Phương pháp phân tích Brent là một sự cải thiện thuật toán ρ Pollard, được
công bố bởi R. Brent năm 1980 (xemWeisstein E.W. [7]). Trong thuật toán
ρ của Pollard, cố gắng để tìm thấy một nhân tử không tầm thường s của N
bằng cách tìm các chỉ số i, j với i < j sao cho xi ≡ x j (mod s) và xi 6≡ x j
(mod n). Dãy xn được định nghĩa bởi quan hệ truy hồi
x0 ≡ 2 (mod N)
xn+1 ≡ x2n+2 (mod N).
Pollard đã gợi ý rằng xn được so sánh với x2n trong đó n= 1,2,3, . . .. Brent
đã cải thiện phương pháp của Pollard bằng cách so sánh xn với xm, trong
đó m là lũy thừa nguyên của 2 nhỏ hơn n.
Thuật toán là
function brentFactor(N)
# Initial values x(i) and x(m) for i = 0.
xi := 2
xm := 2
for i from 1 to infinity
# Find x(i) from x(i-1).
xi := (xi ^ 2 + 1) % N
s := gcd(xi - xm, N)
if s 1 and s N then
25
return s, N/s
end if
if integralPowerOf2(i) then
xm := xi
end if
end do
end function
trong đó hàm integralPowerOf2(z) đúng nếu z là một lũy thừa nguyên
của 2 và sai nếu ngược lại. Việc triển khai hiệu quả cho hàm này có thể
được thực hiện bằng cách kiểm tra các lũy thừa kế tiếp của 2 cho đến khi
lũy thừa của 2 bằng hoặc vượt quá z
function integralPowerOf2(z)
pow2 := 1
while pow2 <= z do
if pow2 = z then
return true
end if
pow2 := pow2 * 2
end while
return false
end function
26
2.4 Phương pháp phân tích dùng đường cong elliptic
Thuật toán này thường là tốt khi thừa số bé của n chỉ có khoảng từ 13 đến
47 chữ số, còn thừa số lớn thì lại có thể to hơn rất nhiều. Ý tưởng của thuật
toán này là: Sử dụng một đường cong elliptic và một điểm R ở trên đó làm
công cụ phân tích, dựa trên nhận xét sau đây.
Quá trình lấy bội của điểm R (cộng liên tiếp nó với nó, theo quy tắc cộng
điểm trên đường cong elliptic) theo modulo của số n (số cần phân tích) đòi
hỏi thường xuyên phải làm việc với phân số có dạng (y2− y1)/(x2− x1),
và phép nghịch đảo (theo modulo n) sẽ không thực hiện được khi mẫu số
(x1− x2) không phải là nguyên tố cùng nhau với n, hay nói cách khác: nó
có một ước nào đó là p hay q. Gọi ước đó là p, khi ấy việc tính theo modulo
p sẽ cho điểm bội có mẫu số là 0, tức là bản thân điểm bội là vô cùng, ký
hiệu là ∅. Trong khi đó, việc tính điểm bội trên trường hữu tỷ lại không
gặp sự cố nào, dù rằng mẫu số (của cả hai) toạ độ điểm bội thu được đều
có ước là p. Nếu điều này không xảy ra với ước còn lại (tức là với q) thì
p đúng bằng ước chung lớn nhất của n và một trong hai mẫu số này. Tóm
lại, trong quá trình lấy bội của một điểm R trên trường số hữu tỷ, ta sẽ “gặp
may” tại một thời điểm nào đó mà mẫu số của điểm bội có ước chung với
n.
Một cách đơn giản, ta có thể cộng điểm R với chính nó (theo modulo
n) cho tới khi gặp “sự cố” (không thực hiện được) thì dùng lại và tìm ước
chung lớn nhất của n với mẫu số của toạ độ điểm trong biểu diễn hữu tỷ.
27
Tuy nhiên, ta cũng có thể lấy tuỳ ý một hợp số đủ lớn (đủ nhiều các loại ước
số khác nhau). Nếu trong số các ước của nó mà có một cái nào đó gây ra
được “sự cố” cho việc tính bội điểm R thì việc lấy bội của R theo chính hợp
số này cũng sẽ gặp sự cố (vì k ·R=∅ mod p, suy ra t · k ·R=∅ mod p,
với mọi số nguyên t). Và khi ấy ta chỉ việc lấy ước chung lớn nhất của n với
mẫu số của toạ độ điểm bội (theo hợp số đã nói) trong biểu diễn hữu tỷ là
có ngay một ước của n.
Như ta đã thấy, khả năng “gặp may” trong việc tính các bội lớn nhiều
hơn là đối với các bội nhỏ, cho nên người ta thường bắt đầu bằng việc tính
một bội đủ lớn (việc tính bội lớn của điểm có thể thực hiện nhanh theo
phương pháp nhân đôi liên tiếp, tương tự như phép bình phương liên tiếp
đối với phép nâng lên luỹ thừa). Trong thực tế, người ta thường lấy bội với
k = r!, trong đó được chọn tuỳ theo R (vì hợp số k như vậy sẽ có rất nhiều
ước số các loại). Lưu ý rằng các ước số của k không hề có quan hệ gì với
ước của n, cho nên k không cần phải đủ lớn đến mức để có thể thâu tóm
một ước nào đó của n.
Thuật toán không mang lại kết quả khi r!R không phải là∅ (theo mod-
ulo p hoặc modulo q), và khi r!R là ∅ theo cả hai modulo p và modulo q
(vì khi ấy ước chung lớn nhất tìm được lại đúng bằng n). Tuy nhiên, nếu
điều này xảy ra thì hãy chọn đường cong khác và điểm R khác.
28
2.5 Phương pháp phân tích bằng sàng trường số
Đây là phương pháp phân tích số lớn được xem là mạnh nhất trong thời gian
gần đây, đặc biệt là khi n có trên 110 chữ số thập phân, tức là n > 10110,
và ước bé nhất của nó có trên 48 chữ số (chính là những số hay được dùng
trong RSA hiện nay). Các bước chuẩn bị cho thực hiện thuật toán này như
sau.
• Lấy số tự nhiên d ≈
√
log(n)
log log(n) và m= b d
√
nc.
• Khai triển số n theo cơ số m,
n= md+ad−1md−1+ · · ·+a0 0≤ ai < m.
• Đa thức tương ứng với khai triển này là
f (x) = xd+ad−1xd−1+ · · ·+a0.
• Lấy α là một nghiệm của đa thức nêu trên và xét trường mở rộngQ[α].
Để cho dễ hình dung quy trình thực hiện thuật toán, ta xét một ví dụ cụ thể
là phân tích số n= 2501. Ta có d = 2, vì
√
log(2501)
log log(2501)
≈ 1.950217066, m=
⌊√
2501
⌋
= 50.
Do 2501= 502+1, nên ta có đa thức tương ứng là f (x) = x2+1. Đa thức
này có nghiệm là i cho nên ta sẽ xem xét trường mở rộng trường Q[i].
29
Ta để ý rằng trong vành Z/2510Z phần tử 50 có vai trò giống như
là i, vì 502 ≡ −1 mod 2501. Điều này đưa ta đến việc thiết lập ánh xạ
h : Z[i]→ Z, từ tập các số nguyên đại số Z[i] vào tập các số nguyên thông
thường, theo công thức h(a+bi) = a+b ·50, và khi ấy ta có đẳng thức sau
h(αβ )≡ h(α)h(β ) mod 2501 với mọi α, β ∈ Z[i].
Nhắc lại rằng ta gọi một số nguyên là mịn (hay là “vụn”) nếu như nó
phân tích được thành tích của các số nguyên tố nhỏ. Mục tiêu trước mắt của
chúng ta là tìm các số nguyên đại số mịn trong Z[i], mà ảnh của nó (trong
phép ánh xạ h) cũng là mịn trong Z (nói chung, việc tìm những số này là
vô cùng khó khăn cho nên ta hiểu vì sao cho đến nay RSA vẫn được xem
là có độ an toàn cao).
Ta ký hiệu những số như vậy là αi, và ta muốn tìm một tập con của
chúng, mà ta sẽ đánh số là α1, α2, · · · ,αr, sao cho tích của chúng là một số
“chính phương” trong Z[i] (nghĩa là, α1α2 · · ·αr = β 2 ∈ Z[i]), còn tích các
ảnh của chúng lại là một số chính phương thông thường, tức là
h(α1)h(α2) · · ·h(αr) = t2 ∈ Z.
Nếu có được những số này, ta sẽ phân tích được số n theo nhận xét sau đây.
Do
[h(β )]2= h(β )h(β )= h(β 2)= h(α1.α2 · · ·αr)= h(α1)h(α2) · · ·h(αr)= t2.
nên sau khi rút gọn h(β ) và t theo modulo n ta sẽ được hai số hˆ(β ) và tˆ
thoả mãn đẳng thức [
hˆ(β )
]2 ≡ tˆ2 mod n. (2.1)
30
và suy ra (
hˆ(β )− tˆ)(hˆ(β )+ tˆ)≡ 0 mod n. (2.2)
Nếu hˆ(β ) không đồng dư với ±tˆ theo modulo n, thì từ đẳng thức trên ta
suy ra mỗi thừa số ở vế trái sẽ chứa một ước số của n, hay nói cách khác
gcd
(
hˆ(β )− tˆ,n) cho ta một ước (không tầm thường) của số n.
Tóm lại, bài toán trở thành việc đi tìm các số nguyên đại số α1, α2, · · · ,αr
sao cho biểu thức (2.1) được thoả mãn.
2.6 Khả năng phân tích số bằng các “chip” chuyên dụng
Như đã nêu, hiện nay phương pháp được xem là hiệu quả nhất đối với bài
toán phân tích các số lớn là thuật toán sử dụng sàng trường số. Chính bằng
phương pháp này mà gần đây (năm 1999) người ta đã phân tích được hợp
số với độ dài kỷ lục là 155 chữ số thập phân (512 bit nhị phân), nhưng cũng
mất nhiều tháng ròng và với số lượng máy tính khổng lồ. Cho nên hệ mã
RSA chuẩn mực, với độ dài chìa khoá 1024 bit nhị phân (khoảng 308 chữ
số thập phân), được người ta xem là an toàn tuyệt đối trong vòng 15-20
năm nữa.
Thế nhưng gần đây (khoảng tháng 2/2003) Adi Shamir (một trong ba
đồng tác giả đã công bố phát minh hệ mã RSA) tuyên bố rằng ông đã
cùng các cộng sự tại phòng Tin học và Toán ứng dụng của Viện nghiên
cứu khoa học Weizmann (Israel) thiết kế ra “con chip đặc thù” cho việc
phân tích một số ra các thừa số nguyên tố, có sức mạnh phi thường và có
31
khả năng bẻ được hệ mã RSA chuẩn hiện nay. Một công cụ “đặc chủng”
kiểu này cũng đã từn
Các file đính kèm theo tài liệu này:
- luan_van_mot_so_thuat_toan_phan_tich_so_nguyen_hien_dai_va_u.pdf