a.Thuật giải Euclid- Tìm UCLN của hai số nguyênGiải thuật Euclid hay thuật toán Euclid, là một giải thuật giúp tính ước số chung lớn nhất ƯSCLN của hai số một cách hiệu quả.. Bởi vì bài
Trang 1Một số công cụ hỗ trợ cho thuyết mật mã
3.1.Lý thuyết số
3.1.1.Kiến thức đồng dư thức
a Định nghĩa: Cho là số nguyên dương Hai số nguyên và được gọi là đồng
dư với nhau theo module m nếu hiệu a
Ký hiệu a b(mod m) được gọi là một đồng dư thức Nếu không chia hết cho , ta viết
Ví dụ 3 -1 (mod 4))
5 17 (mod 6))
18 0 (mod 6))
Điều kiện a 0(mod m) nghĩa là a
b Tính chất và các hệ quả
Tính chất 1:
Với mọi số nguyên , ta có: a a (mod m)
Tính chất 2:
a b (mod m) b a (mod m)
Tính chất 3
a b (mod m), b c (mod m) a c (mod m)
Chứng minh:
a b (mod m) m | (a - b)
b c(mod m) m | (b- c
vì a – c = (a – b) + (b – c ) m | (a - c
Tính chất 4
Chứng minh:
Trang 2Tính chất 5
Chứng minh:
Theo tính chất 4) ta có:
Nhân từng vế hai ĐT ta có:
Nhận xét:
1, Nếu a 1(mod 2) và b ) và b 1(mod 2) và b ) thì a + b 2) và b (mod 2) và b ), và 2) và b 0 (mod 2) và b ) suy ra: a + b 0(mod 2) và b ), còn a.b 1(mod 2) và b )
Điều này có nghĩa : Tổng của hai số lẻ là một số chẵn; Tích của hai số lẻ là một số lẻ
2) và b ,Nếu a 3(mod 7) a2) và b 9 (mod 7) 2) và b (mod 7)
Có nghĩa: Nếu một số chia cho 7 dư 3 thì bình phương số đó chia 7 dư 2) và b Các hệ quả của tính chất 4) và 5:
Chú ý:
1_Chia hai vế cho một đẳng thức, nói chung là không được
nhưng 2) và b nhưng ab có thể đồng dư với 0 theo module m Chẳng hạn : nhưng 2) và b 5=10 0(mod 10)
3.1.2.Một số định lý sử dụng trong thuật mã hóa công khai
Trang 3a.Thuật giải Euclid- Tìm UCLN của hai số nguyên
Giải thuật Euclid hay thuật toán Euclid, là một giải thuật giúp tính ước số chung lớn nhất (ƯSCLN) của hai số một cách hiệu quả Giải thuật này đã được biết đến từ khoảng năm 300 trước Công Nguyên Nhà toán học Hy Lạp cổ Euclid đã
viết giải thuật này trong cuốn sách toán nổi tiếng Elements.
Giả sử a = bq + r, với a, b, q, r là các số nguyên, ta có:
Giải thuật
Input: hai số nguyên không âm a và b, b>0
Output: UCLN của a, b
(1) While b ≠ 0 do
r= a mod b, a= b, b=r
(2) và b ) Return (a)
b.Giải thuật Euclid mở rộng
Giải thuật Euclid mở rộng sử dụng để giải phương trình vô định nguyên (còn được gọi là phương trình Đi-ô-phăng)
a*x+b*y=c,
trong đó a, b,c là các hệ số nguyên, x, y là các ẩn nhận giá trị nguyên Điều kiện cần và đủ để phương trình này có nghiệm (nguyên) là UCLN(a,b) là ước của c.
Khẳng định này dựa trên một mệnh đề sau:
Trong số học đã biết rằng nếu d=UCLN(a,b) thì tồn tại các số nguyên x, y
sao cho
a*x+b*y = d Giải thuật
Input: hai số nguyên không âm a và b , a>b
Output: d= UCLN(a,b) và các số nguyên x và y thỏa mãn ax + by = d
(1) Nếu b = 0 thì đặt d =a, y = 0, và return (d,x,y)
(2) và b ) Khai báo 5 biến trung gian x1, x2) và b , y1, y2) và b và q
(3) Đặt x2) và b = 1, x1 = 0, y2) và b = 0, y1 = 1
Trang 4(4)) While b > 0 do
(4).1) q = [a/b], r = a – qb, x = x2) và b – qx1, y = y2) và b – qy1
(4).2) và b ) a = b, b = r, x2) và b = x1 , x1 = x, y2) và b = y1, y1 = y
(5) Đặt d = a, x = x2) và b , y = y2) và b và return (d,x,y)
Đánh giá độ phức tạp: Thuật toán Euclid mở rộng có độ phức tạp về thời gian là O((lg n)2) và b )
Ví dụ: Xét ví dụ với a=4)86)4) và b=34)58
q r x y a b x2) và b x1 y2) và b y1
2) và b 6)4)6) -2) và b 3 14)06) 6)4)6) 1 -2) và b -1 3 2) và b 114) 5 -7 6)4)6) 114) -2) và b 5 3 -7
5 76) -2) và b 7 38 114) 76) 5 -2) và b 7 -7 38
1 38 32) và b -4)5 76) 38 -2) và b 7 32) và b 38 -4)5 2) và b 0 -91 12) và b 8 38 0 32) và b -91 4)5 12) và b 8 Ứng dụng thuật toán Euclid mở rộng để tìm phẩn tử nghịch đảo
Thuật toán Euclid mở rộng được sử dụng rất thường xuyên trong mật mã với khóa công khai để tìm phần tử nghịch đảo Xét một trường hợp riêng khi vận dụng thuật toán Euclid mở rộng:
Cho hai số nguyên dương nguyên tố cùng nhau a, n: n>a, (a,n)=1 Cần tìm
số nguyên dương b nhỏ nhất sao cho ab ≡ 1 (mod n) Số b như thế được gọi là
"nghịch đảo" của a theo module n (và ngược lại, a là "nghịch đảo" của b theo
module n)
Áp dụng thuật toán Euclid mở rộng cho cặp số (n,a) ta tìm được bộ 3 số (d,x,y) thỏa mãn d=(n,a) và nx+ay=d Bởi vì a và n nguyên tố cùng nhau nên d=1
và nx+ay=1 Vì nx luôn chia hết cho n nên từ đẳng thức cuối cùng ta suy ra được
ay ≡ 1 (mod n)
Đối chiếu với yêu cầu của bài toán, ta có b = y + zn Trong đó z là số nguyên
nhỏ nhất thõa mãn b > 0 Dạng rút gọn của thuật toán Euclid mở rộng
Bởi vì bài tóan tìm "phần tử nghịch đảo" là trường hợp riêng của thuật toán Euclid
mở rộng, lại được dùng rất thường xuyên trong mật mã với khóa công khai nên
Trang 5người ta xây dựng thuật toán đơn giản hơn để giải bài toán này Thuật toán được thể hiện ở bảng dưới đây:
3 u1-q2) và b .u2) và b v1-q2) và b .v2) và b [v2) và b /v3]
K uk-2) và b -qk-1.uk-1 vk-2) và b -qk-1.vk-1 [vk-1/vk]
Bước 1:
1 u := 0;
2) và b v := n; (ví dụ: n=2) và b 3)
3 Chuyển đến bước 2) và b
Bước 2) và b :
1 u := 1;
2) và b v := a; (ví dụ: a=5)
3 Nếu v=1 thì chuyển đến bước 5.
4) q = n/a
5 Chuyển đến bước 3
Bước 3:
1 uk := uk-2) và b -qk-1.uk-1;
2) và b vk := vk-2) và b -qk-1.vk-1;
Trang 63 Nếu v k =1 thì chuyển đến bước 5.
4) qk := [vk-1/vk];
5 Chuyển đến bước 4)
Bước 4): Trở lại bước 3
Bước 5: Đến đây ta thu được giá trị v = y Số b cần tìm được xác định bởi b = y +
zn Trong đó, z là số nguyên nhỏ nhất thỏa mãn b > 0 Ở ví dụ trên đây, đối với n=2) và b 3 và a=5 ta tìm được y = -9 nên b = 14) (với z=1)
c.Định lý phần dư Trung Hoa
Định lý phần dư Trung Hoa, hay bài toán Hàn Tín điểm binh, là một định lý nói về nghiệm của hệ phương trình đồng dư bậc nhất
Nội dung
Cho tập các số nguyên tố cùng nhau từng đôi một :m1, m2) và b , … , mk Với mỗi bộ số nguyên bất kỳ a1, a2) và b , … , ak Hệ phương trình đồng dư:
Luôn có nghiệm duy nhất theo mođun M = m1.m2) và b mk là:
trong đó
M1 = M / m1, M2) và b = M / m2) và b , , Mk = M / mk
y1 = (M1) − 1(mod m1), y2) và b = (M2) và b ) − 1(mod m2) và b ), , yk = (Mk) − 1(mod mk)
d.Thuật giải Rabin – Miller (1980)
Cho n ≥ 3 lẻ, thuật toán sau đây xác định rằng n là một hợp số hoặc in ra thông bao
sn là số nguyên tố
Trang 7(1) Write n – 1 = 2) và b k m, where m is old
(2) và b ) Chose a random integer, 1 ≤ a ≤ n – 1
(3) Compute b = am mod n
(4)) If b=1 (mod n) then anwer “n is prime” and quit
(5) For i =0 to k – 1 do
If b = -1 (mod n) then anwer “n is prime” and quit else b = b2) và b (mod n)
(6)) Anwser “n is composite”
f Thuật giải tính xp mod m
Cho x Zm và một số nguyên p N* có biểu diễn nhị phân
p = pi2) và b i(i = 0, 1) Việc tính giá trị y = xp mod m được gọi là phép lũy thừa mod Input: x Zm, p = pi2) và b i(i = 0, 1)
Output: y = xp mod m
(1) y = 1
(2) và b ) for i = 1 downto 0 do
y = y2) và b mod m
if pi = 1 then y = (y*x) mod m
(3) return y
g Định lý Ferma
Trang 8Nếu p là một số nguyên tố còn a là một số nguyên thì ap a(mod p).
Nếu p không chia hết cho a (tức là a(mod p) ≠ 0) thì ap-1 1(mod p)(định lý Ferma nhỏ )
Dễ nhận thấy rằng định lý Fermat nhỏ là trường hợp riêng của định lý Euler khi n
là số nguyên tố
h Định lý Euler
Định nghĩa hàm Euler: Cho n là một số nguyên dương Hàm Euler của n được ký hiệu là φ(n)n) và được xác định bởi công suất của tập hợp M các số nguyên dương nhỏ hơn n và nguyên tố cùng nhau với n
Giải thích:
Cho trước số nguyên dương n
Xác định tập hợp M (dối với số n đã cho): số x thuộc tập hợp M khi và chỉ
khi thõa mãn các điều kiện sau:
1 x N N
2) và b 0 < x < n
3 (x,n) = 1
Hàm Euler của n có giá trị bằng số phần tử của tập hợp M: φ(n)n) = #MM
Quy tắc tính giá trị của hàm Euler:
1 φ(p) = p – 1, nếu p là số nguyên tố;
2) và b φ(∏ppi) = ∏p(pi – 1), trong đó pi là các số nguyên tố khác nhau;
3 φ(∏ppiki) = ∏p(pi∙(pi – 1)k
i), trong đó pi là các số nguyên tố khác nhau;
4) φ(m∙n) = φ(m)∙φ(n), nếu (m,n)=1
Định lý Euler:Cho a và n là 2) và b số nguyên dương, nguyên tố cùng nhau: (a,n)=1.
Định lý Euler khẳng định: aφ(n) ≡ 1 (mod n), trong đó φ(n)n) là hàm Euler của n
Trang 93.2.Lý thuyết độ phức tạp
Một chương trình máy tính thường được cài đặt dựa trên một thuật toán đúng để giải quyết bài toán hay vấn đề Tuy nhiên, ngay cả khi thuật toán đúng, chương trình vẫn có thể không sử dụng được đối với một dữ liệu đầu vào nào đó vì thời gian để cho ra kết quả là quá lâu hoặc sử dụng quá nhiều bộ nhớ (vượt quá khả năng đáp ứng của máy tính)
Khi tiến hành phân tích thuật toán nghĩa là chúng ta tìm ra một đánh giá về thời
gian và "không gian" cần thiết để thực hiện thuật toán Không gian ở đây được hiểu
là các yêu cầu về bộ nhớ, thiết bị lưu trữ, của máy tính để thuật toán có thể làm việc Việc xem xét về không gian của thuật toán phụ thuộc phần lớn vào cách tổ chức dữ liệu của thuật toán Trong phần này, khi nói đến độ phức tạp của thuật toán, chúng ta chỉ đề cập đến những đánh giá về mặt thời gian mà thôi
Phân tích thuật toán là một công việc rất khó khăn, đòi hỏi phải có những hiểu biết sâu sắc về thuật toán và nhiều kiến thức toán học khác Ðây là công việc mà không phải bất cứ người nào cũng làm được Rất may mắn là các nhà toán học đã phân tích cho chúng ta độ phức tạp của hầu hết các thuật toán cơ sở (sắp xếp, tìm kiếm, các thuật toán số học, ) Chính vì vậy, nhiệm vụ còn lại của chúng ta là hiểu được các khái niệm liên quan đến độ phức tạp của thuật toán
Ðánh giá về thời gian của thuật toán không phải là xác định thời gian tuyệt đối
(chạy thuật toán mất bao nhiêu giây, bao nhiêu phút, ) để thực hiện thuật toán mà
là xác định mối liên quan giữa dữ liệu đầu vào (input) của thuật toán và chi phí (số
thao tác, số phép tính cộng,trừ, nhân, chia, rút căn, ) để thực hiện thuật toán Sở dĩ người ta không quan tâm đến thời gian tuyệt đối của thuật toán vì yếu tố này phụ thuộc vào tốc độ của máy tính, mà các máy tính khác nhau thì có tốc độ rất khác
nhau Một cách tổng quát, chi phí thực hiện thuật toán là một hàm số phụ thuộc vào dữ liệu đầu vào :
T = f(input)
Trang 10Tuy vậy, khi phân tích thuật toán, người ta thường chỉ chú ý đến mối liên quan
giữa độ lớn của dữ liệu đầu vào và chi phí Trong các thuật toán, độ lớn của dữ liệu đầu vào thường được thể hiện bằng một con số nguyên n Chẳng hạn : sắp xếp
n con số nguyên, tìm con số lớn nhất trong n số, tính điểm trung bình của n học
sinh, Lúc này, người ta thể hiện chi phí thực hiện thuật toán bằng một hàm số
phụ thuộc vào n :
T = f(n) Việc xây dựng một hàm T tổng quát như trên trong mọi trường hợp của thuật toán là một việc rất khó khăn, nhiều lúc không thể thực hiện được Chính vì vậy
mà người ta chỉ xây dựng hàm T cho một số trường hợp đáng chú ý nhất của thuật
toán, thường là trường hợp tốt nhất và xấu nhất Để đánh giá trường hợp tốt nhất
và xấu nhất người ta dựa vào định nghĩa sau:
Cho hai hàm f và g có miền xác định trong tập số tự nhiên Ta viết
f(n) = O(g(n)) và nói f(n) có cấp cao nhất là g(n) khi tồn tại hằng số C và k sao cho
| f(n) | ≤ C.g(n) với mọi n > k
Tuy chi phí của thuật toán trong trường hợp tốt nhất và xấu nhất có thể nói lên nhiều điều nhưng vẫn chưa đưa ra được một hình dung tốt nhất về độ phức tạp của thuật toán Ðể có thể hình dung chính xác về độ phức tạp của thuật toán, ta xét đến
một yếu tố khác là độ tăng của chi phí khi độ lớn n của dữ liệu đầu vào tăng
Một cách tổng quát, nếu hàm chi phí của thuật toán (xét trong một trường hợp nào đó) bị chặn bởi O(f(n)) thì ta nói rằng thuật toán có độ phức tạp là O(f(n)) trong trường hợp đó
Như vậy, thuật toán tìm số lớn nhất có độ phức tạp trong trường hợp tốt nhất và xấu nhất đều là O(n) Người ta gọi các thuật toán có độ phức tạp O(n) là các thuật toán có độ phức tạp tuyến tính
Trang 11Sau đây là một số "thước đo" độ phức tạp của thuật toán được sử dụng rộng rãi Các độ phức tạp được sắp xếp theo thứ tự tăng dần Nghĩa là một bài toán có độ phức tạp O(nk) sẽ phức tạp hơn bài toán có độ phức tạp O(n) hoặc O(logn)