1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu thực hiện luồng mã hóa dữ liệu

80 29 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nghiên cứu thực hiện luồng mã hóa dữ liệu Nghiên cứu thực hiện luồng mã hóa dữ liệu Nghiên cứu thực hiện luồng mã hóa dữ liệu luận văn tốt nghiệp,luận văn thạc sĩ, luận văn cao học, luận văn đại học, luận án tiến sĩ, đồ án tốt nghiệp luận văn tốt nghiệp,luận văn thạc sĩ, luận văn cao học, luận văn đại học, luận án tiến sĩ, đồ án tốt nghiệp

NGUYỄN NGỌC KHÁ BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI - Nguyễn Ngọc Khá ĐIỆN TỬ VIỄN THƠNG NGHIÊN CỨU THỰC HIỆN LUỒNG MÃ HĨA DỮ LIỆU LUẬN VĂN THẠC SĨ KHOA HỌC (Chuyện ngành: Kỹ thuật viễn thông) 15BKTVT Hà Nội – Năm 2017 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI Nguyễn Ngọc Khá NGHIÊN CỨU THỰC HIỆN LUỒNG MÃ HÓA DỮ LIỆU Chuyên ngành : Kỹ thuật viễn thông LUẬN VĂN THẠC SĨ KỸ THUẬT … (Chuyện ngành: Kỹ thuật viễn thông) NGƯỜI HƯỚNG DẪN KHOA HỌC : TS Phạm Việt Thành Hà Nội – Năm 2017 CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc BẢN XÁC NHẬN CHỈNH SỬA LUẬN VĂN THẠC SĨ Họ tên tác giả luận văn : Nguyễn Ngọc Khá Đề tài luận văn: Nghiên cứu thực luồng mã hóa liệu Chuyên ngành: Kỹ thuật viễn thông Mã số SV: CB150242 Tác giả, Người hướng dẫn khoa học Hội đồng chấm luận văn xác nhận tác giả sửa chữa, bổ sung luận văn theo biên họp Hội đồng ngày… .………… với nội dung sau: …………………………………………………………………………………… ……………… …………………………………………………………………… ……………………………… …………………………………………………… ……………………………………………… …………………………………… ……………………………………………………………… …………………… ……………………………………………………………………………… …… ……………………………………………………………………………………… Ngày Giáo viên hướng dẫn tháng năm Tác giả luận văn CHỦ TỊCH HỘI ĐỒNG LỜI CAM ĐOAN Tôi xin cam đoan: Luận văn cơng trình nghiên cứu thực cá nhân, thực hướng dẫn Tiến sĩ Phạm Việt Thành Các số liệu, kết luận nghiên cứu trình bày luận văn trung thực chưa công bố hình thức Tơi xin chịu trách nhiệm nghiên cứu Học viên Nguyễn Ngọc Khá LỜI CẢM ƠN Lời đầu tiên, xin chân thành cảm ơn Tiến sĩ Phạm Việt Thành, người trực tiếp hướng dẫn tơi hồn thành luận văn Với lời dẫn, tài liệu, tận tình hướng dẫn lời động viên thầy giúp vượt qua nhiều khó khăn q trình thực luận văn Tôi xin cảm ơn quý thầy giảng dạy chương trình cao học “Kỹ thuật viễn thông” truyền dạy kiến thức quý báu, kiến thức hữu ích giúp tơi nhiều thực nghiên cứu Xin cảm ơn Quý thầy, cô công tác Viện Điện tử - Viễn thông – Đại học Bách khoa Hà Nội Viện sau đại học – Đại học Bách Khoa Hà Nội tạo điều kiện thuận lợi suốt trình tơi tham gia khóa học Cuối cùng, tơi xin cám ơn gia đình, bạn bè, người ln ủng hộ, tạo động lực giúp tơi hồn thành luận văn Tôi xin chân thành cảm ơn! Học viên Nguyễn Ngọc Khá MỤC LỤC MỤC LỤC DANH MỤC CÁC KÝ HIỆU, CHỮ VIẾT TẮT MỞ DẦU 11 PHẦN I – CƠ SỞ LÝ THUYẾT 14 CHƯƠNG I –Tổng quan mã hóa 14 1.1 Cơ sở lý thuyết mật mã 14 1.2 Những biện pháp mã hóa thơng dụng 16 a Mã hóa khối : 21 b Mã hóa luồng : 24 CHƯƠNG II – Một số mã hóa luồng thông dụng 27 2.1 Bộ mã hóa Grain 128 27 2.2 Bộ mã hóa Trivium 32 CHƯƠNG III: Đề xuất thiết kế mã hóa 37 3.1 Dữ liệu đầu vào đầu 37 3.2 Thành phần thiết kế khóa 37 3.3 Quá trình tạo khóa 39 PHẦN II – CÁC KẾT QUẢ ĐẠT ĐƯỢC 41 CHƯƠNG IV – Thực kết 41 4.1 Thực phần mềm 41 4.1.1 Grain128 41 4.1.2 Trivium 44 4.1.3 NEWSTREAM 46 4.2 Thực phần cứng 48 4.2.1 Grain128 48 4.2.2 Trivium 49 4.2.3 NEWSTREAM 50 CHƯƠNG V – Bảo mật, ứng dụng số tồn tại, định hướng phát triển 53 5.1 Bảo mật 53 5.2 Ứng dụng 57 5.3 Tồn 58 5.4 Bảo mật 58 5.4.1 Thiết kế 61 5.5 Định hướng phát triển 62 KẾT LUẬN 64 TÀI LIỆU THAM KHẢO 65 PHỤ LỤC 66 Hàm tạo khóa Keystream (Trivium): 66 Hàm tạo khóa Keystream (Grain 128) 71 Hàm tạo khóa Keystram (NEWSTREAM) 75 DANH MỤC CÁC KÝ HIỆU, CHỮ VIẾT TẮT Từ viết tắt Diễn giải DES Data Encryption Standard AES Advanced Encryption Standard CFB Cipher Feedback RSA Là hệ mã hóa bất đối xứng phát triển Ron Rivest, Adi Shamir Leonard Adleman DSA Digital Signuature Algorithm SHA Secure Hash Algorithm Keystream Khóa luồng Key Secret Key IV Initial Value OFB Output Feedback Mode PKC Public Key Cryptosystems TLS Transport Layer Security DANH MỤC CÁC BẢNG Bảng 2.1 - Kiểm tra Keystream Grain128 hệ thống NIST 31 Bảng 2.2 - Các thông số Trivium 34 Bảng 2.3 - Kiểm tra Keystream mã hóa Trivium hệ thống NIST 36 Bảng 4.1 - Thời gian thực mã hóa theo trường hợp 48 Bảng 4.2 - Kết thực FPGA 52 Bảng 5.1 - Kiểm tra thống kê NIST 54 Bảng 5.2 - So sánh kết thực phép thử NIST 60 Bảng 5.3 - Kết thời gian mã hóa thuật toán NEWSTREAM 61 Bảng 5.4 - Kết thực FPGA 62 DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ Hình 1.1 - Hoạt động mã hóa giải mã thơng tin 16 Hình 1.2 - Quy trình mã hóa bất đối xứng 19 Hình 1.3 - Quy trình mã hóa đối xứng 20 Hình 1.4 - Quy trình mã hóa điện tử 23 Hình 1.5 - Quy trình giải mã điện tử 23 Hình 1.6 - Quy trình mã hóa, giải mã hóa luồng liệu 25 Hình 2.1 - Tổng quan mã hóa Grain 128 29 Hình 2.2 - Q trình tạo khóa 31 Hình 2.3 - Cấu trúc mã hóa Trivium 33 Hình 3.1 - Sơ đồ tạo khóa R(0) = 40 Hình 3.2 - Sơ đồ tạo khóa R(0) = 40 Hình 4.1 - Bộ mã hóa Grain-128 hệ thống phần mềm 41 Hình 4.2 - Nội dung tập tin *.txt rõ ban đầu 42 Hình 4.3 - Nội dung tập tin *.txt sau mã hóa 42 Hình 4.4 - Nội dung ảnh gốc *.bmp 43 Hình 4.5 - Nội dung ảnh mã hóa 43 Hình 4.6 - Bộ mã hóa Trivium hệ thống phần mềm 44 Hình 4.7 - Nội dung tập tin rõ *.txt 44 Hình 4.8 - Nội dung tập tin mã hóa *.txt 45 Hình 4.9 - Tập tin ảnh gốc 45 Hình 4.10 - Tập tin ảnh sau mã hóa 46 Hình 4.11 - So sánh chất lượng mã hóa theo độ dài ghi 47 Hình 4.12 - Kết mơ mã hóa Grain128 Modelsim 49 Hình 4.13 - Kết thực hệ thống FPGA 49 Hình 4.15 - Mơ thuật tốn mã hóa Trivium Modelsim 50 Hình 4.16 - Mơ thuật tốn mã hóa NEWSTREAM Modelsim 51 Hình 4.17 - Triển khai mã hóa NEWSTREAM Quartus 51 Hình 4.18 - Sơ đồ phần cứng thuật toán NEWSTREAM thực FPGA 52 Hình 5.1 - Nội dung tập tin *.txt gốc 55 Hình 5.2 - Nội dung tập tin *.txt sau mã hóa 55 Hình 5.3 - Ảnh gốc ảnh sau mã hóa 56 Hình 5.4 - Biểu đồ Histogram ảnh gốc ảnh sau mã hóa thực thuật toán NEWSTREAM 57 Hình 5.5 - Kết mã hóa hình ảnh thuật tốn NEWSTREAM 61 10 PHỤ LỤC Một số hàm quan trọng phần mềm, phát triển C# Hàm tạo khóa Keystream (Trivium): public static int[] keyTrivium(int lenghtdata) // Khởi tạo hàm Keystream với độ dài độ dài tập tin mã hóa { int[] z = new int[lenghtdata]; int[] a = new int[93]; int[] b = new int[84]; int[] c = new int[111]; int t1 = 0; int t2 = 0; int t3 = 0; for (int i = 0; i < 93; i++) { if (i < 80) { if (pass[i] == '0') a[i] = 0; else a[i] = 1; 66 } else a[i] = 0; } for (int i = 0; i < 84; i++) { if (i < 80) { { if (initialValuedata[i] == '0') b[i] = 0; else b[i] = 1; } } else b[i] = 0; } for (int i = 0; i < 111; i++) { if (i < 108) 67 c[i] = 0; else c[i] = 1; } for (int i = 0; i < 1152; i++) { t1 = a[65] ^ a[90] & a[91] ^ a[92] ^ b[77]; t2 = b[68] ^ b[81] & b[82] ^ b[83] ^ c[86]; t3 = c[65] ^ c[108] & c[109] ^ c[110] ^ a[68]; for (int j = 92; j > 0; j ) { int t = a[0]; a[0] = t3; a[j] = a[j - 1]; a[1] = t; } for (int j = 83; j > 0; j ) { int t = b[0]; b[0] = t1; b[j] = b[j - 1]; 68 b[1] = t; } for (int j = 110; j > 0; j ) { int t = c[0]; c[0] = t2; c[j] = c[j - 1]; c[1] = t; } } int k1 = 0; int k2 = 0; int k3 = 0; for (int i = 0; i < lenghtdata; i++) { k1 = a[65] ^ a[92]; k2 = b[68] ^ b[83]; k3 = c[65] ^ c[110]; z[i] = k1 ^ k2 ^ k3; k1 = k1 ^ a[90] & a[91] ^ b[77]; k2 = k2 ^ b[81] & b[82] ^ c[86]; 69 k3 = k3 ^ c[108] & c[109] ^ a[68]; for (int j = 92; j > 0; j ) { int t = a[0]; a[0] = k3; a[j] = a[j - 1]; a[1] = t; } for (int j = 83; j > 0; j ) { int t = b[0]; b[0] = k1; b[j] = b[j - 1]; b[1] = t; } for (int j = 110; j > 0; j ) { int t = c[0]; c[0] = k2; c[j] = c[j - 1]; c[1] = t; 70 } } return z; Hàm tạo khóa Keystream (Grain 128) public static int[] keyGrain128(int lenghtdata) // Khởi tạo hàm Keystream Grain128 với độ dài độ dài tập tin cần mã hóa { int[] b = new int[lenghtdata + 128]; int[] s = new int[lenghtdata + 128]; int[] z = new int[lenghtdata]; for (int i = 0; i < 128; i++) { b[i] = passdata[i]; } for (int i = 0; i < 96; i++) { s[i] = initialValuedata[i]; } for (int i = 96; i < 128; i++) { s[i] = 1; 71 } for (int i = 0; i < lenghtdata; i++) { s[i + 128] = s[i] & s[i + 7] & s[i + 38] & s[i + 70] & s[i + 81] & s[i + 96]; b[i + 128] = s[i] & b[i] & b[i + 26] & b[i + 56] & b[i + 91] & b[i + 96] & b[i + 3] ^ b[i + 67] & b[i + 11] ^ b[i + 13] & b[i + 17] ^ b[i + 18] & b[i + 27] ^ b[i + 59] & b[i + 40] ^ b[i + 48] & b[i + 61] ^ b[i + 65] & b[i + 68] ^ b[i + 84]; } for (int i = 0; i < lenghtdata; i++) { z[i] = b[i + 2] & b[i + 15] & b[i + 36] & b[i + 45] & b[i + 64] & b[i + 73] & b[i + 89] & b[i + 12] ^ s[i + 8] & s[i + 13] ^ s[i + 20] & b[i + 95] ^ s[i + 42] & s[i + 60] ^ s[i + 79] & b[i + 12] ^ b[i + 95] ^ s[i + 95] & s[i + 93]; } return z; } //hàm tạo khóa Grain128 // Hàm tạo khóa Mickey // public static int[] r = new int[100]; public static int[] s = new int[100]; public static int[] R = new int[100]; public static int[] S = new int[100]; 72 public static int FEEDBACK_BIT = 0; public static int[] RTAPS = new int[50] { 0, 1, 3, 4, 5, 6, 9, 12, 13, 16, 19, 20, 21, 22, 25, 28, 37, 38, 41, 42, 45, 46, 50, 52, 54, 56, 58, 60, 61, 63, 64, 65, 66, 67, 71, 72, 79, 80, 81, 82, 87, 88, 89, 90, 91, 92, 94, 95, 96, 97 }; public static int[] CLOCK_R(int intput_BIT_R, int control_BIT_R) { //FEEDBACK_BIT=intput_BIT_R xor r[99]; if (intput_BIT_R.ToString().Equals(r[99].ToString())) FEEDBACK_BIT = 0; else FEEDBACK_BIT = 1; R[0] = 0; for (int i = 1; i < 100; i++) { R[i] = r[i - 1]; } for (int i = 0; i < 100; i++) { for (int j = 0; j < 50; j++) { if (i == RTAPS[j]) 73 { if (R[i].ToString().Equals(FEEDBACK_BIT.ToString())) R[i] = 0; else R[i] = 1; } } } if (control_BIT_R == 1) { for (int i = 0; i < 100; i++) { if (R[i].ToString().Equals(r[i].ToString())) R[i] = 0; else R[i] = 1; } } for (int i = 0; i < 100; i++) { r[i] = R[i]; 74 } return r; }// hàm Clock ghi R Hàm tạo khóa Keystram (NEWSTREAM) public static int[] keyNEWSTREAM(int lenghtdata) { int[] a = new int[passdata.Length / 2]; int[] b = new int[passdata.Length / 2]; int[] c = new int[passdata.Length / 2]; int[] d = new int[passdata.Length / 2]; int[] z = new int[lenghtdata]; int t = 0; //nạp ghi a, b, c, c for (int i = 0; i < passdata.Length / 2; i++)// nap ghi a va b { a[i] = passdata[i*2]; b[i] = passdata[i*2+1]; } for (int i = 0; i < passdata.Length / 2; i++) { c[i] = 0; 75 d[i] = 1; } for (int i = 0; i < lenghtdata; i++) { if (initialValuedata[0] == 0) { z[i] = a[0] ^ c[0] & b[0] ^ d[0]; t = a[(passdata.Length / 4) - 1] & b[(passdata.Length / 4) - 1] ^ c[(passdata.Length / 4) - 1] & d[(passdata.Length / 4) - 1]; a[passdata.Length / - 1] = t ^ a[0]; b[passdata.Length / - 1] = t ^ b[0]; for (int j = 0; j < (passdata.Length / 2) - 1; j++) { c[j] = c[j + 1]; d[j] = d[j + 1]; } c[(passdata.Length / 2) - 1] = b[passdata.Length / - 1] ^ initialValuedata[0] ^ c[passdata.Length / - 1]; d[(passdata.Length / 2) - 1] = a[passdata.Length / - 1] ^ initialValuedata[0] ^ d[passdata.Length / - 1]; int valueiv0 = initialValuedata[0]; 76 for (int j = 0; j < initialValuedata.Length - 1; j++) { initialValuedata[j] = initialValuedata[j + 1]; } initialValuedata[initialValuedata.Length - 1] = valueiv0; } else { z[i] = b[0] ^ d[0] & a[0] ^ c[0]; t = a[(passdata.Length / 4) - 1] & b[(passdata.Length / 4) - 1] ^ c[(passdata.Length / 4) - 1] & d[(passdata.Length / 4) - 1]; int valuea0 = a[0]; int valueb0 = b[0]; c[passdata.Length / - 1] = t ^ c[0]; d[passdata.Length / - 1] = t ^ d[0]; for (int j = 0; j < (passdata.Length / 2) - 1; j++) { a[j] = a[j + 1]; b[j] = b[j + 1]; } 77 a[(passdata.Length / 2) - 1] = a[passdata.Length / - 1] ^ initialValuedata[0] ^ d[passdata.Length / - 1]; b[(passdata.Length / 2) - 1] = b[passdata.Length / - 1] ^ initialValuedata[0] ^ c[passdata.Length / - 1]; for (int j = 0; j < initialValuedata.Length - 1; j++) { initialValuedata[j] = initialValuedata[j + 1]; } initialValuedata [initialValuedata.Length - 1] = initialValuedata [initialValuedata.Length - 1] ^ 1; } } return z; }//hàm tạo khóa NEWSTREAM public static int[] keyGrain128(int lenghtdata) { int[] b = new int[lenghtdata + 128]; int[] s = new int[lenghtdata + 128]; int[] z = new int[lenghtdata]; for (int i = 0; i < 128; i++) { 78 b[i] = passdata[i]; } for (int i = 0; i < 96; i++) { s[i] = initialValuedata[i]; } for (int i = 96; i < 128; i++) { s[i] = 1; } for (int i = 0; i < lenghtdata; i++) { s[i + 128] = s[i] & s[i + 7] & s[i + 38] & s[i + 70] & s[i + 81] & s[i + 96]; b[i + 128] = s[i] & b[i] & b[i + 26] & b[i + 56] & b[i + 91] & b[i + 96] & b[i + 3] ^ b[i + 67] & b[i + 11] ^ b[i + 13] & b[i + 17] ^ b[i + 18] & b[i + 27] ^ b[i + 59] & b[i + 40] ^ b[i + 48] & b[i + 61] ^ b[i + 65] & b[i + 68] ^ b[i + 84]; } for (int i = 0; i < lenghtdata; i++) { 79 z[i] = b[i + 2] & b[i + 15] & b[i + 36] & b[i + 45] & b[i + 64] & b[i + 73] & b[i + 89] & b[i + 12] ^ s[i + 8] & s[i + 13] ^ s[i + 20] & b[i + 95] ^ s[i + 42] & s[i + 60] ^ s[i + 79] & b[i + 12] ^ b[i + 95] ^ s[i + 95] & s[i + 93]; } return z; } 80 ... v.v Mã hóa thực việc sử dụng thuật tốn mã hóa, thuật tốn mã hóa nghiên cứu thực thi hệ thống thơng tin liên lạc có xuất bên thứ ba Thuật toán mã hóa chia thành hai phần mã hóa khối mã hóa luồng. .. mã hóa khối phát triển, thiết kế mã hóa luồng cịn địi hỏi nhiều nghiên cứu Mã hóa luồng làm việc bit dịng liệu trình biến đổi thay đổi theo trình mã hóa Điều thú vị mã hóa khối chuyển thành mã. .. việc nghiên cứu thực mã hóa luồng tiếp tục nghiên cứu Bài luận văn trình bày bao gồm có chương: CHƯƠNG I : Tổng quan mã hóa Trình bày số lý thuyết mật mã học mã hóa, tóm tắt q trình mã hóa giải mã

Ngày đăng: 14/02/2021, 17:52

Xem thêm:

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN