Tải bản đầy đủ (.doc) (49 trang)

Về mật mã khóa công khai

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 (568.48 KB, 49 trang )

1

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC VINH

ĐOÀN MINH KẾ

VỀ MẬT MÃ KHÓA CÔNG KHAI

LUẬN VĂN THẠC SĨ TOÁN HỌC

NGHỆ AN – 2015


2

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC VINH

ĐOÀN MINH KẾ

VỀ MẬT MÃ KHÓA CÔNG KHAI
CHUYÊN NGÀNH: ĐẠI SỐ VÀ LÝ THUYẾT SỐ

Mã số: 60 46 01 04

LUẬN VĂN THẠC SĨ TOÁN HỌC
Người hướng dẫn khoa học
PGS.TS. NGUYỄN THÀNH QUANG

NGHỆ AN - 2015




3

MỤC LỤC
TRANG
MỞ ĐẦU
CHƯƠNG I
MỘT SỐ KIẾN THỨC SỐ HỌC CƠ SỞ
1.1
1.2
1.3

Phi hàm Euler và ứng dụng
Kiểm tra nguyên tố trên Maple
Biểu diễn số nguyên
CHƯƠNG II
MỘT SỐ ỨNG DỤNG CỦA SỐ HỌC TRONG LÝ
THUYẾT MẬT MÃ

2.1
2.2
2.3

Mật mã học
Mật mã khoá công khai
Hệ mã RSA
KẾT LUẬN
TÀI LIỆU THAM KHẢO


1
3

3
9
17
22

22
29
36
46
47

MỞ ĐẦU
Cho đến những năm 70 của thế kỷ XX, Số học vẫn được xem là một trong
những ngành lý thuyết thuần túy và đẹp đẽ nhất của toán học ([4]). Máy tính không


4
những phát huy mọi vẻ đẹp truyền thống của Số học mà còn triển khai ra những
ứng dụng đang và sẽ có cho chúng ta trong thế kỷ XXI.
Một trong những ứng dụng nổi bật của Số học đó là thuật toán phân tích mỗi
số tự nhiên thành tích các thừa số nguyên tố chính là nguyên tắc cơ bản của khóa
mật mã công khai. Vì vậy, ngày nay việc nghiên cứu về số nguyên tố càng được
kích thích bởi sự kiện là các số nguyên tố tỏ ra rất có ích trong việc mã hóa và giải
mã các thông tin. Tính bảo mật và an toàn của hệ mật mã RSA (do ba nhà khoa
học của Học viện Công nghệ Massachusetts công bố năm 1978) được đảm bảo
bằng độ phức tạp của bài toán số học phân tích một số nguyên thành tích các thừa
số nguyên tố. Nói khác đi, vấn đề thời gian tiêu tốn cho việc chạy máy tính để thực

hiện bài toán phân tích một số nguyên đủ lớn thành tích các thừa số nguyên tố,
được sử dụng làm chỉ tiêu định lượng đánh giá độ an toàn của hệ mã RSA.
Thuật toán mật mã khóa công khai được thiết kế đầu tiên bởi James H.
Ellis, Clifford Cocks, và Malcolm Willa vào đầu thập kỷ 1970. Thuật toán sau này
được phát triển và biết đến dưới tên Diffie-Hellman và là một trường hợp đặc biệt
của RSA ([6]).
Mật mã khóa công khai là một dạng mật mã hóa cho phép người sử dụng
trao đổi các thông tin mật mà không cần phải trao đổi các khóa chung bí mật trước
đó. Điều này được thực hiện bằng cách sử dụng một cặp khóa có quan hệ số
học với nhau là khóa công khai và khóa cá nhân (hay khóa bí mật).
Thuật ngữ mật mã hóa khóa bất đối xứng thường được dùng đồng nghĩa
với mật mã hóa khóa công khai mặc dù hai khái niệm không hoàn toàn tương
đương. Có những thuật toán mật mã khóa bất đối xứng không có tính chất khóa
công khai và bí mật như đề cập ở trên mà cả hai khóa (cho mã hóa và giải mã) đều
cần phải giữ bí mật.
Với những lý do trên, chúng tôi lựa chọn đề tài luận văn ‘‘Về mật mã khóa
công khai’’ nhằm tìm hiểu sâu hơn những ứng dụng của Số học có liên quan đến
lĩnh vực đề tài luận văn quan tâm.


5
Luận văn gồm hai chương. Chương 1 trình bày các kiến thức số học về: Phi
hàm Euler và ứng dụng, định lý số dư Trung Quốc, số giả nguyên tố và số
Camichael. Chương 2 trình bày tổng quan về mật mã học, về mật mã khóa công
khai, hệ mã RSA và ứng dụng của Số học vào các hệ mã khóa công khai.
Luận văn này được hoàn thành dưới sự hướng dẫn tận tình và chu đáo của
PGS.TS. Nguyễn Thành Quang. Nhân dịp này tôi xin bày tỏ lòng kính trọng và
biết ơn sâu sắc tới thầy giáo hướng dẫn khoa học, người đã dành nhiều thời gian và
công sức cho việc giúp đỡ tôi hoàn thành luận văn này.
Nhân dịp này tôi xin gửi lời cảm ơn đến các thầy cô giáo thuộc chuyên

ngành Đại số và Lý thuyết số, Khoa Sư phạm Toán học, Phòng Đào tạo Sau Đại
học - Trường Đại học Vinh, những người đã tận tình giảng dạy và tạo mọi điều
kiện thuận lợi cho tôi hoàn thành khóa học.
Tôi xin gửi lời cảm ơn đến Ban giám hiệu Trường THPT Lương Thế Vinh –
Sở Giáo dục và Đào tạo Quảng Bình và các đồng nghiệp, đã tạo điều kiện thuận lợi
để tôi hoàn thành nhiệm vụ học tập. Tôi xin chân thành cảm ơn bạn bè, gia đình đã
động viên và giúp đỡ tôi trong suốt khóa học.
Mặc dù đã có nhiều cố gắng, song luận văn này không tránh khỏi những
thiếu sót. Tác giả mong muốn nhận được sự góp ý chân thành của các thầy cô giáo
và đồng nghiệp.
Nghệ An, tháng 10 năm 2015
TÁC GIẢ

