Ngày nay, cùng với sự phát triển của tin học, nhiều ngành của lý thuyết số đã tìm thấy những ứng dụng quan trọng trong đời sống như : Thông tin, mật mã, kỹ thuật máy tính.. Trong sách "n
Trang 1LỜI NÓI ĐẦU
Trước thập kỷ bảy mươi, số học vẫn được xem là một trong những ngành lý thuyết thuần tuý và xa rời thực tế nhất Ngày nay, cùng với sự phát triển của tin học, nhiều ngành của lý thuyết số đã tìm thấy những ứng dụng quan trọng trong đời sống như : Thông tin, mật mã, kỹ thuật máy tính
Trong sách "nhập môn số học thuật toán" của Hà Huy Khoái, tác giả
đã giới thiệu những ứng dụng quan trọng của số học vào thực tiễn mà tiêu biểu đó là các hệ mật mã khóa công khai Những ứng dụng này được xuất phát từ sự khó khăn tìm ra thuật toán hữu hiệu để phân tích một số nguyên lớn
ra thừa số nguyên tố Như vậy việc xây dựng các thuật toán số học trong đó
có thuật toán phân tích một số nguyên lớn ra thừa số nguyên tố có tầm quan trọng đặc biệt Trên cơ sở đó, trong khoá luận này, chúng tôi nghiên cứu đề
tài: "Một số thuật toán số học và hệ mật mã khoá công khai"
Khoá luận được chia làm hai chương cùng với lời nói đầu, kết luận và tài liệu tham khảo
Trong chương I , chúng tôi giới thiệu các thuật toán số học có liên quan trực tiếp ở chương II Trong chương này chúng ta sử dụng một ký hiệu quan trọng thay cho phép gán đó là ":=" Kết quả chính ở chương này là thuật toán Euclide mở rộng trên vành số nguyên Z và trên trường Fq , thuật toán Tonelli-Shanks mở rộng trên trường Fq và thuật toán kiểm tra số nguyên tố xác suất Solovay-Strassen.Các kết quả này đã được kiểm tra trên máy tính Những ứng dụng của lý thuyết số mà tiêu biểu là sử dụng các thuật toán
số học để xây dựng các hệ mật mã khoá công khai được trình bày ở chương II.Kết quả chính ở chương này là giới thiệu và chứng minh các tính chất liên quan tới hệ mật mã khoá công khai RSA
Trang 2Khoá luận được thực hiện và hoàn thành tại khoa Toán Trường Đại học Vinh dưới sự hướng dẫn của thầy giáo TS.Nguyễn Thành Quang Nhân dịp này tôi xin được bày tỏ lòng biết ơn và kính trọng sâu sắc tới các thầy TS Nguyễn Thành Quang, PGS.TS Ngô Sĩ Tùng, TS.Mai Văn Tư, TS Lê Quốc Hán và tất cả các thầy cô giáo ở bộ môn Đại Số và khoa Toán Trường Đại học Vinh Đặc biệt là TS.Nguyễn Thành Quang đã dành rất nhiều thời gian và công sức để giúp tôi hoàn thành khoá luận này Tôi cũng xin bay tỏ lòng biết
ơn tới GS-TSKH Hà Huy Khoái đã đọc khóa luận và cho những ý kiến xác đáng
Vinh ngày 1 tháng 5 năm 2003
Tác giả:
Phan Xuân Vọng
Trang 31.1 Thuật toán Euclide
Thuật toán này dựa trên nhận xét sau:
Nếu b = 0 thì (a,b) = a, ngược lại ta viết
a = p.b + r, 0 r < b thì (a, b) = (b,r)
E1 (Kết thúc) Nếu b = 0 thì in ra kết quả UCLN (a,b) = a và kết thúc thuật toán Ngược lại chuyển sang bước E2
E2 (chia Euclide): r:= a mod b; a:= b; b := r và chuyển sang bước E1
Nhiều lúc, ngoài việc tìm UCLN của a và b ta cần tìm u,v để
d = UCLN (a,b) = au + bv
Thuật toán Euclide mở rộng giúp ta tìm u, v
1.2 Thuật toán Euclide mở rộng
Ed1 (xuất phát): Đặt u1 : = 1; u2: = 0; u3 : = a
3
v u
;
Trang 4(trong suốt quá trình thực hiện thuật toán)
Nếu b = 0 thì thuật toán kết thúc ở Ed1 trong lần đầu tiên
Ngƣợc lại Ed3 thực hiện k lần thì q = qk; v3 = rk+1; u3 = rk
nên khi v3 = 0 = rn+1 thì u3 = rn = (a, b).Thuật toán đã đƣợc chứng minh
Một mở rộng tự nhiên cho các số a1, a2, , an và ta tìm đƣợc các số
u1, u2, , un sao cho (a1, a2, , an) = u1a1 + u2 a2 + + unan
Ta có thuật toán sau :
1.3 Thuật toán Euclide mở rộng cho nhiều số:
Thuật toán này xuất phát từ nhận xét sau:
Nếu an = 0 thì (a1, a2, …,an) = (a1 , a2 , …, a n-1 , 0) =(a1 , a2 , …, a n-1 );
Nếu an 0 thì ta viết a1 = q1.an + r1; 0 r1< an
a2 = q2.an + r2; 0 r2 <an
………
an -1 = qn-1.an + rn -1;0 rn-1<an
Trang 5Khi đó ta có (a1, a2, …,an) = (an, r1, …,rn-1);
Ký hiệu: l(p) là hệ số của luỹ thừa cao nhất của đa thức P
Khi Q 0,thuật toán sau cho phép tìm đa thức U, V Zp[X] để P(x) = Q (x) U(x) + V(x) với deg V < deg Q
CE1(xuất phát): Đặt V(x) : = P(x); U(x) = 0 ;
CE (kết thúc): Nếu deg V < deg Q thì kế thúc thuật toán
Trang 6CE3 (tìm hệ số): Đặt S : = l(V) l(Q)-1 Xdeg V - deg Q;
U : = U + S;
V: = V-S.Q và quay về bước CE2:
2.2 Thuật toán tìm UCLN của P, Q Z p [X]
EP1 (kết thúc): Nếu Q = 0, in ra P và kết thúc thuật toán
EP2 (chia euclide): Giả sử P = Q.U + V deg V < deg Q
(điều này được thực hiện nhờ thuật toán trên)
Quay lại bước Ed2
Tính đúng đắn của thuật toán được chứng minh tương tự như các thuật toán Euclide và Euclide mở rộng đối với các số nguyên
Ở đây, M1, M2, M3, N1, N2, N3, T1, T2, T3 là các đa thức trên Zp[X]
Trang 7Đ 3 THUẬT TOÁN BÌNH PHƯƠNG LIÊN TIẾP
Một vấn đề đặt ra như sau: Tính d am (mod q), với q, a và m là những
số nguyên cho trước Để tìm d , ta có thể tính kết quả cụ thể của am
rồi sau đó lấy số dư của phép chia am
cho q Thế nhưng khi a và m là các số lớn thì việc tính am là rất khó khăn Sau đây ta sẽ mô tả một thuật toán cho phép tìm ra d khá nhanh
Trang 8BP2 (kiểm tra) : Nếu N lẻ thì d: =d z (mod q);
BP3 (chia): Đặt N: = [N/2];
Nếu N = 0 thì in ra d và kết thúc thuật toán
Ngƣợc lại z:=z.z ( mod q) quay về BP2
Cách làm trên có thể áp dụng cho mọi nhóm nhân
Giả sử g G là phần tử thuộc nhóm nhân G nào đó.Ta cần tính gn với n
Trang 9Chứng minh:
Với một x F*q, ta đặt a: = x2
mod q
Như vậy a sẽ là một thặng dư bậc hai theo modulo q
Mặc khác phương trình x2 a mod q có đúng 2 nghiệm khác nhau trên
nếu a là một thặng dư bình phương theo modulo q
nếu a không là một thặng dư bình phương theo modulo q
Trang 10Nếu q a = 1 thế thì đồng dư thức x2 a (mod q) có nghiệm x0
Vì x0 F*q nên bậc của x0 là ước của q - 1
= -1; tức là phương trình đồng dư: x2 a (mod q) là vô nghiệm
Mặt khác Ta lại có: Với mọi b F*q, tồn tại duy nhất b* F*q để bb* = a (b* = b-1.a)
Vì phương trình đồng dư vô nghiệm nên b b*
Như vậy ta sẽ nhóm các phần tử của F*q thành từng cặp mà tích của chúng bằng a Có (q-1)/2 cặp như vậy
Nên ta có:
*
q
F b
b -1 (mod q)
Trang 11Thật vậy: Trong F*q chỉ có 1 và -1 là có nghịch đảo là chính nó nên
*
q
F b
b q
iii) a1, a2, , an F*q;
a q
a a
NÕu
4) 1(mod q
NÕu 1
1 1
q
Đến đây ta đã có tiêu chuẩn để xét xem một phần tử thuộc F*q có phải
là một thặng dư bậc hai hay không (tức là có phải một phần tử chính phương hay không)
Nhiều lúc khi biết a là phần tử chính phương, cần tìm x để x2
= a để làm điều này ta xét thêm các tính chất nữa của thặng dư bình phương
Trang 12Gọi s là số các số trong dãy sau có thặng dư âm trong hệ thặng dư với giá trị tuyệt đối nhỏ nhất
Đ 5 THUẬT TOÁN TÍNH CĂN BẬC HAI MODULO q TRÊN TRƯỜNG F q
Trang 13Sau đây ta sẽ xét thuật toán tìm x để x2
= a khi biết a là phần tử chính phương, tất nhiên ta có thể thử tất cả các phần tử của F*q nhưng cách này không làm được khi q lớn
Nếu a(q-1)/4 1 thì ta có nghiệm x = a(q+3)/8 (mod q)
Nếu a(q-1)/4 -1 thì ta có nghiệm x = 2a.(4a)(p-5)/8 (mod q)
= 2(p-1)/4 a(p+3)/8 (mod q) Thật vậy
Từ định lý 4.3 (phần thặng dư bậc hai ) ta có:
1 )
1 ( )
1 (
q (mod q) tiêu chuẩn Euler
Suy ra: 2(q-1)/2 -1(mod q)
Nên x2 = 4a2 4(p-5)/4 a(p-5)/4 (mod q) a(2(q-1)/2)) a(q-1)/4 (mod q)
a(mod q) Như vậy chỉ còn trường hợp khó khăn đó là q 1 (mod 8)
Dưới đây là thuật toán Tonelli - Shanks để tính căn bậc hai mod q trên Fq
Ta luôn viết q - 1 = 2e g ( g lẻ)
Nếu ta tìm được phần tử z và số nguyên k chẵn sao cho ag
zk 1 (mod q)
Trang 14thì nghiệm cần tìm là x = a(g+1)/2
zk/2 (mod q)
Ta sẽ tìm phần tử z dưới dạng z = ng
, n F*q
Ta chỉ ra rằng phần tử z như vậy thoả mãn yêu cầu đặt ra khi và chỉ khi
n không là một thặng dư bình phương theo modulo q
Thật vậy: Ta có thể gọi b là phần tử sinh của nhóm nhân xyclic F*q
Gọi G là nhóm nhân xyclic sinh bởi bg
, G = <bg> , bậc của bg
là
) , 2 (
2
g g
Vì a là một thặng dư bậc hai theo modulo q Do đó tồn tại x0 F*q
để x02 a (mod q) mà b là phần tử sinh của F*q nên x0 = blo,
Trang 15(1 mod q) không đồng dư với nhau từng đôi một theo mod q
Điều này có được là vì nếu n là một phần sinh của G, và có
Cuối cùng ta cũng dễ thấy n, n2
, n4, ,
e
n2 không đồng thời đồng dư với nhau từng đôi một khi và chỉ khi không là thặng dư bình phương theo modulo q
Để xây dựng thuật toán ta tìm phần tử z và số mũ k
Tìm phần tử z được thực hiện bằng thuật toán xác suất
= -1 thì đặt z = ng
Trang 16Nếu ngược lại, ta lại tiếp tục làm như trên với một số ngẫu nhiên khác cho đến khi thích hợp Vì số các thặng dư bình phương theo modulo q là (q-
1)/2, do vậy xác suất rủi ro khi thực hiện m lần là
m
2
1 Xác suất này rất nhỏ khi chọn m khá lớn
Khi đã chọn điểm z thoả mãn tồn tại số k chẵn để ag
zk 1 (mod q) ta còn phải tìm k
Việc tìm k là khó khăn hơn thế nhưng ta không cần biết k mà chỉ cần biết x = a(g+1)/2
2k/2.Thuật toán sau đây cho ta cách tìm x
5.1 Thuật toán Tonelli-Shanks
TSh3(Tìm số mũ): Nếu b 1 (mod q), in ra x và kết thúc thuật toán
Ngược lại, tìm số m nguyên dương nhỏ nhất sao cho
m 1;
m
b2 1 (mod q)
Nếu m = r thì in ra thông báo, a không phải là một thặng
dư bình phương theo modulo q
Ngược lại chuyển sang TSh4
TSh4 (Thu hẹp số mũ):
Đặt t := y2rm1; y := t2 , r := m; x := x.t; b := b.y và chuyển sang TSh3 Tính đúng đắn của thuật toán được chứng minh như sau:
Trang 18Đ 6 THUẬT TOÁN KIỂM TRA SỐ NGUYÊN TỐ XÁC SUẤT
k
tp
a p
a n
t
p p
t
p p
p 1. 2
2 1khi đó với mọi i ( 1 i r) t i
t i
Trang 19Nếu tồn tại ti nào đó 2 thì pi n-1 điều này dẫn đến vô lý.Định lý đã được chứng minh
Định lý 6.2 Giả sử n là số nguyên dương lẻ không chính phương Khi đó tồn
tại ít nhất số b với 1 < b < n , (b, n) = 1 sao cho 1
Nếu n là số nguyên tố lẻ, theo định lý 4.1 có đúng (n-1)/2 số b thỏa mãn
Nếu n là hợp số lẻ không chính phương
Ta phân tích n ra dạng tiêu chuẩn n = t r
r t
t
p p
p 1. 2
2
1 vì n không phải số chính phương nên tồn tại ti lẻ, giả sử t1 lẻ
p 2
2 ; (p1, q) = 1) Gọi b0 là một không thặng dư bình phương modulo p1 (tồn tại do p1 là nguyên tố lẻ)
p b
x
mod 1
mod 10
1 1
0 1
0 1
b p
b p
b
Trang 20
Suy ra: 1
1 1
1 1
p
b q
b p
Từ đó suy ra: b(n-1) 1 (mod n)
Như vậy n có dạng n = p1p2 pk tích của các số nguyên tố lẻ khác nhau (định
lý 6.1.)
Ta sẽ chỉ ra rằng b(n-1)/2 1 (mod n) với mọi b, 0 < b < n, (b, n) = 1
Nếu ngược lại , tức là tồn tại b0 thoả mãn b0(n-1)/2 -1 (mod n)
Theo định lý Trung Quốc về phần dư ta có a thoả mãn phương trình
Trang 21Nhƣ vậy ta có b (n-1)/2 1 (mod n) với mọi b , 0 < b < n ,(b, n) = 1
Từ (*) ta có n b 1 với mọi b , 0 < b < n , (b,n) = 1 Mẫu thuẫn với định
Trang 22Cũng dễ thấy rằng nếu hai số a, c khác nhau thì ab, cb cũng khác nhau
Do vậy số các số a nguyên dương không vượt quá n, nguyên tố cùng nhau với
n thoả mãn đẳng thức a(n-1)/2 n a (mod n) ít hơn số không thỏa mãn Từ đó định lý được chứng minh
Từ đó ta có thuật toán sau:
6.4 Thuật toán kiểm tra số nguyên tố xác suất Solovay - Strassen
SS 1 (xuất phát) Chọn ngẫu nhiên k số b1, b2, , bk từ các số 2, 3, , n-1
Nếu tồn tại bi để (bi, n) 1 thì in ra kết quả n là hợp số và kết thúc thuật toán
SS 2 (Kiểm tra ):Nếu tồn tại bj để
Khi chọn các số b1, b2, , bk thì không nên chọn hai số có tổng bằng n
và một số bằng tích của hai số nào đó vì
(mod n)
Trang 23+ Khi thực hiện thuật toán một điều khó khăn xẩy ra là phải tính
+ JL3 (tách luỹ thừa của 2): s:=0;
Nếu u chẵn thì s:=s +1; u:= u/2, (lặp lại cho đến khi u lẻ)
d : = d (-1) ( 1)/8 ( 1)( 1)/4
2 v u
v s
; Đặt t : = u; u : = r với v = u.q + r , 0 r < u
Trang 24Quay lại JL2
Trang 25CHƯƠNG II VÀI ỨNG DỤNG VÀO LÝ THUYẾT MẬT MÃ
Mã hoá: Là việc chuyển văn bản (thông báo) thành dạng mật mã
Văn bản mật: Là bản mã hoá của văn bản
Giải mã: Là chuyển một văn bản mật thành văn bản ban đầu
(Chú ý: Trong văn bản chữ cái hoa và chữ cái thường đều có giá trị như nhau)
Việc lập mã bằng mã Cesar được thực hiện như sau:
+ Chuyển chữ thành số: Chuyển văn bản (bằng chữ) thành dãy số bằng cách đặt tương ứng với mỗi chữ cái trong văn bản với một số như bảng trên
+ Chọn khoá lập mã: Khoá lập mã là một số k nào đó sao cho
0 < k< 29, k Z
+ Ta cộng thêm k vào mỗi số của dãy vừa thiết lập tương ứng (văn bản số) +Chuyển văn bản số thành văn bản chữ nhờ bảng tương ứng.Khi đó ta được văn bản mật
Trang 26Ở đây ta chú ý: Khi cộng thêm k vào mỗi số thì số đó có thể vượt quá
29, tức là không có chữ cái nào tương ứng, lúc này ta thay số đó bởi số dư khi chia cho 29
Ta có thể tóm tắt nội dung lập mã bằng công thức
C P + k (mod 29)
trong đó: P là chữ số trong văn bản
C là chữ số tương ứng trong văn bản mật
Ví dụ 1:Hãy mã hoá văn bản sau đây bằng mã Cesar với khoá lập mã là k=3
LÝ THUYẾT MẬT MÃ KHÔNG CÓ GÌ KHÓ
Ta tách văn bản thành từng nhóm để nâng cao tính bảo mật, ở đây ta tách thành từng nhóm 5 chữ cái Như vậy thông báo cần mã hoá là:
LYTHU YÊTMÂ TMAKH ÔNGCO GIKHO
Nhờ bảng ta chuyển thông báo thành chữ số:
Chuyển lại thành chữ cái:
OÂVLX ÂIVLÔD VÔBNL QƠKEP KMNLP
Đây là văn bản mật đã được mã hoá
II GIẢI MÃ
Giải mã văn bản mật được mã hoá bởi mã Cesar ta thực hiện giải phương trình đồng dư:
C P + k (mod 29) 1 P 29
Trong đó: C là khối chữ trong văn bản mật (đã biết)
P là khối chữ trong văn bản (cần tìm)
Trang 27k là khoá lập mã
III MÃ APHIN CESAR:
Mã Aphin cesar là một mở rộng tự nhiên của Cesar và có công thức lập mã
C aP + b (mod 29) , 1 C 29
Trong đó: a, b là các hằng số nguyên và (a, 29) = 1
Việc giải mã được tiến hành nhờ giải phương trình đồng dư
C aP + b (mod 29) , 1 P 29
trong đó: P là ẩn cần tìm
Chú ý: điều kiện (a, 29) = 1 là cần thiết để đảm bảo tính chính xác khi giải
mã
IV TÍNH BẢO MẬT CỦA VĂN BẢN
Giá trị duy nhất của việc lập văn bản mật đó là tính bảo mật của văn bản Nếu tính bảo mật không cao, khi nhân viên giải mã gặp được văn bản mật và tiến hành giải mã thì nội dung thông báo cần chuyển đi sẽ bị lỗ
Từ cách lập mã của mã Cesar và mã Aphin cesar ta thấy tính bảo mật chưa cao bởi vì:
Khi bắt gặp văn bản mật, người ta có thể dựa vào tần suất xuất hiện của các chữ cái trong văn bản mật để đoán ra nội dung Hơn nữa, đối với mã Cesar chỉ có 29 cách lập mã khác nhau nên dễ dàng tìm ra khoá của mã khi sử dụng máy tính
Trang 28Đ2 MÃ KHỐI
Để chống lại việc sử dụng tần suất xuất hiện của các chữ cái trong văn bản để tìm ra khoá giải mã Khác với các hệ mã vừa trình bày ta không mã hoá từng chữ cái của văn bản nữa mà mã hoá từng khối của văn bản, đó chính
là nội dung của việc lập mã bằng mã khối
I MÃ HOÁ
Ta sử dụng bản tương ứng giữa chữ và số như bảng trên
Giả sử từng khối được mã hoá gồm n chữ Ta sẽ chọn khóa lập mã là một ma trận vuông cấp n với hệ số nguyên
n j i ij
a
A ( ) , 1, ; aij Z
Ma trận A phải thoả mãn điều kiện ( A , 29) = 1
Khi đó khối n chữ P1, P2, , Pn trong văn bản được chuyển thành khối n chữ C1,C2, , Cn trong văn bản mật theo công thức sau:
Ci =
n j
j
ij P a
1
. (mod 29); 1 Ci 29 i 1 , n; (1)
Ví dụ : Để đơn giản ta chọn khối lập mã là hai chữ
Hãy mã hoá theo mã khối thông báo sau:
KHÔNG CÓ ĐIỀU BÍ MẬT NÀO GIỮ ĐƯỢC LÂU
11 23
A ; ( A , 29) = (177, 29) = 1
Lập mã ta tách thông báo thành từng khối hai chữ như sau:
KH ÔN GC OĐ IÊ UB IM ÂT NA OG IƯ ĐƯ ƠC LÂ UX
(Ta thêm x vào cuối văn bản)
Chuyển thông báo này thành chữ số như sau: