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 (289.55 KB, 38 trang )
9
định Ψ = Φ−1 . Nếu việc này khả thi, Alice có thể quên đi khó khăn của
việc giữ khoá bí mật.
Trong hệ thống mã hoá khoá công khai ngày nay, các khó khăn trong
việc xác định Ψ từ Φ có xu hướng dựa trên một bài toán khó chưa giải
được, thường là các bài toán mà ngay cả những người giỏi nhất như Gauss
và các nhà toán học sau này đều không giải được, ví dụ như bài toán phân
tích nhân tử. Bây giờ chúng ta nghiên cứu các hệ thống mật mã khoá công
khai nổi tiếng nhất.
1.1.1
Hệ mã khoá RSA
Năm 1977, Ron Rivest, Adi Shamir và Len Adleman đề xuất một hệ thống
mật mã khoá công khai, là trung tâm của nhiều hệ thống bảo mật máy tính
ngày nay. Ý tưởng là Bob lấy hai số nguyên tố lớn p < q, tính tích của chúng
n = pq, và xác định hai số nguyên d và e thoả mãn de ≡ 1( (mod (p −
1)(q − 1)) (việc này dễ dàng). Khoá công khai, mà Alice sử dụng, sẽ bao
gồm số n và khoá mã hoá e, trong khi đó Bob giữ khoá giải mã d bí mật
(tức là giữ p và q). Ta giả sử tin nhắn m là một số nguyên thuộc [1, n − 1].
Để mã hoá m, Alice tính r := Φ(m) ≡ me (mod n), với Φ(m) ∈ [1, n − 1],
có thể dễ dàng tính được. Để giải mã Bob tính Ψ(r) := rd (mod n), với
Ψ(r) ∈ [1, n − 1]. Sử dụng Định lý Euler (cho tích của p và q) ta có thể dễ
dàng kiểm tra mde ≡ m (mod n), và do đó Ψ = Φ−1 .
Oscar biết n, và nếu ông có thể phân tích nhân tử n, thì ông cũng có thể
dễ dàng xác định Ψ, do đó độ bảo mật của hệ thống RSA phụ thuộc vào độ
khó của việc phân tích nhân tử. Như đã nói ở trên, việc này vượt xa những
gì khả thi ngày nay nếu chúng ta lấy p và q là các số nguyên tố có chứa
10
nhiều hơn 200 chữ số. Ta sẽ thấy rằng, việc tìm số nguyên tố (xác suất) lớn
như vậy rất dễ dàng bằng cách sử dụng các số giả nguyên tố, vấn đề sẽ thảo
luận trong luận văn.
1.1.2
Vấn đề lấy căn bậc hai modulo n
Từ Định lý Euler ta biết rằng, nếu ta có thể tìm được căn bậc hai b của 1
mod n mà khác ±1, thì điều này chứng tỏ rằng n là hợp số. Thực vậy, từ b
suy ra phép phân tích nhân tử của số lẻ n với:
gcd(b − 1, n) gcd(b + 1, n) = gcd(b2 − 1, n) = n
(1.1)
(do b2 ≡ 1 (mod n)) trong đó gcd(b − 1, n) và gcd(b + 1, n) nhỏ hơn n (vì
b ≡ 1 hay −1 (mod n)), kéo theo 1 < gcd(b − 1, n), gcd(b + 1, n) < n và
do đó (1.1) là phép phân tích nhân tử không tầm thường của n.
Một cách tổng quát hơn ta giả sử rằng cho trước hợp số lẻ n với ít nhất
hai nhân tử nguyên tố phân biệt, Oscar có một hàm fn sao cho nếu a là
một bình phương (mod n), thì fn (a)2 ≡ a (mod n). Sử dụng fn , Oscar
có thể dễ dàng phân tích nhân tử n (với thời gian đa thức ngẫu nhiên), vì
nếu ông lấy các số nguyên b trong khoảng [1, n − 1] một cách ngẫu nhiên
thì gcd( fn (b2 ) − b, n) là một nhân tử không tầm thường của n với điều
kiện b ≡ fn (b2 ) hay − fn (b2 ) (mod n); vì có ít nhất bốn căn bậc hai của
b2 (mod n), xác suất đây là một phép phân tích nhân tử của n là lớn hơn
hoặc bằng 1/2.
Sử dụng ý tưởng này, Rabin xây dựng một hệ thống mật mã khoá công
khai mà về bản chất việc phá khoá khó như tìm phân tích nhân tử của n.
11
1.1.3
Độ khó của việc tìm số không chính phương modulo p
Cho một số nguyên tố lẻ p ta dễ tìm được bình phương modulo p: lấy 1
hoặc 4 hoặc 9, hoặc thậm chí bất kỳ a2 (mod p). Có đúng (p − 1)/2 giá
trị trong số các giá trị modulo p khác không là bình phương modulo p, và
do đó có đúng (p − 1)/2 giá trị không là bình phương modulo p. Ta có thể
đoán rằng dễ dàng tìm được chúng, nhưng chúng ta không biết một cách
chắc chắn làm thế nào để nhanh chóng tìm một giá trị như vậy cho mỗi số
nguyên tố p (mặc dù chúng ta thực sự biết một cách nhanh chóng để kiểm
tra một số không chính phương hay không nếu chúng ta có nó).
Ý tưởng rõ ràng nhất là thử lần lượt a = 2, 3, 4, · · · cho tới khi tìm thấy
một số không chính phương. Người ta tin rằng có một số không chính
phương nhỏ hơn hoặc bằng 2(log p)2 , nhưng ta không thể chứng minh được
điều này (mặc dù ta có thể suy ra từ Giả thuyết Riemann suy rộng).
1.2
Vấn đề sinh số nguyên tố lớn
Trong mục này, ta sẽ thảo luận về độ phức tạp của việc sinh số nguyên tố
lớn. Ta sẽ dùng tài liệu Hà Huy Khoái [3] làm tài liệu tham khảo chính. Ta
sẽ nghiên cứu việc sinh số nguyên tố thỏa mãn:
1. Số sinh ra có độ dài 3072 bit,
2. Số được sinh ra là ngẫu nhiên, và
3. Thời gian sinh mỗi số phải nhanh, thời gian trung bình bé hơn 5 giây/1
số đối với các máy tính thông thường.
12
Nhắc lại, một số nguyên dương p > 1 được gọi là một số nguyên tố nếu
p không chia hết cho số nguyên dương nào ngoài 1 và p. Ngược lại, số p
được gọi là hợp số.
Ta ký hiệu π(n) là số các số nguyên tố nhỏ hơn hoặc bằng n, và gọi nó
là hàm phân phối của các số nguyên tố.
Ví dụ 1.2.1. π(10) = 4 vì có bốn số nguyên tố nhỏ hơn 10 là 2, 3, 5, 7.
Ta có định lý sau đây về ước lượng xấp xỉ hàm số học π(·):
Định lí 1.2.2. Ta có
π(n)
= 1.
n→∞ n/ ln n
lim
Nói cách khác, giá trị π(n) xấp xỉ bằng n/ ln n khi n vô cùng lớn.
Ví dụ 1.2.3. Với n = 109 , ta có
π(n) = 50847534
và
n/ ln n = 48254942.
Sai số ở đây là 6%.
Vậy ta lấy ngẫu nhiên một số nguyên dương k bit, xác suất để số này
là số nguyên tố bằng 1/ ln 2k . Vậy về trung bình, ta cần ln 2k lần thử để lấy
được một số nguyên tố k bit.
Ví dụ 1.2.4. Nếu k = 3072 thì trung bình lấy ngẫu nhiên ln 23072 ≈ 2130
số, ta sẽ có được một số nguyên tố k bit.
Từ phân tích ở trên, về trung bình thuật toán ngẫu nhiên dưới đây sẽ
dừng sau 2130 bước lặp.
Thuật toán sinh số nguyên tố.