CHƯƠNG 1
MỘT SỐ KIẾN THỨC SỐ HỌC CƠ SỞ

1.1. Phi hàm Euler và ứng dụng


6
1.1.1. Định nghĩa. Phi hàm Euler ϕ là hàm số số học có giá trị tại số tự nhiên
n ≠ 0 bằng số các số tự nhiên không vượt quá n và nguyên tố cùng nhau với n :

ϕ ( n) =

1

1≤ k ≤ n .
( k ,n ) =1


Hàm số ϕ trong tiếng Anh còn được gọi là hàm "totient". Hàm này thường
được gọi là hàm số Euler, theo tên nhà toán học Thụy Sỹ Leonhard Euler, người đã
nghiên cứu và ký hiệu nó bằng chữ cái Hy Lạp: Phi ( ϕ ). Đối totient của n được
định nghĩa là n − ϕ (n), nghĩa là số các số nguyên dương nhỏ hơn hoặc bằng n mà
không nguyên tố với n .
Hàm ϕ có nhiều ứng dụng vì nó là kích thước (cấp) của nhóm nhân các lớp
khả nghịch của vành Zn các số nguyên modn. Hơn nữa, đối với hàm Euler ta có
công thức Gaus, còn gọi là công thức tổng trải, trên các ước dương d của n :

å j (d ) = n .
dn

1.1.2. Định lý Euler [7]. Nếu n > 1 là số nguyên bất kỳ và a là số nguyên sao cho
a và n nguyên tố cùng nhau, thì:
aϕ ( n ) ≡ 1(mod n) .

Định lý Euler là tổng quát hóa của Định lý bé Fermat, vì nếu n = p là số
nguyên tố thì ϕ ( p ) = p − 1 .
1.1.3. Định lý bé Fermat [7]. Nếu p là số nguyên tố và a là số nguyên không chia
hết cho p thì a p −1 ≡ 1(mod p) . Nói cách khác, nếu p là số nguyên tố và a là số
nguyên bất kỳ thì a p ≡ a(mod p) .
1.1.4. Giả thuyết Trung Quốc. Một cách độc lập với Định lý bé Fermat, các nhà
toán học Trung quốc đã đưa ra một giả thuyết (thường gọi là Giả thuyết Trung
Quốc) nói rằng: p là một số nguyên tố khi và chỉ khi 2 p º 2(mod p ) . Quả là,
nếu p là số nguyên tố, thì 2 p º 2(mod p) vì đây là trường hợp đặc biệt của Định lý


7
bé Fermat. Song mệnh đề ngược lại (nếu 2 p º 2(mod p ) thì p là số nguyên tố) là
sai. Chẳng hạn, 2341 º 2(mod 341) , nhưng 341 = 11.31 là hợp số. Như vậy, mệnh đề

ngược lại của Định lí Fermat bé không đúng. Theo Định lý Fermat bé, nếu n là số
nguyên tố và b là số nguyên tùy ý, thì b n ≡ b(mod n) . Như vậy, với n là một số tự
nhiên lớn hơn 1 mà có một số nguyên b nào đó sao cho đồng dư thức trên không
xảy ra thì n là hợp số, còn trong trường hợp đồng dư thức trên xảy ra thì chưa thể
nói gì về tính nguyên tố của n . Tuy nhiên, qua nhiều thống kê cho thấy rằng nếu
một số nguyên thỏa mãn kết luận của Định lí Fermat bé thì "có nhiều khả năng" nó
là số nguyên tố. Do đó, dẫn xuất đến khái niệm sau.
1.1.5. Số giả nguyên tố. Giả sử b là một số nguyên dương cho trước. Nếu n là
hợp số nguyên dương và b n ≡ b(mod n) , thì n được gọi là số giả nguyên tố cơ sở b .
Trong trường hợp gcd(n, b) = 1 , người ta dùng điều kiện tương đương sau:
b n −1 ≡ 1(mod n) .

Ví dụ. Số nguyên 561 là số giả nguyên tố cơ sở 2. Thật vậy, ta có
561 = 3.11.17 và gcd(3,561) = gcd (11,561) = gcd(17,561) = 1,
do đó áp dụng Định lý Fermat bé, ta có
2560 = (22 )280 ≡ 1(mod 3)
2560 = (216 )35 ≡ 1(mod17)
2560 = (210 )56 ≡ 1(mod11)

Từ đó suy ra, 2560 ≡ 1(mod 561).
Nói chung số giả nguyên tố ít hơn nhiều so với các số nguyên tố. Chẳng hạn,
có tất cả 455052512 số nguyên tố bé hơn 1010, nhưng chỉ có 14884 số giả nguyên
tố cơ sở 2 trong khoảng đó. Cụ thể hơn, có 5 số nguyên tố bé hơn 12 là 2,3,5,7,11
nhưng không có số giả nguyên tố cơ sở 2 trong khoảng đó.
Sự kiện này giải thích điều nói ở trên: Các số thoả mãn Định lý Fermat bé có
nhiều khả năng là số nguyên tố. Tuy nhiên, đối với mọi cơ sở tuỳ ý, số các số giả
nguyên tố là vô hạn. Chẳng hạn, ta chứng minh điều đó với cơ sở 2.


8

1.1.6. Định lý. Nếu n là số giả nguyên tố cơ sở 2 thì m = 2 n - 1 cũng là số giả

nguyên tố cơ sở 2. Từ đó suy ra có vô hạn số giả nguyên tố cơ sở 2.
Chứng minh. Giả sử n là một số giả nguyên tố cơ sở 2, ta sẽ chứng minh rằng số
nguyên m = 2n − 1 > n cũng là số giả nguyên tố cơ sở 2. Thật vậy, theo giả thiết, ta
có n là hợp số, chẳng hạn n = dt ,1 < d , t < n. Do đó
m = 2n − 1 = (2d )t − 1 = (2d − 1) ( (2 d )t −1 + (2 d )t −2 + L + 1) .

Từ đó, suy ra m là hợp số. Do n là số giả nguyên tố cơ sở 2, nên có
2n ≡ 2(mod n), hay tồn tại một số tự nhiên k sao cho 2n − 2 = kn. Ta có m = 2n − 1,

hay m − 1 = 2n − 2 = kn. Vì vậy, 2m−1 − 1 = 2kn − 1 = (2n ) k − 1 chia hết cho m = 2n − 1 ,
tức 2m−1 ≡ 1(mod m). Vậy m là số giả nguyên tố cơ sở 2. ▄
1.1.7. Số Carmichael. Hợp số n thỏa mãn đồng dư thức b n −1 ≡ 1(mod n) với mọi số
nguyên dương b sao cho gcd(n, b) = 1 được gọi là số Carmichael.
Ví dụ. Số nguyên 561 là một số Carmichael. Thật vậy, nếu gcd(b, 561) = 1 thì
gcd(b,3) = gcd(b,11) = gcd(b,17) = 1, do đó áp dụng Định lý Fermat bé, ta có
b560 = (b 2 ) 280 ≡ 1(mod 3)
b560 = (b10 )56 ≡ 1(mod11)
b560 = (b16 )35 ≡ 1(mod17).

Từ đó suy ra, b560 ≡ 1(mod 561).
Giả thuyết: Tồn tại vô hạn số Carmichael, mới được chứng minh rất gần
đây bởi R. Alford, A. Granville, C. Pomarance, 1993 (xem [4,7]).
Định lý sau đây cho một cách tìm số Carmichael.
1.1.8. Định lý. Số tự nhiên n là số Carmichael khi và chỉ khi, n = q1q2 ...qn , trong
đó q j ,( j = 1, 2,..., n), là các số nguyên tố khác nhau thoả mãn q j − 1 là ước của
n − 1.



9
Chứng minh. Thật vậy, giả sử b là số nguyên dương sao cho (b, n) = 1. Khi đó
(b, q j ) = 1, do đó b q j −1 ≡ 1(mod q j ). Vì q j −1 là ước của n − 1 nên b n −1 ≡ 1(mod q j ), do

đó ta có b n −1 ≡ 1(mod n). Vậy n là số Carmichael. ▄
Phần đảo lại của định lý trên có thể tìm hiểu ở công trình: M.O. Rabin
(1980), Probabilistic algorithms for testing primality, Journal of Number Theory,
Vol.12, pp. 128-138.
1.1.9. Số giả nguyên tố mạnh. Số nguyên n được gọi là số giả nguyên tố mạnh cơ
sở b nếu nó là hợp số và trải qua được kiểm tra Miller cơ sở b theo nghĩa sau:
Giả sử n là số nguyên dương lẻ, n − 1 = 2s t , trong đó s là số nguyên không
âm, t là số nguyên duơng lẻ. Ta nói n trải qua được kiểm tra Miller cơ sở b , nếu
hoặc bt ≡ 1(mod n) hoặc b 2 t ≡ −1(mod n) với j nào đó, 0 ≤ j ≤ s − 1.
j

Như vậy, các số giả nguyên tố mạnh lại còn ít hơn các số giả nguyên tố. Tuy
nhiên, ta vẫn có định lý sau
1.1.10. Định lý. Tồn tại vô số số giả nguyên tố mạnh cơ sở 2.
Chứng minh. Thật vậy, giả sử n là số giả nguyên tố cơ sở 2. Khi đó , với số nguyên
lẻ k nào đó, ta có 2n −1 − 1 = nk . Đặt

N = 2n−1 − 1, khi đó có ước là 2d – 1, với d là

ước số nào đó của n. Mặt khác
N − 1 = 2n − 2 = 2(2n −1 − 1) = 2nk , 2

N −1
2

= 2nk = (2n ) k ≡ 1(mod N ).


Vậy với mỗi số giả nguyên tố n , ta xây dựng được số giả nguyên tố mạnh N và
các số n khác nhau cho ta các số N khác nhau. Định lý được chúng minh, bởi vì
ta có vô số giả nguyên tố cơ sở 2. ▄
1.1.11. Định lý phần dư Trung Hoa (Chinese Remainder Theorem) [4, 7]. Giả sử
m1 , m2 ,..., mn là các số nguyên dương, nguyên tố cùng nhau từng đôi một. Khi đó,

hệ phương trình đồng dư bậc nhất một ẩn


10
 x ≡ b1 (mod m1 )
 x ≡ b (mod m )

2
2

M

 x ≡ bn (mod mn )

có nghiệm duy nhất theo môđun M = m1m2L mn .
Định lý số dư Trung Quốc là tên người phương tây đặt cho định lý này.
Người Trung Quốc gọi nó là Bài toán Hàn Tín điểm binh. Hàn Tín là một danh
tướng thời Hán Sở, từng được phong tước vương thời Hán Cao Tổ Lưu Bang đang
dựng nghiệp. Sử ký Tư Mã Thiên viết rằng Hàn Tín là tướng trói gà không nổi,
nhưng rất có tài thao lược quân sự. Tục truyền rằng khi Hàn Tín điểm quân số, ông
cho quân lính xếp hàng 3, hàng 5, hàng 7 rồi báo cáo số dư. Từ đó ông tính chính
xác quân số đến từng người. Gần đây, Định lý số dư Trung Quốc có nhiều ứng
dụng trong các bài toán về số nguyên lớn áp dụng vào Lý thuyết mật mã.

Trong Định lí phần dư Trung Hoa, có điều kiện m1 , m2 ,..., mn là các số nguyên
dương đôi một nguyên tố cùng nhau. Câu hỏi đặt ra là nếu m1 , m2 ,..., mn không thoả
mãn điều kiện đôi một nguyên tố cùng nhau thì kết quả định lí này sẽ như thế nào?
1.1.12. Định lý (Định lý phần dư Trung Hoa mở rộng) [4]. Cho n số nguyên dương
m1 , m2 ,L , mn và a1 , a2 ,..., an là các số nguyên dương bất kì. Khi đó hệ phương trình

đồng dư tuyến tính
 x ≡ a1 (mod m1 )
 x ≡ a (mod m )

2
2

M

 x ≡ an (mod mn )

có nghiệm khi và chỉ khi ai ≡ a j (mod(mi , m j )) với mọi i, j thoả mãn 1 ≤ i < j ≤ n.
1.1.13. Phân tích Fermat. Cho n là số nguyên dương lẻ. Giả sử n = ab với a,b là
các số nguyên, do n lẻ nên a,b đều lẻ. Vì vậy, chúng ta có thể viết n = x2 - y2 với


11
x=

a+b
a −b
, y=
do a,b là các số nguyên lẻ nên x, y cũng là các số nguyên. Để
2

2

tìm nghiệm của phương trình n = x 2 − y 2 , quy trình được bắt đầu từ số nguyên nhỏ
nhất m ≥ n và tìm nghiệm trong dãy số sau:
m2 - n, (m + 1)2 - n, (m+2)2 – n, ...
dãy số sẽ dừng do m không thể vượt quá

n+1
. Thật vậy:
2

2

2

 n +1
 n −1

÷ −n =
÷.
 2 
 2 

Tất cả số hạng của biểu thức này là số nguyên. Tuy nhiên phương pháp này
hiệu quả nhất khi n là tích của hai số nguyên tố gần nhau.
Ví dụ. n = 3811. Ta bắt đầu tính và tìm nghiệm trong chuỗi như sau:
622 – 3811 = 33
632 – 3811 = 159
642 – 3811 = 285
652 – 3811 = 414

662 - 3811= 545
672 – 3811 = 678
682 - 3811= 813
692 - 3811= 950
702 – 3811 = 1089 = 332
Vậy ta được kết quả phân tích: 3811 = 702 - 332 = (70 + 33) (70-33) = 103.37.


12

1.2. Kiểm tra nguyên tố trên Maple
1.2.1. Sơ lược về Maple. Ngày nay máy tính đã thâm nhập vào hầu hết các lĩnh
vực khoa học và đời sống. Nhiều chương trình ứng dụng đã được phát triển liên
quan tới quản lý dữ liệu, in ấn, đồ họa, xử lý ảnh,… Riêng đối với ngành toán đã
có những sản phẩm mang tính phổ dụng như Mathematica, Matlat, Maple,… và
nhiều chương trình chuyên dụng cho từng bộ môn toán học. Những phần mềm trên
giúp ích rất nhiều cho việc giảng dạy toán, học toán cũng như việc ứng dụng toán
trong các ngành kỹ thuật, kinh tế và vì thế tại các nước phát triển chúng đã trở
thành cẩm nang của nhiều sinh viên và các nhà khoa học. Maple cho ta một công
cụ tốt để triển khai các thuật toán có độ phức tạp cao mà không có mẹo mực thủ
công nào có thể thay thế được. Maple có đặc tính ưu việt là có ngôn ngữ câu lệnh
rất giống với ngôn ngữ toán học thông thường, dễ sử dụng, đòi hỏi cấu hình của
máy không lớn, đáp ứng nhu cầu tính toán của nhiều đối tượng.
Maple là một hệ phần mềm chuyên dụng cho công việc tính toán bao gồm
các tính toán thuần tuý bằng ký hiệu toán học, các tính toán số và các tính toán
bằng đồ thị. Sản phẩm này do Trường Đại học Tổng hợp Waterloo (Canada) và
Trường Đại học kỹ thuật Zurich (ETZ) xây dựng và đưa vào thương mại đầu tiên
năm 1985. Qua nhiều lần cải tiến Maple đã được phổ biến rộng rãi trên thế giới.
Dưới đây chúng tôi giới thiệu sơ lược các tính năng của Maple thông qua một số
tính toán cụ thể về phương diện đại số và số học.

1.2.2. Các quy định chung của Maple
a) Cụm xử lý (Execution group)
Cụm xử lý là thành phần tính toán cơ bản trong môi trường làm việc của
Maple. Mọi tính toán đều thực hiện trong cụm xử lý. Trong cụm xử lý có chứa lệnh
của Maple cùng với kết quả tính toán, kể cả đồ thị, … Trong Maple có thể nhận
biết một cụm xử lý bằng dấu: [ >


13
b) Lệnh của Maple
Lệnh của Maple được đưa vào trang công tác sau dấu nhắc lệnh (command
prompt) trong các cụm xử lý. Lệnh thực hiện các phép toán và các biểu thức số học
được viết trực tiếp như khi nhập văn bản thông thường. Ví dụ, để tính 99 + 452 ta
viết câu lệnh như sau:
[> 99+452;
Tiếp đến, nhấn phím [Enter] cho thực hiện lệnh, ta sẽ thấy kết quả là: 551
Ký hiệu của các phép toán trong Maple:
Phép nhân được biểu thị bởi dấu *
Phép chia được biểu thị bởi dấu /
Phép luỹ thừa được biểu thị bởi dấu ^
Phép khai căn bậc hai được biểu thị bởi dấu Sqrt (viết tắt của square root).
Kết thúc của dòng lệnh phải là dấu chấm phẩy “;” hoặc dấu hai chấm “:” và
lệnh được thực hiện bằng cách nhấn phím [ Enter] khi con trỏ ở cuối dòng lệnh.
Nếu dòng lệnh kết thúc bằng dấu chấm phẩy thì kết quả của nó sẽ được hiển thị
trên màn hình sau khi lệnh được thực hiện. Nếu kết quả tính toán là những biểu
thức cồng kềnh chiếm nhiều chỗ hoặc là những kết quả tính toán trung gian không
cần cho hiển thị, thì ta kết thúc câu lệnh bằng dấu hai chấm.
Nếu có nhiều dòng lệnh trong một cụm xử lý thì việc nhấn phím [Enter] sau
một dòng lệnh nào đó (trong số các lệnh) cũng tức là thực hiện tất cả các dòng lệnh
trong cụm xử lý đó.

Lệnh của Maple có 2 loại: “ trơ” và “trực tiếp”. Lệnh trực tiếp cho ta ngay
kết quả của lệnh; còn lệnh trơ chỉ cho ra biểu thức tượng trưng và khi cần biết giá
trị đích thực của biểu thức đó ta phải dùng thêm lệnh lấy giá trị của biểu thức
Value (%). Maple ngầm hiểu ký hiệu % là biểu thức ngay trước đó. Lệnh trơ và
lệnh trực tiếp sai khác nhau chỉ ở chữ cái đầu tiên. Lệnh trực tiếp có chữ cái đầu là
chữ thường, còn lệnh trơ có chữ cái đầu là chữ hoa. Các lệnh trơ cho phép ta tiết
kiệm thời gian nhờ tránh được các tính toán trung gian không cần thiết.


14
c) Kết quả của Maple
Sau khi nhấn phím [Enter] ở cuối dòng lệnh trong một cụm xử lý thì kết quả
tính toán sẽ được hiện ra ngay dưới dòng lệnh. Kết quả của lệnh sẽ là số, giá trị
logic: đúng (true) – sai (false), biểu thức toán học, hoặc là đồ thị.
Ghi nhớ : • Cuối dòng lệnh phải là dấu chấm chấm phẩy ; hoặc dấu hai chấm :
Nếu không có một trong hai dấu kết thúc của dòng lệnh này thì máy sẽ báo lỗi
(Error) và không thực hiện tính toán.

• Muốn thực hiện dòng lệnh nào thì đưa con trỏ về sau dấu kết thúc dòng
lệnh đó và nhấn phím [Enter].

