Đang tải... (xem toàn văn)
Assignment 1, môn Mật mã an ninh mạng, ĐH Bách khoa.Đề tài : Hiện thực chương trình áp dụng các thuật toán mã hóa3 giải thuật mã hóa : giải thuật thay thế, RSA, Huffman TreeProject mã hóa file tất cả các định dạng, sử dụng ngôn ngữ java với nền tảng JAVAFXCác chức năng chính: mã hóa file mọi định dạng với 3 thuật toán, lưu và mã hóa key file phục vụ mã hóa và giải mã, kiểm tra tính toàn vẹn của file bằng MD5
Trường Đại học Bách Khoa TP.Hồ Chí Minh Khoa Khoa Học Và Kĩ Thuật Máy Tính MẬT MÃ & AN NINH MẠNG BÁO CÁO BÀI TẬP LỚN Giáo viên hướng dẫn: Sinh viên thực hiện: Tp Hồ Chí Minh, tháng 3/2017 Contents 2|Page Giới thiệu 1.1 Mô tả yêu cầu Mã hoá phương pháp giúp bảo vệ liệu cá nhân nhạy cảm máy tính, cho dù liệu cá nhân, tổ chức qua mạng Internet, hay lưu liệu cá nhân máy chủ, Cloud, , việc mã hoá ngăn chặn đọc liệu trước cho phép bạn Trong assignment thực chương trình mã hóa để giữ cho tập tin thư mục máy tính an toàn Cụ thể xây dựng chương trình mã hóa tập tin, thư mục sử dụng giải thuật mã hóa phổ biến thực tế DES, AES, RSA giải mã tập tin thư mục 1.2 Tổng quan - Ngôn ngữ thực : Java - Nền tảng : Javafx - Các định dạng file hỗ trợ: tất file có dung lượng mà nhớ cho phép Tổng quát chương trình: Chương trình thực chức mã hóa giải mã file, thực tab ứng với giải thuật * Subtitution Cipher 3|Page - Tạo key : tạo key ngẫu nhiên - Import file key có sẵn có định dạng *.sck - Export file key định dạng *.sck - Mã hóa file định dạng bất kì, dung lượng không giới hạn tạo thành file *.sce - Giải mã file mã hóa có định dạng *.sce, trả file gốc đồng thời thêm mã thời gian vào tên để tránh trùng với file cũ, kiểm tra lại MD5 * RSA - Tạo key RSA gồm n,e, d - Import RSA key từ file định dạng *.rsk - Export key file định dạng *.rsk - Mã hóa định dạng file tạo thành file *.rse - Giải mã file mã hóa có định dạng *.rse, trả file gốc đồng thời thêm mã thời gian vào tên để tránh trùng với file cũ, kiểm tra lại MD5 * Huffman - Tạo huffman từ file mẫu có sẵn, đồng thời hiển thị histogram giá trị file 4|Page - Import Huffman từ file định dạng *.htk - Export Huffman file định dạng *.htk - Mã hóa file định dạng bất kì, dung lượng không giới hạn tạo thành file *.hte - Giải mã file mã hóa có định dạng *.ht, trả file gốc đồng thời thêm mã thời gian vào tên để tránh trùng với file cũ, kiểm tra lại MD5 1.2.1 Ưu điểm Tất file key lưu dạng binary mã hóa password với giải thuật tương tự One-time pad Chương trình xử lí tất định dạng file, kể file text lẫn file nhị phân Ngay công khai giải thuật, người công phải giải mã toàn biết key thử có hay không 1.2.2 Hạn chế Đối với giải thuật RSA, nên mã hóa giải mã file có dung lượng 10MB thời gian cho phép phút Giao diện tương đối đơn giản 5|Page Chi tiết ứng dụng 2.1 Các giải thuật 2.1.1 Giải thuật mã hóa thay * Giải thuật sinh key – giải thuật bánh xe sổ số(roulette wheel selection algorithm) Mục đích giải thuật nhằm tạo key hóa vị 256 phần tử B1: Khởi tạo xác suất ban đầu cho 256 phần tử B2 : Sinh số ngẫu nhiên S khoảng từ đến tổng xác suất phần tử tập B3 : với pi xác suất chọn phần tử thứ i, tìm k cho B4 : thêm k vào tập kết quả, cho pi = quay lại B2, giải thuật dừng kết đủ 256 phần tử * Mã hóa : Đầu vào key chuỗi 256 kí tự file input, kết trả file output B1 : Tính MD5 kích thước file input, ghi vào file output B2 : Lấy lần lược khối liệu có kích thước tối đa 64KB đưa vào buffer, với phần tử c kiểu byte buffer thực phép biến đổi cho e tương ứng e = key[c+128];// java dùng kiểu liệu có dấu B3: Ghi output, quay lại B2 đến hết liệu Giải mã : Đầu vào key chuỗi 256 kí tự file input, kết trả file output B1: Tìm đảo key theo công thức key-1[key[i]+128] = i; B2 : đọc mã MD5và kích thước file lưu file input B3 :Lấy lần lược khối liệu có kích thước tối đa 64KB đưa vào buffer, với phần tử c kiểu byte buffer thực phép biến đổi cho d tương ứng 6|Page c = key-1[e+128]; B4: Ghi output, quay lại B2 đến hết liệu B5 : Kiểm tra file kết với mã MD5 để kiểm tra key có xác hay không this toàn vẹn file 2.1.2 Giải thuật RSA * Giải thuật sinh key: Mục đích giải thuật nhằm tạo cặp key đóng vai trò khóa công khai khóa bí mật: B1: Khởi tạo kích thước ban đầu N (modulus) 512 bit B2: Sinh cặp số nguyên tố ngẫu nhiên gồm p khoảng từ đến q khoảng từ đến B3: Với cặp giá trị p q, ta dễ dàng tính giá trị B4: Chọn số tự nhiên e cho e nguyên tố với B5: Từ khóa công khai e, ta tính khóa bí mật d cho * Mã hóa: Đầu vào gồm key khóa công khai e file input, kết trả file output B1 : Tính MD5 file input, ghi vào file output B2 : Đọc liệu file input khối dạng byte có kích thước 64bit, sau mã hóa khối liệu B3: Ghi liệu mã hóa kích thước khối liệu sau mã hóa vào file output, quay lại B2 đến mã hóa hết liệu Giải mã : Đầu vào key khóa bí mật d file input, kết trả file output B1: Đọc liệu dạng Integer file input giải mã để lấy kích thước khối liệu mã hóa 7|Page B2: Đọc tiếp liệu file input với kích thước bước trên, giải mã khối liệu ghi vào file output B3: Lặp lại bước đọc hết file input B4: Kiểm tra MD5 file output với file input Hash trước mã hóa để kiểm tra tính toàn vẹn liệu 2.1.3 Giải thuật Huffman * Sinh key B1 : Tính histogram file mẫu file input B2 : Tạo huffman, áp dụng giải thuật tham lam B2.1 : Khởi tạo heap rỗng, độ ưu tiên huffman con(subtree) heap tổng xác suất giá trị mà node sub-tree nắm giữ B2.2 : Cho toàn node vào heap, node nắm giữ giá trị xác suất giá trị tương ứng B2.3 : Lấy sub-tree từ heap, kết hợp chúng thành sub-tree lớn thông qua node mới, hoán vị thứ tự node lấy để tạo ngẫu nhiên, để tránh từ file tạo giống lần tạo key khác B2.4: Nếu heap sub-tree, tức lúc ta có huffman tree hoàn chỉnh, ngược lại tiếp tục B2.3 * Lưu trữ key Cách 1: Danh sách cạnh Cách 2: Các theo tác duyệt NLR, quy ước L : duyệt qua trái R : duyệt qua phải E(X) : gặp mang giá trị X Ví dụ : CRYPTTOOL LE(O) RE(C)E(L)RE(T)RE(Y)RE(P)E(R) 8|Page * Mã hóa : Đầu vào key huffman file input, kết trả file output B1 : Tính MD5 kích thước file input, ghi vào file output B2 : Tạo từ điển, với giá trị c mã hóa, ta có chuỗi bit từ gốc đến node có giá trị c Ví dụ trên, C : 101 B3 : Với byte input, tra từ điển giá trị chuỗi bit tương ứng ghi vào output * Giải mã : Đầu vào key huffman file input, kết trả file output B1 : đọc mã MD5 kích thước file lưu file input B2 : Nếu số byte giải mã kích thước file tới B5,Khởi tạo trỏ vào node gốc huffman B3 : với bit đọc từ input, 0, đưa trỏ node trái trỏ, ngược lại đưa trỏ node phải trỏ B4 : trỏ trỏ node lá, ghi giá trị node file output, tăng số byte giải mã lên quay bước B5 : kiểm tra file output với mã MD5 2.2 Tính bảo mật 2.2.1 Giải thuật thay Trong mã hóa file text, tập giá trị nhỏ, xác suất phân bố tập trung vào kí tự, dấu space, tab, nên khả bị phá giải cao 9|Page Đối với file mà giá trị phân bố đều, số lượng key cần thử lớn, dần tiến tới 256!~8E506 2.2.2 Giải thuật RSA Sau ta xem xét số công phương pháp RSA Vét cạn khóa: cách công thử tất khóa d có để tìm giải mã có ý nghĩa, tương tự cách thử khóa K mã hóa đối xứng Với N lớn, việc công bất khả thi Phân tích N thành thừa số nguyên tố N = pq: Chúng ta nói việc phân tích phải bất khả thi hàm chiều, nguyên tắc hoạt động RSA Tuy nhiên, nhiều thuật toán phân tích đề xuất, với tốc độ xử lý máy tính ngày nhanh, làm cho việc phân tích N không khó khăn trước Năm 1977, tác giả RSA treo giải thưởng cho phá RSA có kích thước N vào khoảng 428 bít, tức 129 chữ số Các tác giả ước đoán phải 40 nghìn triệu triệu năm giải Tuy 71 nhiên vào năm 1994, câu đố giải vòng tháng Bảng sau liệt kê kích thước N RSA phá mã Bảng liệt kê mốc phá mã RSA Số chữ số N 100 110 120 129 130 140 155 160 174 200 10 | P a g e Số bit 322 365 398 428 431 465 512 530 576 633 Năm phá mã 1991 1992 1993 1994 1996 1999 1999 2003 2003 2005 Thuật toán Quadratic sieve Quadratic sieve Quadratic sieve Quadratic sieve GNFS GNFS GNFS Lattice sieve Lattice sieve Lattice sieve Dĩ nhiên việc phá mã thực phòng thí nghiệm Tuy nhiên người ta cho kích thước N phải khoảng 1024 bít (309 chữ số) bảo đảm an toàn thật Đo thời gian: Đây phương pháp phá mã không dựa vào mặt toán học thuật toán RSA, mà dựa vào “hiệu ứng lề” sinh trình giải mã RSA Hiệu ứng lề thời gian thực giải mã Giả sử người phá mã đo thời giải mã dùng thuật toán bình phương liên tiếp Trong thuật toán bình phương liên tiếp, bít d xảy hai phép modulo, bít có phép modulo, thời gian thực giải mã khác Bằng số phép thử chosen-plaintext, người phá mã biết bít d hay từ biết d Phương pháp phá mã ví dụ cho thấy việc thiết kế hệ mã an toàn phức tạp Người thiết kế phải lường trước hết tình xảy 2.2.3 Giải thuật Huffman Mỗi key trạng thái huffman, mã hóa tập gồm 256 giá trị, key huffman có 256 lá, mang giá trị cần mã hóa, đường từ gốc đến cho biết giá trị sau mã hóa Nếu không quan tâm đến giá trị node lá, quan tâm đến hình dạng huffman Gọi Q(k) số hình dạng huffman có k lá, Q(1) = Q(2) = Q(3) = Công thức quy hoạch động tổng quát: Áp dụng công thức trên, ta dùng đoạn chương trình sau để tính: author = 'DuThien' import math Q = [] 11 | P a g e for i in range(257): Q.append(0) Q[1] = Q[2] = for n in range(3, 257): for k in range(1, n): Q[n] = Q[n] + Q[k] * Q[n - k] print(Q[256]) Kết : Q(256)~4.6E149 Vậy key có tối đa Q(256)*256 ! ~ 4E657 Trong trường hợp huffman trở thành cây nhị phân đầy đủ, tức giá trị file mã hóa phân bố đều, số trạng thái cần thử 256 ! ~ 8E506 2.3 Áp dụng lên chương trình 2.3.1 Giải thuật thay Class SC_KeyGen Class SC_Encryptor Class SC_Decryptor 2.3.2 Giải thuật RSA Class RSA_KeyGen Class RSA_Encryptor Class RSA_Decryptor 2.3.3 Giải thuật Huffman Class HT_KeyGen 12 | P a g e Class HT_Encryptor Class HT_Decryptor Đánh giá, thực nghiệm 3.1 Giải thuật thay Cỡ file 5.96KB 366KB 1.62MB 15.7MB 85.9MB 1.4GB Tạo key 2(ms) Mã hóa 4(ms) 22(ms) 166(ms) 416(ms) 2135(ms) 75224(ms) Giải mã 5(ms) 38(ms) 119(ms) 688(ms) 3694(ms) 112617(ms) Mã hóa 190(ms) 11109(ms) 50210(ms) 491687(ms) N/A N/A Giải mã 132(ms) 7807(ms) 30827(ms) 285474(ms) N/A N/A Mã hóa 41(ms) 182(ms) 581(ms) 6102(ms) Giải mã 36(ms) 198(ms) 600(ms) 6085(ms) 3.2 Giải thuật RSA Cỡ file 5.96KB 366KB 1.62MB 15.7MB 85.9MB 1.4GB Tạo key 2083(ms) 3.3 Giải thuật Huffman Cỡ file 5.96KB 366KB 1.62MB 15.7MB 13 | P a g e Tạo key 82(ms) 21(ms) 55(ms) 81(ms) 85.9MB 1.4GB 994(ms) 18446(ms) 30849(ms) 635776(ms) 26368(ms) 490088(ms) Khả mở rộng Các chức chưa thực hiện: - Giải thuật thay thế: sử dụng block liệu lớn thay byte - Giải thuật RSA: cho phép người dùng thay đổi kích thước block tùy chỉnh thay khối 512bit key sinh ngẫu nhiên, sử dụng multi-thread để tăng tốc xử lí - Giải thuật Huffman: xử lí block liệu lớn có kích thước khác nhau, nhằm tìm block có liệu giống nhau, giúp tăng hiệu nén liệu Nén liệu tập chữ Source code : https://github.com/duthienkt/MiniCryptool Tham khảo https://vi.wikipedia.org/wiki/RSA_(m%C3%A3_h%C3%B3a) https://vi.wikipedia.org/wiki/M%C3%A3_h%C3%B3a_Huffman 14 | P a g e PHỤ LỤC Thành viên Phạm Quốc Du Thiên (51303834) Công việc - Thiết kế giải thuật - Giải thuật Huffman(Báo cáo, code) - Báo cáo giải thuật thay - Tổng hợp báo cáo - Hiện thực giao diện - Viết thư viện hỗ trợ: nhập suất file, cấu trúc liệu - Hiện thực mã hóa file ứng với module thuật toán - Hiện thực lưu trữ mã hóa file key password với One-time pad - Fix bug, cải tiến, tăng hiệu cho giải thuật Phần trăm Nhận xét 50% Nguyễn Hoàng Đức Tâm (51303513) - Giải thuật RSA(Báo cáo, code) 30% Nguyễn Thanh Hải (51301050) - Giải thuật thay thế(code) - Tiêu đề báo cáo 20% 15 | P a g e PHỤ LỤC * Lưu khóa: - Tạo key import key có sẵn - Chọn Export, cửa sổ chọn file xuất hiện, chọn đường dẫn muốn lưu - Nhập password để mã hóa liệu OK Lưu ý: Các định dạng file key file mã hóa phân biệt tên phần mở rộng, nên bị lỗi mở file sai định dạng * Mã hóa file Đối với giải thuật thay RSA B1: import key tạo key cách bấm Generate, tạo key mới, sau cần chọn Export lưu key để giải mã B2: chọn đường dẫn cho file input B3: chọn Encrypt Đối với giải thuật Huffman Tương tự phần Generate cần chọn file mẫu để tạo key Có thể tạo key file input 16 | P a g e Lư ý: file mẫu để tạo Huffman, lần tạo key có kết khác * Mã hóa thay 17 | P a g e * Huffman 18 | P a g e ... SC_Encryptor Class SC_Decryptor 2.3.2 Giải thuật RSA Class RSA_KeyGen Class RSA_Encryptor Class RSA_Decryptor 2.3.3 Giải thuật Huffman Class HT_KeyGen 12 | P a g e Class HT_Encryptor Class HT_Decryptor... tác duyệt NLR, quy ước L : duyệt qua trái R : duyệt qua phải E(X) : gặp mang giá trị X Ví dụ : CRYPTTOOL LE(O) RE(C)E(L)RE(T)RE(Y)RE(P)E(R) 8|Page * Mã hóa : Đầu vào key huffman file input,... giống nhau, giúp tăng hiệu nén liệu Nén liệu tập chữ Source code : https://github.com/duthienkt/MiniCryptool Tham khảo https://vi.wikipedia.org/wiki/RSA_(m%C3%A3_h%C3%B3a) https://vi.wikipedia.org/wiki/M%C3%A3_h%C3%B3a_Huffman