Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 15 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
15
Dung lượng
307,42 KB
Nội dung
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 HỌ VÀ TÊN SINH VIÊN: NGUYỄN VĂN A BÁO CÁO CUỐI KỲ DỰ ÁN CÔNG NGHỆ THÔNG TIN KỸ THUẬT PHẦN MỀM TP HỒ CHÍ MINH, THÁNG NĂM 2023 Page of 15 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 HỌ VÀ TÊN SINH VIÊN: NGUYỄN VĂN A BÁO CÁO CUỐI KỲ DỰ ÁN CÔNG NGHỆ THÔNG TIN KỸ THUẬT PHẦN MỀM Người hướng dẫn Dung Cẩm Quang TP HỒ CHÍ MINH, THÁNG NĂM 2023 Page of 15 LỜI CẢM ƠN Chào thầy Trần Lương Quốc Đại, Em xin gửi lời cảm ơn chân thành đến thầy suốt trình học tập em Thầy đóng góp nhiều cho phát triển tiến em Thầy người giáo viên tuyệt vời, khơng có kiến thức chun mơn sâu rộng mà cịn tâm huyết với cơng việc giảng dạy Nhờ có hướng dẫn giúp đỡ thầy, em tiếp cận hiểu sâu nhiều khái niệm lĩnh vực học tập Em mong rằng, kiến thức kinh nghiệm mà thầy truyền đạt tiếp tục giúp đỡ phát triển em tương lai Em lại lần gửi lời cảm ơn chân thành đến thầy Em xin chân thành cảm ơn TP Hồ Chí Minh, ngày tháng … năm 20 Tác giả (Ký tên ghi rõ họ tên) Page of 15 CƠNG TRÌNH ĐƯỢC HỒN THÀNH TẠI TRƯỜNG ĐẠI HỌC TƠN ĐỨC THẮNG Tơi xin cam đoan cơng trình nghiên cứu riêng hướng dẫn khoa học TS Dung Cẩm Quang Các nội dung nghiên cứu, kết đề tài trung thực chưa cơng bố hình thức trước Những số liệu bảng biểu phục vụ cho việc phân tích, nhận xét, đánh giá tác giả thu thập từ nguồn khác có ghi rõ phần tài liệu tham khảo Ngoài ra, Dự án sử dụng số nhận xét, đánh số liệu tác giả khác, quan tổ chức khác có trích dẫn thích nguồn gốc Nếu phát có gian lận tơi xin hồn tồn chịu trách nhiệm nội dung Dự án Trường Đại học Tôn Đức Thắng không liên quan đến vi phạm tác quyền, quyền gây q trình thực (nếu có) TP Hồ Chí Minh, ngày … tháng … năm 20 Tác giả (Ký tên ghi rõ họ tên) Page of 15 MỤC LỤC LỜI CẢM ƠN MỤC LỤC NỘI DUNG BÁO CÁO I Tìm Modulo nghịch đảo n Modulo gì? Inverse Modulo n (Nghịch đảo Modulo n) 2.1 Cơ sở toán học: Dùng Extended Euclidean algorithm (thuật tốn Euclid mở rộng) để tìm Inverse Modulo n (Nghịch đảo Modulo n) 3.1 Extended Euclidean algorithm (thuật toán Euclid mở rộng) 3.1.1 Sơ lược Euclid nguyên thủy 3.1.2 Sơ lược Euclid mở rộng 3.2 Áp dụng Euclid mở rộng để tìm Nghịch đảo Modulo n Cài đặt code Python .9 Thử chương trình xác nhận kết 10 II Mã hóa RSA 12 Sơ lược RSA .12 RSA hoạt động nào? 12 Thuật toán Miller-Rabin dùng để kiểm tra số nguyên tố 13 Cài đặt code Python 14 Xác minh kết giải thích: 15 5.1 Xác minh kết 15 5.2 Giải thích .15 Phân tích hiệu tính bảo mật RSA triển khai 15 Thảo luận mối đe dọa bảo mật tiềm ẩn hạn chế hệ thống mật mã RSA 15 Kết luận 16 Page of 15 NỘI DUNG BÁO CÁO I Tìm Modulo nghịch đảo n Modulo gì? Định nghĩa: Trong tốn học, Modulo tốn tử dùng để tìm phần dư lấy số nguyên chia cho số nguyên khác, thường kí hiệu % mod - Phép chia lấy dư thực số nguyên dương Khi thực phép chia lấy dư, nhận số nguyên không âm nhỏ số chia cho Inverse Modulo n (Nghịch đảo Modulo n) 2.1 Cơ sở toán học: - Nghịch đảo Modulo (Inverse Modulo) bắt nguồn từ Số học đồng dư (Modular arithmetic), dùng để xác định phép chia Số học đồng dư có tồn hay khơng - Trong Số học đồng dư Các phép cộng, trừ, nhân xác định rõ ràng sau: - Tuy nhiên với phép chia, khơng đơn giản phép chia Số học đồng dư không xác định cho số: - Trong Số học thông thường, phép chia cho không xác định khơng thể ước số Nhưng Số học đồng dư ta lại có trường hợp đồng dư: Dùng Extended Euclidean algorithm (thuật toán Euclid mở rộng) để tìm Inverse Modulo n (Nghịch đảo Modulo n) Từ ví dụ mục 2.2 ta tìm Nghịch đảo Modulo n cách thử số tìm nghiệm thỏa mãn phương trình cách khơng hiệu nghiệm cần tìm lớn, phần dùng Extended Euclidean algorithm (thuật toán Euclid mở rộng) để tìm Nghịch đảo Modulo n 3.1 Extended Euclidean algorithm (thuật toán Euclid mở rộng) 3.1.1 Sơ lược Euclid nguyên thủy - Thuật toán Euclid phương pháp cổ điển dùng để tìm ước số chung lớn hai số nguyên Nó xuất lần Quyển VII Euclid's Elements vào khoảng năm 300 trước công nguyên Mô tả ngắn gọn thuật tốn: Gọi a, b số ngun cần tìm ước chung lớn Thuật toán đơn giản lặp lại việc cập nhật b cách lấy a chia lấy dư cho b, b = a ước số chung lớn 3.1.2 Sơ lược Euclid mở rộng - Thuật tốn Euclid mở rộng phương pháp để tìm ước chung lớn hai số nguyên dùng để tìm hệ số Bézout, biểu diễn ước chung lớn tổ hợp tuyến tính hai số nguyên - Thuật tốn Euclid mở rộng dùng để tính ước chung lớn Euclid mở rộng thêm biến x y cho x y thỏa mãn phương trình Bézout: ax + by = GCD(a, b) (1.3) - Cặp x, y gọi hệ số Bézout a b Page of 15 3.2 Áp dụng Euclid mở rộng để tìm Nghịch đảo Modulo n - Như trình bày cơng thức 1.1, để tìm Nghịch đảo Modulo n ta tìm a-1, từ cơng thức 1.1 gọi x a-1 ta viết lại cơng thức dạng Số học thông thường: ax = kn + (1.4) Trong đó: k số ngun i -1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 Page of 15 ri 26 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 qi 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 xi -2 -7 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 yi 1 -2 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 26 -11 Cài đặt code Python - Ở phần cài đặt thuật toán Euclid mở rộng theo phương pháp tổng quát: Hàm find_inverse(a, n) nhận vào biến a số cần tìm nghịch đảo, n modulo n Thử chương trình xác nhận kết Test: Kết quả: Xác nhận kết quả: 1) 11 * 19 mod 26 = (Đúng) 2) GCD(2, 6) = ⇒ Không tồn Nghịch đảo Modulo (Đúng) 3) 783 * 296 mod 1021 = (Đúng) 4) 550 * 355 mod 1759 = (Đúng) Giải thích cách thuật tốn chạy: Ví dụ test số 10: Tại vịng lặp (a = 1061, n = 991) Page of 15 Bước 1: n = a % n = 1061 % 991 = 70 q = a // n = 1061 // 991 = (cập nhật qi tiếp theo); a = n = 991 (cập nhật ri-2 tiếp theo); Bước 2: x_1 = x0 – q * x_1 = – * = x0 = x_1 = (cập nhật lại xi-2 tiếp theo) y tương tự Tại vòng lặp (a = 991, n = 70) Bước 1: n = a % n = 991 % 70 = 11 q = a // n = 991 // 70 = 14 (cập nhật qi tiếp theo); a = n = 11 (cập nhật ri-2 tiếp theo); Bước 2: x_1 = x0 – q * x_1 = – 14 * = -14 x0 = x_1 = (cập nhật lại xi-2 tiếp theo) y tương tự Cứ tiếp tục n = 0: Ta bảng sau: (r, q, x) Kiểm tra điều kiện, ta thấy cột có tồn r = 1, x = 269 ⇒ x = 269 Ví dụ test số 2: Tương tự ta có bảng (r, q, x): Ta thấy khơng có GCD(a, n) thỏa mãn = ⇒ x = Không tồn Nghịch đảo Modulo II Mã hóa RSA Sơ lược RSA - RSA thuật toán mã hóa cơng khai (public key cryptography) phổ biến sử dụng để bảo vệ thông tin Đây thuật toán phù hợp để tạo chữ ký số Nó đánh dấu tiến đáng kể lĩnh vực mật mã học việc sử dụng mật mã hóa cơng khai Page of 15 Thuật tốn đặt tên theo tên ba nhà khoa học tạo vào năm 1977: Ron Rivest, Adi Shamir Leonard Adleman RSA hoạt động nào? Thuật tốn RSA sử dụng cặp khóa, bao gồm khóa cơng khai (public key) khóa bí mật (private key) Khóa cơng khai chia sẻ với người khác, khóa bí mật giữ lại để giải mã thơng tin từ khóa cơng khai Các bước để mã hóa giải mã: Bước 1: Sinh khóa Để sinh khóa ta làm theo bước sau: Chọn hai số nguyên tố p q Tính N = pq Tính φ(N) = (p-1) * (q-1) Chọn số nguyên e khoảng (1, φ(N)) cho e φ(N) số nguyên tố hay nói cách khác GCD(e, φ(N)) = Tính d cho d Nghịch đảo modulo e, tức e * d ≡ (mod φ(N)) Khóa công khai (public key) cặp (N, e) khóa bí mật (private key) cặp (N, d) Ví dụ: Chọn hai số nguyên tố: p=17 q=11 Tính N = p * q = 187 Tính φ(N) = (p-1) * (q-1) = 160 Chọn e = 7, e thuộc (1, 160), GCD(7, 160) = Gọi d Nghịch đảo modulo tức e * d ≡ (mod φ(N)), ta dùng thuật tốn Euclid mở rộng trình bày phần 1.3.1 để tìm d * 23 ≡ (mod 160) ⇒ d = 23 Khóa cơng khai (N, e) = (187, 7) Khóa bí mật (N, d) = (187, 23) Bước 2: Mã hóa Giả sử có tin nhắn (message): “HELLO” Ta dùng bảng mã để chuyển chuỗi kí tự thành chuỗi số Ví dụ ta dùng bảng mã ASCII: H = 72, E = 69, L = 76, O = 79 Sau mã hóa nối chúng lại ta chuỗi số: M = 7269767679 Bây ta sử dụng cặp khóa cơng khai (N, e) = (187, 7) để tạo bảng mã (ciphertext) cách lấy C = Me mod N ⇒ M7 mod 187 = 59 Bước 3: Giải mã Để giải mã người nhận dùng cặp khóa bí mật (N, d) = (187, 23) M = Cd mod N ⇒ 5923 mod 187 = 7269767679 Dựa vào bảng mã ASCII ta dịch ngược 7269767679 thành “HELLO” Thuật toán Miller-Rabin dùng để kiểm tra số nguyên tố - Từ ví dụ ta hiểu cách hoạt động RSA, nhiên số nguyên tố chọn nhỏ nên thuật tốn khơng an tồn Trong thực tế người ta chọn p q số nguyên tố lớn, mà số lớn khó để kiểm tra có phải số nguyên tố hay khơng thuật tốn đưa để làm điều - Thuật tốn Miller-Rabin thuật toán kiểm tra số nguyên tố sử dụng phổ biến ứng dụng mã hóa bảo mật (Khơng xác 100%) Page 10 of 15 - Nếu số nguyên n số nguyên tố, với số ngun a khơng chia hết cho n, ta xem a "chứng nhận" cho n số nguyên tố Nghĩa là, chọn ngẫu nhiên số nguyên a ước n, a thỏa mãn số điều kiện, ta kết luận với độ tin cậy cao n số nguyên tố Ví dụ: Giả sử ta muốn kiểm tra xem số nguyên n = 17 Bước 1: Chọn số nguyên a ngẫu nhiên khoảng [2, n-2], ví dụ a = Bước 2: Tính b = ad mod n, với d = (n-1)/2 Ta có b = 38 mod 17 = Bước 3: Nếu b = b = n-1, ta kết luận n số nguyên tố kết thúc thuật toán Để tăng độ tin cậy, ta lặp lại thuật tốn thêm nhiều lần nữa, chẳng hạn sau lặp lại 10 lần, n-1 lần lặp, ta kết luận n số nguyên tố với độ tin cậy cao Cài đặt code Python - Trong phần sử dụng thư viện PyCryptodome để cài đặt mã hóa RSA - PyCryptodome phát triển PyCrypto, thư viện mật mã hóa viết Python PyCryptodome bao gồm thư viện cung cấp chức mã hóa giải mã cho loạt thuật toán mã hóa khác AES, Blowfish, Triple DES, RSA, ECC, nhiều - Một số tính khác PyCryptodome bao gồm: Hỗ trợ hàm băm chữ ký số Hỗ trợ chức chống lại cơng khóa cách sử dụng chức băm, bảo vệ khóa cách sử dụng chức kích hoạt ngẫu nhiên chức bảo vệ cách sử dụng chức bảo vệ Có thể hoạt động nhiều tảng, bao gồm Windows, macOS Linux Page 11 of 15 - Dưới code áp dụng để mã hóa RSA: Xác minh kết giải thích: 5.1 Xác minh kết Kết thu được: Khóa cơng khai (public key): -BEGIN PUBLIC KEY MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArqVp9DoD2akfaEe1PXbD 0qzf1PMGUHmAtZ9bMEHgbmgbMWqJVyvI3f6FzQhPbj94pZLPIvvN6v7qrB5jxQez pSZxd+UOtzwZk9j3EY13gp8J0avx1Q2ON5OfgNMPQGZ19C7ejpkn+7sErhiEwGdb OepIw2sbQyER/b8JkY/tNpS5KV6JTMcFpbX1CyDzdWyX8yq60HmFv/nopoqT0lgd 4XG6cGLGKnCnHTPKN3JDKsdlQc5zqImfcc9CzrSby4bdMz8HAiQ0P2Z5tL6Mw+K4 8lk63nAwXe0Mkv78CwuoTFFM2pkDAy/D4xElJmAWHZ2tjkpDQyWW2D8W2N3ae22b BQIDAQAB ⇒ Thuật tốn xác 5.2 Giải thích - Giải mã ciphertext khóa private ta thu kết quả: Phân tích hiệu tính bảo mật RSA triển khai Hiệu bảo mật hệ thống mật mã RSA triển khai phụ thuộc vào số yếu tố kích thước khóa, sơ đồ đệm triển khai thuật toán Page 12 of 15 Trong mã triển khai, kích thước khóa đặt thành 2048 bit, coi an toàn cho hầu hết mục đích thực tế Tuy nhiên, kích thước khóa lớn yêu cầu cho ứng dụng nhạy cảm Thuật toán sử dụng PKCS1_OAEP, thứ sử dụng rộng rãi an tồn Thuật tốn thêm byte ngẫu nhiên vào tin nhắn để làm cho có khả chống lại công tốt Việc triển khai thuật toán thư viện pycryptodome tối ưu hóa tốt cho hiệu suất, làm cho phù hợp để sử dụng ứng dụng mà hiệu mối quan tâm Nhìn chung, hệ thống mật mã RSA triển khai an toàn hiệu cho hầu hết mục đích thực tế Tuy nhiên, điều quan trọng cần lưu ý tính bảo mật hệ thống phụ thuộc vào việc xử lý khóa sử dụng kênh liên lạc an tồn để ngăn chặn cơng công trung gian Thảo luận mối đe dọa bảo mật tiềm ẩn hạn chế hệ thống mật mã RSA Hạn chế: Kích thước khóa: Tính bảo mật hệ thống mật mã RSA liên quan trực tiếp đến kích thước khóa Khi sức mạnh tính tốn tăng lên, việc bẻ khóa khóa nhỏ trở nên dễ dàng hơn, tạo khóa lớn cần thiết để trì bảo mật Tuy nhiên, khóa lớn địi hỏi nhiều sức mạnh tính tốn để tạo, truyền xử lý, điều ảnh hưởng đến hiệu suất Mối đe dọa bảo mật tiềm ẩn: Các công vào việc tạo số nguyên tố ngẫu nhiên: Tạo số ngẫu nhiên quan trọng tính bảo mật hệ thống mật mã RSA Nếu kẻ cơng dự đốn kiểm sốt q trình tạo số ngẫu nhiên, chúng có khả phát khóa riêng Thực cẩn thận thử nghiệm trình tạo số ngẫu nhiên quan trọng để trì tính bảo mật hệ thống mật mã RSA Máy tính lượng tử: Hệ thống mật mã RSA dựa độ khó việc chi phí giải mã lớn Tuy nhiên, với đời máy tính lượng tử, tính tốn số lượng lớn nháy mắt, vét cạn tồn RSA Mặc dù máy tính lượng tử giai đoạn sơ khai máy tính lượng tử thực tế chưa có sẵn, điều quan trọng phải xem xét tác động tiềm tàng RSA hệ thống mật mã khác Kết luận - Dựa hạn chế mối đe dọa trên, số khuyến nghị để cải thiện RSA: + Sử dụng kích thước khóa dài hơn: Khi sức mạnh tính tốn tăng lên, kích thước khóa dài cần thiết để trì bảo mật Kích thước khóa đề nghị 2048 bits dài + Thiết kế cẩn thận triển khai an toàn với thuật toán sinh số nguyên tố ngẫu nhiên + Cập nhật hệ thống thường xuyên, điều giúp giải lỗ hổng biết đảm bảo hệ thống cập nhật với biện pháp bảo mật + Quản lý Private key cẩn thận, private key quan trọng hệ thống RSA Nếu làm lộ Private key coi thuật tốn bị giải mã hồn tồn Page 13 of 15 Page 14 of 15 TÀI LIỆU THAM KHẢO (1) Chapter 3. Modular Arithmetic (2) Inverse Modulo n (3) Số học 4.5 - Nghịch đảo modulo (vnoi.info) (4) Thuật toán Euclid thuật toán Euclid mở rộng (di-mgt.com.au) (5) Modular multiplicative inverse - Wikipedia (6) RSA (mã hóa) – Wikipedia tiếng Việt (7) Hệ mã hóa RSA chữ ký số (viblo.asia) Page 15 of 15