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

bài báo cáo môn cấu trúc rời rạc

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 (744.03 KB, 14 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG </b>

<b>KHOA CÔNG NGHỆ THÔNG TIN </b>

<b>BÀI BÁO CÁO MÔN CẤU TRÚC RỜI RẠC</b>

<i><b>Người hướng dẫn: Thầy TRẦN LƯƠNG QUỐC ĐẠINgười thực hiện: ĐỖ ANH KHOA – 52100968</b></i>

<b>Lớp: 21050401Khố: 25THÀ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">

<b>LỜI CẢM ƠN</b>

Em xin cảm ơn thầy Đại rất nhiều vì đã cống hiến hết sức mình cho cơng cuộc dạy học ở trường đại học Tơn Đức Thắng. Nhờ có sự hướng dẫn chi tiết và tận tình của thầy mà em có thể hồn thành được bài báo cáo giữa kì, em chân thànhcảm ơn thầy rất nhiều.

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>ĐỒ ÁN ĐƯỢC HỒN THÀNHTẠI TRƯỜNG ĐẠI HỌC TƠN ĐỨC THẮNG</b>

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 Nguyễn Văn A;. 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õ trongphầ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íchnguồ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áchnhiệm về nội dung đồ án của mình. Trường đại học Tôn Đức Thắng không</b>

liên quan đến những vi phạm tác quyền, bản quyền do tôi gây ra trong q trìnhthực hiện (nếu có).

<i>TP. Hồ Chí Minh, ngày 02 tháng 04 năm 2023 Tác giả</i>

<i>(ký tên và ghi rõ họ tên)</i>

<i>Đỗ Anh Khoa</i>

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<b>PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN</b>

<b>Phần xác nhận của GV hướng dẫn</b>

Tp. Hồ Chí Minh, ngày tháng năm (kí và ghi họ tên)

<b>Phần đánh giá của GV chấm bài</b>

Tp. Hồ Chí Minh, ngày tháng năm (kí và ghi họ tên)

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<b>TÓM TẮT</b>

Bài báo cáo này đầu tiên khái quát các khái niệm về nghịch đảo modulo, thuậttoán Euclid mở rộng và hệ thống RSA cryptosystem. Sau đó có code minh họabằng python cho từng thuật toán

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

<b>CHƯƠNG 1 - FINDING AN INVERSE MODULO...8</b>

<b>TÀI LIỆU THAM KHẢO...14</b>

<b>CHƯƠNG 1 - FINDING AN INVERSE MODULO</b>

<b>1.1 Khái niệm:</b>

<b>- Nghịch đảo modulo cho số b là số nguyên, x , m là các số nguyên dương(x < </b>

m), nếu x*b mod m = 1 thì x là nghịch đảo b mod n, ký hiệu là b^-1 mod m

<b>- Giải thuật Euclid: Trong toán học, giải thuật Euclid</b> (hay <b>thuật toán Euclid) là một giải thuật để tính ước chung lớn nhất (ƯCLN) của hai số </b>

nguyên, là số lớn nhất có thể chia được bởi hai số nguyên đó với số dư bằng không. Giải thuật này được đặt tên theo nhà toán học người Hy Lạp cổ

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

đại Euclid, người đã viết nó trong bộ <i>Cơ sở</i> của ông (khoảng năm 300 TCN).

định và là một trong số những thuật toán lâu đời nhất được sử dụng rộng rãi.- <b>Giải thuật Euclid mở rộng</b> được sử dụng để giải một phương trình vơ định

đó a,b,c là các hệ số nguyên, x, y là các ẩn nhận giá trị nguyên. Điều kiện cần và đủ để phương trình này có nghiệm (ngun) là UCLN(a,b) là ước của c. Khẳng định này dựa trên một mệnh đề sau:

<i>Nếu d = UCLN(a,b) thì tồn tại các số nguyên x, y sao cho ax + by = d</i>

<b>1.2 Cơ sở lý thuyết giải thuật:</b>

Euclid với việc tìm một cặp số x, y thoả mãn phương trình Đi-ơ-phăng. Giả sử

Bảng thuật tốn Euclid cơng thức mở rộng

<b>1.3 Ví dụ:</b>

Modulo nghịch đảo 1759 của 550:

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

Dựa vào bảng công thức ở trên đã cung cấp, ta có:

= 439

Vậy đáp án cuối cùng của bài tốn là 439.

<b>1.4 Code và kết quả:</b>

Code:

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

Kết quả:

Như vậy ta thấy kết quả chạy đúng theo đáp án ở ví dụ đã nêu trên

<b>CHƯƠNG 2 - RSA CRYPTOSYSTEM</b>

<b>2.1 Khái niệm:</b>

thuật toán đầu tiên phù hợp với việc tạo ra chữ ký điện tử đồng thời với việc mã hóa. Nó đánh dấu một sự tiến bộ vượt bậc của lĩnh vực mật mã học trong

mại điện tử và được cho là đảm bảo an toàn với điều kiện độ dài khóa đủ lớn.- S<b>ố học mơ đun</b> là một hệ thống số học dành cho số nguyên. Trong số học môđun, các con số được viết bao quanh lấy nhau thành nhiều vòng tròn cho đến

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

khi chạm đến giá trị đích, gọi là <b>mô đun</b> (tiếng Anh: <i>modulus</i>, số

tên <i>Disquisitiones Arithmeticae</i>, xuất bản năm 1801.- Phân tích thừa số nguyên tố:

+ Số nguyên tố là số tự nhiên chỉ có hai ước số dương phân biệt là 1 và chính nó. Các số có nhiều hơn 2 ước số dương được gọi là hợp số.

+ Định lý: "Mọi số tự nhiên lớn hơn 1 đều phân tích được thành tích những thừa số nguyên tố, và sự phân tích này là duy nhất nếu không kể đến thứ tự của các thừa số".

+ Để phân tích một số ra thừa số nguyên tố, ta thử chia lần lượt số đó cho các số nguyên tố như 2, 3, 5, 7, ...

<b>2.2 Mơ tả thuật tốn:</b>

mã hóa và giải mã. Khóa cơng khai được công bố rộng rãi cho mọi người và

có thể được giải mã bằng khóa bí mật tương ứng. Nói cách khác, mọi người đều có thể mã hóa nhưng chỉ có người biết khóa cá nhân (bí mật) mới có thể giải mã được

<b>2.3 Ví dụ:</b>

đọc được. Để làm được điều này, An gửi cho Bình một chiếc hộp có khóa đã mở sẵn và giữ lại chìa khóa. Bình nhận chiếc hộp, cho vào đó một tờ giấy viết thư bình thường và khóa lại (như loại khố thơng thường chỉ cần sập chốt lại, sau khi sập chốt khóa ngay cả Bình cũng khơng thể mở lại được-không đọc lại hay sửa thông tin trong thư được nữa). Sau đó Bình gửi chiếc hộp lại cho An. An mở hộp với chìa khóa của mình và đọc thơng tin trong thư. Trong ví dụ này,

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

chiếc hộp với khóa mở đóng vai trị khóa cơng khai, chiếc chìa khóa chính là khóa bí mật. Sau đây là giải thích thuật tốn RSA cryptosystem:

+ Bước 1: Khởi tạo chìa khóa (key generation)

Khoa tạo một chìa khóa bao gồm một cặp khóa cơng khai và một khóa riêng tư.Chìa khóa cơng khai bao gồm một modulus N và một encryption exponent (Lũy thừa giải mã), kí hiệu là e. Q trình khởi tạo chìa khóa được tiến hành theo các bước sau đây.

a) Chọn 2 số nguyên tố kí hiệu là p và q. Trong ví dụ này ta chọn ngẫu nhiên 2 số 61 và 53.

f) An có 1 chìa khóa cơng khai (N, e) = (3233, 17) và 1 chìa khóa riêng tư (N, d) = 3233, 2753

