Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 17 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
17
Dung lượng
511,9 KB
Nội dung
TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN ĐỒ ÁN LẬP TRÌNH TÍNH TỐN TÊN ĐỀ TÀI: BÀI TỐN RSA Người hướng dẫn:Nguyễn Tấn Khơi Sinh viên thực hiện: Phan Hữu Phước LỚP: 21TCLC-nhật2 Ngô Qúy Anh Tú LỚP: 21TCLC-nhật2 Đà Nẵng, 04/2022 MỤC LỤC MỤC LỤC i DANH MỤC HÌNH VẼ .ii MỞ ĐẦU {font: TimeNew Roman, bold, size: 14, lề: center} i TỔNG QUAN ĐỀ TÀI CƠ SỞ LÝ THUYẾT 2.1 Ý tưởng .1 2.2 Cơ sở lý thuyết TỔ CHỨC CẤU TRÚC DỮ LIỆU VÀ THUẬT TOÁN 3.1 Phát biểu toán 3.2 Cấu trúc liệu 3.3 Thuật toán CHƯƠNG TRÌNH VÀ KẾT QUẢ 4.1 Tổ chức chương trình 4.2 Ngôn ngữ cài đặt 4.3 Kết 4.3.1 Giao diện chương trình 4.3.2 Kết thực thi chương trình 4.3.3 Nhận xét đánh giá KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 5.1 Kết luận .1 5.2 Hướng phát triển TÀI LIỆU THAM KHẢO DANH MỤC HÌNH VẼ No table of figures entries found Hình 1-1: Quy trình mã hóa liệu (Nguồn: Handbook of Applied Cryptography, A Menezes, P van Oorschot and S V anstone) Đồ án Cơ sở lập trình MỞ ĐẦU{font: TimeNew Roman, bold, size: 14, lề: center} {Để dòng trống} {Font: Time New Roman; thường; cỡ chữ: 13; dãn dòng: 1,3; lề: justified} {Trong phần này, cần trình bày về: Mục đích thực đề tài, mục tiêu đề tài, phạm vi đối tượng nghiên cứu, phương pháp nghiên cứu, cấu trúc đồ mơn học} Đồ án Cơ sở lập trình TỔNG QUAN ĐỀ TÀI Trong mật mã học, ngành tốn học ứng dụng cho cơng nghệ thơng tin , mã hóa phương pháp để biến thơng tin (phim ảnh, văn bản, hình ảnh…) từ định dạng bình thường sang dạng thông tin hiểu khơng có phương tiện giải mã Giải mã phương pháp để đưa từ dạng thông tin mã hóa dạng thơng tin ban đầu , q trình ngược mã hóa Một hệ thống mã hóa gồm thành phần: - Thơng tin trước mã hóa P - Thơng tin sau mã hóa C - Chìa khóa K - Phương pháp mã hóa/ giải mã E/D Qúa trình mã hóa tiến hành cách áp dụng hàm tốn học E lên thơng tin P, vốn biểu diễn dạng số, để trở thành thơng tin mã hóa C Qúa trình giải mã tiến hành ngược lại: áp dụng hàm D lên thông tin C để thông tin giải mã P CƠ SỞ LÝ THUYẾT 2.1 Ý tưởng Ý tưởng dựa độ khó tốn phân tích thừa số tích hai số nguyên tố lớn: Cho hai số nguyên tố p, q lớn, tính tích n = p * q Khi biết n, muốn tìm p, q phải giải tốn phân tích thừa số nguyên tố, đòi hỏi phải thực số lượng phép tính lớn 2.2 Cơ sở lý thuyết Dựa tính chất hàm phía Hàm phía hàm mà dễ dàng tính tốn quan hệ chiều khó để tính ngược lại Ví như: biết giả thiết cho x dễ dàng suy f(x) biết f(x) khó để suy x.Trong trường hợp “khó” có nghĩa để tính kết phải hàng trăm triệu năm để tính tốn cho dù siêu máy tính đại Đồ án Cơ sở lập trình Một thuật tốn coi có độ phức tạp đa thức, có thời gian đa thức, số phép tính cần thiết thực thuật tốn khơng vượt q O(P(n)), P(n) đa thức bậc cao (từ trở lên) Các thuật toán với thời gian O(an), a>1, gọi thuật toán với độ phức tạp mũ , thời gian mũ Để giải dạng toán cần phải sử dụng chìa khóa cơng khai khái niệm để lập mã hóa 1- Số nguyên tố (prime) Số nguyên tố số nguyên chia chẵn cho cho mà thơi Ví dụ : 2, 3, 5, 7, 11, 13, 17, 23 2- Khái niệm nguyên tố (relatively prime or coprime) Với hai số nguyên dương a b Ta ký hiệu GCD (a,b) : Ước chung lớn a b ( Greatest Common Divisor).Để đơn giản ta ký hiệu GCD(a,b) =(a,b) Ví dụ : (4,6)=2 (5,6)=1 Hai số a b gọi nguyên tố (a,b)=1 Ví dụ : 10 nguyên tố (9,10)=1 3-Khái niệm modulo Với m số nguyên dương, ta nói hai số nguyên a b đồng dư với modulo m m chia hết hiệu a-b ( Viết m|(a-b) ) Ký hiệu a ≡ b ( mod m) Như a ≡ b (mod m ) tồn số nguyên k cho a = b +km Ví dụ : 13 ≡ ( mod 10 ) 13= + 1*10 4-Phi – Hàm EULER Định nghĩa : Phi – Hàm Euler Φ(n) có giá trị n số số không vượt n nguyên tố với n Ví dụ : Φ(5) = , Φ(6) = ,Φ(10) = Đồ án Cơ sở lập trình 2.3 Độ phức tạp thuật toán Một thuật toán coi có độ phức tạp đa thức, có thời gian đa thức, số phép tính cần thiết thực thuật tốn khơng vượt q O(P(n)), P(n) đa thức bậc cao (từ trở lên) Các thuật tốn với thời gian O(an), a>1, gọi thuật toán với độ phức tạp mũ , thời gian mũ TỔ CHỨC CẤU TRÚC DỮ LIỆU VÀ THUẬT TOÁN 3.1 Phát biểu tốn Mơ tả đầu vào (Input) đầu (Output) 3.2 Cấu trúc liệu Thuật toán RSA thiết kế dựa độ khó tốn phân tích thừa số nguyên tố tập số nguyên Zn Cho số nguyên dương n = p * q, với p, q số nguyên tố lớn (ít 100 ký số) Khi biết n, muốn tìm p, q phải giải tốn phân tích thừa số ngun tố, cơng việc địi hỏi phải thực số lượng phép tính vơ lớn 3.3 Thuật tốn a) Tạo khóa: - Tạo ngẫu nhiên số nguyên tố p, q khác lớn (có số ký tự 100) - Tính: n = p * q; - Tính hàm euler: Ф(n) = (p -1) * (q -1) - Chọn ngẫu nhiên số e cho < e < Ф(n), với e số nguyên tố với Ф(n): gcd(e, Ф(n)) = - Tìm số nghịch đảo d e Ф(n) : < d < Ф(n), ed = 1(mod Ф(n)), d số mũ bí mật e số mũ cơng khai - Cặp Kpub = {e, n} chọn khoá cơng khai Đồ án Cơ sở lập trình - Cặp Kpri = {d, n} chọn khố bí mật Ví dụ: -Chọn số 23 41 hai số số nguyên tố -n = 23 * 41 = 943 (n = p * q) Ф(n) = 22 * 40 = 880 ( Ф(n) = (q – 1) * (p – 1)) -Chọn e=7 UCLN(7,880)=1 -ed=(x*Ф(n)+1)=>7d=1+880x =>d=503 x=4 -n=943 e=7 d=503 b) Mã hóa: Gửi khố cơng khai Kpub= {e, n} dùng để mã hóa thơng điệp M thành C C = Me mod n Ví dụ: -A nhận khóa cơng khai n=943 e=7 -Thông tin cần gửi m=35 -c=357 mod 943 -c=545 c) Giải mã: Dùng khố bí mật KR= {d, n} Khơi phục văn gốc qua phép tốn M = Cd mod n Ví dụ: -m=545503 mod 943 =>m=35 Đồ án Cơ sở lập trình Hình 1-2: Sơ đồ biểu diễn thuật tốn mã hóa RSA Hình 1-2: Sơ đồ biểu diễn thuật tốn mã hóa RSA (Nguồn: PKCS #1 v2.2: RSA Cryptography Standard, RSA Laboratories) CHƯƠNG TRÌNH VÀ KẾT QUẢ 4.1 Tổ chức chương trình #include #include #include #include long int p,q,n,phin,flag,e[100],d[100],temp[100],m[100],en[100],i,j; char msg[100]; int prime(long int); void ce(); long int cd(long int); void encrypt(); void decrypt(); int main() { printf("\nnhap so nguyen to thu nhat\n"); scanf("%ld", &p); flag=prime(p); if(flag==0) { printf("\nnhap sai\n"); exit(1); Đồ án Cơ sở lập trình } printf("\nnhap so nguyen to khac\n"); scanf("%ld", &q); flag=prime(q); if(flag==0 || p==q) { printf("\nnhap sai\n"); exit(1); } printf("\nnhap thong tin\n"); fflush(stdin); scanf("%s", msg); for(i=0; msg[i]!=NULL; i++) m[i]=msg[i]; n=p*q; phin=(p-1)*(q-1); ce(); printf("\ngia tri cua e va d\n"); for(i=0; i