Tải bản đầy đủ (.docx) (11 trang)

Một số công cụ hỗ trợ cho thuyết mật mã

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (202.65 KB, 11 trang )

Mộ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

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
, 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:


và được gọi là đồng

khơng chia hết cho


Tí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 ≡ 1(mod 2) thì a + b ≡ 2(mod 2), và 2 ≡ 0 (mod 2)
suy ra: a + b ≡ 0(mod 2), còn a.b ≡ 1(mod 2)
Đ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,Nếu a ≡ 3(mod 7) ⇒ a2 ≡ 9 (mod 7) ≡ 2(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.
Các hệ quả của tính chất 4 và 5:


3.
Chú ý:
1_Chia

, với
hai

vế


cho

một

đẳng

thức,

nói

chung



khơng

được.

nhưng
2
hạn :

nhưng ab có thể đồng dư với 0 theo module m. Chẳng
nhưng 2.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
a.Thuật giải Euclid- Tìm UCLN của hai số nguyên

Giải thuật Euclid hay thuật tố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 Ngun. Nhà tố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) 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 ngun (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 (ngun) 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) Khai báo 5 biến trung gian x1, x2, y1, y2 và q
(3) Đặt x2 = 1, x1 = 0, y2 = 0, y1 = 1
(4) While b > 0 do
(4.1) q = [a/b], r = a – qb, x = x2 – qx1, y = y2 – qy1

(4.2) a = b, b = r, x2 = x1 , x1 = x, y2 = y1, y1 = y
(5) Đặt d = a, x = x2, y = y2 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í dụ: Xét ví dụ với a=4864 và b=3458.
q

1
2
2
5
1
2

r

1406
646
114
76
38
0

x

1
-2
5
-27
32

-91

y

-1
3
-7
38
-45
128

a
4864
3458
1406
646
114
76
38

b
3458
1406
646
114
76
38
0

x2

1
0
1
-2
5
-27
32

x1
0
1
-2
5
-27
32
-91

Ứng dụng thuật tốn Euclid mở rộng để tìm phẩn tử nghịch đảo

y2
0
1
-1
3
-7
38
45

y1
1

-1
3
-7
38
-45
128


Thuật toán Euclid mở rộng được sử dụng rất thường xun 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 u cầu của bài tố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 tố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
người ta xây dựng thuật tố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:
I
1
2
3
...

K
...
?
I
1
2
3
4
5

ui
0
1
u1-q2.u2
...
uk-2-qk-1.uk-1
...
y
ui
0
1
-4
5
-9

vi
n
a
v1-q2.v2
...

vk-2-qk-1.vk-1
...
1
vi
23
5
3
2
1

qi
[n/a]
[v2/v3]
...
[vk-1/vk]
...
qi
4
1
1


Bước 1:
1. u := 0;
2. v := n; (ví dụ: n=23)
3. Chuyển đến bước 2

Bước 2:
1. u := 1;
2. 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-qk-1.uk-1;
2. vk := vk-2-qk-1.vk-1;
3. Nếu vk=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=23 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 tố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 :m 1, m2, … , mk. Với mỗi bộ số
nguyên bất kỳ a1, a2, … , ak. Hệ phương trình đồng dư:


Ln có nghiệm duy nhất theo mođun M = m1.m2...mk là:

trong đó
M1 = M / m1, M2 = M / m2,..., Mk = M / mk
y1 = (M1) − 1(mod m1), y2 = (M2) − 1(mod m2),..., 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ố
(1) Write n – 1 = 2k m, where m is old
(2) 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 (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 = Σpi2i(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 = Σpi2i(i = 0, 1)
Output: y = xp mod m
(1) y = 1
(2) for i = 1 downto 0 do

y = y2 mod m


if pi = 1 then y = (y*x) mod m
(3) return y

g. Định lý Ferma
Nếu p là một số nguyên tố cịn a là một số ngun thì ap ≡ a(mod p).
Nếu p không chia hết cho a (tức là a(mod p) ≠ 0) thì a p-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) 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à ngun 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
2. 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) = #M

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. φ(∏pi) = ∏(pi – 1), trong đó pi là các số nguyên tố khác nhau;
3. φ(∏piki) = ∏(pi∙(pi – 1)ki), 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 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) là hàm Euler của n.



3.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 tố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à q 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 tố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 tố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 tốn có thể làm
việc. Việc xem xét về khơng gian của thuật tố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 tố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 tố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à tố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 tố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 tố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 tố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)
Tuy vậy, khi phân tích thuật tố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 tố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 tố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 tố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 tố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 tốn có độ phức tạp là O(f(n))
trong trường hợp đó.
Như vậy, thuật tố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 tốn có độ phức tạp O(n) là các thuật
tốn có độ phức tạp tuyến tính.
Sau đâ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 tốn có độ
phức tạp O(nk) sẽ phức tạp hơn bài tốn có độ phức tạp O(n) hoặc O(logn).





×