+ Bước 2: Mã hóa tin nhắn: Khoa muốn gửi tin nhắn "HELLO" đến An một cách an toàn. Trước tiên, anh ta chuyển đổi tin nhắn thành biểu diễn số bằng bảng ASCII. Trong ví dụ này, giả sử "HELLO" ánh xạ đến số 0725112115. Sau đó, Khoa mã hóa tin nhắn bằng khóa cơng khai của An như sau:

Khoa nâng biểu diễn số của thông điệp lên lũy thừa của số mũ mã hóa, e, modulo mơ đun, N: 0725112115^17 mod 3233 = 2723.

Bản mật mã mà Khoa gửi cho An là 2723.

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

Bước 3: Giải mã tin nhắn: An nhận được bản mã và sử dụng khóa riêng của mình để giải mã tin nhắn. An tính tốn biểu diễn số của thông điệp văn bản thuần bằng cách nâng bản mã lên lũy thừa của số mũ giải mã d, modulo mô đun, N: 2723^2753 mod 3233 = 0725112115. Kết quả biểu diễn số là tin nhắn gốc mà Khoa đã gửi.

Bước 4: Giải mã thư: An chuyển đổi biểu diễn số trở lại thư gốc bằng cách sử dụng bảng ASCII được sử dụng trong bước 2. Trong ví dụ này, An ánh xạ mỗi số có hai chữ số trong biểu diễn số với ký tự ASCII tương ứng của nó để nhận thơng báo "HELLO".

<small> """Generate a key pair""" ifnot(is_prime p( )and is_prime( )):q raiseValueError("Both numbers must be prime.")</small>

<small> elif p == q:</small>

<small> raiseValueError("p and q cannot be equal.")</small>

<small> n = p * q phi = p - * q - (1) (1)</small>

<small> # Choose an integer e such that e and phi(n) are coprime</small>

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<small> """Compute modular inverse""" gcd x y = extended_euclidean_algorithm m, ,( ,a)</small>

<small>def encrypt(public_key, message):</small>

<small> """Encrypt a message using the public key""" n e = public_key,</small>

<small> cipher = [pow ord((char), e n , )for char in message]</small>

<small> return cipher</small>

<small>def decrypt(private_key, cipher):</small>

<small> """Decrypt a message using the private key""" n d = private_key,</small>

<small> message = [chr pow((char, d n, ))for char cipherin]</small>

<small> return''.join message()</small>

<small># Generate a key pair</small>

<small># Decrypt the message</small>

<small>message = decrypt(private_key, cipher)</small>

Kết quả:

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

<b>TÀI LIỆU THAM KHẢO</b>

Tiếng Việt

[1]. Wikipedia Giải thuật Euclid mở rộng

[2]. Tiếng Anh

</div>

×