Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 67 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
67
Dung lượng
2,23 MB
Nội dung
ĐẠI HỌC THÁI NGUYÊN ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THƠNG NGUYỄN QUANG TRUNG HỆ MÃ HĨA ĐỐI XỨNG VÀ ỨNG DỤNG TRONG VẤN ĐỀ BẢO MẬT TÀI LIỆU TẠI TRUNG TÂM KỸ THUẬT TÀI LIỆU NGHIỆP VỤ LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH THÁI NGUYÊN, 2017 ĐẠI HỌC THÁI NGUYÊN ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THƠNG NGUYỄN QUANG TRUNG HỆ MÃ HĨA ĐỐI XỨNG VÀ ỨNG DỤNG TRONG VẤN ĐỀ BẢO MẬT TÀI LIỆU TẠI TRUNG TÂM KỸ THUẬT TÀI LIỆU NGHIỆP VỤ Chuyên ngành: Khoa học máy tính Mã số: 60 48 01 01 LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH Người hướng dẫn khoa học: TS VŨ VINH QUANG THÁI NGUYÊN, 2017 ii LỜI CAM ĐOAN Sau trình học tập Trường Đại học công nghệ thông tin & truyền thông, với kiến thức lý thuyết thực hành tích lũy được, với việc vận dụng kiến thức vào thực tế, em tự nghiên cứu tài liệu, cơng trình nghiên cứu, đồng thời có phân tích, tổng hợp, đúc kết phát triển để hoàn thành luận văn thạc sĩ Em xin cam đoan luận văn cơng trình thân em tự tìm hiểu, nghiên cứu hoàn thành hướng dẫn thầy giáo TS Vũ Vinh Quang Thái Nguyên, tháng năm 2017 Học viên Nguyễn Quang Trung ii iii MỤC LỤC LỜI CAM ĐOAN ii MỤC LỤC iii DANH MỤC CÁC KÍ HIỆU, CHỮ VIẾT TẮT v DANH MỤC CÁC BẢNG BIỂU vi DANH MỤC CÁC HÌNH VẼ .vii LỜI NÓI ĐẦU CHƯƠNG 1: CÁC KHÁI NIỆM CƠ BẢN VỀ AN TỒN BẢO MẬT THƠNG TIN 1.1 Tổng quan an tồn bảo mật thơng tin .2 1.1.1 Khái niệm chung 1.1.2 Mục tiêu an toàn bảo mật thông tin 1.1.3 Các chiến lược an toàn hệ thống 1.2 Các kiến thức hệ mật mã 1.2.1 Khái niệm chung 1.2.2 Các thành phần hệ mật mã 1.2.3 Quy trình mã hóa giải mã 1.2.4 Phân loại hệ thống mã hóa 1.2.5 Các đặc trưng hệ thống mã hoá 12 1.2.6 Thám mã tính an toàn hệ mã 13 1.3 Cơ sở toán học mã hóa 16 1.3.1 Các thuật toán Z 17 1.3.2 Thuật toán Euclide 17 1.3.3 Khái niệm hàm Euler 18 1.3.4 Khái niệm đồng dư thức 19 1.3.5 Khái niệm số nghịch đảo 21 1.3.6 Định lý phần dư China CRT (Chinese Remainder Theorem) 21 1.3.7 Các thuật toán Zn 22 1.3.8 Thuật toán 22 CHƯƠNG 2: MỘT SỐ HỆ MÃ HÓA ĐỐI XỨNG 23 2.1 Giới thiệu 23 2.2 Quá trình mã hóa giải mã 25 iii iv 2.3 Một số hệ mã hóa đối xứng 25 2.3.1 Hệ mã Caesar 25 2.3.2 Hệ mã mật Hill 25 2.3.3 Hệ mã Affine 26 2.3.4 Hệ mã Vigenère 28 2.3.5 Phương pháp mã hóa khối 29 2.4 Hệ mã DES .30 2.4.1 Sơ đồ mã hóa 30 2.4.2 Thuật tốn mã hóa Triple DES 34 2.4.3 Thuật tốn mã hóa AES 36 2.5 Mật mã dòng 43 CHƯƠNG 3: MỘT SỐ KẾT QUẢ ỨNG DỤNG 46 3.1 Vấn đề bảo mật tài liệu trung tâm kỹ thuật tài liệu nghiệp vụ 46 3.2 Mô tả liệu thử nghiệm .47 3.3 Môi trường thử nghiệm số giao diện 47 3.3.1 Môi trường thử nghiệm 47 3.4 Kịch thử nghiệm kết .48 3.4.1 Tốc độ mã hóa theo số lượng liệu 48 3.4.2 Tốc độ giải mã theo số lượng liệu 49 3.4.3 Tốc độ mã hóa theo chế độ mã hóa 50 3.4.4 Tốc độ mã hóa theo kích thước khóa 51 KẾT LUẬN VÀ HƯỚNG NGHIÊN CỨU 52 TÀI LIỆU THAM KHẢO 53 PHỤ LỤC 54 iv v DANH MỤC CÁC KÍ HIỆU, CHỮ VIẾT TẮT STT Đầy đủ Viết tắt AES Ý nghĩa Advanced Encryption Chuẩn mã hóa cao cấp Standard BCNN Bội Chung Nhỏ Nhất CBC Cipher Block Chế độ mã hóa AES mã hóa Chaining sử dụng key kết block trước làm tham số DES Data Encryption Chuẩn mã hóa liệu Standard ECB GCD Electronic Code Chế độ mã hóa AES Book block mã hóa riêng rẽ Greatest Common Ước chung lớn Divisor MDV Mã Dịch Vòng TDES Triple DES DES bội ba Đơn vị thứ ba tin cậy 3DES TTP Trusted Third Party UCLN Ước Chung Lớn Nhất v vi DANH MỤC CÁC BẢNG BIỂU Bảng 1 Quan hệ độ dài khố thời gian dị khoá 15 Bảng Các thơng số AES 36 Bảng Bộ liệu thử nghiệm thuật toán AES 47 Bảng Bảng kết đo tốc độ mã hóa theo số lượng liệu (giây) 48 Bảng 3 Bảng kết đo tốc độ giải mã theo số lượng liệu (giây) 49 Bảng Bảng kết đo tốc độ mã hóa theo chế độ mã hóa (giây) 50 Bảng Bảng kết đo tốc độ mã hóa theo kích thước khóa (giây) 51 vi vii DANH MỤC CÁC HÌNH VẼ Hình 1 Mã hố với khố mã khoá giải giống .7 Hình Quy trình mã hóa giải mã Hình Sơ đồ mã hóa giải mã Hình Sơ đồ mã hóa giải mã khóa riêng .9 Hình Sơ đồ mã hóa giải mã khóa cơng khai 10 Hình Mơ hình hệ thống mã hóa đối xứng 24 Hình 2 Hình vng vigenère 29 Hình Sơ đồ hệ mã des 31 Hình DES bội hai (double des) .34 Hình DES bội ba (triple des) dùng khoá 35 Hình Thuật tốn mã aes 37 Hình Quá trình biến đổi mảng trạng thái thuật toán aes 37 Hình Ma trận thay byte (s-box) .39 Hình Thao tác dịch dịng .40 Hình 10 Thuật toán mở rộng khoá AES 42 Hình Biểu đồ tốc độ mã hóa theo số lượng liệu .48 Hình Biểu đồ tốc độ tốc độ giải mã theo số lượng liệu 49 Hình 3 Biểu đồ tốc độ mã hóa theo chế độ mã hóa 50 Hình Biểu đồ tốc độ mã hóa theo kích thước khóa .51 vii LỜI NĨI ĐẦU Mã hóa cơng cụ việc đảm bảo an toàn liệu Thời kỳ sơ khai, người sử dụng nhiều phương pháp để bảo vệ thơng tin bí mật Ban đầu, mật mã học sử dụng phổ biến quân đội, qua nhiều chiến tranh, vai trò mật mã ngày quan trọng mang lại nhiều thành không nhỏ, chúng tảng cho mật mã học ngày Ngày nay, ứng dụng mã hóa bảo mật thông tin sử dụng ngày phổ biến lĩnh vực khác giới, từ lĩnh vực an ninh, quân sự, quốc phòng lĩnh vực dân thương mại điện tử, ngân hàng… Với phát triển ngày nhanh chóng Internet ứng dụng giao dịch điện tử mạng, nhu cầu bảo vệ thông tin hệ thống ứng dụng điện tử ngày quan tâm có ý nghĩa quan trọng Cùng với phát triển khoa học máy tính, nghiên cứu ứng dụng chuẩn mã hóa ngày trở nên đa dạng Hiện nay, có nhiều phương pháp mã hóa, phương pháp có ưu, nhược điểm riêng Tùy theo yêu cầu môi trường ứng dụng mà người ta dùng phương pháp hay phương pháp Có mơi trường cần phải an tồn tuyệt đối thời gian chi phí Có mơi trường lại cần giải pháp “dung hòa” bảo mật chi phí Vấn đề bảo đảm an tồn cho hệ thống thông tin vấn đề quan trọng cần cân nhắc suốt trình thiết kế, thi công, vận hành bảo dưỡng hệ thống thơng tin Các hệ thống mã hóa chia thành hai loại: hệ mã hóa khóa đối xứng (việc giải mã mã hóa sử dụng chung khóa) hệ mã hóa cơng khai (mã hóa giải mã dùng khóa khác nhau) Trong phạm vi luận văn mình, tác giả tập trung vào nghiên cứu hệ mã hóa khố đối xứng (mã hóa khóa bí mật), tập trung vào thuật tốn mã hóa cổ điển, chuẩn mã hóa liệu DES chuẩn mã hố nâng cao AES Hệ mã hóa cơng khai có nhược điểm tốc độ mã hóa giải mã chậm, phù hợp sử dụng trao đổi khóa, hệ mã hóa đối xứng có tốc độ xử lý nhanh nhiều phù hợp với nhu cầu xử lý số lượng lớn tài liệu Dựa thực tế yêu cầu mã hóa trung tâm kỹ thuật tài liệu nghiệp vụ có đặc điểm đa dạng thể loại số lượng Chính tác giả lựa chọn nghiên cứu ứng dụng giải pháp mã hóa đối xứng cho tốn thực tế nơi tác giả cơng tác CHƯƠNG 1: CÁC KHÁI NIỆM CƠ BẢN VỀ AN TỒN BẢO MẬT THƠNG TIN Nội dung chương trình bày số khái niệm vấn đề an tồn bảo mật thơng tin, khái niệm hệ mật mã sở toán học lý thuyết đồng dư Các yêu cầu hệ thống mã hóa, khái niệm thám mã làm sở cho việc nghiên cứu hệ mã hóa chương Các kiến thức tham khảo tài liệu [1, 2, 3, 4] 1.1 Tổng quan an toàn bảo mật thông tin 1.1.1 Khái niệm chung Từ xưa đến thông tin yếu tố quan trọng hoạt động đời sống người Trong thời đại ngày nay, phương thức truyền đạt thông tin ngày đa dạng phát triển Với đời máy tính mạng máy tính, việc trao đổi thơng tin trở lên dễ dàng hơn, nhanh chóng hơn, đa dạng Nhưng kèm theo nguy xâm phạm thông tin ngày tăng Khi nhu cầu trao đổi thông tin liệu ngày lớn đa dạng, tiến điện tử - viễn thông công nghệ thông tin không ngừng phát triển ứng dụng để nâng cao chất lượng lưu lượng truyền tin quan niệm ý tưởng biện pháp bảo vệ thông tin liệu đổi Bảo vệ an tồn thơng tin liệu chủ đề rộng, có liên quan đến nhiều lĩnh vực thực tế có nhiều phương pháp thực để bảo vệ an tồn thơng tin liệu Các phương pháp bảo vệ an tồn thơng tin liệu tổng kết vào ba nhóm sau: - Bảo vệ an tồn thơng tin biện pháp hành - Bảo vệ an tồn thơng tin biện pháp kỹ thuật (phần cứng) - Bảo vệ an tồn thơng tin biện pháp thuật tốn (phần mềm) Ba nhóm ứng dụng riêng rẽ phối kết hợp Mơi trường khó bảo vệ an tồn thơng tin mơi trường đối phương dễ xâm nhập mơi trường mạng truyền tin Biện pháp hiệu kinh tế mạng truyền tin mạng máy tính biện pháp thuật tốn An tồn thơng tin bao gồm nội dung sau: - Tính bí mật: tính kín đáo riêng tư thơng tin 45 - fi : K P i -1L Với z L có quy tắc mã ez E quy tắc giải mã tương ứng dz D ez : PC dz: CP hàm thoả mãn dz(ez(x))= x với rõ x P Ta coi mã khối trường hợp đặc biệt mã dịng dùng khố khơng đổi: Zi = K với i 1 Sau số dạng đặc biệt mã dòng: - Mã dòng gọi đồng dịng khố khơng phụ thuộc vào xâu rõ, tức dịng khố tạo hàm khố K - Một hệ mã dịng gọi tuần hoàn với chu kỳ d zi+d= zi với số nguyên i Mã Vigenère với độ dài từ khố m coi mã dịng tuần hoàn với chu kỳ m Trong trường hợp này, khoá K = (k1, km ) Bản thân K tạo m phần tử dòng khoá: zi = ki, i m, sau dịng khố tự lặp lại Nhận thấy rằng, mã dòng tương ứng với mật mã Vigenère, hàm mã giải mã dùng giống hàm mã giải mã dùng MDV ez(x) = x+z dz(y) = y-z Các mã dòng thường mô tả chữ nhị phân tức P= C=L= Z2 Trong trường hợp này, phép toán mã giải mã phép cộng theo modulo ez(x) = x +z mod dz(x) = y +z mod Nếu kí hiệu "0" kí hiệu giá trị "sai" "1" kí hiệu giá trị "đúng" phép cộng theo moulo ứng với phép có loại trừ Bởi phép mã (và giải mã ) dễ dàng thực việc thiết kế vi mạch 45 46 CHƯƠNG 3: MỘT SỐ KẾT QUẢ ỨNG DỤNG 3.1 Vấn đề bảo mật tài liệu trung tâm kỹ thuật tài liệu nghiệp vụ Trung tâm Kỹ thuật Tài liệu nghiệp vụ (P6 - H57 - BCA) thành lập để phục vụ công xây dựng bảo vệ Tổ quốc miền Bắc kháng chiến chống Mỹ miền Nam tiến tới thống đất nước Được thành lập từ năm 1968, với lịch sử 45 năm phát triển trưởng thành, đầu tư trang thiết bị đại tiên tiến Trung tâm ln ln cố gắng hồn thành tốt nhiệm vụ mà Đảng, Nhà nước, Bộ Công An giao cho Luôn cố gắng đáp ứng nhu cầu đòi hỏi khắt khe chất lượng số lượng sản phẩm Thành tựu mà Trung tâm có ngày hơm ngồi cố gắng tập thể cán nhân viên có trình độ tay nghề cao cịn có đóng góp Ban lãnh đạo vững vàng kiến thức quản lý tinh thần trách nhiệm cao Với đặc thù đơn vị nghiên cứu, in ấn, loại tài liệu đặc biệt quan trọng cho Đảng - Nhà nước Bộ Cơng An mang tính chất bảo mật cao Trung tâm cố gắng mặt xứng đáng Trung tâm in tin cậy Đảng, chủ động khai thác nguồn lực, mở rộng hoạt động sản xuất kinh doanh pháp luật có hiệu bảo tồn phát triển vốn thực tốt nghĩa vụ với Nhà nước Ngày nay, với phát triển nhanh chóng hạ tầng truyền thơng, việc truyền thông tin mạng kèm nguy xâm nhập vào hệ thống thông tin, mạng liệu ngày gia tăng Nhiều chuyên gia tập trung nghiên cứu tìm giải pháp để đảm bảo an toàn, an ninh cho hệ thống, đặc biệt hệ thống mạng máy tính quan nhà nước Việc bảo mật cho hệ thống mạng máy tính thực theo nhiều phương diện, nhiều tầng khác nhau, bao gồm từ phương diện kiểm soát truy nhập vật lý vào hệ thống; thực sửa chữa, cập nhật, nâng cấp hệ điều hành vá lỗ hổng an ninh, quản lý hoạt động truyền tải văn mạng; xây dựng giải pháp bảo mật phần mềm để quản lý người dùng thông qua việc cấp quyền sử dụng, mật khẩu, mật mã, mã hóa liệu để che giấu thơng tin Nếu khơng có bảo vệ phụ trợ, mã hóa liệu mơi trường Internet thực khơng phải nơi an toàn để trao đổi liệu tài liệu thông tin mật 46 47 Với yêu cầu thực tiễn mã hóa bảo vệ liệu, tác giả tiến hành cài đặt số thuật toán mã đối xứng cổ điển hệ mã DES, sau đánh giá số kết sau chạy thử nghiệm liệu khác 3.2 Mô tả liệu thử nghiệm Đối với thuật toán mã hóa đối xứng cổ điển (Caesar, Affine,…), tác giả tiến hành thử nghiệm liệu văn cỡ nhỏ để đánh giá mức độ đắn chương trình thử nghiệm Với hệ mã DES, tác giả cài đặt thuật tốn AES với kích thước khóa 128 bit, 192 bit, 256 bit với hai chế độ mã hóa CBC ECB Bộ liệu thử nghiệm thuật toán AES sau: Bảng Bộ liệu thử nghiệm thuật toán AES Số lượng tệp Dung lượng Tổng dung lớn tệp (KB) lượng (KB) doc 1,600 22.8 36,480 txt 1,600 81.7 130,720 STT Tên liệu Loại tệp Bộ 1: Đề cương luận văn Bộ 2: Nội dung luận văn 3.3 Môi trường thử nghiệm số giao diện 3.3.1 Mơi trường thử nghiệm Chương trình “Thử nghiệm thuật tốn mã hóa bất đối xứng” viết ngơn ngữ C# Visual Studio 2012 sử dụng phiên Net Framewok 4.0 Yêu cầu tối thiểu hệ thống sử dụng chương trình: - Cài đặt Net Framework phiên 4.0 trở lên - Hệ điều hành tối thiểu Windows XP SP2 Phiên Net Framework 4.0 hỗ trợ hệ điều hành Windows XP SP3 trở lên Để cài đặt Windows XP SP2, cần cài đặt thêm phần mở rộng Windows Imaging Component (WIC) trước cài đặt Net Framework 4.0 47 48 Mã nguồn biên dịch thành tệp cài đặt môi trường Windows nên cần cài đặt thư viện yêu cầu chạy chương trình 3.4 Kịch thử nghiệm kết Với kịch thử nghiệm, tác giả tiến hành chạy 10 lần sau lấy kết trung bình Mơi trường để thử nghiệm máy tính cá nhân sử dụng chip Intel core i5 2.5GHz, nhớ 4G, cài đặt hệ điều hành Windows 64bit 3.4.1 Tốc độ mã hóa theo số lượng liệu Ở kịch này, tác giả cho chạy thuật tốn mã hóa AES với khóa 128 bit, chế độ mã hóa CBC hai liệu với số lượng tệp liệu lần thử nghiệm 100 tệp, 200 tệp, 400 tệp, 800 tệp 1600 tệp Kết thử nghiệm sau: Bảng Bảng kết đo tốc độ mã hóa theo số lượng liệu (giây) Số lượng 100 tệp 200 tệp 400 tệp 800 tệp 1600 tệp Bộ 2.45 4.92 9.38 21.89 45.15 Bộ 2.69 5.69 11.41 25.5 46.81 STT 50 45 40 35 30 25 20 15 10 100 tệp 200 tệp 400 tệp Bộ 800 tệp 1600 tệp Bộ Hình Biểu đồ tốc độ mã hóa theo số lượng liệu Ở lần thử nghiệm, số lượng tệp tăng lên hai lần so với lần trước Qua kết thu thấy tốc độ mã hóa gần tăng tuyến tính với số lượng tệp đầu 48 49 vào Như vậy, thời gian đáp ứng chương trình phù hợp với nhu cầu cần mã hóa với số lượng liệu lớn 3.4.2 Tốc độ giải mã theo số lượng liệu Ở kịch này, tác giả cho chạy thuật tốn giải mã AES với khóa 128 bit, chế độ mã hóa CBC hai liệu với số lượng tệp liệu lần thử nghiệm 100 tệp, 200 tệp, 400 tệp, 800 tệp 1600 tệp Kết thử nghiệm sau: Bảng 3 Bảng kết đo tốc độ giải mã theo số lượng liệu (giây) Số lượng 100 tệp 200 tệp 400 tệp 800 tệp 1600 tệp Bộ 2.32 4.02 8.77 24.05 44.27 Bộ 3.01 6.72 13.06 28.25 48.56 STT 60 50 40 30 20 10 100 tệp 200 tệp 400 tệp Bộ 800 tệp 1600 tệp Bộ Hình Biểu đồ tốc độ tốc độ giải mã theo số lượng liệu Kết kịch thử nghiệm tương đồng với q trình mã hóa liệu trình bày mục 3.4.1 49 50 3.4.3 Tốc độ mã hóa theo chế độ mã hóa Kịch thử nghiệm với hai liệu gồm 400 tệp, kích thước khóa 128 bit hai chế độ mã hóa CBC ECB Kết thử nghiệm: Bảng Bảng kết đo tốc độ mã hóa theo chế độ mã hóa (giây) Chế độ CBC ECB Bộ 8.954 9.036 Bộ 9.595 9.807 STT CBC ECB 8.4 8.6 8.8 9.2 Bộ 9.4 9.6 9.8 10 Bộ Hình 3 Biểu đồ tốc độ mã hóa theo chế độ mã hóa Trong kịch này, thời gian thực mã theo hai chế độ mã hóa chênh lệch khơng nhiều liệu Tuy nhiên CBC cho thời gian thực lâu chế độ mã hóa block móc xích với cho độ an toàn cao ECB 50 51 3.4.4 Tốc độ mã hóa theo kích thước khóa Kịch thử nghiệm với hai liệu gồm 400 tệp, chế độ mã hóa CBC kích thước khóa lần lược 128 bit, 192 bit 256 bit Kết thử nghiệm: Bảng Bảng kết đo tốc độ mã hóa theo kích thước khóa (giây) Kích thước khóa 128 bit 192 bit 256 bit Bộ 8.954 9.012 11.622 Bộ 9.595 9.644 12.832 STT 256 bit 192 bit 128 bit Bộ 10 12 14 Bộ Hình Biểu đồ tốc độ mã hóa theo kích thước khóa Kết thu kịch hồn tồn phù hợp với lý thuyết khóa có kích thước lớn thời gian mã hóa giải mã tăng 51 52 KẾT LUẬN VÀ HƯỚNG NGHIÊN CỨU Kết luận: Mã hóa thơng tin ngành quan trọng có nhiều ứng dụng đời sống xã hội Ngày ứng dụng mã hóa bảo mật thông tin sử dụng ngày phổ biến lĩnh vực khác giới, từ lĩnh vực an ninh, quân sự, quốc phòng lĩnh vực dân thương mại điện tử, ngân hàng, … Dựa yêu cầu thực tế bảo mật liệu quan công tác, tác giả nghiên cứu số phương pháp thơng tin sử dụng mã hóa đối xứng Phương pháp mã hóa đối xứng có ưu điểm tốc độ mã hóa nhanh an tồn kích thước khóa đủ lớn, phù hợp với nhu cầu mã hóa lượng lớn tài liệu Dựa kiến thức thu thập thập trình nghiên cứu, tác giả tiến hành cài đặt chương trình thử nghiệm với số thuật tốn khác đưa kết luận yếu tố ảnh hưởng đến tốc độ mã hóa giải mã chương trình Tuy vậy, luận văn cịn nhiều thiếu sót chưa cập nhật thuật tốn nhất, chương trình dừng lại mức thử nghiệm nên kết đạt đơn giản, để áp dụng thực tế cần phải cải tiến nhiều tính tốn đa luồng, xử lý song song, chế sinh khóa đủ phức tạp Hướng nghiên cứu: Hiện tại, nhiều phần mềm bảo mật, mã hoá liệu tích hợp trực tiếp số thiết bị phần cứng dùng để mã hoá liệu đường truyền Hiện loại thiết bị phần cứng tích hợp giải pháp mã hố đa điểm với yêu cầu tối ưu đặt kết nối đa điểm, tập trung liệu, mã hố tồn kết nối với tốc độ 10Gbps Với kết đạt nghiên cứu trên, tác giả tiếp tục đưa giải pháp cho phép nhúng phương pháp mã hóa lên thiết bị phần cứng phù hợp với thực tế để đảm bảo an tồn bảo mật thơng tin Ngồi phương pháp mã hóa đối xứng sử dụng chung khóa để mã hóa giải mã liệu, vấn đề trao đổi khóa hai điểm đầu cuối quan trọng Dựa thực tế đó, tác giả tiếp tục mở rộng nghiên cứu để kết hợp phương pháp mã hóa đối xứng mã hóa cơng khai để mã hóa liệu trao đổi khóa 52 53 TÀI LIỆU THAM KHẢO Tiếng Việt [1] Hà Huy Khối, Nhập mơn số học thuật toán, Nhà xuất khoa học, 1997 [2] Phạm Huy Điển - Hà Huy Khối, Mã hóa thơng tin - Cơ sở tốn học ứng dụng, Viện Toán học, 2004 [3] Nguyễn Xuân Dũng, Bảo mật thơng tin mơ hình ứng dụng, NXB Thống kê, 2012 [4] Phan Đình Diệu, Giáo trình lý thuyết mật mã an tồn thơng tin, Nhà xuất Đại học Quốc gia Hà Nội, 1999 [5] Vũ Vinh Quang, Giáo trình lý thuyết thơng tin, Nhà xuất Khoa học Kỹ thuật, năm 2010 Tiếng Anh [6] William Stallings, Cryptography and Network Security: Principles and Practice, Fourth Edition, Prentice Hall, 2006 [7] Cyber Vote, Report on Review of Cryptographic Protocols and Security, Techniques for Electronic Voting, 2002 [8] Fagen Li, Yupu Hu, and Shuanggen Liu, Efficient and provably secure multi-recipient signcryption from bilinear pairings, Cryptology ePrint Archive, Report 2006/238 – 250 [9] Josh Cohen Benaloh, Secret Sharing Homomorphisms: Keeping Shares of a Secret Secret (Extended Abstract) 53 54 PHỤ LỤC Một số mã nguồn luận văn Chương trình mã dịch vịng class dichVong : Modulo { public int dso { get; set; }//Dạng số; public char dchu { get; set; }//Dạng chữ public int tg { get; set; } public int mh { get; set; }//Giải mã : dk(x) = x-k mod 26; public dichVong(bool bl,char c,int k) { dso = getNum(c); if (bl) { tg = dso + k; mh = Mod(tg); dchu = getChar(mh); return; } tg = dso - k; mh = Mod(tg); dchu = getChar(mh); } } } Chương trình mã affine class Affine:Modulo { public int dso { get; set; }//Dạng số public char dchu { get; set; }//Dạng chữ public int t { get; set; }// t= a*x +b mã hóa t = a^-1*(y+b) public int mh { get; set; }//Mã hóa ek = a*x + b mod 26;//Giải mã dk = a^-1*b -b mod 26; /// /// /// true => mã hóa ,false giải mã /// ký tự cần mã hóa giải mã /// khóa a /// khóa b public Affine(bool bl,char c,int a,int b) { dso = getNum(c); if (bl) { t = a * dso + b; mh = Mod(t); dchu = getChar(mh); return; } t = nghichDao(a) * (dso - b); mh = Mod(t); dchu = getChar(mh); } } 54 55 Chương trình mã Vigenere class Vigenere { public int dso { get; set; } public int dsok { get; set; } public char dchu { get; set; } public int tg { get; set; } public int mh { get; set; } public Vigenere(bool bl,char c,char k) { dso = Modulo.getNum(c); dsok = Modulo.getNum(k); if (bl) { tg = dso + dsok;//x+k; mh = Modulo.Mod(tg);//x+k mod 26 dchu = Modulo.getChar(mh); return; } tg = dso - dsok; mh = Modulo.Mod(tg); dchu = Modulo.getChar(mh); } } } Chương trình mã hill class Hill:Modulo { public int dso1 { get; set; }//Dạng số; public int dso2 { get; set; }//Dạng số; public char dchu1 { get; set; }//Dạng chữ public char dchu2 { get; set; }//Dạng chữ public int tg1 { get; set; } //tg = k*x; public int tg2 { get; set; } //tg = k*x; public int mh1 { get; set; }// mh =k*x mod n public int mh2 { get; set; }// mh =k*x mod n public Hill(bool bl,int[] k,char c1,char c2) { dso1 = getNum(c1); dso2 = getNum(c2); if (bl)//Mã hóa { //Mã hóa chữ thứ tg1 = k[0] * dso1 + k[1] * dso2; mh1 = Mod(tg1); dchu1 = getChar(mh1); //Mã hóa chữ thứ 2; tg2 = k[2] * dso1 + k[3] * dso2; mh2 = Mod(tg2); dchu2 = getChar(mh2); return; } //Giải mã; int[] t = kmutru1modn(k); //Giải mã thứ 1; tg1 = t[0] * dso1 + t[2] * dso2; mh1 = Mod(tg1); 55 56 dchu1 = getChar(mh1); //Giải mã chữ thứ 2; tg2 = t[1] * dso1 + t[3] * dso2; mh2 = Mod(tg2); dchu2 = getChar(mh2); } //Tính detK public static int detK(int[] k) { int det = Mod(nghichDao(Mod((k[0] * k[3]) - (k[1] * k[2])))); return det; } //Tính k* public static int[] ksao(int[] k) { int[] temp = new int[4]; temp[0] = k[3]; temp[1] = -k[1]; temp[2] = -k[2]; temp[3] = k[0]; return temp; } //Tính k^-1; public static int[] kmutru1(int[] k) { int[] temp =new int[4]; int dk = detK(k); int[] ks = ksao(k); temp[0] = ks[0] * dk; temp[1] = ks[1] * dk; temp[2] = ks[2] * dk; temp[3] = ks[3] * dk; return temp; } public static int[] kmutru1modn(int[] k) { int[] temp = new int[4]; int[] kmt1 = kmutru1(k); temp[0] = Mod(kmt1[0]); temp[1] = Mod(kmt1[1]); temp[2] = Mod(kmt1[2]); temp[3] = Mod(kmt1[3]); return temp; } } Chương trình mã AES public class AESEncrytion { public static int keySize { get; set; } public static CipherMode cipherMode; public static byte[] AES_Encrypt(byte[] bytesToBeEncrypted, byte[] passwordBytes) { byte[] encryptedBytes = null; byte[] saltBytes = passwordBytes; 56 57 using (MemoryStream ms = new MemoryStream()) { using (RijndaelManaged AES = new RijndaelManaged()) { AES.KeySize = keySize; AES.BlockSize = 128; var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000); AES.Key = key.GetBytes(AES.KeySize / 8); AES.IV = key.GetBytes(AES.BlockSize / 8); AES.Mode = cipherMode;// CipherMode.CBC; using (CryptoStream cs = new CryptoStream(ms, CryptoStreamMode.Write)) { cs.Write(bytesToBeEncrypted, 0, bytesToBeEncrypted.Length); cs.Close(); } encryptedBytes = ms.ToArray(); } } AES.CreateEncryptor(), return encryptedBytes; } public static byte[] AES_Decrypt(byte[] bytesToBeDecrypted, byte[] passwordBytes) { byte[] decryptedBytes = null; byte[] saltBytes = passwordBytes; using (MemoryStream ms = new MemoryStream()) { using (RijndaelManaged AES = new RijndaelManaged()) { AES.KeySize = keySize; AES.BlockSize = 128; var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000); AES.Key = key.GetBytes(AES.KeySize / 8); AES.IV = key.GetBytes(AES.BlockSize / 8); //AES.Mode = CipherMode.CFB; AES.Mode = cipherMode; using (CryptoStream cs = new CryptoStream(ms, CryptoStreamMode.Write)) { cs.Write(bytesToBeDecrypted, 0, bytesToBeDecrypted.Length); cs.Close(); } decryptedBytes = ms.ToArray(); } } return decryptedBytes; } public static string Encrypt(string text, byte[] passwordBytes) { 57 AES.CreateDecryptor(), 58 byte[] originalBytes = Encoding.UTF8.GetBytes(text); byte[] encryptedBytes = null; passwordBytes = SHA256.Create().ComputeHash(passwordBytes); int saltSize = GetSaltSize(passwordBytes); byte[] saltBytes = GetRandomBytes(saltSize); byte[] bytesToBeEncrypted = new byte[saltBytes.Length + originalBytes.Length]; for (int i = 0; i < saltBytes.Length; i++) { bytesToBeEncrypted[i] = saltBytes[i]; } for (int i = 0; i < originalBytes.Length; i++) { bytesToBeEncrypted[i + saltBytes.Length] = originalBytes[i]; } encryptedBytes = AES_Encrypt(bytesToBeEncrypted, passwordBytes); return Convert.ToBase64String(encryptedBytes); } public static byte[] EncryptFile(string filePath, byte[] passwordBytes) { byte[] originalBytes = File.ReadAllBytes(filePath); byte[] encryptedBytes = null; passwordBytes = SHA256.Create().ComputeHash(passwordBytes); int saltSize = GetSaltSize(passwordBytes); byte[] saltBytes = GetRandomBytes(saltSize); byte[] bytesToBeEncrypted = new byte[saltBytes.Length + originalBytes.Length]; for (int i = 0; i < saltBytes.Length; i++) { bytesToBeEncrypted[i] = saltBytes[i]; } for (int i = 0; i < originalBytes.Length; i++) { bytesToBeEncrypted[i + saltBytes.Length] = originalBytes[i]; } encryptedBytes = AES_Encrypt(bytesToBeEncrypted, passwordBytes); return encryptedBytes; } public static string Decrypt(string decryptedText, byte[] passwordBytes) { byte[] bytesToBeDecrypted = Convert.FromBase64String(decryptedText); passwordBytes = SHA256.Create().ComputeHash(passwordBytes); byte[] decryptedBytes = AES_Decrypt(bytesToBeDecrypted, passwordBytes); 58 59 int saltSize = GetSaltSize(passwordBytes); byte[] originalBytes = new byte[decryptedBytes.Length - saltSize]; for (int i = saltSize; i < decryptedBytes.Length; i++) { originalBytes[i - saltSize] = decryptedBytes[i]; } return Encoding.UTF8.GetString(originalBytes); } public static byte[] DecryptFile(string filePath, byte[] passwordBytes) { byte[] bytesToBeDecrypted = File.ReadAllBytes(filePath); passwordBytes = SHA256.Create().ComputeHash(passwordBytes); byte[] decryptedBytes = AES_Decrypt(bytesToBeDecrypted, passwordBytes); int saltSize = GetSaltSize(passwordBytes); byte[] originalBytes = new byte[decryptedBytes.Length - saltSize]; for (int i = saltSize; i < decryptedBytes.Length; i++) { originalBytes[i - saltSize] = decryptedBytes[i]; } return originalBytes; } public static int GetSaltSize(byte[] passwordBytes) { var key = new Rfc2898DeriveBytes(passwordBytes, passwordBytes, 1000); byte[] ba = key.GetBytes(2); StringBuilder sb = new StringBuilder(); for (int i = 0; i < ba.Length; i++) { sb.Append(Convert.ToInt32(ba[i]).ToString()); } int saltSize = 0; string s = sb.ToString(); foreach (char c in s) { int intc = Convert.ToInt32(c.ToString()); saltSize = saltSize + intc; } return saltSize; } public static byte[] GetRandomBytes(int length) { byte[] ba = new byte[length]; RNGCryptoServiceProvider.Create().GetBytes(ba); return ba; } } 59 ... CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THƠNG NGUYỄN QUANG TRUNG HỆ MÃ HĨA ĐỐI XỨNG VÀ ỨNG DỤNG TRONG VẤN ĐỀ BẢO MẬT TÀI LIỆU TẠI TRUNG TÂM KỸ THUẬT TÀI LIỆU NGHIỆP VỤ Chuyên ngành: Khoa học máy tính Mã số:... 1.2.4.1 Mã hóa khóa bí mật Các hệ thống mã hóa với khóa bí mật cịn gọi mã hóa khóa riêng, mã hóa đối xứng sử dụng khóa cho trình mã hóa lẫn q trình giải mã Có hai loại thuật tốn mã hóa bí mật :... hệ mã hóa khóa đối xứng (việc giải mã mã hóa sử dụng chung khóa) hệ mã hóa cơng khai (mã hóa giải mã dùng khóa khác nhau) Trong phạm vi luận văn mình, tác giả tập trung vào nghiên cứu hệ mã hóa