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 (1.89 MB, 32 trang )
<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">
<i><b>Người hướng dẫn: GV TRẦN LƯƠNG QUỐC ĐẠINgười thực hiện: NGUYỄN TRIỆU VI – 52100143</b></i>
<b>Lớp : 21050201Khoá : K25</b>
<b>THÀNH PHỐ HỒ CHÍ MINH, NĂM 2023</b>
</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2"><i><b>Người hướng dẫn: GV TRẦN LƯƠNG QUỐC ĐẠINgười thực hiện: NGUYỄN TRIỆU VI – 52100143</b></i>
<b>Lớp : 21050201Khoá : K25</b>
<b>THÀNH PHỐ HỒ CHÍ MINH, NĂM 2023</b>
</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">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ể hồn thành chun đề báo cáo cho mơn “Cấu trúc rời rạc ứng dụng 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à lời tri ân sâu sắc nhất.
</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">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 đề 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.
Ngồ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.
<b>Nếu phát hiện có bất kỳ sự gian lận nào tơi xin hồn tồn chịu trách nhiệmvề nội dung đồ án của mình. Trường đại học Tôn Đức Thắng không liên quan đến</b>
những vi phạm tác quyền, bản quyền do tôi gây ra trong q trình thực hiện (nếu có).
<i>TP. Hồ Chí Minh, ngày tháng năm Tác giả</i>
<i>(ký tên và ghi rõ họ tên)Vi</i>
<i>Nguyễn Triệu Vi</i>
</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">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 đề và một số kết quả đạt được, những phát hiện cơ bản trong vòng 1 -2 trang.
</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">CHƯƠNG 1 – TÌM NGHỊCH ĐẢO MODULO...2
1.1 Lý thuyết về nghịch đảo modulo...2
1.1.1 Phép chia...2
1.1.2 Đồng dư Modulo...3
1.1.3 Giải thuật Euclid mở rộng...5
1.2 Tính nghịch đảo Modulo tìm UCLN...6
CHƯƠNG 2 – HỆ THỐNG MẬT MÃ RSA...12
2.1 Cơ sở toán học...12
2.2 Bài toán RSA...16
2.2.1 Thuật tốn sinh khóa cho mã khóa cơng khai RSA...16
2.2.2 Thuật tốn mã hóa RSA...19
2.2.2 Code về thuật tốn mã hóa RSA...21
2.3 Hiệu quả và tính bảo mật RSA...24
2.4 Mối đe dọa...24
2.5 Khuyến nghị dành cho hệ thống RSA...25
</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">1.1.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ư: a÷n=q,amod n r= .
Nếu số nguyên a chia hết cho số ngun n thì amod n=0. Ví dụ: 15mod4=3 , 15÷4=3
115mod7=3 ,115÷7=6
Trong lập trình, ta có kí hiệu như sau: ‐ a mod n được viết là a%n ‐ a div n được viết là a/n
<i>Hình 1.1.1.2.1 Minh họa phép tốn mod và div trong lập trình</i>
</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9"><i>Hình 1.1.1.2.2 Minh họa phép tốn mod và div ngoại lệ</i>
</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10"><b>Định nghĩa: Nếu a và b là số nguyên và m là số nguyên dương thì a dồng dư </b>
với b theo modulo m nếu amod m=bmod m. Ký hiệu a≡b(modm) để chỉ ra rằng a là đồng dư với b theo modulo m.
<i>Định lý 1: Cho a và b là các số nguyên, và m là một số nguyên dương. Khi đó</i>
a≡b (modm ) khi và chỉ khi m∨(a−b), (hay gọi là m là ước của a−b).
</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11"><i>Định lý 2: Cho a và b là các số nguyên, và m là một số nguyên dương. Khi đó</i>
a≡b (modm ) khi và chỉ khi tồn tại một số nguyên k sao cho a=b+km.
<i>Định lý 3: Cho m là số nguyên dương. Nếu </i>a≡b (modm ) vàc≡ d (modm ) thì
a+c≡ b+d (modm) và ac≡bd (modm ).
1.1.3 Giải thuật Euclid mở rộng
Phương trình diophantine: ax+by c= (1)
Theo định lí Bézout (Bézout’s indentify): Cho hai số ngun a, b khi đó ln tồn tại hai số x, y sao cho: ax+by=GCD(a,b).
Nếu d=GCD(a,b) thì tồn tại các số nguyên x,y sao cho ax+by d=
Thuật tốn Euclide mở rộng: a, b khơng đồng thời bằng 0.
</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12"><i>Hình 1.1.3.1 Minh họa thuật tốn Euclid mở rộng</i>
1.2 Tính nghịch đảo Modulo tìm UCLN
<b>Đị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 </b>
m đồng dư 1 thì x là nghịch đảo của b mod m, kí hiệu là b<small>−1</small>modm.
</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">Vậy khơng có giá trị của 6<sup>−1</sup>mod10
<b>Lưu ý: để tồn tại số nghich đảo của b (mod m) là b và m là hai số nguyên tố cùng </b>
nhau.
<b>Ví dụ minh họa: Tìm các giá trị của </b>320<sup>−1</sup>mod1253
<i>Thuật tốn Euclidean tìm</i>
</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">Các bước của thuật tốn Euclidean mở rộng ln có dạng r<sub>i</sub>=1253 y<small>i</small>+230 x<small>i</small>
Ta có: r<small>i</small>=r<small>i−2</small>modr<small>i −1</small>; q<small>i</small>=
<i>Hình 1.1.4.2 Minh họa nghịch đảo modulo dùng thuật tốn Euclideantrường hợp khơng tìm ra giá trị.</i>
</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17"><i>Hình 1.1.4.3 Minh họa nghịch đảo modulo dùng thuật toán Euclidean</i>
</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">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<small>1024</small>.
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 và 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 người.
Hoạt động của RSA 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 tốn phân tích một số thành thừa số ngun tố hay cịn gọi là bài tố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 ngồ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.
<b>2.1 Cơ sở tốn họcThuật tốn lũy thừa: </b>
Là thuật tố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
</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20"><b>Số nguyên tố: là một số nguyên dương lớn hơn 1 và chỉ có 2 ước số dương là 1</b>
và chính nó. Các số khác gọi là số hợp số.
Ví dụ, các số nguyên tố đầu tiên là: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31,...
<i>Hình 2.1.2 Minh họa kiểm tra số nguyên tố</i>
<b>Thuật toán modular: là phép tính tốn thực hiện trên một tập hợp các số</b>
ngun 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, vì 17 chia cho 2 dư 1.
<b>Thuật toán Euclid mở rộng (Extended Euclidean Algorithm): là một thuật</b>
tố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.
Ví dụ: gcd(15,20) = 5 và tồn tại x=-1 và y=1 sao cho 15x+20y=gcd(15,20).
</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">Sử dụng thuật tốn Euclid mở rộng, có thể tìm ra các giá trị để thõa phương trình tuyến tính.
<i>Hình 2.1.3 Minh họa thuật tốn Euclid mở rộng</i>
<b>Phân tích thừa số nguyên tố (Prime Factorization hay Factorization): là quá</b>
trình tìm tất cả các thừa số nguyên tố của một số ngun dương. Q 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.
</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22"><i>Hình 2.1.4 Minh họa phân tích thừa số ngun tố</i>
<b>2.2 Bài tốn RSA</b>
Với mọi x,y∈ Z<small>n</small>
Các giá trị n, e được công khai, các giá trị p, q, d được giữ kín.
2.2.1 Thuật tố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.
</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">Cần chọn p và q sao cho y <2<small>i-1</small><n<2<small>i</small>, với i=1024 thì n là một số nguyên dài khoảng 309 chữ số.
2. Tính n=p*q, và φ(n )=( p−1)∗( q−1) .
3. Cho một số ngẫu nhiên e, 1<e <φ(n), sao cho gcd(e,φ (n 0))=1. 4. Sử dụng thuật toán Euclide để tính số d, 1<d <φ (n) sao cho
Giải phương trình d * 17 ≡ 1 (mod 616).
Ta dùng thuật tốn Euclid mở rộng để tìm nghịch đảo modular của 17
</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">2.2.2 Thuật tốn mã hóa RSA
</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">Sử dụng khóa bí mật d để giải mã: x=y mod n<small>e </small>
<i>Hình 2.2.2.1. Minh họa thuật tốn mã hóa RSA</i>
</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">2.2.2 Code về thuật tốn mã hóa RSA
<small>fromcryptography.hazmat.primitives.asymmetricimportrsa padding,fromcryptography.hazmat.primitivesimportserialization hashes,</small>
<small># Trích xuất khóa công khai</small>
<small>public_key = private_key.public_key .public_bytes()(</small>
<small>defencrypt(msg public_key,):</small>
<small>public_key = serialization.load_pem_public_key public_key()</small>
</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28"><small>private_key = serialization.load_pem_private_key private_key passwo(,</small>
<small>private_key public_key = generate_key,()print("Khóa cơng khai: ",public_key.decode())print("Khóa bí mật: ",private_key.decode())</small>
<small>msg ="hello world"</small>
<small>encrypted_msg = encrypt msg public_key(,)print("Tin nhắn được mã hóa: ",encrypted_msg)</small>
<small>decrypted_msg = decrypt encrypted_msg private_key(,)print("Tin nhắn được giải mã: ",decrypted_msg)</small>
Kết quả về đoạn mã trên:
<small>Khóa cơng khai:---BEGIN PUBLIC </small>
<small>---END PUBLIC </small>
<small>KEY---Khóa bí mật:---BEGIN PRIVATE </small>
</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29"><small>---END PRIVATE KEY---Tin nhắn được mã hóa:</small>
</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30"><b>2.3 Hiệu quả và tính bảo mật RSA</b>
RSA là một trong những thuật tốn mã hóa khóa cơng khai được sử dụng phổ biến nhất hiện nay. Thuật tốn RSA có hiệu quả khi áp dụng với các số nguyên p và q có độ dài 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 chóng và đáng tin cậy.
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 tốn được, thì sẽ dễ dàng phá được thuật tốn. Ngồ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.
<b>2.4 Mối đe dọa</b>
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 qt trên phương trình: c = m mod n<small>e</small>
Trong đó:
m là thơng điệp cần mã hóa
e và n là khóa cơng khai của hệ thống mã hóa 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 tính 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 tốn và tài ngun 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 q 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 ngun to lớn để tính tố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.
Ngồ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à
<b>quản lý khóa, đặc biệt là khi khóa bị đánh cắp hoặc mất mát. </b>
</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31"><b>2.5 Khuyến nghị dành cho hệ thống RSA</b>
‐ 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 bit sẽ đảm bảo tính bảo mật của hệ thống mã hóa RSA.
‐ Đảm bảo bảo mật 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 đảm bảo tính 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 tồ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 tố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.
thường xuyên kiểm tra bảo mật cho hệ thống mã hóa RSA của mình.
</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">‐ Thuật toán Euclid mở rộng – Extended euclid algorithm – Lập trình thi đấu (wordpress.com)
‐ Số học đồng dư (Phần 1): Đồng dư thức và Nghịch đảo modulo (viblo.asia)
‐ Giải mã thuật toán RSA (ichi.pro)
</div>