Ngày này, với sự phát triển nhanh chóng của Internet và các ứng dụng giao dịch điện tử trên mạng, nhu cầu bảo vệ thông tin đi kèm cũng ngày càng được quan tâm và có ý nghĩa quan trọng. Một trong những công việc quan trọng của giao dịch điện tử chính là quá trình chứng thực nguồn gốc nội dung thông tin (chữ ký điện tử) và xác thực tính toàn vẹn dữ liệu. Để làm được điều này, chúng ta cần phải áp dụng ứng dụng chuẩn mật mã nâng cao, trong đó ứng dụng xây dựng các hàm băm mật mã là một trong những vấn đề cần được nghiên cứu và giải quyết. Tìm hiểu và nghiên cứu về hàm băm mật mã là đề tài rất thiết thực. Trong phần tài liệu này có kèm sản phẩm demo chạy bằng Java
BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT MÃ BÀI TẬP LỚN Môn học: Mật mã ứng dụng an tồn thơng tin Đề tài: Tìm hiểu nghiên cứu hàm băm mật mã Giáo viên hướng dẫn: Hoàng Đức Thọ Sinh viên thực hiện: Trần Minh Đức Vũ Văn Hưởng Đỗ Thị Thanh Huyền Lê Văn Hưng Đỗ Thành Hưng Hà Nội, tháng 12 năm 2019 Hà Nội, tháng 11 năm 2019 MỤC LỤC MỤC LỤC DANH SÁCH CÁC KÝ HIỆU TỪ VIẾT TẮT DANH SÁCH CÁC BẢNG DANH SÁCH CÁC HÌNH VẼ LỜI MỞ ĐẦU Chương I: Tổng quan hàm băm mật mã 1.1 Khái quát hàm băm mật mã 1.1.1 Định nghĩa hàm băm mật mã 1.1.2 Cấu trúc hàm băm mật mã 1.2 Phân loại hàm băm mật mã 10 1.2.1 Lớp hàm băm khơng có khóa 10 1.2.2 Lớp hàm băm có khóa 10 1.3 Các ứng dụng hàm băm mật mã 12 1.4 Giới thiệu số họ hàm băm phổ biến 17 1.5 Một số kiểu công lên hàm băm mật mã 19 1.5.1 Tấn công dựa “Nghịch lý ngày sinh” 19 1.5.2 Phương pháp công gặp (meet in the middle attack) 19 1.5.3 Tấn công vét cạn 20 Chương II: Thuật toán SHA-256 21 2.1 Tổng quan SHA 21 2.2 SHA-256 22 2.2.1 Ứng dụng SHA-256 22 2.2.2 Các bước làm việc SHA-256 22 Chương III: Cài đặt thuật toán SHA-256 27 KẾT LUẬN 30 TÀI LIỆU THAM KHẢO 31 DANH SÁCH CÁC KÝ HIỆU TỪ VIẾT TẮT SHA Secure Hash Algorithm MD Message-Digest algorithm MAC Message Authentication Code HMAC Hash based Message Authentication Code IPSEC Internet Protocol Securit NIST National Institute of Standards and Technology DKIM DomainKeys Identified Mail TLS Transport Layer Security PGP Pretty Good Privacy DANH SÁCH CÁC BẢNG Bảng 1.1: Một số hàm băm phổ biến thông số tương ứng 17 DANH SÁCH CÁC HÌNH VẼ Hình 1.1: Ánh xạ thông điệp giá trị băm song ánh…… Hình 1.2: Cấu trúc Mekle-Damrgard Hình 1.3: Mơ hình sử dụng hàm băm để xác thực thông báo 13 Hình 1.4: Mơ hình sử dụng hàm băm lược đồ chữ ký số 14 Hình 1.5: Chứng thực mật khẩu, theo tính chống trùng, 15 Hình 1.6: Ứng dụng hàm băm tải liệu mạng 16 Hình 2.1: Hàm nén SHA-256 26 Hình 2.2: SHA-256 message schedule……………………………………… 26 Hình 3.1: Giao diện chương trình chức băm file 27 Hình 3.2: Chọn file cần băm 28 Hình 3.3: Giá trị băm trả thực băm file 28 Hình 3.4: Chức băm thơng điệp nhập vào từ bàn phím 29 Hình 3.5: Giá trị băm trả thực băm thông điệp nhập vào từ bàn phím…………………………………………………………………….29 LỜI MỞ ĐẦU Ngày này, với phát triển nhanh chóng Internet ứng dụng giao dịch điện tử mạng, nhu cầu bảo vệ thông tin kèm ngày quan tâm có ý nghĩa quan trọng Một công việc quan trọng giao dịch điện tử q trình chứng thực nguồn gốc nội dung thông tin (chữ ký điện tử) xác thực tính tồn vẹn liệu Để làm điều này, cần phải áp dụng ứng dụng chuẩn mật mã nâng cao, ứng dụng xây dựng hàm băm mật mã vấn đề cần nghiên cứu giải Trong báo cáo này, chúng em tìm hiểu nội dung sau: • Chương I: Tổng quan hàm băm mật mã - Tìm hiểu khái niệm, tính chất, phân loại, cấu trúc ứng dụng hàm băm mật mã • Chương II: Thuật tốn SHA-256 - Trình bày thuật tốn băm sử dụng rộng rãi SHA-256 Chi tiết bước thuật tốn • Chương III: Cài đặt thuật tốn SHA-256 - Sử dụng ngơn ngữ lập trình Java để cài đặt thuật tốn SHA-256, thực demo băm đoạn thông điệp nhập vào từ bàn phím Chương I: Tổng quan hàm băm mật mã 1.1 Khái quát hàm băm mật mã 1.1.1 Định nghĩa hàm băm mật mã Các hàm băm đóng vai trò mật mã đại Hàm băm ℎ hàm toán học chuyển đổi xâu bit có độ dài hữu hạn tùy ý thành xâu bit có độ dài 𝑛 cố định Đầu gọi mã băm (hay kết băm, giá trị băm, vết, hay tóm lược thơng báo) Hàm băm đặc trưng hai tính chất sau: a) Tính chất nén: ℎ ánh xạ đầu vào 𝑥 có độ dài bit hữu hạn tùy ý tới đầu ℎ(𝑥) có độ dài bit 𝑛 hữu hạn (tùy vào thuật toán băm sử dụng) b) Tính chất dễ dàng tính tốn: Với ℎ cho trước đầu vào 𝑥, dễ dàng tính ℎ(𝑥) Hàm băm mật mã hàm băm mà ngồi hai tính chất cịn phải thỏa mãn ba tính chất an tồn nêu đây: a) Tính kháng tiền ảnh (tính chiều): Đối với hầu hết đầu xác định trước, khả tính tốn để tìm đầu vào mà băm cho đầu tương ứng (tức cho trước giá trị tóm lược 𝑦, khơng thể tìm tiền ảnh 𝑥 cho ℎ (𝑥 ) = 𝑦) b) Tính kháng tiền ảnh thứ hai: Khơng có khả tính tốn để tìm đầu vào thứ hai mà có đầu với đầu vào xác định trước (tức cho trước 𝑥 ∈ 𝑋, khả tính tốn để tìm tiền ảnh thứ hai 𝑥 + ∈ 𝑋 cho 𝑥 + ≠ 𝑥 và ℎ(𝑥 + ) = ℎ(𝑥)) c) Tính kháng va chạm: Khơng có khả tính tốn để tìm hai đầu vào 𝑥, 𝑥 + ∈ 𝑋 sao cho 𝑥 + ≠ 𝑥 ℎ(𝑥 + ) = ℎ(𝑥 ) Kích thước thơng điệp đầu vào 𝑥 cịn kích thước giá trị băm ℎ thông điệp nhỏ nên việc trùng giá trị băm khơng thể loại bỏ Tính chống trùng hàm băm yêu cầu việc tìm hai thơng điệp đầu vào 𝑥 phải khó khăn mặt thời gian tính tốn Khơng gian thơng điệp Khơng gian giá trị băm x1 h1 xi h2 x2 Hình 1.1: Ánh xạ thông điệp giá trị băm song ánh 1.1.2 Cấu trúc hàm băm mật mã Theo định nghĩa hàm băm mật mã ta thấy chất hàm băm hàm nén Hiện hầu hết hàm băm mật mã áp dụng cấu trúc hàm băm Merkle- Damrgard (MD5, SHA-1, SHA-2) cấu trúc Sponge (SHA-3) Cấu trúc Mekle-Damrgard: (b) Mô tả chi tiết đầu vào ban đầu x (a) Mô tả mức cao Hàm băm Đầu vào độ dài tùy ý Tiền xử lý Thêm bit đệm (padding) Hàm nén lặp Thêm độ dài khối Đầu có độ dài cố định Đầu Đầu vào định dạng x = x1 x … x t Xử lý lặp Biến đổi đầu có lựa chọn x Hàm nén ɰ i ɰ H i H t g Đầu h ( x ) = g Hình 1.2: Cấu trúc Mekle-Damrgard (Ht ) Hầu hết hàm băm khóa ℎ thiết kế xử lý lặp để băm đầu vào có độ dài hữu hạn tùy ý, việc xử lý khối đầu vào có độ dài cố định, hình 1.2 Đầu vào hàm băm thơng báo 𝑥 có độ dài hữu hạn tùy ý chia thành khối có độ dài cố định 𝑟-bit Bước tiền xử lý thường gồm việc thêm bit mở rộng (gọi padding) để thơng báo 𝑥 có độ dài bit bội độ dài khối 𝑟, (vì lý an toàn) thường gồm khối phần khối để độ dài bit đầu vào chưa thêm vào Mỗi khối 𝑥0 dùng làm đầu vào có độ dài cố định cho hàm băm bên 𝑓 (hàm nén ℎ, thực tính kết trung gian có độ dài bit 𝑛) hàm kết trung gian trước có độ dài 𝑛 bit khối đầu vào 𝑥023 Gọi 𝐻0 ký hiệu phần kết sau bước thứ 𝑖, xử lý chung cho hàm băm lặp với đầu vào 𝑥 = 𝑥3 𝑥6 … 𝑥8 mơ tả sau: 𝐻9 = 𝐼𝑉; 𝐻0 = 𝑓(𝐻0