Tải bản đầy đủ (.pdf) (91 trang)

Nghiên cứu và phát triển hệ mật mã khóa công khai ứng dụng trong bảo mật dữ liệu và xác thực các giao dịch điện tử

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 (2.09 MB, 91 trang )

ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ





TRẦN ĐĂNG HIÊN





NGHIÊN CỨU VÀ PHÁT TRIỂN
HỆ MẬT MÃ KHÓA CÔNG KHAI ỨNG DỤNG
TRONG BẢO MẬT DỮ LIỆU VÀ XÁC THỰC
CÁC GIAO DỊCH ĐIỆN TỬ





LUẬN VĂN THẠC SĨ










Hà Nội – 2010
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ



TRẦN ĐĂNG HIÊN



NGHIÊN CỨU VÀ PHÁT TRIỂN
HỆ MẬT MÃ KHÓA CÔNG KHAI ỨNG DỤNG
TRONG BẢO MẬT DỮ LIỆU VÀ XÁC THỰC
CÁC GIAO DỊCH ĐIỆN TỬ


Ngành: Công nghệ thông tin
Chuyên ngành: Hệ thống thông tin
Mã số: 60 48 05



LUẬN VĂN THẠC SĨ



NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS. TS. PHẠM VĂN ẤT






Hà Nội – 2010


3
MỤC LỤC

LỜI CẢM ƠN 1
LỜI CAM ĐOAN 2
MỤC LỤC 3
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT 5
DANH MỤC CÁC BẢNG 6
MỞ ĐẦU 7
Chƣơng 1 - GIỚI THIỆU CHUNG VÀ 10
CƠ SỞ TOÁN HỌC CỦA LÝ THUYẾT MẬT MÃ 10
1.1. Giới thiệu chung về mật mã 10
1.1.1. Sơ lƣợc lịch sử về mật mã 10
1.1.2. Các hệ thống mã hóa 12
1.1.3. Mã hóa khóa đối xứng và mã hóa khóa công khai 14
1.1.4. Các bài toán về an toàn thông tin 15
1.1.5. Thám mã và tính an toàn của các hệ mã hóa 16
1.2. Cơ sở toán học của lý thuyết mật mã 17
1.2.1. Số học các số nguyên, thuật toán Euclid 17
1.2.2. Độ phức tạp tính toán 24
Chƣơng 2 - PHƢƠNG PHÁP 29
KIỂM TRA VÀ SINH SỐ NGUYÊN TỐ 29
2.1. Số nguyên tố và định lý cơ bản của số học 29
2.1.1. Định nghĩa số nguyên tố 29

2.1.2. Chứng minh số nguyên tố là vô hạn 30
2.1.3. Sự phân bố của số nguyên tố 30
2.1.4. Các số nguyên tố có dạng đặc biệt 31
2.2. Phƣơng pháp cổ điển kiểm tra và sinh số nguyên tố 33
2.2.1. Thuật toán Trial Division 33
2.2.2. Phƣơng pháp sàng Eratosthenes 34
2.3. Phƣơng pháp xác suất kiểm tra và sinh số nguyên tố 35
2.3.1. Thuật toán Fermat 35
2.3.2. Thuật toán Solovay – Strassen 37
2.3.3. Thuật toán Miller-Rabin 40
2.4. Phƣơng pháp xác định 42
2.5. Phân tích thành thừa số nguyên tố 45
Chƣơng 3 - ĐỀ XUẤT CẤU TRÚC DỮ LIỆU 48
VÀ THUẬT TOÁN XỬ LÝ SỐ NGUYÊN LỚN 48
3.1. Cấu trúc dữ liệu và sơ đồ hoạt động của hệ thống 48
3.1.1. Cấu trúc của các lớp 48
3.1.2. Bảng luỹ thừa 2 49
3.1.3. Sơ đồ hoạt động của hệ thống 50
3.2. Thuật toán chuyển đổi 50
3.2.1. Thuật toán từ hệ thập phân sang hệ nhị phân 50
3.2.2. Thuật toán từ hệ nhị phân sang hệ thập phân 51
3.3. Thuât toán chia (div, mod) 51
3.4. Thuật toán phân rã nhị phân tính luỹ thừa mod 52
3.5. Phƣơng pháp tính logarit 53
3.6. Phƣơng pháp tính căn bậc hai 54


4
3.7. Khả năng của thƣ viện 55
Chƣơng 4 - MỘT SỐ HỆ MÃ HÓA KHÓA CÔNG KHAI 56

VÀ CẢI TIẾN HỆ MÃ HÓA RABIN 56
4.1. Sự ra đời của hệ mã hóa khóa công khai 56
4.2. Một số bài toán cơ bản 56
4.3. Một số hệ mã hóa khóa công khai 58
4.3.1. Sơ đồ chung hệ mã hóa khoá công khai 58
4.3.2. Hệ mã hóa RSA 59
4.3.3. Hệ mã hóa ElGamal 64
4.3.4. Hệ mã hóa Rabin 67
4.4. Cải tiến hệ mã hóa Rabin 74
4.4.1. Mở rộng hệ mã hóa Rabin với n=p*q*r 74
4.4.2. Sơ đồ hệ mã hóa Rabin với n = p*q*r 74
4.4.3. Tính đúng đắn 75
4.4.4. Công thức của phép biến đổi ngƣợc (tính x) 75
4.4.5. Quy trình giải mã 77
4.4.6. Ví dụ 79
4.4.7. Nhận xét và đánh giá 81
4.5. Một số ứng dụng của mã hóa khóa công khai 83
4.5.1. Tạo vỏ bọc an toàn cho văn bản mật 83
4.5.2. Vấn đề xác thực chủ thể 83
4.5.3. Kết hợp với kỹ thuật thủy vân 85
KẾT LUẬN 86
TÀI LIỆU THAM KHẢO 88
PHỤ LỤC 91

























5
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT

STT
Ký hiệu / Viết tắt
Diễn giải
1
AKS
Manindra Agrawal, Neeraj Kayal, và Nitin Saxena
2
RSA
Rivest - Shamir – Adleman








































6
DANH MỤC CÁC BẢNG

Bảng 1.1.1. Bảng chữ cái và chỉ số tƣơng ứng 13
Bảng 1.2.1. Mô tả quá trình tính toán của thuật toán Euclid 18
Bảng 1.2.2. Mô tả quá trình tính toán của thuật toán Euclid mở rộng 19
Bảng 2.1.1. Liệt kê một vài giá trị của

(n) 30
Bảng 2.1.2. So sánh giá trị gần đúng và giá trị chính xác của

