1. Trang chủ
  2. » Công Nghệ Thông Tin

Giáo trình Bảo mật thông tin: Phần 2 - ĐH Sư phạm kỹ thuật Nam Định

92 9 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 92
Dung lượng 1,54 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

CHƯƠ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 2

4.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

ppp, 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 3

thờ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 4

Cho 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 na:0   a n 1, gcd( , )a n  1củ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

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 5

4.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 6

rấ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 7

4.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 8

4.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 10

Ký 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 12

bở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 13

Xé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 15

Theo đị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 16

4.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 17

4.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 18

Bướ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 19

Bướ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 edx t( ) 1n x t( )n (mod )x nx

Trang 20

Nế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 22

xá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 23

Ví 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 24

Bâ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+jp1q12sr

Bởi vậy: i+j s và p1q1 r

Trang 25

Bây giờ điều kiện p-1ur sẽ trở thành 2ip1ur Vì p1r và r lẻ nên điều kiện cần

và đủ là 2iu.Vì thế, u=k 2i, 0 k  p1-1 và số các nghiệm của dư thức wr1 (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 rp

mod1

2  Nếu viết w = gu như ở phần trên ta nhận được: g u2t r 1modp

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 27

6 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 28

Xé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 CBy

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)/21 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 30

Sử 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 31

việ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 32

Ví 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 135978B! 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  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: gcd(9503435785-546, 15770708441)=115759

Trang 33

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

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 35

4.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 36

Cá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 yp

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 37

nhiê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 38

Có 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 = 2910+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 40

vớ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

Ngày đăng: 08/06/2021, 14:10

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Douglas Stinson - Cryptography: Theory and Practice. Boca Raton. FL. CRC Press, 2007 Khác
[2] William Stallings. Cryptography and Network Security: Principles and Practice. Third Edition. Pearson Education, 2003 Khác
[3] A. Menezes, P. van Oorschot và S. Vanstone. - Handbook of Applied Cryptography, Fifth Edition, CRC Press, 1996 Khác
[4] Phạm Huy Điển, Hà Huy Khoái. Mã hoá thông tin cơ sở toán học và ứng dụng. Nhà xuất bản Đại học Quốc gia Hà Nội. 2004 Khác
[5] Phan Đình Diệu. Lý thuyết mật mã và an toàn thông tin. Nhà xuất bản Đại học Quốc gia Hà Nội. 2006 Khác

🧩 Sản phẩm bạn có thể quan tâm

w