• Thực hiện dòng lệnh theo đúng trình tự trước sau vì một số tính toán
trong các bước sau có thể yêu cầu kết quả từ các bước trước.
1.2.3. Kiểm tra nguyên tố. Muốn kiểm tra một số nguyên dương a có phải là số
nguyên tố không ta dùng lệnh:
[>isprime(a);
Ví dụ:
[>isprime(3023057);
true
[>isprime(289309129039);

False
1.2.4. Phân tích ra thừa số nguyên tố
Muốn phân tích số a thành tích các thừa số nguyên tố, ta dùng lệnh:
[>ifactor(a);

Ví dụ:
[>ifactor(720);
25 .32.5


15
1.2.5. Kiểm tra nguyên tố theo Định lý Wilson
Bước 1: Nhập các số nguyên dương cần kiểm tra
[>p: = 2311; q: = 24253;
p:= 2311
q: = 24253
Bước 2: Kiểm tra điều kiện ( p − 1)! ≡ −1(mod p) có thoả mãn hay không bằng lệnh
[> evalb ((p-1)! mod p = p – 1) ;
evalb ((q –1)! modq = q –1 ) ;
true
false
Như vậy, p là số nguyên tố, còn q không phải là số nguyên tố.
1.2.6. Kiểm tra giả thuyết: Tích của các số nguyên tố liên tiếp bắt đầu từ 3 trừ đi
2 là số nguyên tố. Nói khác đi, nếu ký hiệu p k là số nguyên tố thứ k (kể từ số 3 trở
đi) thì số An = p1 p2 p3 ... pn − 2 là số nguyên tố với mọi n >2.
Trong tuyển tập 30 năm báo Toán học và Tuổi trẻ, Nhà xuất bản Giáo dục,
Hà Nội, 1997 viết rằng: “Bằng cách thử ta thấy các số A3 , A4 , A5 , A6 , A7 đều là
số nguyên tố. Tuy nhiên muốn kiểm tra A8 thì cần phải làm 300 phép chia và để
kiểm tra A9 cần tới 1300 phép chia, tức là mất vài buổi làm tính”.
Với Maple, ta dễ dàng kiểm định giả thuyết này nhờ nhận biết được các số

A7 = 3.5.7.11.13.17.19 – 2
A8 = 3.5.7.11.13.17.19. 23 – 2
là số nguyên tố bằng lệnh ifactor:
[> ifactor(3*5*7*11*13*17*19 –2);
(72747673)
[> ifactor(3*5*7*11*13*17*19*23 –2);
(1673196523)
Ta tiếp tục thử với số tiếp theo là


16
A9 = 3.5.7.11.13.17.19. 23.29 – 2
[> ifactor(3*5*7*11*13*17*19*23*29 –2);
(43)(167)(450473)
Như vậy, A9 là hợp số và ta có câu trả lời phủ định cho giả thuyết trên.
1.2.7. Kiểm tra số giả nguyên tố. Muốn kiểm tra số n có phải là số giả nguyên tố
cơ sở b hay không, ta cần chỉ ra rằng n không phải là số nguyên tố và sau đó kiểm
tra điều kiện b n − b ≡ 0(mod n) có được thỏa mãn hay không. Thủ tục được tiến
hành:
+ Nhập vào hai số nguyên n, b bằng các lệnh
[> n:=56348327841; b:=2;
n:=56348327841
b:= 2
+ Kiểm tra xem n có là số nguyên tố hay không (nếu n là số nguyên tố thì nó
không phải là số giả nguyên tố)
[ > isprime (n);
false
+ Nếu kết quả là “false” thì tiến hành kiểm tra đồng dư thức có thỏa mãn hay
không
[> is (b^n - bmod n = 0);

Nếu như hàm trả lời giá trị “True” thì n là số giả nguyên tố cơ sở b.
[> n:=1373653; b:=3;
n:= 1373653
b:= 3
[ > isprime (1373653);
false
[> is (3^1373653 – 3 mod 1373653 = 0);
true


17
Kết quả cho thấy 1373653 là số giả nguyên tố cơ sở 3
1.2.8. Kiểm tra số Carmichael. Trước hết ta nhập vào số nguyên dương n cần
kiểm tra
[> n:= 6601;
n := 6601
Kiểm tra xem số n có phải là số nguyên tố không?
[> isprime(n);
false
Nếu n là số nguyên tố thì nó không phải là số Carmichael, ngược lại thì ta tiếp tục
phân tích số n ra thừa số nguyên tố.
[> L:= ifactor(n);
L := (7) (23) (41)
Nếu có một thừa số mang số mũ lớn hơn 1 thì kết luận ngay n không phải là số
Carmichael, ngược lại thì các thừa số của n là khác nhau cho nên ta kiểm tra tiếp.
Trước hết ta lập danh sách các thừa số nguyên tố q = [q1, q2 ,…, qk] bằng lệnh :
[> q:= [7,23,41];
q := [7, 23, 41]
Sau đó tiến hành kiểm tra tính chia hết của các phép chia số (n – 1) cho các số (qi 1), i = 1,2,…, k. Việc này cũng tương đương với việc xem các thành phần trong
danh sách các phần dư có bằng 0 cả hay không, bằng lệnh

[> [seq(irem(n-1 , q[i]-1), i=1…nops(q))];
[0; 0, 0]
Nếu trong danh sách đó có thành phần khác 0 thì n không phải số Carmichael,
ngược lại cho ta kết quả là số Carmichael. Kết quả trên cho ta thấy số 6601 là số
Carmichael.
1.2.9. Kiểm tra số giả nguyên tố mạnh
Bước 1: Phân tích số n ra thừa số nguyên tố .
[> ifactor(n -1);


18
Bước 2: Từ kết quả phân tích trên ta biết rằng n -1 có thể viết dưới dạng n - 1 = 2st
(s là số tự nhiên bất kỳ, t là một số lẻ). Ta kiểm tra điều kiện:
[>is(b&^t mod n= 1) ;
Nếu điều kiện trên nghiệm đúng (lệnh cho giá trị true ) thì n là số giả nguyên
tố mạnh cơ sở b, ngược lại ta kiểm tra điều kiện sau :
[> is(b&^t-1 mod n = 0) ;
Nếu lệnh cho giá trị true thì n là số giả nguyên tố mạnh cơ sở b .
j

Nếu kết quả là false ta tiếp tục kiểm tra điều kiện b 2 t + 1 = 0(mod n) có
được thoả mãn với một j nào đó trong khoảng từ 0 đến s - 1 hay không. Nếu có
một j như vậy thì kết luận n là số giả nguyên tố mạnh cơ sở b, ngược lại ta kết luận
không phải. Có thể thực hiện điều nay bằng lệnh sau đây:
[>seq (b&^( (2^j)*t)+1 mod n, j= 0…s-1) ;
Kết quả của lệnh là một dãy bao gồm s số tự nhiên, nếu có một số trong dãy
đó bằng 0 thì kết luận n là số giả nguyên tố mạnh cơ sở b, ngược lại là không phải.
Ví dụ. Kiểm tra xem số 25326001 có phải là số nguyên tố mạnh cơ sở 2 bằng
[> n:=25326001; b:=2;
n := 25326001

b := 2
[> isprime(n);
false
[> factor(n-1);
(2)4 (3)3 (5)3 (7) (67)
Ta có:
[> s:=4; t:=3^3*5^3*7*67;
s := 4
t :=1582875
[> is(b&^t mod n = 1);


19
false
Ta kiểm tra tiếp
[> is(b&^t-1 mod n = 0);
false
[> seq (b&^ ((2^j)*t)+1 mod n, j = 0..s-1);
0, 2, 2, 2
Như vậy số 25326001 là số giả nguyên tố mạnh cơ sở 2. Với b = 3; 5 ta cũng có
kết quả tương tự . Nhưng với b = 7 ta có:
[> n:=25326001; b:=7;
n := 25326001
b := 7
[> s:=4; t:=3^3*5^3*7*67;
s := 4
t :+ 1582875
[> is(b&^t mod n = 1);
false
[> is(b&^t-1 mod n = 0);

false
[> seq (b&^ ((2^j)*t)+1 mod n, j= 0.. s-1);
19453142, 16857741, 11448588, 10127251
Vậy, số 25326001 là số giả nguyên tố mạnh cơ sở 2,3,5 nhưng không là số giả
nguyên tố mạnh cơ sở 7.

1.3. Biểu diễn số nguyên
1.3.1. Định lý. Giả sử g là số nguyên lớn hơn 1. Khi đó, mọi số tự nhiên n ≠ 0
có thể viết duy nhất dưới dạng
n = a k g k + a k −1 g k −1 +  + a1 g + a 0


20
trong đó a j là các số nguyên, 0 ≤ a j ≤ g − 1, j = 0,1,..., k và a k ≠ 0.
Chứng minh. Ta thực hiện liên tiếp các phép chia cho g cho đến khi xuất hiện
thương bằng 0 thì dừng lại:
n = gq0 + a0 , 0 ≤ a0 ≤ g − 1
q0 = gq1 + a1 , 0 ≤ a1 ≤ g − 1
q1 = gq2 + a2 , 0 ≤ a2 ≤ g − 1
q2 = gq3 + a3 , 0 ≤ a3 ≤ g − 1
M
qk −1 = g.0 + ak , 0 < ak ≤ g − 1

Vì g > 1 , nên ta có
n > q o > q1 > ... > q k −1 > q k = 0.
Vì vậy, quá trình trên phải kết thúc với q k = 0. Thay các q j lần lượt theo
các a j và g ta sẽ thu được cách viết cần có của n .
Giả sử ta còn có
n = bl g l + bl −1 g l −1 +  + b1 g + b0
trong đó b j là các số nguyên, 0 ≤ b j ≤ g − 1, j = 0,1,..., l và hệ số đầu tiên bl ≠ 0.

Khi đó, từ đẳng thức
a k g k + a k −1 g k −1 +  + a1 g + a 0 = bl g l + bl −1 g l −1 +  + b1 g + b0
cho ta a 0 = b0 , vì đó là số dư trong phép chia n cho g . Giả sử ta đã có
a0 = b0 , a1 = b1 ,..., as −1 = bs −1 .

Thế thì ta được:
a k g k +  + a s g s = bl g l +  + bs g s .
Từ đó ta có:
a k g k − s +  + a s +1 g + a s = bl g l − s +  + bs +1 g + bs .
Làm như trên ta được a s = bs . Giả sử k > l , tức khắc ta có
a k g k −l +  + a l +1 g l +1 = 0 .


21
Đẳng thức này trái với điều kiện a k ≠ 0. Vì vậy, k = l và a j = b j , j = 0,1,..., k . ▄
1.3.2. Hệ cơ số. Từ định lý trên đây, cho phép chỉ bằng g ký hiệu biểu thị g số tự
nhiên đầu tiên 0,1,..., g − 1 , ta có thể biểu diễn được mọi số tự nhiên. Các ký hiệu
này được gọi là các chữ số trong hệ cơ số g . Cho n là số tự nhiên khác không,
khi đó n = a k g k + a k −1 g k −1 +  + a1 g + a 0 , trong đó a j là các số nguyên,
0 ≤ a j ≤ g − 1, j = 0,1,..., k với hệ số đầu tiên a k ≠ 0.
Ta viết (a k a k −1 ...a1 a 0 ) g để chỉ số n trong hệ cơ số g . Các hệ số a j được
gọi là các chữ số của n trong hệ cơ số g .
Nhận xét. Nếu số nguyên n biểu diễn trong hệ cơ số g có k chữ số thì
g k −1 < n < g k . Do đó, số chữ số của n được tính theo công thức
 log n 
k = [log g n] + 1 = 
 +1
 log g 
trong đó ký hiệu log để chỉ lôgarit cơ số e. Trong hệ cơ số tuỳ ý, ta có
k = O(log n).

1.3.3. Hệ đếm thập phân. Hệ cơ số 10 được gọi là hệ thập phân. Trong tiếng
Việt tên của tất cả các số từ 1 cho tới một triệu gồm có 14 từ, chỉ các số 1, 2, 3, 4,
5, 6, 7, 8, 9, 10, 100, 1000, 10 000, 1000 000. Ngoài ra, để cho dễ đọc một số từ
đã được biến thể khi ghép: một thành “mốt”, năm thành “lăm”, mười thành
“mươi”. Cơ sở của cách tạo từ ở đây là số 10 và vì vậy hệ thống danh pháp của
chúng ta là hệ đếm thập phân. Sỡ dĩ số 10 có vai trò đặc biệt là vì hai bàn tay
chúng ta có 10 ngón. Chẳng hạn, đối với số 1994 trong hệ thập phân, ta có:
1994 = 1.103 + 9.102 + 9.10 + 4.
1.3.4. Hệ đếm nhị phân. Hệ cơ số 2 được gọi là hệ nhị phân. Hệ nhị phân có rất
nhiều ứng dụng, do chỉ dùng hai kí hiệu 0, 1 và việc tính toán với các số trong hệ
này rất đơn giản. Máy tính sử dụng cách viết nhị phân, lí do là vì trong máy tính
người ta dựa trên một nguyên tắc vật lý đơn giản gọi là nguyên tắc “ Sáng, Tắt”:


22
bóng đèn sáng chỉ số 1, bóng đèn tắt chỉ số 0. Ta dùng “bít” để chỉ chữ số nhị
phân 0 và1. Một ký hiệu 0 hoặc 1 được gọi là một bít (viết tắt của chữ “binary
digit”). Một số nguyên biểu diễn bởi k chữ số 1 và 0 được gọi là một số k-bit. Số
tự nhiên n sẽ là một số k-bit với k = [log2n] + 1.
Chẳng hạn đối với số 1994 trong hệ thập phân, có
(1994)10 = (11111001010)2.
Trong máy tính, bên cạnh hệ cơ số 2, người ta còn dùng hệ cơ số 8 hoặc cơ số
16. Lý do chủ yếu là vì chuyển một số viết trong ở cơ số này sang cơ số kia sao
cho trong cơ số 2 sang cơ số 8, ta chỉ việc nhóm từ phải sang trái từng khối 3
chữ số, rồi chuyển số được viết trong khối đó sang dạng thập phân. Số
(11111001010)2
được tách thành các nhóm1, 110, 010, 100, 110. Từ đó ta được
(11111001010)2 = (16236)8.
Máy tính nào cũng có giới hạn về độ lớn của các số có thể đưa vào tính toán. Giới
hạn đó được gọi là cỡ từ của máy, ký hiệu bởi ω . Cỡ từ thường là một luỹ thừa

của 2, chẳng hạn 235. Để thực hiện các phép tính số học với những số nguyên lớn
hơn cỡ từ, ta làm như sau: Muốn đưa một số n > ω vào máy, ta viết n dưới dạng
cơ số g và khi đó n được biểu diễn bằng những số không vượt quá cỡ từ. Ví dụ,
nếu cỡ từ của máy là 2 35 thì có thể đưa một số có độ lớn cỡ 2 35 -1, ta chỉ cần dùng
10 số nhỏ hơn cỡ từ của máy, bằng cách biểu diễn n trong cơ số 235. Như đã nói ở
trên việc chuyển một số từ cơ số 2 sang cơ số 2 35 được thực hiện bằng cách nhóm
từng khối 35 chữ số.
1.3.5. Thuật toán nhân nhanh hai số ([4])
Trong những thập kỷ cuối của thế kỷ XX, người ta tìm ra những thuật toán
nhân với độ phức tạp bé hơn nhiều so với cách nhân thông thường. Ta sử dụng tính
chất phân phối của phép nhân đối với phép cộng các số nguyên:
Nếu a = a1 + a 2 , b = b1 + b2 , thì ab = a1b1 + a 2 b2 + a 2 b1 + a1b2 .


23
Điều đáng chú ý ở đây là, thay cho việc nhân hai số nguyên n bít, ta thực
hiện việc phép nhân các số có số chữ số nhỏ hơn, cùng với một số phép cộng. Thực
ra điều này không có gì mới, ngay trong quan niệm ban đầu phép nhân a với b là
phép cộng b lần số a. Tuy nhiên để có một thuật toán nhân nhanh, ta không thể
cộng b lần số a, mà phải tìm được một cách tối ưu nào đó để tách b và a thành
những phần nhỏ hơn. Thuật toán dưới đây, cho ta một cách để làm việc phân chia
như vậy.
1.3.6. Thuật toán Karatuba, Ofman ([4])
Giả sử muốn nhân hai số nguyên 2n bit
a = ( a 2 n −1 a 2 n − 2 ...a1 a 0 ) 2
b = (b2 n −1b2n − 2 ...b1b0 ) 2 .
Ta viết a = 2 n A1 + A0 , b = 2 n B1 + B0 , trong đó
A1 = (a 2n −1 a 2 n − 2 ...a n ) 2 , A0 = (a n −1 a n − 2 ... a1 a 0 ) 2
B1 = (b2n −1b2 n − 2 ...bn ) 2 , B0 = (bn −1bn − 2 ... b1b0 ) 2 .
Khi đó, ta có:

ab = (2 2 n + 2 n ) A1 B1 + 2 n ( A1 − A0 )( B1 − B0 ) + ( 2 n + 1) A0 B0 .
Như vậy phép nhân các số 2n bit được đưa về việc nhân các số n bit, cùng
với phép cộng, trừ và dịch chuyển (nhân một số với một luỹ thừa bậc n của 2 được
thực hiện bằng cách dịch số đó sang trái n vị trí).
1.3.7. Định lý. Thuật toán Karatuba - Ofman có độ phức tạp là O( n log 2 3 ).
Chứng minh. Gọi M(n) là số các phép tính bit tối đa cần thiết khi thực hiện nhân
hai số nguyên n bit bằng thuật toán Karatuba - Ofman. Từ công thức
ab = (2 2 n + 2 n ) A1 B1 + 2 n ( A1 − A0 )( B1 − B0 ) + ( 2 n + 1) A0 B0 ,
đã nói ở trên, ta có:
M (2n) ≤ 3M (n) + Cn,


24
trong đó C là một hằng số không phụ thuộc vào n. Đặt c = max(C , M (2)). Bằng
quy nạp, chứng minh được rằng
M (2 k ) ≤ c(3 k − 2 k ).
Từ đó ta có:
 log2 n  +1

M (n) = M (2 log2 n ) ≤ M (2 
≤ 3c3

 log2 n +
 1

≤ 3cn

log2 n

 log 2 n  +1


) ≤ c(3 

 log 2 n  +1

− 2

)

.

Định lý được chứng minh. 
1.3.8. Định lý ([4]). Với mọi ε > 0 , tồn tại thuật toán nhân sao cho số phép tính
bít M(n) cần thiết để nhân hai số n bit thỏa mãn bất đẳng thức
M (n) < C (ε )n1+ε

với hằng số C (ε ) nào đó độc lập với n.


25
CHƯƠNG 2
MỘT SỐ ỨNG DỤNG CỦA SỐ HỌC TRONG LÝ THUYẾT MẬT MÃ

2.1. Mật mã học
2.1.1. Giới thiệu về Mật mã học. Mật mã học (Cryptography) là một nghành khoa
học nghiên cứu việc ứng dụng toán học vào biến đổi thông tin nhằm đảm bảo an
toàn trong thông tin liên lạc. Nó là một nghành khoa học quan trọng, có nhiều ứng
dụng trong đời sống – xã hội. Khoa học mật mã đã ra đời từ hàng nghìn năm và
gắn liền với quá trình mã hóa. Điều này có nghĩa là nó gắn với các cách thức để
chuyển đổi thông tin từ dạng này sang dạng khác nhưng ở đây là từ dạng thông

thường có thể nhận thức được thành dạng không thể nhận thức được, làm cho
thông tin trở thành dạng không thể đọc được nếu như không có các kiến thức bí
mật. Tuy nhiên trong nhiều thế kỷ, các kết quả của lĩnh vực này hầu như không
được ứng dụng trong các lĩnh vực dân sự thông thường mà chủ yếu được sử dụng
trong lĩnh vự quân sự, chính trị, ngoại giao,... Ngày nay, các ứng dụng mã hoá và
bảo mật thông tin đang được sử dụng ngày càng phổ biến trong các lĩnh vực khác
nhau kể cả các lĩnh vực dân sự như: thương mại điện tử, ngân hàng. Ứng dụng của
mật mã học ngày càng đa dạng hơn, mở ra nhiều hướng chuyên sâu vào từng lĩnh
vực có đặc thù riêng. Ứng dụng khoa học mật mã không chỉ đơn thuần là mã hoá
và giải mã thông tin mà còn liên quan đến nhiều vấn đề chẳng hạn chứng thực
nguồn gốc thông tin (chữ ký điện tử), chứng thực khoá công khai, bầu cử điện tử,...
Ngày nay, với sự phát triển mạnh mẽ của công nghệ thông tin và các ứng
dụng giao dịch điện tử trên mạng, nhu cầu bảo vệ thông tin trong các hệ thống và
ứng dụng điện tử ngày càng được quan tâm và có ý nghĩa hết sức quan trọng. Các
ứng dụng mã hoá thông tin cá nhân, trao đổi thông tin kinh doanh, thực hiện các
giao dịch điện tử qua mạng,... đã trở nên gần gũi và quen thuộc với mọi người. Gần
đây thì tầm quan trọng đã thay đổi và mật mã hóa sử dụng và gắn liền nhiều hơn


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×