(n) 31
Bảng 2.1.3. So sánh ln n và
)(n
n

,

(n) và
n
n
ln
31

Bảng 2.1.4. Liết kê một vài số Mersenne và cho biết số nào là nguyên tố 32
Bảng 2.2.1. Mô tả sàng Eratosthenes với 100 chữ số 35
Bảng 2.4.1. Số lƣợng các số nguyên tố r vớ k bít 44
Bảng 2.4.2. Thời gian thực hiện của thuật toán AKS 45
Bảng 2.5.1. Mô tả quá trình tính toán của thuật toán Pollar 46
Bảng 3.1.1. Dùng để lƣu trữ giá trị thập phân của 2
i
49
Bảng 3.7.1. liệt kê thời gian thực hiện phép toán lũy thừa mod 55


























7
MỞ ĐẦU
Hiện nay, ở tất cả các nƣớc phát triển cũng nhƣ đang phát triển, mạng máy tính
đang ngày càng đóng vai trò thiết yếu trong mọi lĩnh vực hoạt động của toàn xã hội, và
một khi nó trở thành phƣơng tiện điều hành các hệ thống thì nhu cầu bảo mật an toàn
thông tin đƣợc đặt lên hàng đầu. Nhu cầu này không chỉ có ở các bộ máy an ninh, quốc
phòng, quản lý nhà nước, mà đã trở thành bức thiết trong nhiều hoạt động kinh tế xã hội:
tài chính, ngân hàng, thương mại, và thậm chí trong cả một số hoạt động thƣờng ngày
của ngƣời dân (thƣ điện tử, thanh toán, tín dụng, ).
Do ý nghĩa quan trọng mang tính sống còn mà lĩnh vực bảo mật an toàn thông tin
thu hút đƣợc sự quan tâm của đông đảo các chuyên gia trên khắp thế giới. Các hội nghị
khoa học thƣờng niên của Hiệp hội Quốc tế về Nghiên cứu Công nghệ Mã (IACR) đƣợc
tổ chức liên tục từ những năm 80 đến nay tại Châu Âu (EUROCRYPT), Hoa Kỳ
(CRYPTO) và mới đây là Châu Á (ASIACRYPT) ngày càng thu hút đƣợc sự quan tâm
của các chuyên gia trong nhiều lĩnh vực khoa học, công nghệ. Trong đó nổi bật là các
công trình về xây dựng các hệ mã hóa khóa công khai gắn liền là các công trình về xử lý
số nguyên lớn, số nguyên tố của các tác giả: Diffie và Hellman, Rivest, Sharmir và
Adleman, Rabin, Elgamal, Pollard, Lenstra và cho đến nay các nghiên cứu mới về tính
an toàn của các hệ mã hóa khóa công khai cũng nhƣ cách thức xử lý số nguyên lớn,
phương pháp tìm số nguyên tố lớn hiệu quả, chính xác liên tục đƣợc công bố trên các tạp
chí chuyên ngành về mật mã nói riêng, toán học và tin học nói chung .
Ở Việt Nam, gần đây cũng đã xuất hiện một số nghiên cứu về bảo mật an toàn
thông tin nhƣ: đề tài “Mã hoá và bảo mật thông tin điện tử” - Viện Toán học thực hiện
trong năm 2002, 2003, nhóm nghiên cứu ở Đại học Công nghệ - ĐHQG Hà Nội, nhóm
nghiên cứu ở Đại học Khoa học Tự nhiên - ĐHQG Hồ Chí Minh, từ đó xuất bản đƣợc
nhiều ấn bản chuyên ngành, giáo trình và các bài báo công bố ở các hội nghị khoa học

trong và ngoài nƣớc.
Luận văn này đƣợc thực hiện nhằm mục đích nghiên cứu bảo mật an toàn thông
tin. Luận văn tập trung đi sâu vào nghiên cứu và phát triển hệ mã hóa khóa công khai và
các vấn đề liên quan nhằm mục đích ứng dụng vào trong bảo mật và xác thực.


8
Nội dung chính của Luận văn:
(i) Trình bày thuật toán kiểm tra và sinh số nguyên tố lớn. Nhằm tìm ra các số
nguyên tố lớn làm khóa cho các hệ mã hóa khóa công khai.
(ii) Đề xuất cấu trúc dữ liệu và thuật toán xử lý số nguyên lớn từ đó có thể xây
dựng thƣ viện lập trình giúp ứng dụng các hệ mã hóa khóa công khai. Thực tế xây dựng
cho thấy khả năng xử lý của thƣ viện lên tới hàng nghìn chữ số và tốc độ thực hiện các
phép toán nhanh nhƣ trong ngôn ngữ lập trình, thƣ viện đã có (nội dung này học viên đã
báo cáo, đƣợc phản biện và đăng trong Kỷ yếu hội thảo quốc gia lần thứ XII “Một số vấn
đề chọn lọc của công nghệ thông tin và truyền thông”, Đồng Nai, 8/2009, NXB KHKT
2010).
(iii) Đặc biệt luận văn đƣa ra hƣớng cải tiến hệ mã hóa khóa công khai Rabin nhằm
nâng cao độ an toàn và đƣa ra hƣớng khắc phục một số nhƣợc điểm trong quá trình giải
mã của hệ mã hóa này. Ngoài ra đƣa ra một số công thức tính nghịch đảo để quy trình giải
mã của hệ mã hóa Rabin và Rabin cải tiến đƣợc dễ dàng.
Ngoài phần mở đầu và kết luận, kết cấu của luận văn gồm 4 chƣơng:
- Chƣơng 1 “Giới thiệu chung và cơ sở toán học của lý thuyết mật mã” nhằm
trình bày các vấn đề chung nhất của mật mã, đƣa ra các khái niệm cơ bản. Phần cơ
sở toán học trình bày các kiến thức toán học làm nền cho các nội dung chính trong
luận văn nhƣ: số học các số nguyên, thuật toán Euclid, thuật toán Euclid mở rộng,
lý thuyết đồng dƣ, thặng dƣ thu gọn, phần tử nguyên thủy, phƣơng trình đồng dƣ
tuyến tình và đồng dƣ bậc hai. Ngoài ra trình bày về độ phức tạp thuật toán, hàm
một phía và cửa sập một phía.
- Chƣơng 2 “Phương pháp kiểm tra và sinh số nguyên tố” trình bày các định

nghĩa, định lý về số nguyên tố. Giới thiệu một số phƣơng pháp với các thuật toán
kiểm tra và sinh số nguyên tố nói chung và số nguyên tố lớn nói riêng, đóng vai trò
rất quan trọng trong việc cung cấp số nguyên tố lớn giúp thực thi, ứng dụng các hệ
mã hóa khóa công khai. Các phƣơng pháp đƣợc trình bày trong luận văn là:
phƣơng pháp cổ điển, phƣơng pháp xác suất và phƣơng pháp xác định. Trong
chƣơng này cũng trình bày một phƣơng pháp phân tích một số ra thừa số nguyên
tố.


9
- Chƣơng 3 “Đề xuất cấu trúc dữ liệu và thuật toán xử lý số nguyên lớn” trình
bày cụ thể cấu trúc dữ liệu và đề xuất các thuật toán để có thể xây dựng hoàn chỉnh
thƣ viện xử lý số nguyên lớn. Thực tế xây dựng thì khả năng xử lý của thƣ viện
này lên tới hàng nghìn chữ số và tốc độ thực hiện các phép toán nhƣ trong các
ngôn lập trình, tƣơng đƣơng với thƣ viện đã có (có bổ sung so với nội dung đăng
trong Kỷ yếu hội thảo quốc gia lần thứ XII “Một số vấn đề chọn lọc của công nghệ
thông tin và truyền thông”, Đồng Nai, 8/2009, NXB KHKT 2010).
- Chƣơng 4 “Một số hệ mã hóa khóa công khai và cải tiến hệ mã hóa Rabin”
trình bày lịch sử ra đời, một số bài toán nền tảng xây dựng hệ mã hóa khóa công
khai. Trong chƣơng này cũng trình bày một số hệ mã hóa khóa công khai RSA,
ElGamal, Rabin. Hơn nữa chƣơng này đƣa ra hƣớng cải tiến nhằm nâng cao độ an
toàn của hệ mã hóa khóa công khai Rabin và hƣớng khắc phục một số nhƣợc điểm
trong quá trình giải mã. Đƣa ra một số công thức tính nghịch đảo để quy trình giải
mã của hệ mã hóa Rabin và Rabin cải tiến đƣợc dễ dàng.



























10
Chƣơng 1 - GIỚI THIỆU CHUNG VÀ
CƠ SỞ TOÁN HỌC CỦA LÝ THUYẾT MẬT MÃ
Tóm tắt chương: Trong chương này luận văn giới thiệu lịch sử mật mã, các hệ mã, các
bài toàn an toàn thông tin và bài toán thám mã. Đưa ra được một số khái niệm cơ bản
nhất của mã hóa như: bản rõ, bản mã, hệ mã hóa thám mã, khóa mã, mã hóa khóa công
khai, mã hóa khóa đối xứng, mã theo khối, mã theo dòng.v.v…Ngoài ra nội dung chương
cũng trình bày về số học các số nguyên, thuật toán Eucild, thuật toán Euclid mở rộng, lý
thuyết đồng dư, thặng dư thu gọn, phần tử nguyên thủy, phương trình đồng dư tuyến tình
và đồng dư bậc hai. Ngoài ra trình bày về độ phức tạp thuật toán, hàm một phía và cửa

sập một phía. Các nội dung của chương này được tổng hợp từ các tài liệu [7][16].
1.1. Giới thiệu chung về mật mã
1.1.1. Sơ lƣợc lịch sử về mật mã
Nhu cầu sử dụng mật mã đã xuất hiện từ rất sớm, khi con ngƣời biết trao đổi và
truyền đƣa thông tin cho nhau, đặc biệt khi các thông tin đó đã đƣợc thể hiện dƣới hình
thức ngôn ngữ, thƣ từ. Mật mã trƣớc hết là một loại hoạt động thực tiễn, lúc này nội dung
chính của nó là để giữ bí mật thông tin từ một ngƣời gửi A đến một ngƣời nhận B. Vì
bản gửi đi thƣờng đƣợc chuyển qua các con đƣờng công khai nên ngƣời ngoài có thể “lấy
trộm” đƣợc, nên thay vì gửi bản rõ thì A gửi cho B bản mã mật của bản rõ ngƣời ngoài
không hiểu đƣợc. Nhƣng B có thể giải bản mã mật này thành bản rõ để hiểu đƣợc là do
giữa hai ngƣời đã có một thỏa thuận về một chìa khóa chung. Chìa khóa chung đó đƣợc
gọi đơn giản là khóa mật mã. Tất nhiên để thực hiện đƣợc một phép mật mã, còn cần có
một thuật toán biến bản rõ, cùng với khóa mật mã, thành bản mã mật, và một thuật toán
ngƣợc lại, biến bản mã mật, cùng với khóa mật mã, thành bản rõ. Các thuật toán đó đƣợc
gọi là tƣơng ứng là thuật toán lập mật mã và thuật toán giải mật mã. Các thuật toán này
thƣờng không nhất thiết phải giữ bí mật, mà cái cần đƣợc giữ tuyệt mật luôn luôn là khóa
mật mã. Trong thực tiễn, đã có hoạt động bảo mật thì cũng có hoạt động ngƣợc lại là
khám phá bí mật từ các bản mật mã “lấy trộm” đƣợc, ta thƣờng gọi hoạt động này là mã
thám, hoạt động này quan trọng không kém gì hoạt động bảo mật! Vì các thuật toán lập
mật mã và giải mật mã không nhất thiết là bí mật, nên mã thám thƣờng đƣợc tập trung
vào việc tìm khóa mật mã, do đó cũng có ngƣời gọi công việc đó là phá khóa.
Suốt mấy nghìn năm lịch sử, các thông báo, thƣ từ đƣợc truyền đƣa và trao đổi với
nhau thƣờng là các văn bản, tức là có dạng các dãy ký tự trong một ngôn ngữ nào đó; vì
vậy, các thuật toán lập mật mã thƣờng cũng đơn giản là thuật toán xáo trộn, thay đổi các
ký tự đƣợc xác định bởi các phép chuyển dịch, thay thế hay hoán vị các ký tự trong bảng
ký tự của ngôn ngữ tƣơng ứng; khóa mật mã là thông tin dùng để thực hiện phép lập mật
mã và giải mật mã cụ thể, Lúc này mật mã chƣa phải là một khoa học. Do trong một
thời gian dài bản thân hoạt động mật mã cũng đƣợc xem là một bí mật, nên các tài liệu kỹ
thuật về mật mã đƣợc phổ biến đến nay thƣờng chỉ ghi lại các kiến thức kinh nghiệm,
thỉnh thoảng mới có một vài “phát minh” nhƣ các hệ mật mã Vigenère vào thế kỷ 16 hoặc

hệ mật mã Hill ra đời năm 1929 là các hệ mã thực hiện phép chuyển dịch (đối với mã
Vigenère) hay phép thay thế (mã Hill) đồng thời trên một nhóm ký tự chứ không phải trên


11
từng ký tự riêng rẽ. Vấn đề thám mã, ngƣợc lại, khi thành công thƣờng đƣa đến những
cống hiến nổi trội và ấn tƣợng trong những tình huống gay cấn của các cuộc đấu tranh, và
cũng thƣờng đòi hỏi nhiều tài năng phát hiện với những kinh nghiệm và suy luận tinh tế
hơn.
Nhƣ vậy, trƣớc đây mật mã chỉ đƣợc hiểu theo nghĩa hẹp, chủ yếu dùng đề bảo
mật dữ liệu, ngƣời ta quan niệm: mật mã học là khoa học nghiên cứu mật mã: tạo mã và
phân tích mã (thám mã) [16].
Bƣớc sang thế kỷ 20, với những tiến bộ liên tục của kỹ thuật tính toán và truyền
thông, ngành mật mã cũng đã có những tiến bộ to lớn. Vào những thập niên đầu của thế
kỷ, sự phát triển của các kỹ thuật biểu diễn, truyền và xử lý tín hiệu đã có tác động giúp
cho các hoạt động lập và giải mật mã từ thủ công chuyển sang cơ giới hóa rồi điện tử hóa.
Các văn bản, các bản mật mã trƣớc đây đƣợc viết bằng ngôn ngữ thông thƣờng nay đƣợc
chuyển bằng kỹ thuật số thành các dãy tín hiệu nhị phân, tức các dãy bit, và các phép biến
đổi trên các dãy ký tự đƣợc chuyển thành các phép biến đổi trên các dãy bit, hay các dãy
số, việc thực hiện các phép lập mã, giải mã trở thành việc thực hiện các hàm số số học.
Toán học và kỹ thuật tính toán bắt đầu trở thành công cụ cho việc phát triển khoa học về
mật mã. Khái niệm trung tâm của khoa học mật mã là khái niệm bí mật. Đó là một khái
niệm phổ biến trong đời sống, nhƣng liệu có thể cho nó một nội dung có thể định nghĩa
đƣợc một cách toán học không? Khái niệm bí mật thoạt đầu đƣợc gắn với khái niệm ngẫu
nhiên, rồi về sau trong những thập niên gần đây, với khái niệm phức tạp, cụ thể hơn là
khái niệm độ phức tạp tính toán. Việc sử dụng lý thuyết xác suất và ngẫu nhiên làm cơ sở
để nghiên cứu mật mã đã giúp C.Shannon đƣa ra khái niệm bí mật hoàn toàn của một hệ
mật mã từ năm 1948, khởi đầu cho một lý thuyết xác suất về mật mã. Trong thực tiễn làm
mật mã, các dãy bit ngẫu nhiên đƣợc dùng để trộn với bản rõ (dƣới dạng một dãy bit xác
định) thành ra bản mật mã. Làm thế nào để tạo ra các dãy bit ngẫu nhiên? Có thể tạo ra

bằng phƣơng pháp vật lý đơn giản nhƣ sau: ta tung đồng xu lên, nếu đồng xu rơi xuống ở
mặt sấp thì ta ghi bit 0, ở mặt ngửa thì ta ghi bit 1; tung n lần ta sẽ đƣợc một dãy n bit, dãy
bit thu đƣợc nhƣ vậy có thể đƣợc xem là dãy bit ngẫu nhiên. Nhƣng tạo ra theo cách nhƣ
vậy thì khó có thể sử dụng một cách phổ biến, vì không thể tìm ra quy luật để theo đó mà
sinh ra dãy bit ngẫu nhiên đƣợc. Ở đây ta gặp một khó khăn có tính bản chất: nếu qui luật
thì đã không còn là ngẫu nhiên nữa rồi! Nhƣ vậy, nếu ta muốn tìm theo qui luật, thì không
bao giờ có thể tìm ra các dãy bit ngẫu nhiên, hay giả ngẫu nhiên, mà thôi. Từ vài chục
năm nay, ngƣời ta đã nghiên cứu đề xuất nhiều thuật toán toán học để sinh ra các dãy bit
giả ngẫu nhiên, và cũng đã đƣa ra nhiều thuộc tính để đánh giá một dãy bit giả ngẫu nhiên
có đáng đƣợc xem là “gần” ngẫu nhiên hay không. Một vài thuộc tính chủ yếu mà ngƣời
ta đã đề xuất là: cho một dãy bit X = (x
1
, x
2
, , x
n
, ); dãy đó đƣợc xem là giả ngẫu nhiên
“tốt” nếu xác suất xuất hiện bit 0 hay bit l trong toàn dãy đó cũng nhƣ trong mọi dãy con
bất kỳ của nó đều bằng 1/2; hoặc một tiêu chuẩn khác: nếu mọi chƣơng trình sinh ra đƣợc
đoạn đầu n bit của dãy đều phải có độ phức tạp (hay độ dài) cỡ n ký tự! Về sau này, khi lý
thuyết về độ phức tạp tính toán đã đƣợc phát triển thì tiêu chuẩn về ngẫu nhiên cũng đƣợc
quy về tiêu chuẩn phức tạp tính toán, cụ thể một dãy bit X đƣợc xem là giả ngẫu nhiên
“tốt” nếu mọi thuật toán tìm đƣợc bit thứ n(x
n
) khi biết các bit trƣớc đó (x
1
,, ,x
n-1
) với xác
suất đúng > 1/2 đều phải có độ phức tạp tính toán thuộc lớp NP-khó!



12
Lý thuyết về độ phức tạp tính toán ra đời từ giữa những năm 1960 đã cho một cách
thích hợp để quy yêu cầu bí mật hoặc ngẫu nhiên về một yêu cầu có thể định nghĩa đƣợc
là yêu cầu về độ phức tạp tính toán. Bây giờ có thể nói: một giải pháp mật mã là bảo đảm
bí mật, nếu mọi thuật toán thám mã, nếu có, đều phải đƣợc thực hiện với độ phức tạp tính
toán cực lớn! Cực lớn là bao nhiêu? Là vƣợt quá giới hạn khả năng tính toán (bao gồm cả
máy tính) mà ngƣời thám mã có thể có. Về lý thuyết, có thể xem đó là những độ phức tạp
tính toán với tốc độ tăng vƣợt quá hàm mũ, hoặc thuộc loại NP-khó. Tuy nhiên, lý thuyết
độ phức tạp tính toán không chỉ cống hiến cho ta một khái niệm để giúp chính xác hóa
tiêu chuẩn bí mật của các giải pháp mật mã, mà còn mở ra một giai đoạn mới của ngành
mật mã, biến ngành mật mã thành một khoa học có nội dung lý luận phong phú và có
những ứng dụng thực tiễn quan trọng trong nhiều lĩnh vực của đời sống hiện đại. Bƣớc
ngoặt có tính cách mạng trong lịch sử khoa học mật mã hiện đại xảy ra vào năm 1976 khi
hai tác giả Diffie và Hellman đƣa ra khái niệm về mã hóa khóa công khai và một phƣơng
pháp trao đổi công khai để tạo ra một khóa bí mật chung mà tính an toàn đƣợc bảo đảm
bởi độ khó của một bài toán học cụ thể (là bài toán tính “logarit rời rạc”). Hai năm sau,
năm 1978, Rivest, Shamir và Adleman tìm ra một hệ mã hóa khóa công khai và một sơ đồ
chữ ký điện tử hoàn toàn có thể ứng dụng trong thực tiễn, tính bảo mật và an toàn của
chúng đƣợc bảo đảm bằng độ phức tạp của một bài toán số học nổi tiếng là bài toán phân
tích số nguyên thành các thừa số nguyên tố. Sau khi phát minh ra hệ mã hóa đó (mà nay ta
thƣờng gọi là hệ RSA), việc nghiên cứu để phát minh ra các hệ mã hóa khóa công khai
khác và ứng dụng các hệ mã hóa khóa công khai vào các bài toán khác nhau của an toàn
thông tin đã đƣợc tiến hành rộng rãi, lý thuyết mật mã và an toàn thông tin trở thành một
lĩnh vực khoa học đƣợc phát triển nhanh trong vài ba thập niên cuối của thế kỷ 20, lôi
cuốn theo sự phát triển của một số bộ môn của toán học và tin học.
Lúc này, mật mã được hiểu theo nghĩa rộng: mật mã là một trong những công cụ
hiệu quả bảo đảm an toàn thông tin nói chúng: bảo mật, bảo toàn, xác thực, chống chối
cãi, …[16]. Để thực hiện đƣợc ngƣời ta sử dụng các ký thuật mật mã: mã hóa, ký số, các

giao thức mật mã, chống chối cãi,…[16].
1.1.2. Các hệ thống mã hóa
1.1.2.1. Sơ đồ hệ thống mã hóa
Giả sử một ngƣời gửi A muốn gửi đến một ngƣời nhận B một văn bản (chẳng hạn,
một bức thƣ) p, để bảo mật A lập cho p một bản mã hóa c, và thay cho việc gửi p, A gửi
cho B bản mã hóa c, B nhận đƣợc c và “giải mã” c để lại đƣợc văn bản p nhƣ A định gửi.
Để A biến p thành c và B biến ngƣợc lại c thành p, A và B phải thỏa thuận trƣớc với nhau
các thuật toán lập mã và giải mã, và đặc biệt một khóa mã hóa chung K để thực hiện các
thuật toán đó. Ngƣời ngoài không biết các thông tin đó (đặc biệt, không biết khóa K), cho
dù có lấy trộm đƣợc c trên kênh truyền thông công cộng, cũng không thể tìm đƣợc văn
bản p mà hai ngƣời A, B muốn gửi cho nhau. Sau đây sẽ đƣa ra một định nghĩa hình thức
về sơ đồ mã hóa và cách thức thực hiện để lập mã (mã hóa) và giải mã.
Định nghĩa 1.1.1. Một sơ đồ hệ thống mã hóa là một bộ năm [7][16][35][46]
S = ( P, C, K, E, D)
(1.1.1)


13
thỏa mãn các điều kiện sau đây:
P là một tập hữu hạn các ký tự bản rõ,
C là một tập hữu hạn các ký tự bản mã,
K là một tập hữu hạn các khóa,
E là một ánh xạ từ K x P vào C được gọi là phép lập mã (mã hóa): và D là một
ánh xạ từ K xC vào P, được gọi là phép giải mã. Với mỗi K

K ta định nghĩa e
k
: P→ C,
d
k

: C →P là hai hàm cho bởi:

x

P. e
k
(x) = E(K,x);

y

C: d
k
(y) = D(K, y).
e
k
và d
k
được gọi lần lượt là hàm lập mã và hàm giải mã ứng với khóa mã hóa K.
Các hàm đó phải thỏa mãn hệ thức:

x

P: d
k
(e
k
(x))= x.
Về sau, để thuận tiện gọi một danh sách (1.1.1) thỏa mãn các tính chất kể trên là
một sơ đồ hệ thống mã hóa, còn khi đã chọn cố định một khóa K, thì danh sách (P, C, e
k

,
d
k
) là một hệ mã hóa thuộc sơ đồ đó.
Trong định nghĩa này, phép mã hóa (giải mã) đƣợc định nghĩa cho từng ký tự bản
rõ (bản mã). Trong thực tế, bản rõ của một thông báo thƣờng là một dãy các ký tự bản mã,
tức là phần tử của tập C*, việc mở rộng các hàm e
k
và d
k
lên các miền tƣơng ứng P* và
C* để đƣợc các thuật toán mã hóa và giải mã dùng trong thực tế sẽ đƣợc trình bày sau.
Các tập ký tự bản rõ và bản mã thƣờng dùng là các tập ký tự của ngôn ngữ thông thƣờng
nhƣ tiếng Việt, tiếng Anh (ký hiệu tập ký tự tiếng Anh là A tức A = {a, b, c, , x, y, = }
gồm 26 ký tự; tập ký tự nhị phân B chỉ gồm hai ký tự 0 và l; tập các số nguyên không âm
bé hơn một số n nào đó (ký hiệu tập này là Z
n
tức Z
n
= {0, 1, 2, , n-1}). Chú ý rằng có
thể xem B = Z
2
. Để thuận tiện, cũng thƣờng đồng nhất tập ký tự tiếng Anh A với tập gồm
26 số nguyên không âm đầu tiên Z
26
= {0, 1, 2, 24, 25} với sự tƣơng ứng sau đây:
Bảng 1.1.1. Bảng chữ cái và chỉ số tƣơng ứng
a
a
b

b
c
c
d
d
e
e
f
f
g
g
h
h
i
i
j
j
k
k
l
l
m
m
n
n
o
o
p
p
q

q
r
r
s
s
t
t
u
u
v
v
w
x
x
y
y
z
z
1
0
1
1
1
2
1
3
1
4
1
5

1
6
1
7
1
8
1
9
2
1
0
2
1
1
2
1
2
2
1
3
2
1
4
2
1
5
1
1
6
1

1
7
1
1
8
1
1
9
2
2
0
2
2
1
2
2
2
2
2
3
2
2
4
2
2
5
Đôi khi cũng dùng với tƣ cách tập ký tự bản rõ hay bản mã là các tập tích của các
tập nói trên, đặc biệt là các tập A
m
, B

m
, Z
n
m
.
1.1.2.2. Mã theo khối và mã theo dòng [7]
Nhƣ đã nói ở trên, bản rõ của thông báo muốn gửi đi thƣờng là một dãy ký tự,
trong khi theo định nghĩa của sơ đồ mã hóa, hàm lập mã và hàm giải mã đƣợc định nghĩa
cho từng ký tự. Từ các định nghĩa của hàm lập mã và hàm giải mã, mở rộng thành thuật
toán lập mã (và giải mã) xác định cho mọi bản rõ (bản mã) nhƣ sau:


14
Theo cách mã theo khối (block cipher), trƣớc hết xác định một độ dài khối (chẳng
hạn là k), tiếp đó mở rộng không gian khóa từ K thành K* và với mỗi K = K
1
K
k

K*,
mở rộng e
k
và d
k
thành các thuật toán e
k
: P
k
→C
k

và dk: C
k
→P
k
nhƣ sau: với mọi x
1
x
k


P
k
và y
1
y
k

C
k
, có
e
k
(x
1
x
k
) = e
k1
(x
k

); d
k
(y
l
y
k
) = d
kl
(Y
l
) d
kk
(Y
k
)
Giả thử bản rõ muốn lập mã cho nó là dãy ký tự X

P
k
. Ta cắt X thành từng khối,
mỗi khối có độ dài K, khối cuối cùng có thể có độ dài < K, luôn có thể giả thiết là có thể
bổ sung vào phần cuối của khối một số ký tự qui ƣớc nào đó để nó cũng có độ dài k. Do
đó có thể giả thiết X = X
l
X
m
, trong đó mỗi X
l
, ,X
m

là một khối có độ dài k. Và định
nghĩa bản mã của X là:
ek(X)= ek(Xl Xm) = ek(Xl) ek(Xm).
Đặt Y = e
k
(X
l
e
k
(X
m
), có thể viết Y = Y
l
Y
m
với Y
i
= e
k
(X
i
). và do đó có
d
k
(Y) = d
k
(Y
l
) d
k

(Y
m
)=X
l
X
m
= X.
Cách mã theo khối đơn giản và thông dụng nhất là khi chọn độ dài khối k=1. Khi
đó với mọi bản rõ X-x
l
x
m


P* , có
e
k
(X) = e
k
(x
l
x
m
) = e
k
(x
l
) e
k
(x

m
).
Với cách mã theo dòng (stream cipher), trƣớc hết phải xác định một dòng khóa, tức
là một phần tử K = K
l
K
m

K* với dòng khóa đó xác định với mọi bản rõ X =x
l
x
m


P* bản mã tƣơng ứng là
e
k
(X) = e
k
(x
l
x
m
) = e
Kl
(x
l
) e
Km
(x

m
).
Giải mã Y = y
k
(X) ta đƣợc
d
k
(Y) = d
kl
(e
kl
(x
l
)) d
km
(e
km
(x
m
)) = x
l
x
m
= X
Để sử dụng cách lập mã theo dòng, ngoài sơ đồ mã hóa gốc còn phải có một dòng
khóa, tức là một dãy có độ dài tùy ý các ký tự khóa. Đó thƣờng là các dãy các ký tự khóa
đƣợc sinh ra bởi một bộ “tạo dãy ngẫu nhiên” nào đó xuất phát từ một “mầm” chọn trƣớc.
Trong các ứng dụng thực tế, ngƣời ta thƣờng dùng các mã theo dòng có sơ đồ mã hóa gốc
là sơ đồ Vernam với
P = C = K = {0.1}

và các hàm lập mã và giải mã đƣợc xác định bởi
e
k
(x) = (x+K) mod 2, d
k
(y) = (y+K) mod 2 (K = 0 hoặc l);
dòng khóa là dãy bit ngẫu nhiên đƣợc sinh ra bởi một bộ tạo dãy bit ngẫu nhiên
nào đó.
1.1.3. Mã hóa khóa đối xứng và mã hóa khóa công khai [7][16]
Theo định nghĩa 1.1.1 về sơ đồ mã hóa, cứ mỗi lần truyền tin bảo mật, cả ngƣời
gửi A và ngƣời nhận B phải cùng thỏa thuận trƣớc với nhau một khóa chung K, sau đó
ngƣời gửi dùng e
k
để lập mã cho thông báo gửi đi, và ngƣời nhận dùng d
k
để giải mã bản
mã nhận đƣợc. ngƣời gửi và ngƣời nhận cùng có một khóa chung K, đƣợc giữ nhƣ bí mật


15
riêng của hai ngƣời, dùng cả cho lập mã và giải mã, gọi những hệ mã hóa với cách sử
dụng đó là mã hóa khóa đối xứng, đôi khi cũng gọi là mã hóa truyền thống, vì đó là cách
đã đƣợc sử dụng từ hàng ngàn năm nay.
Tuy nhiên, về nguyên tắc hai hàm lập mã và giải mã là khác nhau, không nhất thiết
phải phụ thuộc cùng một khóa. Nếu ta xác định mỗi khóa K gồm có hai phần K = (K’,
K’’), K’ dành cho việc lập mã (và ta có hàm lập mã e
k
), K’’ dành cho việc giải mã (và có
hàm giải mã d
k

), các hàm lập mã và giải mã thỏa mãn hệ thức
d
k
(d
k’
(x)) = x với

x

P,
thì đƣợc một hệ mã hóa khóa phi đối xứng. Nhƣ vậy, trong một hệ mã hóa khóa
phi đối xứng, các khóa lập mã và giải mã (K’ và K’’) là khác nhau, nhƣng tất nhiên có
quan hệ với nhau. Trong hai khóa đó, khóa cần phải giữ bí mật là khóa giải mã K’’, còn
khóa lập mã K’ có thể đƣợc công bố công khai; tuy nhiên điều đó chỉ có ý nghĩa thực tiễn
khi việc biết K’ tìm K’’ là cực kỳ khó khăn đến mức hầu nhƣ không thể thực hiện đƣợc.
Một hệ mã hóa khóa phi đối xứng có tính chất nói trên, trong đó khóa lập mã K’ của mỗi
ngƣời tham gia đều đƣợc công bố công khai, đƣợc gọi là hệ mã hóa khóa công khai. Khái
niệm mã hóa khóa công khai mới đƣợc ra đời vào giữa những năm 1970, và ngay sau đó
đã trở thành một khái niệm trung tâm của khoa học mật mã hiện đại.
1.1.4. Các bài toán về an toàn thông tin [7]
Có nhiều bài toán khác nhau về yêu cầu an toàn thông tin tùy theo những tình
huống cụ thể khác nhau, nhƣng tựu trung có một số bài toán chung nhất thƣờng gặp trong
thực tiễn là những bài toán sau đây:
- Bảo mật: giữ thông tin đƣợc bí mật đối với tất cả mọi ngƣời, trừ một ít ngƣời có
thẩm quyền đƣợc đọc, biết thông tin.
- Toàn vẹn thông tin: bảo đảm thông tin không bị thay đổi hay xuyên tạc bởi những
kẻ không có thẩm quyền hoặc bằng những phƣơng tiện không đƣợc phép.
- Nhận thực một thực thể: xác nhận danh tính của một thực thể chẳng hạn một
ngƣời, một máy tính cuối trong mạng, một thẻ tín dụng….
- Nhận thực một thông báo: xác nhận nguồn gốc của một thông báo đƣợc gửi đến.

- Chữ ký: một cách để gắn kết một thông tin với một thực thể, thƣờng dùng trong
bài toán nhận thực một thông báo cũng nhƣ trong nhiều bài toán nhận thực khác.
- Ủy quyển: chuyển cho một thực thể khác quyền đƣợc đại diện hoặc đƣợc làm một
việc gì đó.
- Cấp chứng chỉ: cấp một sự xác nhận thông tin bởi một thực thể đƣợc tín nhiệm.
- Báo nhận: xác nhận một thông báo đã đƣợc nhận hay một dịch vụ đã đƣợc thực
hiện.
- Làm chứng: kiểm thử việc tồn tại một thông tin ở một thực thể khác với ngƣời
chủ sở hữu thông tin đó.
- Không chối bỏ được: ngăn ngừa việc chối bỏ trách nhiệm đối với một cam kết đã
có (thí dụ đã ký vào một văn bản).


16
- Ẩn danh: che giấu danh tính của một thực thể tham gia trong một tiến trình nào
đó (thƣờng dùng trong gia dịch điện tử).
- Thu hồi: rút lại một giấy chứng chỉ hay ủy quyền dã cấp.
- v.v…
Cở sở của các giải pháp cho các bài toán kể trên là các phƣơng pháp mã hóa, đặc
biết là mã hóa khóa công khai.
1.1.5. Thám mã và tính an toàn của các hệ mã hóa [7]
1.1.5.1. Vấn đề thám mã
Mã hóa đƣợc sử dụng trƣớc hết là để bảo đảm tính bí mật cho các thông tin đƣợc
trao đổi, và do đó bài toán quan trọng nhất của thám mã cũng là bài toán phá bỏ tính bí
mật đó, tức là từ bản mã hóa có thể thu đƣợc dễ dàng (trên các kênh truyền tin công cộng)
ngƣời thám mã phải phát hiện đƣợc nội dung thông tin bị che giấu trong bản mã hóa đó,
mà tốt nhất là tìm ra đƣợc bản rõ gốc của bản mã hóa. Tình huống thƣờng gặp là bản thân
sơ đồ hệ thống mã hóa, kể cả các phép lập mã và giải mã (tức các thuật toán E và D),
không nhất thiết là bí mật, do đó bài toán quy về việc tìm chìa khóa mã hóa K, hay chìa
khóa giải mã K’’, nếu hệ mã hóa có khóa phi đối xứng. Nhƣ vậy, có thể quy ƣớc xem bài

toán thám mã cơ bản là bài toán tìm khóa mã hóa K (hay khóa giải mã K’’). Để giải bài
toán đó, giả thiết ngƣời thám mã biết thông tin về sơ đồ hệ mã hóa đƣợc dùng, kể cả các
phép lập mã và giải mã tổng quát E và D. ngoài ra, ngƣời thám mã có thể biết thêm một
số thông tin khác, tùy theo những thông tin đƣợc biết thêm này mà ta có thể phân loại bài
toán thám mã thành các bài toán cụ thể nhƣ sau:
- Bài toán thám mã chỉ biết bản mã: là bài toán phổ biến nhất, khi ngƣời thám mã
chỉ biết một bản mã hóa Y;
- Bài toán thám mã khi biết cả bản rõ: ngƣời thám mã biết một bản mã hóa Y cùng
với bản rõ tƣơng ứng X;
- Bài toán thám mã khi có bản rõ được chọn: ngƣời thám mã có thể chọn một bản
rõ X, và biết bản mã hóa tƣơng ứng Y. Điều này có thể xảy ra khi ngƣời thám mã chiếm
đƣợc (tạm thời) máy lập mã;
- Bài toán thám mã khi có bản mã được chọn: ngƣời thám mã có thể chọn một bản
mã hóa Y, và biết bản rõ tƣơng ứng X. Điều này có thể xảy ra khi ngƣời thám mã chiếm
đƣợc tạm thời máy giải mã.
1.1.5.2. Tính an toàn của một hệ mã hóa
Tính an toàn của một hệ thống mã hóa phụ thuộc vào độ khóa khăn của bài toán
thám mã khi sử dụng hệ mã hóa đó. Ngƣời ta đã đề xuất một số cách hiểu cho khái niệm
an toàn của hệ thống mã hóa, để trên cơ sở các cách hiểu đó nghiên cứu tính an toàn của
nhiều hệ mã hóa khác nhau, sau đây ta giới thiệu vài cách hiểu thông dụng nhất:
- An toàn vô điều kiện: giả thiết ngƣời thám mã có đƣợc thông tin về bản mã. Theo
quan niệm lý thuyết thông tin, nếu những hiểu biết về bản mã không thu hẹp đƣợc độ bất
định về bản rõ đối với ngƣời thám mã, thì hệ mã hóa là an toàn vô điều kiện, hay theo


17
thuật ngữ của C.Shannon, hệ là bí mật hoàn toàn. Nhƣ vậy, hệ là an toàn vô điều kiện,
nếu độ bất định về bản rõ sau khi ngƣời thám mã có đƣợc các thông tin (về bản mã) bằng
độ bất định về bản rõ trƣớc đó. Tính an toàn vô điều kiện đã đƣợc nghiên cứu cho một số
hệ mã hóa khóa đối xứng mà ta sẽ trình bày trong chƣơng 3.

- An toàn được chứng minh: một hệ thống mã hóa đƣợc xem là có độ an toàn đƣợc
chứng minh nếu ta có thể chứng minh đƣợc là bài toán thám mã đối với hệ thống đó khó
tƣơng đƣơng với một bài toán khó đã biết, thí dụ bài toán phân tích một số nguyên thành
tích các thừa số nguyên tố, bài toán tìm lôgarit rời rạc theo một mô đun nguyên tố, v.v
(khó tương đương có nghĩa là nếu bài toán này giải đƣợc thì bài toán kia cũng giải đƣợc
với cùng một độ phức tạp nhƣ nhau).
- An toàn tính toán: hệ mã hóa đƣợc xem là an toàn (về mặt) tính toán, nếu mọi
phƣơng pháp thám mã đã biết đều đòi hỏi một nguồn năng lực tính toán vƣợt mọi khả
năng (kể cả phƣơng tiện thiết bị) tính toán của một kẻ thù giả định. An toàn theo nghĩa
này, nói theo ngôn ngữ của lý thuyết về độ phức tạp tính toán, là bao hàm cả khải niệm an
toàn theo nghĩa “đƣợc chứng minh” nói trên.
Tính an toàn theo nghĩa đƣợc chứng minh hay tính toán đƣợc sử dụng nhiều trong
việc nghiên cứu các hệ thống mã hóa hiện đại, đặc biệt là các hệ thống mã hóa khóa công
khai.
1.2. Cơ sở toán học của lý thuyết mật mã [7]
1.2.1. Số học các số nguyên, thuật toán Euclid
Ký hiệu Z là tập hợp các số nguyên, Z = { , -2, -1, 0, 1, 2, }, và Z
+
là tập hợp
các số nguyên không âm, Z
+
= {0, 1, 2, }. Trong mục này sẽ nhắc lại một số kiến thức
về số học của các số nguyên cần cho việc trình bày lý thuyết mật mã. Vì để luận văn
không quá dài dòng, các kiến thức sẽ đƣợc nhắc đến chủ yếu là các khái niệm, các mệnh
đề sẽ đƣợc sử dụng, v.v , còn các phần chứng minh sẽ đƣợc lƣợc bỏ.
1.2.1.1. Tính chia hết của các số nguyên
Tập hợp Z là đóng kín đối với các phép cộng, trừ và nhân, nhƣng không đóng kín
đối với phép chia: chia một số nguyên cho một số nguyên không phải bao giờ cũng đƣợc
kết quả là một số nguyên! Vì vậy, trƣờng hợp chia hết, tức khi chia số nguyên a cho số
nguyên b đƣợc thƣơng là một số nguyên q, a = b.q, có một ý nghĩa đặc biệt. Khi đó, nói a

chia hết cho b, b chia hết a, a là bội số của b, b là ước số của a, và ký hiệu là b/a. Dễ thấy
ngay rằng số 1 là ƣớc số của mọi số nguyên bất kỳ, số 0 là bội số của mọi số nguyên bất
kỳ, mọi số nguyên a là ƣớc số, đồng thời là bội số của chính nó.
Định lý 1.2.1. Nếu b > 0 và b/a thì gcd(a,b) = b.
Nếu a = bq + thì gcd(a,b) = gcd(b,r).
Một số nguyên m đƣợc gọi là bội số chung của a và b nếu a/m và b/m. Số m đƣợc
gọi là bội số chung bé nhất của a và b, và đƣợc ký hiệu là lcm(a,b), nếu m>0, m là bội số
chung của a và b, và mọi bội số chung của a và b đều là bội của m. Ví dụ lcm(14,21)= 42.
Với hai số nguyên dƣơng a và b bất kỳ ta có quan hệ


18
lcm(a,b).gcd(a,b) = a.b.
Từ định lý 1.2.1. ta suy ra thuật toán sau đây thực hiện việc tìm ƣớc số chung lớn
nhất của hai số nguyên bất kỳ:
Thuật toán Euclide tìm ƣớc số chung lớn nhất:
INPUT: hai số nguyên không âm a và b, với a≥b.
OUTPUT: ước số chung lớn nhất của a và b
1. Trong khi còn b>0, thực hiện:
1.1. đặt r

a mod b,a

b, b

r.
2. Cho ra kết quả (a).
Ví dụ: Dùng thuật toán Euclide tìm gcd(4864, 3458), lần lƣợt đƣợc các giá trị gán
cho các biến a, b và r nhƣ sau:
Bảng 1.2.1. Mô tả quá trình tính toán của thuật toán Euclid


a
b
c
4864 = 1.3458 + 1406
4864
3458

3458 = 2.1406 + 646
3458
1406
1406
1406 = 2.646 + 114
1406
646
646
646 = 5.114 + 76
646
114
114
114 = 1.76 +38
114
76
76
76 = 2.38 +0
76
38
38

38

0
0
Cho hai số nguyên bất kỳ a và b, b > 1. Thực hiện phép chia a cho b ta sẽ đƣợc hai
số q và r sao cho
a = b.q + r, o ≤ r <b.
Số q đƣợc gọi là số thương của phép chia a cho b, ký hiệu a div b và số r đƣợc gọi
là số dư của phép chia a cho b, ký hiệu a mod b. Ví dụ: 25div 7 = 3 và 25 mod 7 = 4, -
25div 7 = -4 và – 25 mod 7 = 3.
Một số nguyên d đƣợc gọi là ước số chung của hai số nguyên a và b nếu d/a và
d/b. Số nguyên d đƣợc gọi là ước số chung lớn nhất của a và b nếu d>0, d là ƣớc số
chung của a và b, và mọi ƣớc chung của a và b đều là ƣớc số của d. Ký hiệu ƣớc số chung
lớn nhất của a và b là gcd (a,b). Ví dụ gcd (12, 18) = 6, gcd (-18, 27) = 3.
Dễ thấy rằng với mọi số nguyên dƣơng a ta có gcd (a, 0) = a, ta cũng sẽ qui ƣớc
xem rằng gcd (0,0) = 0.
Một số nguyên a > 1 đƣợc gọi là số nguyên tố, nếu a không có ƣớc số nào ngoài 1
và chính a; và đƣợc gọi là hợp số, nếu không phải là nguyên tố. Ví dụ các số 2, 3, 5, 7 là
số nguyên tố; các số 6, 8, 10, 12, 14, 15 là hợp số. Hai số a và b đƣợc gọi là nguyên tố với


19
nhau, nếu chúng không có ƣớc số chung nào khác 1, tức là nếu gcd (a,b) = 1. Một số
nguyên n > 1 bất kỳ đều có thể viết dƣới dạng
n = p
1
a1
. p
2
a2
p
k

ak

trong đó p
1
, p
2
, ,p
k
là các số nguyên tố khác nhau, a1, a2, ak là các số mũ
nguyên dƣơng. Nếu không kể thứ tự các thừa số nguyên tố thì dạng biểu diễn đó là duy
nhất, ta gọi đó là dạng khai triển chính tắc của n. Ví dụ dạng khai triển chính tắc của 1800
là 2
3
3
2
5
2
.
Các số nguyên tố và các vấn đề về số nguyên tố có một vai trò quan trọng trong số
học và trong ứng dụng vào lý thuyết mã hóa, sẽ xét riêng trong chƣơng sau.
Thuật toán cho kết quả: gcd (4864, 3458) = 38.
Biết rằng nếu gcd (a,b) = d, thì phƣơng trình bất định
a.x + b.y = d
có nghiệm nguyên (x,y), và một nghiệm nguyên (x,y) nhƣ vậy có thể tìm đƣợc bởi
thuật toán Euclide mở rộng nhƣ sau:
Thuật toán Euclide mở rộng:
INPUT: hai số nguyên không âm a và b với a ≥b.
OUTPUT: d = gcd (a,b) và hai số x, y sao cho a.x +b.y = d
1. Nếu b = 0 thì đặt d


a, x

1, y

0 và cho ra (d, x, y).
2. Đặt x
2
= 1, x
1
= 0, y
2
= 0, y
1
= 1.
3. Trong khi còn b > 0 thực hiện:
3.1 q

a divb, r

a mod b, x

x
2
– qx
1
, y

y
2
– qy

1
.
3.2 a

b, b

r, x
2


x
1
, x
1


x, y
2

y
1
và y
1


y.
4. Đặt d

a, x


x2, y

y2, và cho ra kết quả (d, x, y)
Ví dụ: Dùng thuật toán Euclide mở rộng cho các số a = 4864 và b = 3458, lần lƣợt
đƣợc các giá trị sau đây cho các biến a, b, q, r, x, y, x
1
, x
2
, y
1
, y
2
(sau mỗi chu trình thực
hiện hai lệnh 3.1 và 3.2).
Bảng 1.2.2. Mô tả quá trình tính toán của thuật toán Euclid mở rộng
a
b
q
r
x
y
x1
x2
y1
y2
4864
3458





0
1
1
0
3458
1406
1
1406
1
-1
1
0
-1
1
1406
646
2
646
-2
3
-2
1
3
-1
646
114
2
114
5

-7
5
-2
-7
3
114
76
5
76
-27
38
-27
5
38
-7
76
38
1
38
32
-45
32
-27
-45
38
38
0
2
0
-91

128
-91
32
128
-45


20
Dễ thử lại rằng sau mỗi lần thực hiện chu trình gồm hai lệnh 3.1 và 3.2 các giá trị
x, y, r thu đƣợc luôn thỏa mãn 4864. x + 3458 .y = r, và do đó khi kết thúc các vòng lặp
(ứng với giá trị b = 0), thực hiện tiếp lệnh 4 ta đƣợc kết quả d = 38 và y = -45, cặp số (32,
-45) thỏa mãn: 4864.32 + 3458. (-45) = 38.
1.2.1.2. Đồng dƣ và phƣơng trình đồng dƣ tuyến tính
Cho n là một số nguyên dƣơng. Hai số nguyên a và b là đồng dư với nhau theo mô
đun n, và viết a  b (mod n), nếu n/a-b (tức cũng là nếu a – b chia hết cho n, hay khi chia
a và b cho n đƣợc cùng một số dƣ nhƣ nhau).
Ví dụ: 23  8 (mod 5), vì 23 – 8 = 5.3, -19  9 (mod 7) vì -19 – 9 = - 4.7.
Quan hệ đồng dƣ (theo một môđun n) trên tập hợp các số nguyên có các tính chất
phản xạ, đối xứng và bắc cầu, tức là một quan hệ tƣơng đƣơng, do đó nó tạo ra một phân
hoạch trên tập hợp tất cả các số nguyên Z thành ra các lớp tƣơng đƣơng: hai số nguyên
thuộc cùng một lớp tƣơng đƣơng khi và chỉ khi chúng cho cùng một số dƣ nếu chia cho n.
Mỗi lớp tƣơng đƣơng nhƣ vậy đƣợc đại diện bởi một số duy nhất trong tập hợp Z
n
= {0, 1,
2, 3, , n-1}, là số dƣ chung khi chia các số trong lớp đó cho n. Vì vậy, ta có thể đồng
nhất Z
n
với tập hợp tất cả các lớp tƣơng đƣơng các số nguyên theo mod n; trên tập đó ta
có thể xác định các phép tính cộng, trừ và nhân theo mod n.
Ví dụ: Z

25
= {0, 1, 2, 24}. Trong Z
25
, 15 +14 = 4, vì 15 + 14 = 29  4 (mod 25).
Tƣơng tự, 15.14  10 trong Z
25
.
Cho a

Z
n
. Một số nguyên x

Z
n
đƣợc gọi là nghịch đảo của a theo modn, nếu a.x
 1 (modn). Nếu có số x nhƣ vậy thì ta nói a là khả nghịch, và ký hiệu x là a
-1
mod n. Thí
dụ 22
-1
mod 25 = 8, vì 22.8 = 186  1 (mod 25). Từ định nghĩa ta có thể suy ra rằng a là
khả nghịch theo mod n khi và chỉ khi gcd (a,n) = 1, tức là khi a và n nguyên tố với nhau.
Dịnh nghĩa phép chia trong Z
n
nhƣ sau:
a : b (mod n) = a.b
-1
mod n.
Phép chia chỉ thực hiện đƣợc khi b là khả nghịch theo mod n. Thí dụ 15 : 22 (mod

25) = 15 : 22-1 mod 25 = 20.
Bây giờ xét các phương trình đồng dư tuyến tính
Phƣơng trình đồng dƣ tuyến tính có dạng
a. x

b (mod n),
(1.2.1)
trong đó a, b, n là các số nguyên, n > 0, x là ẩn số. Phƣơng trình đó có nghiệm khi và chỉ
khi d = gcd (a,n) /b, và khi đó có đúng d nghiệm theo mod n. Thực vậy, đặt a” = a/d, b’ =
b/d, n’ = n/d ta thấy phƣơng trình đồng dƣ (1.2.1) tƣơng đƣơng với phƣơng trình
a’x

b’ (mod n’)
Vì gcd(a’, n’) = 1, nên phƣơng trình này có một nghiệm theo mod n’:
x = xo

b’. a’
-1
(mod n’)
và do đó phƣơng trình (1.2.1) có d nghiệm theo mod n là:


21
x = xo, xo + n’, , xo + (d - 1) n’ (mod n)
Tất cả d nghiệm đó khác nhau theo mod n, nhƣng cùng đồng dƣ với nhau theo mod
n’.
Bây giờ ta xét hệ thống các phƣơng trình đồng dƣ tuyến tính. Một hệ nhƣ vậy có
thể đƣa về dạng











)(mod

)(mod
)(mod
222
111
kkk
nax
nax
nax



(1.2.2)
Ký hiệu: n = n
1
.n
2
n
k
, N
i

= n/n
i
. Có định lý sau đây:
Định lý 1.2.2. (định lý số dƣ Trung Quốc). Giả sử các số nguyên n
1
, n
2
, , n
k

từng cặp nguyên tố với nhau. Khi đó, hệ phương trình đồng dư tuyến tính (1.2.2) có một
nghiệm duy nhất theo mod n.
Nghiệm duy nhất nói trong định lý 1.2.2 đƣợc cho bởi biểu thức:
x =

k
i=1
a
i
.N
i
.M
i
mod n,
trong đó M
i
= N
i

-1

mod n
i
(có M
i
vì N
i
và n
i
nguyên tố với nhau).
Vídụ: Cặp phƣơng trình x  3 (mod 7) và x  7 (mod 13) có một nghiệm duy nhất x
 59 (mod 91).
Nếu (n
1
, n
2
) = 1, thì cặp phƣơng trình x  a (mod n
1
) và x  a (mod n
2
) có nghiệm
duy nhất x  a (mod n) theo mod n với n = n
1
n
2
.
1.2.1.3. Thặng dƣ thu gọn và phần tử nguyên thủy
Tập Z
n
= {0, 1, 2, , n-1} thƣờng đƣợc gọi là tập các thặng dư đầy đủ theo mod n,
vì mọi số nguyên bất kỳ đều có thể tìm đƣợc trong Z

n
một số đồng dƣ với mình (theo mod
n). Tập Z
n
là đóng đối với các phép tính cộng, trừ và nhân theo mod n, nhƣng không đóng
đối với phép chia, vì phép chia cho a theo mod n chỉ có thể thực hiện đƣợc khi a và n
nguyên tố với nhau, tức khi gcd(a,n) = 1.
Bây giờ ta xét tập Z
n
*
= {a

Z
n
: gcd(a,n) = 1}, tức Z
n
*
là tập con của Z
n
bao gồm
tất cả các phần tử nguyên tố với n. Ta gọi tập đó là tập các thặng dư thu gọn theo mod n.
Mọi số nguyên tố với n đều có thể tìm thấy trong Z
n
*
một đại diện đồng dƣ với mình theo
mod n. Chú ý rằng nếu p là một số nguyên tố thì Z
p
*
= {1, 2, , p-1}.
Tập Z

n
*
lập thành một nhóm con đối với phép nhân của Z
n
, vì trong Z
n
*
phép chia
theo mod n bao giờ cũng thực hiện đƣợc, gọi Z
n
*
là nhóm nhân của Z
n
.
Theo đại học số học, gọi số các phần tử trong một nhóm là cấp của nhóm đó. Ký
hiệu

(n) là số các số nguyên dƣơng bé hơn n và nguyên tố với n. Nhƣ vậy, nhóm Z
n
*

cấp

(n), và nếu p là số nguyên tố thì nhóm Z
p
*
có cấp p-1.


22

Một phần tử g

Z
n
*
có cấp m, nếu m là số nguyên dƣơng bé nhất sao cho g
m
= 1
trong Z
n
*
. Theo một định lý trong Đại số, có m/

(n). Vì vậy, với mọi b

Z
n
*
luôn có b

(n)

 1 mod n.
Nếu p là số nguyên tố, thì do

(p) = p – 1, có với mọi b

Z
n
*

b
n-1
 (mod p)
(1.2.3)
Nếu b có cấp p-1, tức p-1 là số mũ bé nhất thỏa mãn công thức (1.2.3) thì các phần
tử b, b
2
, , b
p-1
đều khác nhau và theo mod p, chúng lập thành Z
p
*
. Theo thuật ngữ đại số,
khi đó ta nói Z
n
*
là một nhóm cyclic và b là một phần tử sinh, hay phần tử nguyên thủy
của nhóm đó. Trong lý thuyết số, ngƣời ta đã chứng minh đƣợc cái tính chất sau đây của
các 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 thủy
2. Nếu p-1= p
1
a1
. p
2

a2
p
s
as
là khai triển chính tắc của p – 1 và nếu

)(mod1
1
1
pa
p
p


, …,
)(mod1
1
pa
ps
p



3. Nếu g là phần tử nguyên thủy theo mod p, thì ß = g
i
mod p với mọi i mà gcd (i,
p-1)=1, cũng là phần tử nguyên thủy theo mod p.
Ba tính chất đó là cơ sở giúp ta tìm các phần tử nguyên thủy theo mod p, với p là
số nguyên tố bất kỳ. Ngoài ra, cũng chú ý một số tính chất sau đây, có thể đƣợc sử dụng
nhiều trong các chƣơng trình sau:

a. Nếu p là số nguyên tố và gcd(a,p) = 1, thì a
p-1
 1 (mod p) (định lý Fermat).
b. Nếu a

Z
n
*
, thì a

(n)
1(mod n). Nếu rs(mod

(n)) thì a
r
a
s
(mod n) (định lý
Euler).
1.2.1.4. Phƣơng trình đồng dƣ bậc hai và thặng dƣ bậc hai
Xét phƣơng trình đồng dƣ bậc hai có dạng đơn giản sau đây:
x
2
 a (mod n),
trong đó n là một số nguyên dƣơng, a là số nguyên với gcd(a,n) = 1, và x là ẩn số. Phƣơng
trình đó không phải bao giờ cũng có nghiệm, khi nó có nghiệm thì ta nói a là một thặng
dư bậc hai mod n; nếu không thì nói a là một bất thặng dư bậc hai mod n. Tập các số
nguyên nguyên tố với n đƣợc phân hoạch thành hai tập con: tập Q
n
các thặng dƣ bậc hai

mod n, và tập Q
n
các bất thặng dƣ mod n.
Khi n = p là số nguyên tố, ta có tiêu chuẩn Euler sau đây: Số a là thặng dƣ bậc hai
mod p nếu và chỉ nếu a
(p-1)/2
 1 (mod p). Tiêu chuẩn đó đƣợc chứng minh nhƣ sau:
Giả sử có x sao cho x
2
 a (mod p), khi đó ta cũng sẽ có
a
(p-1)/2
 (x
2
)
(p-1)/2
 x
p-1
 1 (mod p).
Ngƣợc lại, giả sử a
(p-1)/2
 1 (mod p). Khi đó a

Z
n
. Lấy b là một phần tử nguyên
thủy mod p, ắt có một số i nào đó sao cho a = b
i
mo p. Từ đó,



23
a(
p-1)/2
 b
i(p-1)/2
 1 (mod p).
Phần tử b có cấp p – 1, do đó (p-1) chia hết i(p-1)/2, i phải là số chẵn, i = 2j, và a
có căn bậc hai là  b
j
mod p.
Cho p là một số nguyên tố lẻ. Với mọi a ≥ 0 ta định nghĩa ký hiệu Legendre








p
a

nhƣ sau:









p
a
=








p
p
Qakhi
Qakhi
pakhi
1
1
)(mod00

Từ định nghĩa ta suy ra ngay a là thặng dư bậc hai mod p khi và chỉ khi









p
a
= 1.
Và theo tiêu chuẩn Euler nói trên, với mọi a ≥ 0, ta có:









p
a
 a
(p-1)/2
(mod p).
Bây giờ ta mở rộng ký hiệu Legengdre để đƣợc ký hiệu Jacobi đối với mọi số
nguyên lẻ n ≥ 1 và mọi số nguyên a ≥ 0, cũng đƣợc ký hiệu bởi






n
a
và đƣợc định nghĩa

nhƣ sau: Giả sử a có khai triển chính tắc thành thừa số nguyên tố là n = p
1
a1
.p
2
a2
p
k
ak
thì







n
a
=
ak
k
aa
p
a
p
a
p
a


























2
2
1
1

Khi n = p là số nguyên tố thì giá trị của các ký hiệu Legendre và Jacobi là nhƣ

nhau. Việc tính ký hiệu Legendre có thể phức tạp khi p rất lớn, trong khi việc tính ký hiệu
Jacobi có thể thuận lợi hơn do có thể sử dụng các tính chất 1-4 sau đây:
1. Nếu m1  m2 (mod n), thì






n
m1
=






n
m2

2.






n
2

=





)8(mod3,1
)8(mod1,1
nkhi
nkhi

3.






n
mm 2.1
=






n
m1
.







n
m2

4. Nếu m và n đều là số lẻ, thì






n
m
=























)4(mod1)4(mod1,
)4(mod3&)4(mod3,
mnkhi
m
n
mnkhi
m
n





24
Ví dụ: Dùng các tính chất đó, ta tính đƣợc:








9283
7411
=






7411
9283
=






7411
1872
=







7411
2
4
.






7411
117

=






7411
117
= -






117

7411
= -






117
40
= -






117
2
3
.






117
5


=






117
5
=






5
117
=






5
2
= - 1
9283 là một số nguyên tố. Do đó, giá trị - 1 của ký hiệu Jacobi







9283
7411
cũng là giá
trị của cùng ký hiệu Legendre đó, và ta kết luận đƣợc rằng 7411 là bất thặng dƣ bậc hai
mod 9283, hay phƣơng trình
x
2
 7411 (mod 9283)
là vô nghiệm.
Bây giờ xét việc giải phƣơng trình đồng dƣ bậc hai
x
2
 a (mod n)
(1.2.4)
trong một trƣờng hợp đặc biệt khi n = p là số nguyên tố có dạng p = 4m + 3, tức p
đồng dƣ với 3 theo mod 4, và a là một số nguyên tố với p. Theo tiêu chuẩn Euler ta biết
phƣơng trình (1.2.4) có nghiệm khi và chỉ khi a
(p-1)2
 (mod p). Khi đó ta có:

)(mod
1
2
1
paa

p





)(mod
)1(2
paa
m



do đó x   a
m+1
(mod p) là hai nghiệm của phƣơng trình (1.2.4)
1.2.2. Độ phức tạp tính toán
1.2.3.1. Khái niệm về độ phức tạp tính toán
Lý thuyết thuật toán và các hàm số tính đƣợc ra đời từ những năm 30 của thế kỷ 20
đã đặt nền móng cho việc nghiên cứu các vấn đề “tính đƣợc”, “giải đƣợc” trong toán học,
đƣa đến nhiều kết quả rất quan trọng và lý thú. Nhƣng từ cái “tính đƣợc” một cách trừu
tƣợng, hiểu theo nghĩa tiềm năng, đến việc tính đƣợc trong thực tế của khoa học tính toán
bằng máy tính điện tử, là cả một khoảng cách rất lớn. Vấn đề là do ở chỗ những đòi hỏi về
không gian vật chất và về thời gian để thực hiện các tiến trình tính toán nhiều khi vƣợt
quá xa những khả năng thực tế. Từ đó, vào khoảng giữa những năm 60 (của thế kỷ trƣớc),
một lý thuyết về độ phức tạp tính toán bắt đầu đƣợc hình thành và phát triển nhanh chóng,
cung cấp cho chúng ta nhiều hiểu biết sâu sắc về bản chất phức tạp của các thuật toán và
các bài toán, cả những bài toán thuần túy lý thuyết đến những bài toán thƣờng gặp trong
thực tế. Sau đây giới thiệu sơ lƣợc một số khái niệm cơ bản và vài kết quả sẽ đƣợc dùng
đến của lý thuyết đó.



25
Trƣớc hết, hiểu độ phức tạp tính toán (về không gian hay về thời gian) của một
tiến trình tính toán là số ô nhớ đƣợc dùng hay số các phép toán sơ cấp đƣợc thực hiện
trong tiến trình tính toán đó.
Dữ liệu đầu vào đối với một thuật toán thƣờng đƣợc biểu diễn qua các từ trong một
bảng ký tự nào đó. Độ dài của một từ là số ký tự trong từ đó.
Cho một thuật toán A trên bảng ký tự  (tức có đầu vào là các từ trong ). Độ
phức tạp tính toán của thuật toán A đƣợc hiểu là một hàm số f
A
(n) sao cho với mỗi số n,
f
A
(n) là số ô nhớ, hay số phép toán sơ cấp tối đa mà A cần để thực hiện tiến trình tính toán
của mình trên các dữ liệu vào có độ dài  n. Ta nói thuật toán A có độ phức tạp thời gian
đa thức, nếu có một đa thức P(n) sao cho với mọi n đủ lớn ta có f
A
(n)  P(n), trong đó
f
A
(n) là độ phức tạp tính toán theo thời gian của A.
Về sau khi nói đến các bài toán, ta hiểu đó là các bài toán quyết định, mỗi bài toán
P nhƣ vậy đƣợc xác định bởi:
- Một tập các dữ liệu vào I (trong một bảng ký tự  nào đó),
- Một câu hỏi Q trên các dữ liệu vào, sao cho với mỗi dữ liệu vào x

1, câu hỏi Q
có một trả lời đúng hoặc sai.
Bài toán quyết định P là giải được, nếu có thuật toán để giải nó, tức là thuật toán

làm việc có kết thúc trên mọi dữ liệu vào các bài toán, và cho kết quả đúng hoặc sai tùy
theo câu hỏi Q trên dữ liệu đó có trả lời đúng hoặc sai. Bài toán P là giải được trong thời
gian đa thức, nếu có thuật toán giải nó với độ phức tạp thời gian đa thức. Sau đây là vài ví
dụ về các bài toán quyết định:
Bài toán SATISFIABILYTY (viết tắt là SAT):
- Mỗi dữ liệu vào là một công thức F của logic mệnh đề, đƣợc viết dƣới dạng hội
chuẩn tắc, tức dạng hội của một số các “clause”.
- Câu hỏi là: công thức F có thỏa đƣợc hay không?
Bài toán CLIQUE:
- Mỗi dữ liệu vào là một graph G và một số nguyên k.
- Mỗi câu hỏi là: Graph G có một clique với ≥ k đỉnh hay không? (một clique của
G là một graph con đầy đủ của G).
Bài toán KNAPSACK:
- Mỗi dữ liệu là một bộ n + 1 số nguyên dƣơng I = (s
1
, s
n
; T).
- Câu hỏi là: có hay không một vectơ Boole (x
1
, ,x
n
) sao cho



n
i
Tsixi
1

?

(vectơ Boole là vectơ có các thành phần là 0 hoặc 1)
Bài toán thặng dƣ bậc hai:
- Mỗi dữ liệu gồm hai số nguyên dƣơng (a, n).
- Câu hỏi là: a có là thặng dƣ bậc hai theo mod n hay không?

×