Hệ mật mã được xây dựng dựa trên tính khó giải của bài toán phân tích một số thành thừa số nguyên tổ hay còn gọi là bài toán RSA.. 2.1 Cơ sở toán học Thuật toán lũy thừa: » Là thuật toá
Trang 1TONG LIEN DOAN LAO DONG VIET NAM
TRUONG DAI HOC TON DUC THANG
KHOA CONG NGHE THONG TIN
BÀI TẬP LỚN CUOI ki MON CAU TRUC ROT RAC
RSA CRYPTOSYSTEM USING
Trang 2TONG LIEN DOAN LAO DONG VIET NAM
TRUONG DAI HOC TON DUC THANG
KHOA CONG NGHE THONG TIN
r—/ LỄ
BÀI TẬP LỚN CUOI ki MON CAU TRUC ROT RAC
RSA CRYPTOSYSTEM USING
MODULAR ARITHMETIC
Người hướng dân: GV TRẤN LƯƠNG QUOC ĐẠI
Người thực hiện: NGUYÊN TRIỆU VI-— 52100143
Lớp : 21050201
Khoá : K25
THÀNH PHÓ HÒ CHÍ MINH, NĂM 2023
Trang 3LOI CAM ON Trong học kì nay, Khoa đã giúp cho em tiếp cận với môn Cấu trúc rời rạc ứng
dụng cho CNTT, em cảm thấy môn này khá hay và hữu ích cho sinh viên CNTT
Em xin chân thành cảm ơn thầy Đại đã giảng dạy và hướng dẫn nhiệt tình để em
có đủ kiến thức đề có thê hoàn thành chuyên đề báo cáo cho môn “Cầu trúc rời rac tng
dung cho CNTT”
Với kiến thức còn hạn chế của mình cũng như thời gian trải nghiệ cọn hạn chế
nên bài không tránh khỏi thiếu sót Em rất mong nhận được sự chỉ bảo và đóng góp của thầy cô
Một lần nữa em xin chân thành cảm ơn và 101 tri 4n sâu sắc nhat
Trang 4il
ĐỎ Á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 / chúng tôi và được sự hướng dẫn của TS Trần Lương Quốc Đại: Các nội dung nghiên cứu, kết quả trong đề tai nay 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à ghỉ rõ họ tên)
Vi Nguyễn Triệu Vi
Trang 51H
PHẢ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 6TOM TAT
Trình bày tóm tắt vẫn đề nghiên cứu, các hướng tiếp cận, cách giải quyết vẫn dé
và một số kết quả đạt được, những phát hiện cơ bản trong vòng | -2 trang
Trang 7MUC LUC
1.1 Lý thuyết về nghịch đảo modulo 5 - cề SE HE xrrygrrưe 2 1.1.1 Phép chia - L2 112211112111 2121 1E 1115115011101 11 11111111 k khen ớt 2 1.1.2 Đồng dư Modulo + s22 121221211 1221211 121 EgEtrerreo 3
1.1.3 Giải thuật Euclid mở rộng c2 1211222112 21tr re 5 1.2 Tính nghịch đảo Modulo tìm UCILUN - 2 22 2222212212211 Heo 6
CHƯƠNG 2 - HỆ THÔNG MẬT MÃ RSA ó5: 522cc EEtrrtrrrrrrrrrirrrirre 12
2.1 Cơ sở toán học - LH HS ST g1 1k ng nu 12
2.2 Bài toán RŠA ác LH HH1 1101 11 HT HH TH HH Hà HH khu 16 2.2.1 Thuật toán sinh khóa cho mã khóa công khai RŠA 16 2.2.2 Thuat toan m& hoa RSA cceceeeeceeeeeneeeeeeseeesenenetieteeeees 19
2.3 Hiệu quả và tính bảo mật RŠA - L2 2n HH HH HH Ho 24
2.5 Khuyến nghị dành cho hệ thống RSA 2 S5 E1 xEEEEgxrgrrrưyn 25
Trang 8CHƯƠNG 1 - TÌM NGHỊCH DAO MODULO
1.1 Lý thuyết về nghịch đảo modulo
11,1 Phép chia
1.1.1.1 Phép chia số nguyên
Cho a là số nguyên và k là số nguyên dương Khi đó tồn tại số nguyên duy nhất
q và r, với 0<r<k, sao cho a=kq+r
1.1.1.2 Phép toán MOD, DIV
Trong phép chia số nguyên, gọi: n là số chia, a là số bị chia, q là thương số và r
là số dư Mod và Div lần lượt là các ký hiệu phép toán được sử dụng biểu diễn thương
sô và phần dư: đ+n=q,amodn=r,
Nếu số nguyên a chia hết cho sô nguyên n thì amod n=0
Vi du: 15mod4=3,15+4=3
115mod7=3,115+7=6
Trong lập trình, ta có kí hiệu như sau:
- amodn duoc viét la a%n
- adivn duge viét la a/n
Trang 9_ phepToanModvaDiv
tee print(a,
Không hia cho số Ø
Hãy thay đối giả trị
Không thể chia cho số 9
Hãy thay đối giá trị của b
Trang 10Không thể chia cho số 9
Hãy thay đổi giá trị của b
Định lý 1: Cho a và b là các số nguyên, và m là một số nguyên dương Khi đó
a=b|modm| khi va chi khi mV(a—b), (hay gọi là m là ước của a—b)
Trang 11Dinh lý 2: Cho a và b là các số nguyên, và m là một số nguyên dương Khi đó a=b|modm] khi và chỉ khi tồn tại một số nguyên k sao cho a=b+km
Định lý 3: Cho m là số nguyên dương Nếu a =b|modm) vàc = dmod m] thì a+c=b+d(mod m) va ac =bd|mod m),
1.1.3 Giải thuật Fuclid rở rộng
Phuong trinh diophantine: ax +by =c (1)
Theo dinh li Bézout (Bézout’s indentify): Cho hai số nguyên a, b khi đó luôn tồn tại hai số x, y sao cho: ax+by =GCD(a,b)
Nếu d=GCD(a,b) thi tồn tại các số nguyên x„y sao cho ax +by =d
Thuật toán Euclide mở rộng: a, b không đồng thời bằng 0
Trang 12Không thế chia cho số 9
Hãy thay đổi giá trị của b
gcd( 258 , 147 ) = 3
4
x=
1.2 Tinh nghich dao Modulo tim UCLN
Định nghĩa: Cho b là số nguyên và x, m là các số nguyên dương (x<m), nếu x*b mod
m đồng dư 1 thì x là nghịch đáo của b mod m, kí hiệu là b mod m
Trang 13Lưu ý: đề tồn tai s6 nghich dao cua b (mod m) là b và m là hai số nguyên tô cùng
Vi du minh hea: Tim cac gia tri cia 3207' mod 1253
Thuật todn Euclidean tim Mo rong dé tim x
Trang 16Hình 1.1.4.2 Minh hoa nghich dao modulo ding thuét todn Euclidean
trường hợp không tìm ra giá trị
Trang 1812
CHUONG 2 -— HE THONG MAT MA RSA
Thuật toán RSA (Rivest- Shamir- Adleman) được phát triển năm 1977 và công bố vào
1978 RSA là một hệ mật mã khối, trong đó bản gốc và bản mã là số nguyên thuộc
đoạn (0, n-1) với n < 2!
RSA là một hệ mã hóa bất đối xứng và đucợ sử dụng rộng rãi trong công tác mã hóa va công nghệ chữ kí điện tử Trong hệ mã hóa này, public key có thê chia sẻ công khai
cho tất cả mọi nguoi
Hoạt động của RŠA dựa trên 4 bước chính: sinh khóa, chia sẻ key, mã hóa và giải mã
Hệ mật mã được xây dựng dựa trên tính khó giải của bài toán phân tích một số thành thừa số nguyên tổ hay còn gọi là bài toán RSA
Ưu điểm:
- Mã hóa hay thiết lập chữ kí điện tử với vai trò mã hóa công khai
- _ Mã hóa dữ liệu muốn gửi đi nhưng giải mã cần có sự hỗ trợ của khóa bí mật
- _ RSA chứa hai khóa: công khai và bí mật đảm nhận nhiệm vụ bất đối xứng là mã
hóa và giải mã
- _ Khóa bí mật của RSA không truyền được tin ra bên ngoài kê cả bị tấn công
Nhược điểm: Gây bất lợi cho người nhận thông khi không biết cách giải mã để xem
được thông tin bên trong
2.1 Cơ sở toán học
Thuật toán lũy thừa:
» Là thuật toán tính nhanh lũy thừa tự nhiên của một số thực hoặc một số
nguyên trong trường hợp số nguyên có thê rút gọn theo một modun nào
Trang 1913
Vi du minh hga: tinh 42* mod 167
Ta có: x=42, n=25, m=167 Đôi n ra số nhị phân ta được: 25ao;=11001,¿;
Mang b[1, k]=b[1, 1, 0, 0, 1]; p=l
Trang 20
PROBLEMS OUTPUT TERMINAL DEBUG CONSOLE
PS D:\KTPM\CTRR\baocao> &
eet
Ata
Hinh 2.1.2 Minh hoa kiém tra s6 nguyén to
Thuật toán modular: là phép tính toán thực hiện trên một tập hợp các số nguyên gọi là mô đun Phép tính modular của một số nguyên a với một số nguyên dương n được định nghĩa là phần dư của a chia hết cho n
Vị dụ: 17 mod 2 =1, vi 17 chia cho 2 dư l1
Thuật toán Euclid mở rộng (Extended Euclidean Algorithm): là một thuật toán trong đại số tuyên tính để tìm ra giá trị của hai số nguyên a, b sao cho tồn tại các
sô nguyên không âm x, y sao cho hàm tuyến tính ax + by = gcd(a, b) được thỏa mãn GCD là tên viết tắt của Greatest Common Divisor (Ước chung lớn nhất) của hai số nguyên a, b
Vi du: ged(15,20) = 5 va ton tai x=-1 va y=1
sao cho 15x+20y=ged(15,20)
Trang 21TERMINAL DEBUG CONSOLE
Hinh 2.1.3 Minh họa thuật toán Euclid mở rộng
Phân tích thừa số nguyên tổ (Prime Factorization hay Factorization): là quá trình tìm tất cả các thừa số nguyên tố của một số nguyên dương Quá trình này có thể được thực hiện bằng nhiều phương pháp khác nhau như kiểm tra từng số nguyên dương
liên tiếp đề xác định các thừa số hoặc sử dụng algortihm Pollard-Rho
Ví dụ: phân tích thừa số nguyên của 100, ta được kết quả là
100=2*2*5*5 Vậy thừa số nguyên tố của 100 là 2, 2, 5, 5.
Trang 2216
thuaSoNguyenTo(n):
Hình 2.1.4 Minh họa phân tích thừa số nguyên tố
2.2 Bài toán RSA
Khái niệm:
© Giả sử p, q là các số nguyên tô lớn, p#q,n=p+*q
® - Hệ mật mã RSA là hệ mật trong đó M=C=Z„ và tập các khóa K={k=(n, p, q, d,
e): exd=1(modg(n))}
¢ V6i mdi k=(n, p, q, d, e) ta xác định:
+ Ham mii hoa: e, |x) =x°modn
+ Ham giai ma: d,lyl=y" modn
Voi moi x,y EZ,
Cac giá trị n, e được công khai, các giá trị p, q, d duoc giữ kín
2.2.1 Thuật toán sinh khóa cho mã khóa công khai RSA
Các bước thực hiện sinh khóa:
1 Sinh hai số nguyên tô lớn p và q có giá trị xấp xỉ nhau
Trang 2317
Can chon p va q sao cho y <2*!<n<2'!, với i=1024 thì n là một số nguyên
dai khoang 309 chit sé
2 Tinh n=p*q, va g(n|=|p—1)*| q—-1)
3 Cho một số ngẫu nhiên e, 1<e<0(n), sao cho øcd |e,ø|n0]|=1
4 Sử dụng thuật toán Euclide dé tinh s6 d, 1<d<@(n) sao cho
Chon e = 17, vi 17 là số nguyên tố và không có ước chung nào với
d* e=1 (mod (p-1)*(q-1)), tue la d la nghich dao modular cua e theo
(p-1)*(q-1)
Giải phuong trinh d * 17 = 1 (mod 616)
Ta dùng thuật toán Euclid mở rộng để tìm nghịch đảo modular của L7 theo 616:
Trang 2418
pr1ime (pr
prime1
2 == primel -randint(1 Prime(pr1m
1
Trang 2519
rsa_gener prime1 =
pr1me1 prime2 = find_prime(primel prime1 * prime2
1 - 1) * K\prime2 - 1 rime(phi_n od_inverse(e, phi_n
910814
Hình 2.2.1.1 Minh họa thuật toán sinh khỏa ngdu nhién
2.2.2 Thuat toan ma hoa RSA
“+ Lap ma:
+ Ma hoa bao mat:
a Lấy khóa công khai PU=ƒn, e} theo thuật toán trên
b Chọn một bản rõ x, trong khoảng [1, n-1]
Tinh: y=x° mod n
d Nhận được bản mã y
Trang 27private key = private key.private bytes (
format=serialization PrivateFormat.PKCS8,
encryption algorithm=serialization.NoEncryption ()
private key, public key
Ht MA hoa tin nhan
def encrypt (msg, public key):
public _k c<ey = serialization.load_pem public key(public_key)
msg.encode(),
padding OAEP (
mgf=padding.MGF1 (algorithm=hashe algorithm=hashes.SHA256(), label=None
binascii.hexlify (ciphertext) decode ("ascii")
l' Giải mã tin nhắn
def decrypt (ciphertext, private key):
Trang 28forint ("Khoa bi mat: ", private key.decode())
msg = "hello world”
encrypted msg = encrypt(msg, public key)
brint("Tin nhắn được mã hóa: ", encrypted msg)
decrypted msg = decrypt (encrypted msg, private key)
brint("Tin nhắn duge giai ma: ", decrypted_msg)
Ket qua về đoạn mã trên:
nD7+WbqFDN xRMZgq†ncWATTc92f£O1rWsLuTTSD
END PUBLIC
'9w0BAOBFARS An AgEAAoIB
Trang 29Vinh eRmHWMSC nước J UEC sBhc6M/
PULmy424gMTTUeQMONzg1 Z1WUyb1 pqrBVJ033i BE:
Trang 3024
2.3 Hiéu qua va tinh bao mat RSA
RSA là một trong những thuật toán mã hóa khóa công khai được sử dụng phố biến nhất hiện nay Thuật toán RSA có hiệu quả khi áp dụng với các số nguyên p và q có độ dai
bằng nhau và khoảng 2048 bit, khi đó việc mã hóa và giải mã có thê được thực hiện
một cách nhanh chong va dang tin cay
Tuy nhiên, RSA có một vài vẫn đề liên quan đến tính bảo mật Đầu tiên, việc chọn p và
q cần được thực hiện cần thận và ngẫu nhiên, vì nếu một trong hai giá trị này được dự
đoán hoặc tính toán được, thì sẽ dễ dàng phá được thuật toán Ngoài ra, nêu không
được lưu trữ và sử dụng đúng cách, khóa bí mật có thể bị lộ ra ngoài và dẫn đến việc
mã hóa bị phá Các tắn công khác bao gồm các tần công brute-force hoặc tấn công dựa trên các khả năng số học đề phân tích các thừa số của n
2.4 Mối đe dọa
Một trong những mỗi đe dọa lớn nhất là tắn công tìm ân bằng cách phân tích tổng quát trên phương trình: c = m* mod n
Trong do:
® m là thông điệp cần mã hóa
® c vàn là khóa công khai của hệ thống ma hoa RSA
® c là thông điệp đã được mã hóa
Mục đích của tấn công này là tìm ra bộ ba (n, e, d), trong đó d là khóa bí mật được tinh dựa trên p và q - hai thừa số nguyên tổ của n
Tuy nhiên, để tìm ra giá trị d đòi hỏi một lượng tính toán và tài nguyên lớn, do đó tấn
công tìm ấn là khá khó khăn và không thực tế, đặc biệt khi giá trị của p và q rất lớn và
được chọn ngẫu nhiên
Một hạn chế của hệ thống mật mã RSA đó là kích thước của khóa phải đủ lớn để đảm
bảo tính bảo mật của mã hóa Vì nếu kích thước của khóa quá nhỏ, tấn công brute-force
sẽ trở nên dễ dàng Tuy nhiên, kích thước khóa lại đòi hỏi tài nguyên to lớn đề tính toán và lưu trữ, do đó cần cân nhắc tìm một sự cân bằng hợp lý giữa cả tính bảo mật và hiệu quả của hệ thông mã hóa RSA
Ngoài ra, RSA cũng không thê bảo vệ được các vấn đề liên quan đến việc lưu trữ và
quản lý khóa, đặc biệt là khi khóa bị đánh cắp hoặc mất mát.
Trang 3125
2.5 Khuyến nghị dành cho hệ thong RSA
Sử dụng khóa đủ lớn: Việc sử dụng khóa đủ lớn có độ dài trung bình khoảng
2048 bịt sẽ đảm bảo tính bảo mật của hệ thống ma hoa RSA
Dam bao bao mat của khóa bí mật: Việc lưu trữ và quản lý khóa bí mật là rất quan trọng Do đó, cần dam bao tinh bảo mật của khóa bí mật bằng cách lưu trữ
và quản lý khóa một cách an toàn và đáng tin cậy
Sử dụng câu trúc khóa mới: Việc sử dụng các câu trúc khóa mới hoặc các thuật
toán mã hóa khác sẽ giúp tăng tính bảo mật và tránh các vẫn đề liên quan đến RSA
Sử dụng mật mã RSA kết hợp với các phương thức mã hóa và bảo mật khác Kiểm tra bảo mật thường xuyên: Các tổ chức, doanh nghiệp và cá nhân nên
thường xuyên kiểm tra bảo mật cho hệ thống mã hóa RSA cua minh