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
3,89 MB
Nội dung
HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG KHOA AN TỒN THƠNG TIN HỌC PHẦN: THỰC TẬP CƠ SỞ BÁO CÁO BÀI THỰC HÀNH SỐ 16: Lập trình thuật tốn mật mã học Họ tên sinh viên: Chu Văn Phúc Mã số sinh viên: B20DCAT140 Lớp: D20CQAT04-B Họ tên giảng viên: Nguyễn Ngọc Điệp Hà Nội: 04/2023 Mục lục Mục đích: 2 Nội dung thực hành: 2.1 Tìm hiểu lý thuyết: Tìm hiểu lập trình số lớn với phép tốn Tìm hiểu giải thuật mật mã khóa cơng khai RSA 2.2 Chuẩn bị môi trường: .4 2.3 Các bước thực kết cần đạt: Lập trình thư viện số lớn với phép toán để sử dụng giải thuật mã hóa/giải mã RSA Lập trình giải thuật mã hóa giải mã 10 1 Mục đích: Sinh viên tìm hiểu giải thuật mã hóa phổ biến lập trình chương trình mã hóa giải mã sử dụng ngơn ngữ lập trình phổ biến C/C++/Python/Java, đáp ứng chạy với số lớn Nội dung thực hành: 2.1 Tìm hiểu lý thuyết: Tìm hiểu lập trình số lớn với phép tốn o Lập trình số lớn kỹ thuật để xử lý số có độ dài lớn kích thước kiểu liệu số ngun ngơn ngữ lập trình Trong nhiều trường hợp, số lớn cần thiết để tính tốn giá trị lớn đạt độ xác cao Để làm điều này, ta cần phải xử lý số lớn cách khác nhau, tùy thuộc vào yêu cầu vấn đề cụ thể o Có nhiều thư viện module hỗ trợ lập trình số lớn ngơn ngữ lập trình Python, Java, C++ C# Trong Python, ta sử dụng module decimal (tính tốn số ngun lớn), fractions (xử lý phân số lớn), gmpy2 (tính tốn số ngun lớn với hiệu suất tốt hơn), sympy (tính tốn số nguyên lớn, phân số số thực với độ xác cao) để xử lý số lớn với phép toán cộng, trừ, nhân, chia lũy thừa Tìm hiểu giải thuật mật mã khóa công khai RSA o RSA giải thuật mã hóa nhà khoa học Ronald Rivest, Adi Shamir Leonard Adleman phát minh năm 1977 (Tên giải thuật RSA lấy theo chữ đầu tên ông) Độ an tồn RSA dựa tính khó việc phân tích số ngun lớn (số có hàng trăm chữ số thập phân) o Kích thước khóa RSA: Khóa < 1024 bit khơng an tồn Khuyến nghị dùng khóa >= 2048 btt Tương lai nên dùng khóa 3072 bit o RSA mã hóa bất đối xứng, sử dụng cặp khóa: Khóa cơng khai (Public key) dùng để mã hóa Khóa riêng (Private key) dùng để giải mã Chỉ khóa riêng cần giữ bí mật Khóa cơng khai cơng bố rộng rãi o Tạo khóa: Chọn số nguyên tố lớn p, q với p ≠ q Tính n = pq Tính giá trị hàm số Ơle φ(n) = (p-1)(q-1) Chọn số e cho < e < φ(n) gcd(e,φ(n)) = Tính d = e-1 (mod φ(n)), số d thỏa mãn ed ≡ (mod φ(n)) Public Key gồm: n – module, e – số mũ mã hóa Private Key gồm: n – module d – số mũ giải mã Mã hóa: Tính mã c từ rõ m theo công thức: c = me (mod n) Giải mã: Tính theo cơng thức : m= cd (modn ) Q trình giải mã thu lại m ban đầu do: c ≡ ( m ) ≡ m (mod n) ≡ m (mod n) hay m = c (mod n) RSA thuật tốn mật mã hóa khóa cơng khai Đây thuật tốn phù hợp với việc tạo chữ ký điện tử đồng thời với việc mã hóa Nó đánh dấu tiến vượt bậc lĩnh vực mật mã học việc sử dụng khóa cơng cộng RSA sử dụng phổ biến thương mại điện tử cho đảm bảo an toàn với điều kiện độ dài khóa đủ lớn Thuật tốn RSA có hai khóa: khóa cơng khai (hay khóa cơng cộng) khóa bí mật (hay khóa cá nhân) Mỗi khóa số cố định sử dụng q trình mã hóa giải mã Khóa cơng khai cơng bố rộng rãi cho người dùng để mã hóa Những thơng tin mã hóa khóa cơng khai giải mã khóa bí mật tương ứng Nói cách khác, người mã hóa có người biết khóa cá nhân (bí mật) giải mã o o o o o d o o e d ed d Độ an toàn hệ thống RSA dựa vấn đề tốn học: tốn phân tích thừa số ngun tố số nguyên lớn toán RSA Nếu tốn khó (khơng tìm thuật tốn hiệu để giải chúng) khơng thể thực việc phá mã toàn RSA Phá mã phần phải ngăn chặn phương pháp chuyển đổi rõ an toàn 2.2 Chuẩn bị mơi trường: Mơi trường lập trình theo mong muốn 2.3 Các bước thực kết cần đạt: Lập trình thư viện số lớn với phép tốn để sử dụng giải thuật mã hóa/giải mã RSA o Tạo khóa cơng khai khóa bí mật Ở đoạn code độ dài khóa chọn 2048 (bits=2048) randprime tạo số nguyên tố ngẫu nhiên khoảng xác định e số nguyên tố với phi (lớn nhỏ phi-1) d private key sử dụng hàm pow để tính e− (mod phi) Qua tạo public_key private_key o o Mã hóa số ngun lớn với khóa cơng khai Ở sử dụng khóa cơng khai để mã hóa cho số nguyên, c kết việc mã hóa c = m (mod n) e o Giải mã số nguyên lớn với khóa bi mật Ở sử dụng khóa bí mật để giải mã cho mã hóa trên, number kết việc giải mã number = c (mod n ) d o In plaintext, public key, private key, encrypt code, decrypt Ở in kết sau tính tốn với tiêu đề in mà đỏ o Code hoàn chỉnh Thử nghiệm chứng minh thư viện hoạt động tốt với ví dụ phép tốn cho số lớn o Thử nghiệm mã hóa số nhỏ: 140 o Thử nghiệm mã hóa số lớn: Lập trình giải thuật mã hóa giải mã o Tạo khóa cơng khai khóa bí mật o Mã hóa thơng điệp với khóa công khai Thông điệp chuyển đổi từ string sang số nguyên, sử dụng encode() thành chuỗi bytes, int.from_bytes() chuyển đối chuỗi bytes thành số nguyên, byteorder = ‘big’ để đảm bảo định dạng thông điệp 10 o o Giải mã thơng điệp với khóa bí mật Chuyển đổi từ số nguyên sang thông điệp gốc m.bit_length() trả số bit cần để lưu trữ giá trị m chuyển nhị phân, m.bit_length()+7 đảm bảo ln làm trịn đến byte tiếp theo, (m.bit_length()+7)//8 để tính tốn số byte cần để lưu trữ m (chuyển từ bit sang bytes), m.to_bytes() chuyển m thành chuỗi byte, decode() dùng để chuyển từ bytes sang String In plaintext, public key, private key, encrypt code, decrypt Ở in kết sau tính tốn với tiêu đề in mà đỏ 11 o Code hoàn chỉnh 12 Thử nghiệm mã hóa giải mã chuỗi ký tự: “I am B20DCAT140” 13 Tổng kết: Qua báo cáo trên, tìm hiểu giải thuật mã hóa phổ biến RSA lập trình chương trình mã hóa giải mã sử dụng ngơn ngữ lập trình phổ biến Python, đáp ứng chạy với số lớn Kết đạt thành cơng việc mã hóa số lớn chuỗi ký tự, sử dụng giải thuật RSA 14