Tiếp nội dung phần 1, Giáo trình Bảo mật thông tin: Phần 2 cung cấp cho người học những kiến thức như: Các hệ mật mã khoá công khai; Chữ ký điện tử hàm hash và phân phối khoá. Mời các bạn cùng tham khảo để nắm chi tiết nội dung giáo trình!
Trang 1CHƯƠNG 4: CÁC HỆ MẬT MÃ KHOÁ CÔNG KHAI 4.1 Giới thiệu về mật mã khoá công khai
Trong mô hình mật mã cổ điển Alice (người gửi) và Bob (người nhận) chọn
một cách bí mật khoá K Sau đó dùng K để tạo luật mã hoá e k và luật giải mã d k Trong
hệ mật này d k hoặc giống như e k hoặc dễ dàng tính được từ e k Các hệ mật thuộc loại
này được gọi là hệ mật khoá bí mật, nếu để lộ e k thì làm cho hệ thống mất an toàn
Nhược điểm của hệ mật này là nó yêu cầu phải có thông tin về khoá K giữa Alice và Bob qua một kênh an toàn trước khi gửi một bản mã bất kỳ Trên thực tế điều này rất khó đảm bảo Chẳng hạn khi Alice và Bob ở cách xa nhau và họ chỉ có thể liên lạc với nhau bằng thư tín điện tử (Email) Trong tình huống đó Alice và Bob không thể tạo một kênh bảo mật với giá phải chăng
Ý tưởng xây dựng một hệ mật khoá công khai (hay khoá dùng chung) là tìm
một hệ mật không có khả năng tính toán để xác định d k khi biết e k Nếu thực hiện được
như vậy thì quy tắc mã e k có thể được công khai bằng cách công bố nó trong một danh
bạ (bởi vậy nên có thuật ngữ hệ mật khoá công khai) Ưu điểm của hệ mật khoá công khai là ở chỗ Alice (hoặc bất kì một ai) có thể gửi một bản tin đã mã cho Bob (mà
không cần thông tin trước về khoá mật) bằng cách dùng luật mã công khai e k Người nhận sẽ là người duy nhất có thể giải được bản mã này bằng cách sử dụng luật giải mã
bí mật d k của mình
Có thể hình dung hệ mật này tương tự như sau: Bob tạo hai khóa lập mã Kd và giải mã Ke rồi gửi khóa lập mã cho Alice, Alice dùng khóa lập mã của Bob để mã hóa sau đó gửi bản tin đã mã cho Bob Bob dùng khóa bí mật của mình để giải mã bản tin nhận được
Ý tưởng về một hệ mật khoá công khai đã được Diffie và Hellman đưa ra vào năm 1976 Việc hiện thực hoá nó do Rivesrt, Shamir và Adleman đưa ra đầu tiên vào năm 1977, họ đã tạo nên hệ mật nổi tiếng RSA Kể từ đó một số hệ mật được công bố,
độ mật của chúng dựa trên các bài toán tính toán khác nhau
Trang 24.1.1 Một số bài toán cơ bản
Phần này giới thiệu một số bài toán số học được sử dụng khi xây dựng các hệ mật mã khoá công khai
Bài toán phân tích số nguyên (thành thừa số nguyên tố):
Cho số nguyên dương n , tìm tất cả các ước số nguyên tố của nó, hay là tìm dạng phân tích chính tắc của n = 1 2
k
p p p , trong đó p i là các số nguyên tố từng cặp khác nhau và các i 1
Bài toán này có liên hệ mật thiết với các bài toán thử tính nguyên tố hay thử tính hợp số của một số nguyên
Trong lý thuyết mật mã, bài toán này thường được sử dụng với các dữ liệu n là
số nguyên Blum, tức các số nguyên dương có dạng tích của hai số nguyên tố lớn nào
đó
Bài toán RSA (Rivest-Shamir-Adleman) :
Cho số nguyên dương n là tích của hai số nguyên tố lẻ khác nhau, một số nguyên dương e sao cho gcd(e, (n)) = 1, và một số nguyên c, tìm một số nguyên m
sao cho m ec(mod )n
Điều kiện gcd(e, (n)) = 1 bảo đảm với mỗi số nguyên c 0, 1, , n -1 có
đúng một số m 0, 1, , n -1 sao cho m ec(mod )n
Nếu biết hai thừa số nguyên tố của n thì sẽ tính được (n) = (p -1)(q -1) Vì gcd(e, (n)) =1 nên tính được d = e -1mod (n), do đó sẽ tìm được m = c d modn Như
vậy, bài toán RSA có thể qui dẫn trong thời gian đa thức về bài toán phân tích số nguyên
Bài toán thặng dư bậc hai :
Cho một số nguyên lẻ n là hợp số, và một số nguyên a J n ( tập tất cả các số a
có ký hiệu Jacobi J(a,n) =1) Hãy quyết định xem a có là thặng dư bậc hai theo mod n
hay không?
Trong lý thuyết mật mã, bài toán này cũng thường được xét với trường hợp n là
số nguyên Blum Khi đó nếu a J n , thì a là thặng dư bậc hai theo modn khi và chỉ khi J(a,n) =1, điều kiện này có thể thử được vì nó tương đương với điều kiện a (p -1)/2 1
(modp) Như vậy, trong trường hợp này, bài toán thặng dư bậc hai có thể qui dẫn trong
Trang 3thời gian đa thức về bài toán phân tích số nguyên Mặt khác, nếu không biết cách phân
tích n thành thừa số nguyên tố thì cho đến nay, không có cách nào giải được bài toán
thặng dư bậc hai trong thời gian đa thức
Bài toán tìm căn bậc hai mod n :
Cho một số nguyên lẻ n là hợp số Blum, và một số a Q n (tập các thặng dư bậc
hai theo modn) Hãy tìm một căn bậc hai của a theo modn, nghĩa tìm x sao cho x 2 a (modn)
Nếu biết phân tích n thành thừa số nguyên tố n =p*q, thì bằng cách giải các phương trình x 2 a theo các modp và modq, rồi sau đó kết hợp các nghiệm của chúng lại theo định lý số dư China sẽ được nghiệm theo modn, tức là căn bậc hai của a theo modn cần tìm Vì mỗi phương trình x 2 a theo modp và modq có hai nghiệm (tương ứng theo modp và modq ), nên kết hợp lại thu được bốn nghiệm, tức bốn căn bậc hai của a theo modn Người ta đã tìm được một số thuật toán tương đối đơn giản (trong thời gian đa thức) giải phương trình x 2 a (modp) với p là số nguyên tố Như vậy, bài toán tìm căn bậc hai modn có thể qui dẫn trong thời gian đa thức về bài toán phân tích
số nguyên
Ngược lại, nếu có thuật toán giải bài toán tìm căn bậc hai modn thì cũng có
thể xây dựng một thuật toán giải bài toán phân tích số nguyên như sau: Chọn ngẫu
nhiên một số x với gcd(x,n) =1, và tính a = x2modn Dùng thuật toán cho a để tìm một căn bậc hai modn của a Gọi căn bậc hai tìm được đó là y Nếu y x (modn), thì
phép thử thất bại, ta phải chọn tiếp một số x khác, nếu y ≢ x (modn) thì gcd(x-y, n) là
một ước số không tầm thường của n, cụ thể là p hay là q Vì n có 4 căn bậc hai modn
nên xác suất của thành công ở mỗi lần thử là 1/2, do đó số trung bình (kỳ vọng toán
học) các phép thử để thu được một thừa số p hay q của n là 2, từ đó ta thu được một
thuật toán giải bài toán phân tích số nguyên (Blum) với thời gian trung bình đa thức
Bài toán logarithm rời rạc :
Cho số nguyên tố p, một phần tử nguyên thuỷ theo modulo p (hay là phần
tử nguyên thuỷ của Zp), và một phần tử Z p Tìm số nguyên x (0 x p - 2) sao cho
x (modp)
Bài toán logarithm rời rạc suy rộng :
Trang 4Cho một nhóm cyclic hữu hạn G cấp n, một phần tử sinh (nguyên thuỷ) của
G, và một phần tử G Tìm số nguyên x (0 x n - 1) sao cho x
= Các nhóm được quan tâm nhiều nhất trong lý thuyết mật mã là: nhóm nhân của
trường hữu hạn GF(p) - đẳng cấu với nhóm Z p của trường Z p, nhóm nhân của
trường hữu hạn GF(2 m), nhóm nhân Z na:0 a n 1, gcd( , )a n 1của trường Z n với n là hợp số, nhóm gồm các điểm trên một đường cong elliptic xác định trên một
trường hữu hạn,
Bài toán Diffie-Hellman :
Cho số nguyên tố p, một phần tử nguyên thuỷ theo modp (tức phần tử sinh
của Z p), và các phần tử amod
p
và bmodp Hãy tìm giá trị abmodp
Có thể chứng minh được rằng bài toán Diffie-Hellman qui dẫn được về bài toán logarithm rời rạc trong thời gian đa thức
Bài toán tổng tập con (hay bài toán KNAPSACK) :
Cho một tập các số nguyên dương a a1 , 2 , ,a nvà một số nguyên dương s Hãy xác định xem có hay không một tập con các a j mà tổng của chúng bằng s Một cách tương đương, hãy xác định xem có hay không các x i 0,1 (1 i n) sao cho
Bài toán này là một bài toán P- đầy đủ, tức là thuộc lớp những bài toán khó
mà cho đến nay chưa tìm được thuật toán giải chúng trong thời gian đa thức
Bài toán giải mã đối với mã tuyến tính :
Mã tuyến tính là một lớp mã truyền tin có tính chất tự sửa sai được sử dụng trong kỹ thuật truyền tin số hoá Có thể phát biểu trực tiếp bài toán giải mã đối với mã tuyến tính như sau:
Cho một ma trận cấp n x m A = (a ij) gồm các thành phần là 0 hoặc 1, một vectơ
y = (y1,y2, ,y m ) các giá trị 0 và 1 và một số nguyên dương K Hỏi có hay không một
vectơ x = (x1,x2, ,x n ) gồm các số 0 hoặc 1 và có không nhiều hơn K số 1 sao cho với mọi j (1j m):
1
(mod 2)
n
i ij j i
Trang 54.1.2 Một số hệ mật mã khoá công khai quan trọng :
- Hệ mật mã RSA: Độ bảo mật dựa trên độ khó của việc phân tích ra thừa số nguyên tố các số nguyên lớn
- Hệ mật mã xếp ba lô Merkle - Hellman: dựa trên tính khó giải của bài toán tổng các tập con (là bài toán NP đầy đủ - một lớp khá lớn các bài toán không có thuật giải được biết trong thời gian đa thức)
- Hệ mật mã McEliece: dựa trên lý thuyết mã đại số Hệ mật McEliece dựa trên bài toán giải mã cho các mã tuyến tính (cũng là một bài toán NP đầy đủ)
- Hệ mật mã Elgamal: trên tính khó giải của bài toán logarithm rời rạc trên các trường hữu hạn
- Hệ mật mã Chor - Rivest: được xem như một loại hệ mật xếp ba lô
- Hệ mật mã trên các đường cong Elliptic: Các hệ mật mã này là biến tướng của các hệ mật mã khác (chẳng hạn như hệ mật Elgamal), chúng làm việc trên các đường cong Elliptic Hệ mật mã này đảm bảo độ mật với khoá số nhỏ hơn các
hệ mật mã khoá công khai khác
Một chú ý quan trọng là một hệ mật mã khoá công khai không bao giờ đảm bảo được độ mật tuyệt đối (an toàn vô điều kiện) Vì khi đối phương nghiên cứu một bản
mã y có thể mã lần lượt các bản rõ bằng luật mã công khai e k cho tới khi tìm được bản
rõ duy nhất x đảm bảo y = e k(x) Bản rõ này chính là kết quả giải mã của y Bởi vậy ta chỉ nghiên cứu độ mật về mặt tính toán của các hệ mật mã này
4.1.3 Hàm cửa sập một chiều
Hàm mã khoá công khai e k phải là một hàm dễ tính toán Song việc tìm hàm ngược (hàm giải mã) phải rất khó khăn (đối với bất kỳ ai không phải là Bob) Đặc tính
dễ tính toán nhưng khó tính toán hàm ngược thường được gọi là đặc tính một chiều
Bởi vậy điều kiện cần thiết là e k phải là hàm một chiều
Khái niệm: Hàm số số học y = f(x) được gọi là hàm một chiều (one-way
function), nếu việc tính thuận từ x ra y là “dễ”, nhưng việc tính ngược từ y tìm lại x là
Trang 6rất “khó”, (có thể hiểu “dễ” là tính đƣợc trong thời gian đa thức, còn “khó” là không tính đƣợc trong thời gian đa thức)
Các hàm một chiều đóng vai trò quan trọng trong mật mã học: chúng rất quan trọng các hệ mật khoá công khai và trong nhiều lĩnh vực khác Tuy nhiên, mặc dù có rất nhiều hàm đƣợc coi là hàm một chiều nhƣng cho tới nay vẫn không tồn tại một hàm nào có thể chứng minh đƣợc là hàm một chiều
Ví dụ 1 Cho p là một số nguyên tố và là một phần tử nguyên thuỷ theo modulo p
từ y mà ta ký hiệu x= log ( )a y là một hàm có độ phức tạp tính toán rất lớn
Ví dụ 2 Cho n =p.q là tích của hai số nguyên tố lớn Hàm số y = x 2 modn (từ Z n vào
Z n ) cũng đƣợc xem là một hàm một phía
Ví dụ 3 Cho n =p.q là tích của hai số nguyên tố lớn, a là một số nguyên sao cho
gcd(a, (n)) =1 Hàm số y = x a modn (từ Z n vào Z n ) cũng là một hàm một phía, nếu
giả thiết là biết n nhƣng không biết p, q
Để xây dựng một hệ mật mã khoá công khai thì việc tìm đƣợc một hàm một
chiều vẫn chƣa đủ e k không phải là hàm một chiều đối với Bob vì anh ta phải có khả năng giải mã các bản tin nhận đƣợc một cách hiệu quả Điều cần thiết là Bob phải có
một cửa sập chứa thông tin bí mật cho phép dễ dàng tìm hàm ngƣợc của e k Nhƣ vậy Bob có thể giải mã một cách hữu hiệu vì anh ta có một hiểu biết tuyệt mật nào đó về
K Bởi vậy một hàm đƣợc gọi là cửa sập một chiều nếu nó là hàm một chiều và nó trở nên dễ tính ngƣợc nếu biết một cửa sập nhất định
Khái niệm: Hàm y = f (x ) đƣợc gọi là hàm cửa sập một chiều (trapdoor
one-way function), nếu việc tính thuận từ x ra y là “dễ”, việc tính ngƣợc từ y tìm lại x là rất
“khó”, nhƣng có một cửa sập z để với sự trợ giúp của cửa sập z thì việc tính x từ y và z
lại trở thành dễ
Ví dụ 4 Hàm số y = x a modn khi biết p và q là hàm cửa sập một chiều Từ x tính y là
dễ, từ y tìm x (nếu chỉ biết n, a) là rất khó, nhƣng vì biết p và q nên tính đƣợc (n) = (p-1)(q-1), và dùng thuật toán Euclide mở rộng tìm đƣợc b sao cho a.b 1 (mod(n)) ,
từ đó dễ tính đƣợc x = y b modn Ở đây, có thể xem b là cửa sập
Trang 74.1.4 Định nghĩa hệ mật mã khóa công khai
Sơ đồ chung của hệ mật mã khoá công khai được cho bởi S = (P, C, K, E, D) trong đó P là tập ký tự bản rõ, C là tập ký tự bản mã, K là tập các khoá, mỗi khoá K
gồm có hai phần K = (K’, K''), K' là khoá công khai dành cho việc lập mật mã, còn K''
là khoá bí mật dành cho việc giải mã Với mỗi ký tự bản rõ xP, thuật toán lập mã E
cho ta ký tự mã tương ứng y =E(K', x) C , và với ký tự mã y thuật toán giải mã D sẽ
cho ta lại ký tự bản rõ x: D (K'', y) = D (K'', E (K', x)) = x
4.2 Kiểm tra tính nguyên tố theo xác suất
Các thuật toán mã hóa khóa công khai đều cần phải sử dụng các số nguyên tố
Có một số phương pháp để sinh số nguyên tố và hầu hết chúng đều dựa trên các thuật
toán kiểm tra tính nguyên tố của một số nguyên
Các thuật toán kiểm tra số nguyên tố được chia làm hai loại: thuật toán tất định
và thuật toán xác suất Các thuật toán tất định cho biết chính xác câu trả lời một số
nguyên có phải là một số nguyên tố hay không, còn thuật toán xác suất cho biết xác
suất của một số nguyên là số nguyên tố là bao nhiêu
Các thuật toán xác suất thường được xây dựng cho các bài toán quyết định, tức
các bài toán xác định trên một tập hợp dữ liệu sao cho ứng với mỗi dữ liệu bài toán có
một trả lời có hoặc không Người ta chia các thuật toán xác suất thành hai loại: loại
thuật toán Monte Carlo và loại thuật toán Las Vegas Thuật toán Monte Carlo luôn kết
thúc với kết quả có hoặc không đối với mọi dữ liệu đầu vào bất kỳ; còn thuật toán Las
Vegas tuy cũng kết thúc với mọi dữ liệu, nhưng có thể kết thúc với một thông báo
không có trả lời có hoặc không
Thuật toán Monte Carlo được gọi là thiên về có, nếu nó cho trả lời có thì trả lời
đó chắc chắn là đúng, còn nếu nó cho trả lời không thì trả lời đó có thể sai với một xác
suất nào đó Tương tự, một thuật toán Monte Carlo được gọi là thiên về không, nếu
nó cho trả lời không thì trả lời đó chắc chắn là đúng, còn nếu nó cho trả lời có thì trả
lời đó có thể sai với một xác suất nào đó
Còn với thuật toán Las Vegas, nếu nó kết thúc với trả lời có hoặc không, thì trả
lời đó chắc chắn đúng, và nó có thể kết thúc với thông báo không có trả lời với một
xác suất nào đó
Trang 84.2.1 Một số khái niệm và định nghĩa
Một bài toán quyết định là một bài toán trong đó một câu hỏi cần được trả lời
có hoặc không Một thuật toán xác suất là một thuật toán bất kỳ có sử dụng các số ngẫu nhiên (ngược lại, thuật toán không sử dụng các số ngẫu nhiên sẽ được gọi là một thuật toán tất định) Các định nghĩa sau có liên quan tới các thuật toán xác suất cho các bài toán quyết định
Định nghĩa 1: Thuật toán Monte Carlo định hướng “có” là một thuật toán xác suất
cho một bài toán quyết định, trong đó câu trả lời “có” luôn luôn là đúng còn câu trả lời
Định nghĩa 2: Phương trình đồng dư bậc hai và thặng dư bậc hai
Phương trình đồng dư bậc hai có dạng x2 = a (mod n) (1) với n nguyên dương, a nguyên thỏa mãn điều kiện gcd(a,n) = 1
Nếu phương trình (1) có nghiệm thì ta nói a là thặng dư bậc hai theo modulo n, ngược lại nếu phương trình vô nghiệm, a được gọi là một bất thặng dư bậc hai theo modulo n
Ví dụ: Các thặng dư bậc hai theo modulo 11 là 1, 3, 4, 5 và 9 vì (1)2 = 1, (5)2
= 3, (2)2 = 4, (4)2 = 5, (3)2 = 9 (các phép số học đều thực hiện trong Z11)
Tập các thặng dư bậc hai theo modulo n được ký hiệu là Qn, tập các bất thặng
dư bậc hai theo modulo n được ký hiệu là
Trang 9Định lý: Nếu p là một số nguyên tố và là một phần tử sinh của Z*p, khi đó a
là một thặng dƣ bậc hai theo modulo p khi và chỉ khi a = i
mod p, trong đó i là một số nguyên chẵn
Từ định lý trên suy ra Qn = = (p-1)/2, hay tập Z*n đƣợc phân hoạch thành
Định nghĩa 3: Ký hiệu Legendre
Giả sử p là một số nguyên tố lẻ, với một số nguyên a bất kỳ a ≥ 0, ta định nghĩa
ký hiệu Legendre nhƣ sau
Theo tiêu chuẩn Euler: a(p-1)/2 1 (mod p) khi và chỉ khi a là một thặng dƣ bậc hai theo modulo p Nếu a là bội của p thì rõ ràng a(p-1)/2 0(mod p) Nếu a không là một thặng dƣ bậc hai theo modulo p thì a(p-1)/2 -1 (mod p) vì ap-1 1(mod p) Vậy ký hiệu Legendre đƣợc đánh giá theo định lý sau:
Định lý: Giả sử p là một số nguyên tố, khi đó a(p-1)/2 (mod p)
Ví dụ: p = 13
L(9/13) = 96 mod 13 1 mod 13
L(6/13) = 66 mod 13 12 mod 13 -1 mod 13
Định nghĩa 4: Ký hiệu Jacobi
Trang 10Ký hiệu Jacobi là sự khái quát hóa của ký hiệu Legendre, nó định nghĩa
cho bất kỳ cặp số nguyên a và n nào
Định nghĩa
Giả sử n là một số nguyên dương lẻ và phân tích theo các luỹ thừa nguyên tố của n là p1e1 … pKek Giả sử a 0 là một số nguyên
Ký hiệu Jacobi được định nghĩa như sau:
Nếu n là số nguyên tố thì ký hiệu Jacobi và Legendre là đồng nhất
Trên thực tế có thể tính được ký hiệu Jacobi một cách thuận lợi nhờ các tính chất sau:
1 Nếu n là một số nguyên tố lẻ và m1 m2 (mod n) thì:
1 m
2 Nếu n là một số nguyên lẻ thì
1 nếu n 1 (mod 8) -1 nếun 3 (mod 8)
m n
2 n
4 Giả sử m và n là các số nguyên lẻ, khi đó:
Trang 11
1
111119
87
65
33
2
19
62787
62785
62783
62789975
6278
2 2
Trang 12bởi số các phép rút gọn theo modulo cần tiến hành O(log n) phép rút gọn theo modulo Mỗi phép có thể thực hiện trong thời gian O((log n)2) Điều đó chứng tỏ rằng, độ phức tạp là O((log n)3) là đa thức theo logn Thực ra bằng các phân tích chính xác hơn, có thể chứng tỏ rằng, độ phức tạp chỉ cỡ O((log n)2)
4.2.2 Thuật toán kiểm tra số nguyên tố theo xác suất
a Thuật toán Solova – Strassen
Thuật toán Solovay-Strassen là một trong các phương pháp kiểm tra tính nguyên tố theo xác suất do Robert M Solovay và Volker Strassen phát triển
Định nghĩa Số giả nguyên tố Euler
Xem tiêu chuẩn Euler là mệnh đề Q(p,a) Khi đó Q(p,a) đúng với mọi số nguyên tố p
và mọi số tự nhiên a, 1 < a < p Thay số nguyên tố p bằng số lẻ n và ký hiệu Legendre bằng
ký hiệu Jacobi, ta định nghĩa: Hợp số n được gọi là số giả nguyên tố Euler cơ sở a (1 < a < p)
Giải thuật Solova - Strassen
Input: n là số tự nhiên lẻ
Output: FALSE nếu n là hợp số, TRUE nếu n là số nguyên tố
1 Chọn a ngẫu nhiên trong khoảng[1, n-1]
2 Tính ký hiệu Jacobi J=
3 Tính x =a (n-1)/2 mod n
4 Nếu J ≠ x thì trả về FALSE
nếu khác trả về TRUE
b Thuật toán Miller – Rabin
Thuật toán Miller-Rabin là một thuật toán xác suất để kiểm tra tính nguyên tố
được đề xuất đầu tiên bởi Gary L Miller như một thuật toán tất định, dựa trên giả thiết Riemann tổng quát; Michael O Rabin đã sửa chữa nó thành một thuật toán xác suất
Tiêu chuẩn Miler-Rabin
Giả sử p là một số nguyên tố lẻ, khi đó p - 1 là số chẵn và ta có thể viết p − 1
dưới dạng 2s
.m, trong đó s là một số tự nhiên ≥ 1 và m là số lẻ Điều này nghĩa là ta rút hết các thừa số 2 khỏi p − 1 Lấy số a bất kỳ trong tập {1,2, ,p-1}
Trang 13Xét dãy số xk = với k = 0, 1, 2, , s Khi đó x k = (x k − 1)2, với k=1,2, ,s và
x s = p &minus 1
Từ định lý Fermat nhỏ: ap-1 1 (mod p) hay xs 1 (mod p) hay xs-1 1 (modp)
Do đó, hoặc xs-1 1 (mod p) hoặc xs-1 -1 (mod p)
Nếu xs-1 -1 (mod p) ta dừng lại, còn nếu ngược lại ta tiếp tục với x s − 2
Sau một số hữu hạn bước
hoặc ta có một chỉ số k, 0 ≤ k ≤ s-1 sao cho xk -1 (mod p),
hoặc tới k=0 ta vẫn có xk 1 (mod p)
Ta có mệnh đề Q(p,a) như sau:
Nếu p là số nguyên tố lẻ và p - 1 = 2s.m thì với mọi a: 0<a<p-1:
hoặc xk = 1 (mod p), với mọi k=0,1,2, ,s
hoặc tồn tai k: 0 ≤ k ≤ s sao cho xk = -1 (mod p)
Giải thuật Miller-Rabin
Input: Số tự nhiên lẻ n
Output: NguyenTo: TRUE/FALSE
1 Phân tích n-1 = 2s.m trong đó s ≥ 1và m là số tự nhiên lẻ
2 Chọn ngẫu nhiên số tự nhiên a {2, ,n-1}
Trang 14Định lý phần dư China
Giả sử m1,…,mk là các số nguyên dương nguyên tố cùng nhau từng đôi một và
a1,…, ak là các số nguyên Khi đó, hệ k đồng dư thức x ai (mod mi) (1 i k ) sẽ có một nghiệm duy nhất theo modulo M = m1.m2…mk được cho theo công thức
Nếu p là số nguyên tố, a là số nguyên thì ap a (mod p)
Nếu p không chia hết cho a thì ap-1 1 (mod p)
Ví dụ: 47 4 (mod 7); 47-1 = 46 1 (mod 7)
b Định lý Euler:
Nếu gcd(a, n) = 1 thì a(n) 1 (mod n)
Trường hợp n là số nguyên tố ta có định lý Ferma
Trang 15Theo định lý Euler a Z*n : a(n) 1 mod n
Vậy tập Z*n có thể biểu diễn dưới dạng Z*n = {a Zn : a(n) 1 mod n }
Cấp (bậc) của một phần tử:
t được gọi là bậc của a Z*n nếu t là số nhỏ nhất thỏa mãn at 1 mod n
Ví dụ: n = 21 (n) = (3) (7) = 2 6 =12 tập Z*21 có 12 phần tử và có bậc tương ứng như sau:
Định lý Lagrange:
Giả sử G là một nhóm cấp n và g G Khi đó cấp của g là ước của n
Trang 164.3.3 Phần tử nguyên thủy
Từ định lý Lagrange: nếu p là số nguyên tố thì Zp* là một nhóm cấp p-1 và một phần tử bất kì trong Zp* sẽ có bậc là ƣớc của p-1
Nếu p là số nguyên tố thì nhóm Zp* là nhóm cyclic khi đó tồn tại một phần tử
Zp* có cấp bằng p-1 Phần tử có cấp p-1 đƣợc gọi là phần tử nguyên thuỷ (phần tử sinh) modulo p
là phần tử nguyên thuỷ theo modulo p thì các phần tử 0
, 1 ,… p-2đều khác nhau theo modulo p và lập thành Z*p = {i : 0 i p-2}
Một phần tử bất kì Zp* có thể đƣợc viết là = i, trong đó 0 i p-2 (theo một cách duy nhất ) Cấp của = i
20 mod 13 =1 21 mod 13 =2 22 mod 13 =4
23 mod 13 =8 24 mod 13 =3 25 mod 13 =6
26 mod 13 =12 27 mod 13 =11 28 mod 13 =9
29 mod 13 =5 210 mod 13 =10 211 mod 13 =7
Phần tử 2i là nguyên thuỷ khi và chỉ khi gcd(i,12) = 1; nghĩa là i = 1, 5, 7, 11 Bởi vậy các phần tử nguyên thuỷ theo modulo 13 là 2, 6, 7 và 11
Tính chất của phần tử nguyên thủy
1 Với mọi số nguyên tố p, Z p* là nhóm cyclic và có (p-1) phần tử nguyên thuỷ
1; …; 1
thì a là phần tử nguyên thuỷ theo modp (tức của Z p* )
3 Nếu g là phần tử nguyên thuỷ theo modp thì g i modp i mà gcd(i, p -1) = 1
cũng là phần tử nguyên thuỷ theo modp
i)1,-UCLN(p
1-p
Trang 174.3.4 Tính đồng dư của lũy thừa lớn (x e mod n)
Nếu e > (n) ta dùng hệ quả 1 của định lý Euler để làm giảm số mũ
Nếu e < (n) ta có hai thuật toán hữu hiệu để tính, đó là thuật toán bình phương
và nhân và thuật toán bình phương liên tiếp
Thuật toán bình phương và nhân:
Thuật toán bình phương và nhân là thuật toán tính nhanh lũy thừa tự nhiên của một số (thực hoặc nguyên), trong trường hợp cơ số là số nguyên có thể được rút gọn theo một môđun nào đó
Phép nâng lên lũy thừa tự nhiên bậc n của số x (x được gọi là cơ số) được định
nghĩa từ hệ thức
Với n lớn số phép nhân là rất lớn
Ví dụ với n=35 quá trình tính x35 qua 35 bước:
Nhận xét rằng có thể giảm bớt số phép nhân chẳng hạn với dãy phép tính
được quy về một số phép bình phương và phép nhân do
vậy mà có tên gọi thuật toán bình phương và nhân
Trong giải thuật đệ quy trên đây ta xét tính chẵn lẻ của n và liên tục chia n cho
2 lấy phần nguyên cho đến khi n=0 Thực chất quá trình này chính là tìm các bít của n
Do đó ta có thể thực hiện phép đổi ra số nhị phân trước sau đó tính lũy thừa theo quy tắc bình phương và nhân
Các bước thực hiện:
Trang 18Bước 1: Biểu diễn số mũ e dưới dạng nhị phân e =
Bước 2: y =1;
for (i = l-1; i>=0; i )
if (bi) y = x.y2 mod n ; else y = y2mod n;
Thuật toán bình phương liên tiếp
Bước 1: Biểu diễn số mũ e dưới dạng nhị phân e =
Bước 2: Liên tiếp tính các đồng dư bình phương mod n
Bước 3: Lấy tích của các lũy thừa tương ứng với các bi ≠ 0, rút gọn theo modulo n
Ví dụ: Tính y = 8743 mod 103
Trang 19Bước 1: Phân tích 43 = 25 + 23 + 21 + 20
Bước 2: Tính liên tiếp các đồng dư bình phương
= 87 (mod 103) = 87 = 872(mod 103) = 50
= 874 (mod 103) = 502 (mod 103) = 28
= 878 (mod 103) = 282 (mod 103) = 63
= 8716 (mod 103) = 632 (mod 103) = 55
= 8732 (mod 103) = 552 (mod 103) = 38 Bước 3: Lấy tích của các lũy thừa bậc 25, 23, 21, 20 rút gọn theo modulo 130
y = 8743(mod 103) = 38 63 50 87 (mod 103) =85 (mod 103)
4.4 Hệ mật mã RSA
Hệ mật mã RSA được đặt tên dựa theo các chữ cái đầu của 3 tác giả của hệ mật
là Rivest, Shamir và Adleman Đây là thuật toán mã hóa nổi tiếng nhất và cũng là
thuật toán được ứng dụng thực tế nhất
Hệ mật RSA sử dụng các tính toán trong Zn, trong đó n là tích của 2 số nguyên
tố phân biệt p và q (n được gọi là số nguyên Blum)
4.4.1 Định nghĩa
Sơ đồ hệ mật mã RSA là một bộ gồm 5 thành phần (P, C, K, E, D),
trong đó: P = C = Z n , với n là một số nguyên Blum, tức là tích của hai số nguyên tố;
K = {K = (K’, K''): K' = (n,e) và K'' = d, gcd(e, (n)) =1, e.d 1(mod (n))};
Thực vậy, do e.d 1(mod (n)) ta có thể viết e.d = t (n) +1
Nếu x nguyên tố với n , thì theo định lý Euler ta có
D (K'', E (K', x)) = x ed x t( ) 1n x t( )n (mod )x n x
Trang 20Nếu x không nguyên tố với n , thì do n =p.q, hoặc x chia hết cho p và nguyên tố với q, hoặc x chia hết cho q và nguyên tố với p, và (n) =(p -1).(q -1), trong cả hai
Công khai K‟ = (n, e), giữ bí mật p,q và khóa K” = d
Hàm mã hóa y = eK‟(x) = xe mod n = x17mod 3233
Hàm giải mã x = dK”(y) = yd mod n = y2753 mod 3233
Giả sử cần mã hóa tài liệu x = 123 ta tính y = 12317mod 3233 = 855
Để giải mã văn bản y = 855 ta tính x = 8552753mod 3233 = 123
4.4.2 Thực hiện hệ mật mã RSA
Giả sử Alice cần gửi bản tin mật cho Bob
- Bob tạo hai số nguyên tố lớn p và q
- Bob tính n = p.q và (n) = (p-1)(q-1)
- Bob chọn một số ngẫu nhiên e (0< e < (n)) sao cho gcd(e,(n)) = 1
- Bob tính d = e-1 mod (n) bằng cách dùng thuật toán Euclide
- Bob công bố n và e trong một danh bạ và chúng làm khoá công khai
- Alice sử dụng khóa công khai (n, e) để mã hóa bản tin gửi cho Bob, Bob nhận đƣợc bản mã sẽ dùng khóa bí mật d để giải mã
Cách tấn công dễ thấy nhất hệ mật này là thám mã phân tích số n ra thừa số nguyên tố để tính đƣợc (n) = (p-1)(q-1) sau đó tính d từ e thu đƣợc Vì thế để hệ mật RSA đƣợc coi là an toàn thì n phải là số đủ lớn để việc phân tích nó không có khả năng về mặt tính toán Các thuật toán phân tích hiện thời có khả năng phân tích các số
có 130 chữ số thập phân, vì vậy để đảm bảo an toàn nên chọn các số p và q khoảng
150 chữ số, khi đó n có khoảng 200 chữ số
4.4.3 Tính bảo mật của hệ mật mã RSA
Bài toán thám mã (khi chỉ biết bản mã):
Biết khoá công khai K' = (n,e) và bản mã y = x e modn Tìm bản rõ x
Trang 21Đây chính là bài toán RSA Nếu biết hai thừa số p, q của n thì dễ tìm được x từ
y, và nói chung bài toán RSA (hay bài toán thám mã RSA) là có độ khó tương đương
với bài toán phân tích số nguyên (Blum) thành thừa số nguyên tố Do đó, giữ tuyệt mật
khoá bí mật d , hay giữ tuyệt mật các thừa số p, q có ý nghĩa quyết định đến việc bảo
vệ tính an toàn của hệ mật mã RSA
Một mạng truyền tin bảo mật sử dụng sơ đồ các hệ mật mã RSA được xem là
an toàn nếu tuân thủ các điều kiện cơ bản: mỗi người tham gia phải độc lập lựa chọn
các tham số n, e, d của riêng mình, chọn n cũng có nghĩa là chọn các thừa số p, q của
n (n =p.q) và do có p,q nên tính được (n) = (p-1).(q-1), từ đó tìm được e, d tương đối
dễ dàng; nhưng cũng vì vậy mà sau khi đã chọn thì mỗi người tham gia phải giữ tuyệt
đối bí mật các giá trị p, q, d , chỉ công bố khoá công khai (n, e)
Tuy nhiên, đó là điều kiện chung, trong thực tế vẫn có thể còn nhiều sơ hở mà người thám mã có thể lợi dụng để tấn công vào tính bảo mật của các hệ mã RSA
4.4.4 Các phương pháp tấn công hệ mật mã RSA
Đặt vấn đề: Liệu có các phương pháp tấn công RSA khác với phương pháp
Ví dụ: Giả sử thám mã đã biết được n = 84773093 và (n) = 4754668, thông tin này dẫn tới phương trình p2 - 18426p + 84773093 = 0
Giải phương trình này thu được hai nghiệm 9539 và 8887 là hai thừa số của n
a Số mũ giải mã
Một kết quả đã được chứng minh là một thuật toán bất kỳ để tính số mũ giải mã
d đều có thể được dùng như một chương trình con (hay một điều kiện) trong thuật toán
Trang 22xác suất phân tích n Bởi vậy việc tính d không dễ hơn việc phân tích n Tuy nhiên, có một điều không ngoài quy luật là vẫn có thể phá hệ mật mà không cần tính d
Kết quả này có ý nghĩa nhiều hơn về mặt lý thuyết Nó cho thấy rằng nếu d bị lộ thì giá trị n cũng không còn khó phân tích nữa.Nếu điều này xẩy ra thì việc Bob chọn một số mũ mới cũng chẳng có ý nghĩa; Điều cần thiết là Bob phải chọn lại n
Thuật toán mà ta sẽ mô tả là một thuật toán xác suất kiểu Las Vegas Sau đây là định nghĩa của kiểu thuật toán này
Định nghĩa:
Giả sử 0 1 là một số thực Thuật toán Las Vegas là một thuật toán xác suất sao cho với một trường hợp bất kỳ của bài toán i, thuật toán có thể không cho kết quả với một xác suất nào đó (chẳng hạn thuật toán có thể kết thúc với thông báo
“không trả lời”) Tuy nhiên, nếu thuật toán cho lời giải thì lời giải này là đúng
Nhận xét: Thuật toán Las Vegas có thể không cho câu trả lời nhưng một câu trả
lời bất kỳ mà thuật toán cho là đều là câu trả lời đúng Ngược lại, thuật toán Monte - Carlo luôn luôn cho câu trả lời nhưng câu trả lời này có thể sai
Nếu ta có một thuật toán Las Vegas để giải một bài toán thì đơn giản ta chỉ chạy lặp đi lặp lại thuật toán này cho tới khi nó tìm ra một câu trả lời Xác suất để thuật toán không trả lời sau m lần liên tiếp là m
Số lần chạy trung bình để thu được câu trả lời thực tế là 1/
Giả sử A là một thuật toán giả định tính số mũ giải mã d từ e Ta sẽ mô tả một thuật toán Las Vegas dùng A như một chương trình giả định (oracle) con Thuật toán sẽ phân tích n với xác suất tối thiểu là 1/2 Bởi vậy nếu thuật toán chạy m lần thì n sẽ được phân tích với xác suất tối thiểu là 1-1/2m
Thuật toán được xây dựng trên cơ sở một số nguyên tố nhất định liên quan tới các căn bậc 2 của một theo modulo n, trong đó n = p*q là tích của hai số nguyên tố lẻ phân biệt ta biết rằng phương trình đồng dư x2 1(mod p) có hai nghiệm theo modulo
p là x = 1 mod p Tương tự, phương trình đồng dư x2 1(mod q) cũng có hai nghiệm
là x = 1 mod q
Vì x2 1 (mod n) khi và chỉ khi x2 1 (mod p) và x2 1 (mod q) nên suy ra x2
1 (mod n) khi và chỉ khi x = 1 mod p và x = 1 mod q Bởi vậy có 4 căn bậc 2 của 1 theo modulo n và các căn này có thể tìm được thông qua định lý phần dư China Hai trong các nghiệm này là x = 1 mod n; chúng được gọi là các căn bậc hai tầm thường
và là các giá trị đối của nhau theo modulo n
Trang 23Ví dụ: Giả sử n = 403 = 13 11
Bốn căn bậc hai của một theo modulo 403 là 1, 92, 311 và 402 Căn bậc hai 92 nhận được bằng cách giải hệ x 1 (mod 13) , x -1 (mod 31) theo định lý phần dư China Nếu tìm được nghiệm không tầm thường này, nghiệm không tầm thường kia phải là 403 – 92 = 311 Đó là nghiệm của hệ x -1(mod 13), x 1 (mod 31)
Giả sử x là căn bậc hai không tầm thường của 1 modulo n Khi đó ta có
n(x-1)(x+1)
nhưng n không là ước của một nhân tử nào ở vế phải Điều đó kéo theo gcd(x+1, n) =
p hoặc q(và tương tự gcd(x-1, n) = p hoặc q) Tất nhiên có thể tính ƯCLN bằng thuật toán Euclide mà không cần phải biết phân tích nhân tử của n Bởi vậy, hiểu biết về căn bậc hai không tầm thường của 1 mod n sẽ làm cho việc phân tích n chỉ cần thực hiện trong thời gian đa thức Yếu tố quan trọng này là cơ sở của nhiều kết quả quan trong mật mã
Trang 24Bây giờ sẽ tiến hành phân tích thuật toán
Trước tiên, nhận thấy rằng nếu chọn được w là bội của p hoặc q thì có thể ngay lập tức phân tích được n Điều này được biểu thị ở bước 2 Nếu w nguyên tố cùng nhau với n thì ta sẽ tính wr, w2r, w4r, bằng cách bình phương liên tiếp cho tới khi w2t
1 (mod n) với giá trị t nào đó
Vì ed – 1 = 2s .r 0 (mod (n)) nên ta có 1 mod n Bởi vậy, vòng lặp while sẽ kết thúc sau nhiều nhất là s bước lặp Kết thúc vòng lặp, ta tìm được một giá trị v0 sao cho v02 1 (mod n) nhưng v0 1 (mod n) Nếu v0 -1(modn ) thì thuật toán không thành công ; ngược lại , v0 sẽ là một căn bậc hai không tầm thường của 1 modulo n và ta phân tích được n (bước 12 )
Nhiệm vụ chính còn lại bây giờ là phải chứng minh rằng, thuật toán thành công với xác suất là Có hai cách mà theo đó thuật toán có thể không thành công khi phân tích n :
1 wr 1 (bước 7)
2 -1 (mod n) với giá trị t nào đó 0 ≤ t ≤ s-t (bước 11)
Ta có n+1 phương trình đồng dư để xem xét Nếu giá trị ngẫu nhiên w là một nghiệm của ít nhất một trong các đồng dư thức này thì phép lựa chọn w này là “tồi” và thuật toán sẽ không thành công Bởi vậy, ta sẽ chuyển sang tính số các nghiệm của mỗi đồng dư thức này
Trước tiên xét đồng dư thức wr 1 (modn) Phương pháp phân tích một đồng
dư thức giống như cách xem xét một cách riêng lẻ các nghiệm theo modulo q Sau đó kết hợp chúng nhờ định lý phần dư China Chú ý rằng x 1 (mod n) khi và chỉ khi x
1 (mod p) và x 1 (mod q)
Như vậy, trước hết ta phải xét wr 1 (mod n) Vì p là một số nguyên tố nên Z*p
là một nhóm cyclic Giả sử g là một phần tử nguyên thuỷ theo modulo p Ta có thể viết
w = gu với số nguyên duy nhất u nào đó, 0 u p-2 Khi đó ta có : wr 1(mod p)
gur 1 (mod p) (p-1) ur Giả sử biểu diễn p-1 = 2i p1, trong đó p1 là một số lẻ và q -1 = 2jq1, q1 là một số
lẻ
Vì (n) = (p-1)(q-1) (ab-1) = 2sr nên ta có 2i+jp1q12sr
Bởi vậy: i+j s và p1q1 r
Trang 25Bây giờ điều kiện p-1ur sẽ trở thành 2ip1ur Vì p1r và r lẻ nên điều kiện cần
và đủ là 2iu.Vì thế, u=k 2i, 0 k p1-1 và số các nghiệm của dư thức wr1 (mod p)
sẽ là p1
Bằng lập luận tương tự, ta thấy đồng dư thức wr 1 (mod q) có đúng q1nghiệm Có thể kết hợp nghiệm bất kỳ theo modulo p với nghiệm bất kỳ theo modulo
q để thu được một nghiệm duy nhất theo modulo n nhờ định lý phần dư China Do vậy
số các nghiệm của đồng dư thức wr 1 (mod n ) sẽ là p1q1
Tiếp theo, xét đồng dư thức 1(mod n) với giá trị t cố định (trong đó : 0
t s-1) Trước tiên lại xét đồng dư thức theo modulo p rồi sau đó xét theo modulo q (Để ý rằng 1(mod n) khi và chỉ khi -1 (mod p) và -1 (mod q)
Đầu tiên ta xét w t r p
mod1
2 Nếu viết w = gu như ở phần trên ta nhận được: g u2t r 1modp
Vì g(p-1)/2-1(mod p) nên ta có
u2tr (p-1)/2(mod p-1) (p-1) │ (u2tr-(p-1)/2) 2(p-1)│ (u2t+1r-(p-1))
Vì p-1=2ip1 nên ta nhận được
2i+2 p1 │ (u 2t+1r-2ip1)
Loại bỏ thừa số chung ta có
Xét thấy nếu ti thì có thể là không có nghiệm do 2i+1 │ 2t+1 nhưng 2i+1 │ 2i
Mặt khác nếu ti-1 thì u sẽ là một nghiệm khi và chỉ khi u là bội lẻ của 2i-t-1 (chú ý rằng r/p1 là một số nguyên lẻ) Bởi vậy, số các nghiệm trong trường hợp này là
2
1 2
i u2 | 2
Trang 26- 22t p1q1 nếu t min{i, j) 1
t có thể nằm trong dải từ 0 tới s-1 Không mất tính tổng quát giả sử i j; khi đó số các
nghiệm sẽ bằng 0 nếu ti Tổng số các lựa chọn “tồi” của w nhiều nhất là
1
i q
2 2t
)<
2 3 6
n n n
Vì có nhiều nhất là (n-1)/2 phép chọn “tồi” đối với w nên điều đó có nghĩa là có ít nhất
(n-1)/2 phép chọn “tốt” và vì thế xác suất thành công của thuật toán tối thiểu là 1/2
b Thông tin riêng có liên quan tới các bit của bản rõ
Xét một kết quả khác có liên quan tới thông tin về bản rõ có thể bị rò rỉ bởi
phép mã hoá RSA Sau đây là hai trường hợp xét về thông tin riêng
1 Cho y=eK(x), tính parity(y) trong đó parity(y) chỉ bít cấp thấp của x
2.Cho y=eK(x), tính half(y) trong đó half(y)=0 nếu 0 x n/2 và half(y)=1 nếu
n/2 < x n-1
Ta sẽ chứng minh rằng với y = eK(x) cho trước một thuật toán bất kỳ tính
parity(y) hoặc half(y) đều có thể được dùng như một chương trình con để xây dựng
một thuật toán tính bản x Điều đó có nghĩa là, với một bản mã cho trước, việc tính bit
bậc thấp của bản rõ sẽ tương đương đa thức với việc xác định toàn bộ bản rõ !
Trước hết, ta sẽ chứng minh rằng, việc tính parity(y) là tương đương đa thức
với việc tính half (y) Điều này rút ra từ hai đồng nhất thức đơn giản sau
halt(y)=parity(y x e K (2) mod n)
parity(y)=half(y x e K (2 -1 )mod n)
và từ quy tắc nhận eK(x1) eK(x2)=eK(x1x2)
Ta sẽ chỉ ra cách tính x=dK(y) theo một thuật toán giả định cho trước để tính
half(y) Thuật toán được trình bày như sau:
Giải mã bản mã RSA với một thuật toán giả định tính half(y) cho trước
Trang 276 hi=n
7 for i=0 to k do
8 mid=(hi+lo)/2
9 if y i =1 then lo=mid else hi=mid
10 x= hi
Trong các bước 2-4 ta tính : y i = half(y x (e K (2)) i )=half(e K (x x 2 i ))
với 0 x log2n Nhận thấy rằng:
3 8
5 , 2 8
3 , 4 8
Phép tìm kiếm nhị phân để giải mã RSA
Trang 28Xét bài toán giải mã:
Giả sử có bản mã y và muốn xác định x sao cho: x2+ bx y(mod n)
Đây là một phương trình bậc hai theo giá trị x chưa biết Có thể loại bỏ số hạng tuyến tính bằng phép thế z = x + B/2 (Hay x = z - B/2) Khi đó phương trình trên có dạng z2 + y (mod n)
Đặt C B y
4
2 phương trình đồng dư trên trở thành z2 C (mod n) Như vậy phép giải mã sẽ chỉ còn là thực hiện phép khai căn bậc hai theo modulo n Điều này tương đương với việc giải phương trình đồng dư:
z2 C (mod p)
z2 C (mod q)
Trang 29(Có hai căn bậc hai của C modulo p và hai căn bậc của C theo modulo q Bằng cách dùng định lý phần dư China, các nghiệm này có thể được kết hợp để tạo nên bốn nghiệm theo modulo n)
Dùng tiêu chuẩn Eucler để xác định xem C có phải là một thặng dư bậc hai theo modulo p (và modulo q) hay không Trên thực tế, C là một thặng dư bậc hai theo modulop và modulo q nếu phép mã hoá được thực hiện đúng
Khi đó theo tiêu chuẩn Euler C(p-1)/21 mod p
(± C(p+1)/4)2 C(p+1)/2(mod p) C(p-1)/2 C (mod p) C(mod p)
Vì p 3 mod 4 nên (p+1)/ 4 là một số nguyên, suy ra hai căn bậc hai của C modulo p là ±C(p+1)/4mod p
Tương tự, hai căn bậc hai của C modulo q là ±C(q+1)/4mod q
Vậy có thể thu được bốn căn bậc hai của C modulo n bằng cách dùng định lý phần dư China giải các hệ phương trình đồng dư:
z ±C(p+1)/4mod p
z ±C(q+1)/4mod q Tương ứng với 4 hệ phương trình sau đây :
(mod ) (mod ) (mod ) (mod )
Sau khi xác định được z ta tính x từ phương trình x = z – B/2
Cả 4 nghiệm của 4 hệ phương trình đó theo modn đều được viết chung dưới
một ký hiệu là C modn, và vì vậy thuật toán giải mã d K(y) thực tế sẽ cho ta 4 giá trị khác nhau theo modn mà bản rõ là một trong 4 giá trị đó Việc chọn giá trị nào trong 4
giá trị tìm được làm bản rõ là tuỳ thuộc vào những đặc trưng khác của bản rõ mà người giải mã nhận biết
Bốn nghiệm của bốn hệ phương trình này khác nhau theo modulo n và bản rõ x
là một trong 4 giá trị đó
Ví dụ :
Giả sử n =77 = 7.11(p =7, q =11), B =9
Ta có e K(x) = x 2 + 9x mod77,
Trang 30Sử dụng định lý phần dư China, tính được bốn căn bậc hai của 23 theo modulo
77 là ±10, ±32 mod 77 hay mod77 là 10,67,32,45
Bản rõ nằm trong 4 giá trị đó, trong trường hợp này là 44
4.5.2 Tính an toàn của hệ mật mã Rabin
Trong định nghĩa của hệ mật mã Rabin, khoá công khai là (n,B), khoá bí mật là (p,q) tức là cặp thừa số nguyên tố của n Như vậy, tính an toàn của hệ mật mã nằm ở
Trang 31việc giữ bí mật các thừa số p và q Định nghĩa của phép giải mã cũng cho ta thấy rằng
yếu tố có ý nghĩa quyết định trong phép giải mã là việc tính căn bậc hai của một số
theo modn Bài toán tìm căn bậc hai theo modn (với n là hợp số Blum) đã được chứng
tỏ là có độ khó tương đương với bài toán phân tích n thành thừa số nguyên tố Vì vậy,
bài toán giải mã đối với hệ mật mã Rabin, cũng là bài toán giữ bí mật khoá bí mật
(p,q), và bài toán phân tích số nguyên thành thừa số nguyên tố là có độ khó tương
đương nhau Đó là yếu tố bảo đảm tính an toàn của hệ mật mã Rabin
4.6 Các thuật toán phân tích thừa số nguyên tố
Bài toán phân tích một số nguyên thành thừa số nguyên tố là một bài toán khó
thường được sử dụng trong lý thuyết mật mã Biết một số n là hợp số thì việc phân tích
n thành thừa số mới là có nghĩa; do đó thường khi để giải bài toán phân tích n thành
thừa số, ta thử trước n có là hợp số hay không; và bài toán phân tích n thành thừa số có thể dẫn về bài toán tìm một ước số của n, vì khi biết một ước số d của n thì tiến trình phân tích n được tiếp tục thực hiện bằng cách phân tích d và n/d
Bài toán phân tích thành thừa số, hay bài toán tìm ước số của một số nguyên
cho trước, đã được nghiên cứu nhiều, nhưng cũng chưa có một thuật toán hiệu quả nào
để giải nó trong trường hợp tổng quát; do đó người ta có khuynh hướng tìm thuật toán giải nó trong những trường hợp đặc biệtchẳng hạn khi n có một ước số nguyên tố p
với p -1 là B-mịn với một cận B > 0 nào đó, hoặc khi n là số Blum, tức là số có dạng
tích của hai số nguyên tố lớn nào đó (n =p.q )
Xét số nguyên n cần phân tích ra thừa số là một số lẻ Phép chia thử bao gồm việc chia n cho từng số nguyên lẻ cho tới Nếu n < 1012 thì đây là một phương pháp phân tích thừa số hợp lý một cách hoàn hảo, tuy nhiên với n lớn hơn nói chung ta phải dùng các kỹ thuật tinh tế hơn
4.6.1 Phương pháp p-1
Thuật toán p-1 của Pollar (đưa ra vào năm 1947) là một thí dụ về một thuật toán đơn giản đơn khi được áp dụng với các số nguyên lớn Thuật toán có hai đầu vào: số nguyên lẻ n cần được phân tích và một cận B Có thể mô tả thuật toán như sau:
Đầu vào: n và B
1 a = 2
2 for (j=2; j<= B; j++) a = aj mod n
3 d = gcd(a-1,n)
4 if (1 < d < n) d là thừa số nguyên tố của n (thành công)
else không tìm được thừa số của n (không thành công)
Trang 32Ví dụ: Giả sử n = 15770708441
Nếu áp dụng thuật toán p-1 với B = 180 thì sẽ thấy rằng a = 11620221425 ở bước
3, còn d được tính bằng 135979 Trên thực tế, phân tích đầy đủ n thành các ước nguyên tố là:15770708441 = 135979 115979
Trong trường hợp này, phép phân tích sẽ thành công do 135978 chỉ gồm các thừa số nguyên tố nhỏ 135978 = 2 3 131 173
nếu lấy B 173 thì chắc chắn rằng 135978B! như mong muốn
Trong thuật toán có (B-1) luỹ thừa theo modulo, mỗi luỹ thừa cần nhiều nhất là 2log2B phép nhân modulo dùng thuật toán bình phương và nhân Việc tính ước chung lớn nhất có thể thực hiện trong thời gian O((log n)3) bằng thuật toán Euclide Bởi vậy,
độ phức tạp của thuật toán là O(B logB (log n)2 + (log n)3) Nếu B là O((log n)i) với một số nguyên i xác định nào đó thì thuật toán thực sự là thuật toán thời gian đa thức, tuy nhiên với phép chọn B như vậy, xác suất thành công sẽ rất nhỏ Mặt khác, nếu tăng kích thước của B lên thật lớn (chẳng hạn tới ) thì thuật toán sẽ thành công nhưng nó sẽ không thực hiện nhanh hơn phép chia thử
4.6.2 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 nếu tìm được x y (mod n) sao cho x2 y2 (mod n) thì gcd(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
x2 (mod n) nằm trong cơ sở B Ý 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
(8340934156 20449429442773700011)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: gcd(9503435785-546, 15770708441)=115759
Trang 33Ta 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 p11j p22j pBBj(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
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 dùng để xác định các xj phân tích được trên B
Ở đây 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
Trang 34 ) ( 1 O( 1 ) lnn lnn
e
hơn trước khi có thể tìm được một quan hệ phụ thuộc Lựa chọn tối ưu cho B xấp xỉ bằng
và điều này dẫn đến thời gian thực hiện cỡ
Sàng trường số là thuật toán phân tích mới hơn (từ cuối những năm 80) Thuật toán này cũng phân tích n bằng cách xây dựng một đồng dư thức x2 y2 (mod n), song
nó được thực hiện bằng các tính toán trên vành các số đại số
4.6.3 Các thuật toán phân tích trên thực tế
Thời gian chạy tiệm cận của các thuật toán sàng bậc hai, đương cong elliptic và sàng trường số như sau:
Để phân tích các modulo RSA (trong đó n=pq, p và q là các số nguyên tố có cùng kích thước), sàng bậc hai là một thuật toán thành công nhất hiện nay Sau đây là một số kết quả quan trọng Vào năm 1983, thuật toán sàng bậc hai đã phân tích thành công một số có 69 chữ số, số này là một thừa số của 2251-1 (do Davis, Holdredye và Simmons thực hiện) Quá trình này tiếp tục trong những năm 80 và đến năm 1989 đã
có thể phân tích được các số có tới 106 chữ số theo phương pháp này(do Lenstra và Manasse thực hiện) nhờ phân bố các phép tính cho hàng trăm trạm làm việc tách biệt (người ta gọi phương pháp này là “phân tích thừa số bằng thư điện tử”)
Trang 354.7 Hệ mật mã Elgamal và các giải thuật rời rạc
4.7.1 Hệ mật Elgamal
Hệ mật mã ElGamal được T ElGamal đề xuất năm 1985, dựa vào độ phức tạp của bài toán tính lôgarit rời rạc, và sau đó đã nhanh chóng được sử dụng rộng rãi không những trong vấn đề bảo mật truyền tin mà còn trong các vấn đề xác nhận và chữ
ký điện tử
Bài toán logarithm rời rạc trong Zp được xem là bài toán khó, không có một thuật toán thời gian đa thức nào có thể giải được Để gây khó khăn cho các phương pháp đã biết, p phải có ít nhất 150 chữ số và (p-1) phải có ít nhất một thừa số nguyên
tố lớn Lợi thế của bài toán logarithm rời rạc trong xây dựng hệ mật là khó tìm được các logarithm rời rạc, song bài toán ngược lấy luỹ thừa lại có thể tính toán hiệu quả theo thuật toán "bình phương và nhân" Nói cách khác, luỹ thừa theo modulo p là hàm một chiều với các số nguyên tố p thích hợp
Bài toán: I = (p, , ) trong đó p là số nguyên tố, Zp là phần tử nguyên thuỷ, Zp* Hãy tìm một số nguyên duy nhất a, 0 a p-2 sao cho: a (mod p)
là một phần tử nguyên thuỷ theo modp, tức của Z p
Các thuật toán lập mã e K= E (K' ,.) và giải mã d K= D (K'',.) được xác định như sau: Với mỗi x P =Z p, để lập mật mã cho x trước hết ta chọn thêm một số ngẫu
nhiên k Zp -1 rồi tính: e K(x,k ) = (y1, y2), với 1
2
mod , mod
Trang 36Các phép lập mật mã và giải mã được xác định như vậy là hợp thức, vì ta có với
mọi x P =Zp* và mọi k Z p -1 :
d K"(eK‟(x,k )) = x.k.(k.a)-1 modp = x.k.-k mod p = x
Chú ý rằng trong một mạng truyền thông bảo mật với việc dùng sơ đồ mật mã
ElGamal, mỗi người tham gia tự chọn cho mình các tham số p,, a, rồi tính , sau đó
lập và công bố khoá công khai K' =(p, ,), nhưng phải giữ tuyệt mật khoá bí mật K''
= a Bài toán biết khoá công khai tìm ra khoá bí mật chính là bài toán tính logarithm
rời rạc
Ví dụ :
Chọn p = 2579, =2, a =765
Tính được = 2765 = 949 mod2579
Khoá công khai (2579, 2, 949), khoá bí mật 765
Giả sử để lập mật mã cho x =1299, ta chọn ngẫu nhiên k =853, sẽ có
K
e (1299, 853) = (2853, 1299* 949853)mod2579
= (453, 2396) Giải mã: d K(453, 2396) = 2396* (453765)-1mod2579 = 1299
4.7.2 Tính an toàn của hệ mật mã ElGamal
Tính an toàn của hệ mật mã ElGamal là ở việc giữ tuyệt mật khoá bí mật K”
Bài toán phát hiện khoá bí mật có độ khó tương đương với bài toán tính logarithm rời rạc, mà bài toán này cho đến nay chưa có một thuật toán nào làm việc trong thời gian
đa thức giải được nó
Tuy nhiên, cần chú ý chọn p là số nguyên tố sao cho p -1 có ít nhất một ước số nguyên tố lớn Điều đó là thực hiện được nếu số nguuyên tố p được chọn là số nguyên
tố Sophie Germain (tức có dạng 2q +1, với q cũng là số nguyên tố lớn)
Ngoài ra, còn có khả năng khoá bí mật K'' = a bị lộ khi sử dụng số ngẫu nhiên
k, đặc biệt là khi để lộ số k được dùng Thực vậy, nếu để lộ số k, thì khoá bí mật a
2 1
a x ky y p
Như vậy,một người thám mã có khả năng tấn công theo kiểu “biết cả bản rõ” có
thể phát hiện ra khoá a nếu biết k
Một trường hợp khác làm mất tính an toàn của hệ mật mã ElGamal là việc dùng
cùng một số k cho nhiều lần lập mật mã Thực vậy, giả sử dùng cùng một số ngẫu
Trang 37nhiên k cho hai lần lập mã, một lần cho x1 , một lần cho x2 , và được các bản mã tương
ứng (y1,y2) và (z1,z2) Vì cùng dùng một số k nên y1=z1 Và do đó theo công thức lập
mã ta có z2/y2 = x2/x1, tức là x2 = x1.z2/y2 Như vậy, một người thám mã, một lần “biết
cả bản rõ” dễ dàng phát hiện được bản rõ trong các lần sau
4.7.3 Các thuật toán cho bài toán Logarithm rời rạc
Cho số nguyên tố p, là phần tử nguyên thuỷ theo modulo p Khi đó bài toán logarithm rời rạc được phát biểu dưới dạng sau: tìm một số mũ a duy nhất, 0 a p-2 sao cho a (mod p), với Zp* cho trước
Bài toán logarithm rời rạc (DL) có thể giải bằng một phép tìm kiếm vét cạn bằng cách tính toán tất cả các giá trị a có thể và sắp xếp các cặp có thứ tự (a, a mod p) có lưu ý đến các tạo độ thứ hai của chúng, ta có thể giải bài toán DL với thời gian
cỡ O(1) bằng O(p) phép tính toán trước và O(p) bộ nhớ (bỏ qua các thừa số logarithm)
a Thuật toán tối ưu hoá thời gian - bộ nhớ của Shanks
Thuật toán Shanks:
Đặt
1 Tính mj
mod p, 0 j m-1
2 Sắp xếp m cặp thứ tự ( j,mj mod p) có lưu ý tới các tạo độ thứ hai
của các cặp này, ta sẽ thu được một danh sách L1
- Nếu (j,y) L1 và (i,y) L2 thì mj = y = -i nên mj+i = , ngược lại, đối với bất
kì ta có thể viết log = mj+i trong đó 0 j,i m-1 Vì thế phép tìm kiếm ở bước 5 chắc chắn thành công
Trang 38Có thể áp dụng thuật toán này chạy với thời gian O(m) và với bộ nhớ cỡ O(m) (bỏ qua các thừa số logarithm) Bước 5 có thể thực hiện đồng thời qua từng danh sách L1, L2
Danh sách này sẽ được sắp xếp để tạo L1
Danh sách thứ hai chứa các cặp được sắp (i, 525 (3i)-1 mod 809), với 0 i
Sau khi sắp xếp danh sách này, ta có L2
Bây giờ nếu xử lý đồng thời qua cả hai danh sách, ta sẽ tìm được ( 10, 644) trong L1
và (19, 644) trong L2
Bây giờ có thể tính : log3525 = 2910+19 = 309
Có thể kiểm tra thấy rằng 3309 525 (mod 809)
b Thuật toán Polig – Hellman
Thuật toán Polig-Hellman, thường được dùng có hiệu quả trong trường hợp p -1 chỉ có các thừa số nguyên tố bé, có nội dung như sau: Giả thiết rằng p - 1 có dạng phân
tích chính tắc là
Trang 39
Để tìm a log (modp -1), ta tìm các số a i sao cho với i =
1, ,k Sau khi tìm được các a i như vậy thì giải hệ phương trình x mod theo định lý số dư Trung quốc, sẽ thu được x a (mod p-1) cần tìm Vậy, vấn đề là xác định các (i = 1, …, k) Vấn đề này được phát biểu lại như sau: Giả sử q là một ước số nguyên tố của p - 1, và q c p - 1 nhưng không còn q c + 1p - 1 Ta cần
tìm x = a modq c Ta biểu diễn x dưới dạng số q - phân như sau:
1
0 1
c
i
i
i q x
Tương tự tính các giá trị x i với i = 0,1, ,c -1, tức là tính được x Sau khi tìm được tất
cả các giá trị x ứng với mọi ước số nguyên tố q của p , thì theo nhận xét ở trên, chỉ cần
giải tiếp một hệ phương trình đồng dư bậc nhất theo các modulo từng cặp nguyên tố
Trang 40với nhau (bằng phương pháp số dư Trung quốc), ta sẽ tìm được số a cần tìm, a = log
Giả sử = 2 và = 18 Ta phải xác định a = log218
Trước tiên tính a mod 4 rồi tính a mod 7