TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN BÀI TẬP LỚN MÔN CẤU TRÚC RỜI RẠC TÌM HIỂU VỀ NGHỊCH ĐẢO MODULO VÀ MÃ HOÁ RSA Người hướng dẫn: ThS
Trang 1TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM
TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG
KHOA CÔNG NGHỆ THÔNG TIN
BÀI TẬP LỚN MÔN CẤU TRÚC RỜI RẠC
TÌM HIỂU VỀ NGHỊCH ĐẢO MODULO
VÀ MÃ HOÁ RSA
Người hướng dẫn: ThS MAI DUY TÂN
Người thực hiện: NGUYỄN HOÀNG KHOA 52100969 –
Lớp : 21050401 Khoá : 25
Trang 2TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM
TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG
KHOA CÔNG NGHỆ THÔNG TIN
BÀI TẬP LỚN MÔN CẤU TRÚC RỜI RẠC
TÌM HIỂU VỀ NGHỊCH ĐẢO MODULO
VÀ MÃ HOÁ RSA
Người hướng dẫn: ThS MAI DUY TÂN
Người thực hiện: NGUYỄN HOÀNG KHOA
Lớp : 52100969 Khoá : 25
THÀNH PHỐ HỒ CHÍ MINH, NĂM 2023
Trang 3LỜI CẢM ƠN
Đầu tiên, em xin gửi lời cảm ơn đến Khoa Công nghệ thông tin v ã tì đ ạo điều kiện cho em học môn Cấu trúc rời rạc Môn học này ã mang lđ ại cho em rất nhiều kiến thức
m và cới ần thiết cho con đường phát triển của em Em cũng xin gửi lời cảm ơn đến thầy Mai Duy T và cô Nguyân ễn Thị Huỳnh Trâm Bài tập lớn lần này của em không thể hoàn
thành nếu thiếu đi những tri th ức quý báu của thầy v cô Trong quá trình thà ực hiện bài
tập ớn em cũng đl ã nhận được nhiều sự chỉ dạy từ thầy Mai Duy Tân Một lần nữa, em
Trang 4ĐỒ ÁN ĐƯỢC HOÀN THÀNH TẠI TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG
Tôi xin cam đoan đây là sản phẩm đồ án của riêng tôi và được sự hướng dẫn của ThS Mai Duy Tân; Các nội dung nghiên cứu, kết quả trong đề tài này là trung thực và chưa công bố dưới bất kỳ hình thức nào trước đây Những số liệu trong các bảng biểu phục vụ cho việc phân tích, nhận xét, đánh giá được chính tác giả thu thập từ các nguồn khác nhau có ghi rõ trong phần tài liệu tham khảo
Ngoài ra, trong đồ án còn sử dụng một số nhận xét, đánh giá cũng như số liệu của các tác giả khác, cơ quan tổ chức khác đều có trích dẫn và chú thích nguồn gốc
Nếu phát hiện có bất kỳ sự gian lận nào tôi xin hoàn toàn chịu trách nhiệm
về nội dung đồ án của mình Trường đại học Tôn Đức Thắng không liên quan đến những vi phạm tác quyền, bản quyền do tôi gây ra trong quá trình thực hiện (nếu có)
TP Hồ Chí Minh, ngày…tháng…năm…
Tác giả (ký tên và ghi rõ họ tên)
Nguyễn Hoàng Khoa
Trang 5PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN
Phần xác nhận của GV hướng dẫn
_ _ _ _ _ _ _
Tp Hồ Chí Minh, ngày…tháng…năm…
(kí và ghi họ tên)
Phần đánh giá của GV chấm bài
_ _ _ _ _ _ _
Tp Hồ Chí Minh, ngày…tháng…năm…
(kí và ghi họ tên)
Trang 6TÓM TẮT
Bài tập lớn môn học Cấu trúc r lời ần này của em sẽ tiến hành tìm hiểu về Thuật toán Euclid mở rộng và cách dùng thuật toán để tìm nghịch đảo modulo Từ cơ sở đó ta
có thể ứng dụng để đi đến tìm hiểu về hệ thống mật mã RSA và xây dựng chương trình
mô ph ng thuỏ ật toán
Trang 7MỤC LỤC
LỜI CẢM ƠN i
PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN iii
TÓM TẮT iv
MỤC LỤC 1
DANH MỤC CÁC BẢNG BIỂU, HÌNH VẼ, ĐỒ THỊ 3
Chương 1: Tìm nghịch đảo modulo bằng thuật toán Euclid mở rộng 4
1.1 Nhắc lại về ước chung lớn nhất của hai số 4
1.2 Thuật toán Euclid mở rộng tìm nghịch đảo modulo 4
1.3 Xây dựng bảng tính cho thuật toán 5
1.4 Hiện thực code 7
1.4.1 Source code: InverseModulo.py 7
1.4.2 Xây dựng chương trình 7
Source code gồm các hàm: 7
1.4.3 Kết quả chạy thử: 7
Chương 2: Hệ thống mật mã RSA 8
2.1 Sơ lược về mã hoá và mật mã học 8
2.2 Tổng quan về hệ thống mật mã RSA 9
2.3 Cách thức hoạt động của hệ thống mật mã RSA 10
2.3.1 Sinh khoá 10
2.3.2 Mã hoá từ và giải mã bằng khoá đã tạo 11
2.4 Hiện thực code 11
2.4.1 Source code: RSA.py 11
2.4.2 Kết quả chạy thử 11
Trang 8DANH MỤC KÍ HIỆU VÀ CHỮ VIẾT TẮT CÁC CHỮ VIẾT TẮT
GCD Greatest Common Divisor (Ước chung lớn nhất)
Trang 9DANH MỤC CÁC BẢNG BIỂU, HÌNH VẼ, ĐỒ THỊ
DANH MỤC HÌNH
Hình 1: Ví dụ tìm nghịch đảo modulo 1 6
Hình 2: Ví dụ tìm nghịch đảo modulo 2 6
Hình 3: Ví dụ tìm nghịch đảo modulo 2 (tiếp theo) 7
Hình 4: Kết quả chạy thực nghiệm tìm nghịch đảo modulo 3 mod 5 7
Hình 5: Kết quả chạy thực nghiệm tìm nghịch đảo modulo 27 mod 49 8
Hình 6: Kết quả chạy thực nghiệm tìm nghịch đảo modulo 48 mod 22 8
Hình 7: Kết quả chạy thử với mẫu thử 100 từ 11
Hình 8: Kết quả chạy thử với mẫu 300 từ 13
Trang 10Chương 1: Tìm nghịch đảo m odulo b ằng thu ật to án Euclid mở
r ộng
1.1 Nhắc lại về ước chung lớn nhất của hai số
Ứng với hai số nguyên a và b khác 0, ước chung lớn nhất (GCD - Greatest Common Divisor) là một số nguyên d lớn nhất mà d chia hết cả a và b
Ước chung lớn nhất của hai số có thể viết dưới dạng:
Trong biểu thức (1):
q: ph n nguyên khi l y a chia b ( ầ ấ 𝑎/𝑏 )
r: phần dư khi lấy a chia cho b (𝑎 𝑚𝑜𝑑 ) 𝑏
Lí thuyết ước chung lớn nhất được sử dụng trong nhiều thuật toán trong toán học, bao gồm cả việc tìm nghịch đảo modulo
1.2 Thuật toán Euclid mở rộng tìm nghịch đảo modulo
Thuật toán Euclid mở rộng là một phương pháp tính ước chung lớn nhất (GCD) của hai số nguyên dương, cùng với việc tìm hệ số Bézout của chúng
Hệ số Bézout là một cặp số nguyên dương (x, y) sao cho:
𝑎𝑥 + 𝑏𝑦 = 𝐺𝐶𝐷(𝑎, 𝑏) .2) (1
Các tính chất cơ bản của thuật toán Euclid mở rộng:
1 Nếu a chia hết cho b thì GCD (a, b) = b
2 GCD (a, b) = GCD (b, a mod b) với a mod b là số dư của phép chia a cho
b
3 GCD (a, 0) = a
Tính chất thứ 2 cho phép ta chuyển một bài toán lớn, phức tạp thành một bài toán nhỏ và dễ dàng xử lí hơn Từ đó khi viết theo dạng biểu thức (1.1) ta xây dựng được một dãy các phép chia:
GCD (a, b)
Trang 11𝑎0= 𝑏0𝑞0 + 𝑟0GCD (𝑏0, 𝑟0)
𝑏0= 𝑟0𝑞1 + 𝑟1GCD (𝑟0, 𝑟1)
𝑟0= 𝑟1𝑞2 + 𝑟2GCD (𝑟1, 𝑟2)
𝑟1= 𝑟2𝑞3 + 𝑟3GCD (𝑟2, 𝑟3)
𝑟𝑚−2= 𝑟𝑚−1𝑞𝑚 + 𝑟 𝑚GCD (𝑟𝑚−1, 𝑟𝑚)
Ta xây dựng dãy truy hồi:
𝑡0= 0
𝑡1= 1
𝑡𝑗= (𝑡𝑗 −2− 𝑡𝑗−1 𝑗−1𝑞 )
Điều kiện: a và b là hai số nguyên tố cùng nhau Hai số nguyên tố cùng nhau có nghĩa GCD (a, b) không được khác 1
1.3 Xây dựng bảng tính cho thuật toán
Bảng tính gồm trường: q, a, b, r, t0, t1, t 7
Trong đó:
a khởi tạo là max (𝑎0, 𝑏0)
b khởi tạo là min (𝑎0, 𝑏0)
q = 𝑎 // 𝑏
r = 𝑎 𝑚𝑜𝑑 𝑏
t0 khởi tạo là 0
t1 khởi tạo là 1
t = 𝑡0 – 𝑡1 × q
while b ≠ 0:
a = b, b = r
q = 𝑎 // 𝑏
r = 𝑎 𝑚𝑜𝑑 𝑏
Trang 12t = 𝑡0 – 𝑡1 × q
Khi b = 0 đồng nghĩa với việc ta tìm GCD (a, 0) Áp dụng tính chất 3 ta có được GCD (a, b) = 𝑎𝑚
Xét 𝑎𝑚 Nếu 𝑎𝑚 khác 1 tức đã vi phạm điều kiện của nghịch đảo modulo, ta kết luận không tồn tại nghịch đảo modulo của a và b Nếu 𝑎𝑚= 1, ta nhận giá trị t0 tương ứng là nghịch đảo của modulo, kết thúc thuật toán
Lưu ý: trường hợp giá trị t0 nhận được là âm thì ta cộng với max (𝑎0, 𝑏0)
Ví dụ:
➢ Tìm nghịch đảo của 3 mod 5
Hình 1: Ví dụ tìm nghịch đảo modulo 1
➢ Tìm nghịch đảo của 11 mod 26
Hình 2: Ví dụ tìm nghịch đảo modulo 2
Trang 13Hình 3: Ví dụ tìm nghịch đảo modulo 2 (tiếp theo)
1.4 Hiện thực code
1.4.1.Source code: InverseModulo.py
1.4.2.Xây dựng chương trình
Source code gồm các hàm:
• generate_key (p, q): Tạo hai kho public key và private key tá ừ hai số nguyên tố
• encrypt (plaintext, public_key): Mã ho bá ằng public key
• decrypt (ciphertext, private_key): Giải mã bằng private key
1.4.3.Kết quả chạy thử:
Trang 14Hình 5: Kết quả chạy thực nghiệm tìm nghịch đảo modulo 27 mod 49
Hình 6: Kết quả chạy thực nghiệm tìm nghịch đảo modulo 48 mod 22
Ở ví dụ tìm nghịch đảo 48 mod 22, do 48 và 22 không phải là hai s nguyên t ố ố cùng nhau (𝐺𝐶𝐷 (48 22, ) ≠ 1) nên không tồn tại nghịch đảo modulo, kết quả trả về là None
Chương 2: ệ thống mật m H ã RSA
2.1 Sơ lược về mã hoá và mật mã học
Một trong các yếu tố chính quyết định sự phát triển của con người là nhu cầu giao tiếp và hệ thống ngôn ngữ, truyền tin Tuy nhiên trong truyền tin liên lạc hay các vấn đề hiện nay là truyền tải dữ liệu trên các kênh truyền chung, ta cần một phương pháp để hạn chế những người không liên quan đọc được dữ liệu hoặc thông tin, thông điệp Nhu cầu che giấu những thông tin quan trọng đã xuất hiện từ rất lâu trong lịch sử và từ đó, hệ thống mật mã và mật mã học đã ra đời
Các khái niệm về mật mã học:
Trang 15• Thông điệp: là thực thể vật lí mang thông tin cần trao đổi Thực thể có thể là dạng văn bản như lá thư, điện tín; dạng âm thanh là cuộc nói chuyện điệ thoại, bài phát biểu; dạng hình ảnh hay truyền thông đa phương tiện là dạng kết hợp
cả văn bản, hình và âm thanh như video, chương trình truyền hình
• Plaint text: là dữ liệu gốc tường minh của thông điệp, mọi người trong cùng môi trường tạo ra thông điệp đều có thể đọc hiểu được
• Cipher text: là thông điệp đã được biến đổi theo một nguyên tắc nào đó để hạn chế những người có thể đọc nó Chỉ có những người nắm được nguyên tắc biến đổi và biến đổi trở về dạng plain text
• Mã hoá: là cách thức biến đổi thông tin từ bản có thể đọc hiểu được sang một dạng mật mã chỉ có những người giải mã mới có thể hiểu được
• Giải mã: là cách thức ngược lại của mã hoá, chỉ cách thức chuyển đổi thông tin từ dạng mật mã trở về thành dạng mà mọi người có thể dễ dàng đọc được
• Key: được coi là chìa khoá, quy tắc để giải mật mã, được thống nhất giữa bên gửi và bên nhận mật mã Key thường được giữ bí mật để tránh bị bên thứ ba giải được mật mã
Hai dạng mã hoá phổ biến được triển khai hiện nay có thể kể đến là mã hoá đối xứng và mã hoá bất đối xứng:
• Mã hoá đối xứng (mã hoá bí mật): Chỉ dùng một chìa khoá (key) cho quá trình mã hoá và giải mã
• Mã hoá bất đối xứng (khoá công khai và khoá riêng): sử dụng hai khoá khác nhau cho quá trình mã hoá (khoá công khai) và giải mã (khoá riêng)
2.2 Tổng quan về hệ thống mật mã RSA
Thuật toán được Ron Rivest, Adi Shamir và Len Adleman mô tả lần đầu tiên vào năm 1977 Học viện Công nghệ Massachusetts (MIT) Tên của thuật toán lấy từ 3 chữ tại
Trang 16Trước đó, vào năm 1973, Clifford Cocks, một nhà toán học người Anh đã mô tả một thuật toán tương tự Với khả năng tính toán tại thời điểm đó thì thuật toán này không khả thi và chưa bao giờ được thực nghiệm Tuy nhiên, phát minh này chỉ được công bố vào năm 1997 vì được xếp vào loại tuyệt mật
Hệ thống mật mã RSA thuộc loại mã hoá bất đối xứng, sử dụng một khoá công khai để mã hoá thông điệp và một khoá bí mật dùng để giải mã
2.3 Cách thức hoạt động của hệ thống mật mã RSA
2.3.1.Sinh khoá
Cụ thể, khóa của RSA được sinh như sau:
• Chọn 2 số nguyên tố p và q
• Tính 𝑛 = 𝑝 × 𝑞 Sau này, n sẽ được dùng làm modulus trong cả public key và private key
• Tính một số giả nguyên tố bằng phi hàm Euler:
𝜑(𝑛) = (𝑝 − 1)(𝑞 − 1) Giá trị này sẽ được giữ bí mật
• Chọn m t s t nhiên e trong kho ng ộ ố ự ả (1, 𝜑(𝑛)) sao cho 𝐺𝐶𝐷 (𝑒, 𝜑(𝑛)) =
1, tức là e và 𝜑(𝑛) nguyên tố cùng nhau
• Tính toán s d sao cho ố 𝑑 ≡ 1/𝑒 (𝑚𝑜𝑑 𝜑(𝑛)) hay vi t d hiế ễ ểu hơn thì 𝑒𝑑 ≡ 1 (𝑚𝑜𝑑 𝜑(𝑛)) S d ố được g i là s nghọ ố ịch đảo modulo của e (theo modulo 𝑚𝑜𝑑 𝜑(𝑛)) Ta có thể ứng dụng thuật toán Euclid m ở rộng ở Chương 1 để tìm nghịch đảo modulo của e mod 𝜑(𝑛)
Public key sẽ là bộ số (n, e), và private key sẽ là bộ số (n, d) Chúng ta cần giữ private key thật cẩn thận cũng như các số nguyên tố p và q vì từ đó có thể tính toán các khóa rất dễ dàng
Trang 172.3.2.Mã hoá từ và giải mã bằng khoá đã tạo
Từ bản rõ A, ta cần ấy m l ã ascii và chuyển nó thành một số tự nhiên a trong khoảng (0, n) sao cho , n nguyên tố cùng nhau (GCD (a a, n) = 1) Tiếp đó, ta sẽ tiến hành
mã hoá a thành c theo công thức:
𝑐 ≡ 𝑎𝑒 𝑚𝑜𝑑 𝑛
Phía người nhận nhận được thông điệp c có thể bắt đầu giải mã như sau:
𝑐𝑑≡ 𝑎𝑑𝑒 ≡ 𝑎 𝑚𝑜𝑑 𝑛
2.4 Hiện thực code
2.4.1 Source code: RSA.py
2.4.2.Kết quả chạy thử
Chạy thử với mẫu thử 100 từ:
Mẫu: “The world is changing rapidly, and it can be difficult to keep up with all the latest developments With new technologies, scientific breakthroughs, and cultural shifts happening all around us, it's important to stay informed and adaptable But in the midst of all this change, it's also crucial to hold onto the things that matter most - our relationships, our values, and our sense of purpose
By staying grounded in what truly matters, we can navigate the challenges of a rapidly evolving world with confidence and resilience.”
Trang 18Ch y vạ ới mẫu thử 300 t ừ:
M u: The concept of time is a fascinating one It is something that we all ẫ “ experience, yet it remains one of the great mysteries of the universe We measure time
in seconds, minutes, and hours, but it is also something that we feel - the passage of time can be experienced as a sense of urgency or as a slow, steady march
Our understanding of time has evolved over the centuries, from the sundials and hourglasses of ancient times to the atomic clocks and GPS systems of today But even
as our methods of measuring time become more precise, the nature of time itself remains elusive
As we go through life, we are constantly aware of time - we age, we grow, we change And yet, in some ways, time seems to stand still Moments of joy or sorrow can feel like they last forever, while hours or days can pass in a blur
The world is changing rapidly, and it can be difficult to keep up with all the latest developments With new technologies, scientific breakthroughs, and cultural shifts happening all around us, it's important to stay informed and adaptable But in the midst
of all this change, it's also crucial to hold onto the things that matter most - our relationships, our values, and our sense of purpose By staying grounded in what truly matters, we can navigate the challenges of a rapidly evolving world with confidence and resilience
Trang 19Ultimately, time is a reminder of the fleeting nature of life We must cherish the moments we have, and make the most of the time we are given Whether we use it to learn, to love, or to simply be, time is a precious gift that should be treasured As we move forward into the future, let us remember the lessons of the past, embrace the opportunities of the present, and look forward with hope and optimism to what lies ahead”
Hình 8: Kết quả chạy thử với mẫu 300 từ
Trang 20TÀI LIỆU THAM KHẢO
Tiếng Việt
1 Dương Anh Đức, Trần Minh Triết (2003), Mã hóa và ứng dụng
2 Phạm Thanh Science&Tech (2021), “Thuật toán RSA T– ính đúng đắn, Tính an toàn và Ví dụ tính toán cụ thể”
Tiếng Anh
3 Keijo Ruohonen (Translation by Jussi Kangas and Paul Coughlan) (2010),
“Mathematical Cryptology”
4 Simon Singh (2014), “The code book”