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
HỌC VIỆN KỸ THUẬT MẬT MÃ KHOA AN TỒN THƠNG TIN BÁO CÁO BÀI TẬP LỚN MÔN HỌC MẬT MÃ ỨNG DỤNG TRONG AN TỒN THƠNG TIN ĐỀ TÀI: TÌM HIỂU, CÀI ĐẶT THUẬT TOÁN SHA-256 Giảng viên: Phạm Quốc Hồng Nguyễn Văn Nghị Nhóm sinh viên: Nguyễn Tuấn Anh Trần Văn Hoàng Nguyễn Đại Hiệp Hà Nội, Tháng 3-2015 Ý KIẾN CỦA GIẢNG VIÊN MỤC LỤC DANH MỤC HÌNH ẢNH MỞ ĐẦU CHƯƠNG 1: HÀM BĂM MẬT MÃ 1.1 HÀM BĂM 1.2 HÀM BĂM MẬT MÃ 1.2.1 Giới thiệu 1.2.2 Các tính chất hàm băm mật mã 1.2.2.1 Tính kháng tiền ảnh (Preimage resistance) 1.2.2.2 Tính kháng tiền ảnh thứ hai (2nd-Preimage resistance) 1.2.2.3 Tính kháng xung đột (Collission resistance) 1.2.3 Phân loại hàm băm mật mã 1.2.4 Cấu trúc thuật toán hàm băm 1.2.5 Ứng dụng hàm băm mật mã 1.2.6 Các hàm băm mật mã CHƯƠNG 2: THUẬT TOÁN SHA-256 11 2.1 GIỚI THIỆU SHA 11 2.2 SHA-256 12 CHƯƠNG 3: CÀI ĐẶT THUẬT TOÁN SHA-256 17 KẾT LUẬN 20 TÀI LIỆU THAM KHẢO 21 “Tìm hiểu, cài đặt thuật tốn SHA-256” DANH MỤC HÌNH ẢNH Hình 1: Cấu trúc tổng quát hàm băm Hình 2: Quá trình ký số Hình 3: Quá trình xác thực Hình 4: Hàm nén SHA-256 15 Hình 5: SHA-256 message schedule 16 Hình 6: Giao diện chương trình cài đặt thuật tốn SHA-256 17 Hình 7: Chức băm file 17 Hình 8: Chọn file cần băm 18 Hình 9: Giá trị băm trả thực băm file 18 Hình 10: Chức băm thơng điệp nhập vào từ bàn phím 18 Hình 11: Giá trị băm trả thực băm thông điệp nhập vào từ bàn phím 19 “Tìm hiểu, cài đặt thuật toán SHA-256” 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 Ở báo cáo này, tìm hiểu nội dung sau: CHƯƠNG 1: 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 2: THUẬT TỐN SHA-256 Trình bày thuật toán băm sử dụng rộng rãi SHA256 Chi tiết bước thuật tốn CHƯƠNG 3: 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 “Tìm hiểu, cài đặt thuật toán SHA-256” CHƯƠNG 1: HÀM BĂM MẬT MÃ 1.1 HÀM BĂM Hàm băm (hash function) giải thuật nhằm sinh giá trị băm tương ứng với khối liệu (có thể chuỗi kí tự, đối tượng lập trình hướng đối tượng, v.v ) Giá trị băm đóng vai trò gần khóa để phân biệt khối liệu Hàm băm thường dùng bảng băm nhằm giảm chi phí tính tốn tìm khối liệu tập hợp (nhờ việc so sánh giá trị băm nhanh việc so sánh khối liệu có kích thước lớn) Vì tính thơng dụng bảng băm, ngày nay, đa số ngơn ngữ lập trình cung cấp thư viện ứng dụng bảng băm, thường gọi thư viện collection có vấn đề như: tập hợp (collection), danh sách (list), bảng (table), ánh xạ (mapping), từ điển (dictionary) Thơng thường, lập trình viên cần viết hàm băm cho đối tượng nhằm tích hợp với thư viện bảng băm xây dựng sẵn Một hàm băm tốt phải thỏa mãn điều kiện sau: Tính tốn nhanh Các khố phân bố bảng Ít xảy đụng độ Xử lý loại khóa có kiểu liệu khác 1.2 HÀM BĂM MẬT MÃ 1.2.1 Giới thiệu Hàm băm mật mã hàm toán học chuyển đổi thơng điệp có độ dài thành dãy bit có độ dại cố định (tùy thuộc vào thuật toán băm) Dãy bit gọi thông điệp rút gọn (message digest) hay giá trị băm (hash value), đại diện cho thông điệp ban đầu Hàm h(x) gọi hàm băm thỗ mãn hai tính chất sau: Nén gọn (Compression): Hàm h(x) tương ứng chuỗi bit đầu vào x có chiều dài hữu hạn tuỳ ý vào chuỗi bit y = h(x) có chiều dài cố định n > cho trước “Tìm hiểu, cài đặt thuật tốn SHA-256” Dễ tính tốn (Easy of computation): Với chuỗi bit đầu vào x có chiều dài hữu hạn tuỳ ý, h(x) tính tốn dễ dàng 1.2.2 Các tính chất hàm băm mật mã 1.2.2.1 Tính kháng tiền ảnh (Preimage resistance) Với đầu y cho trước, khơng thể tìm liệu đầu vào x cho h(x)=y (hay khơng thể tìm thông điệp từ giá trị băm cho trước) 1.2.2.2 Tính kháng tiền ảnh thứ hai (2nd-Preimage resistance) Với liệu đầu vào x cho trước y = h(x), khơng thể tính tốn để tìm giá trị x’≠x cho h(x’)=h(x) (hay khơng thể tìm thơng điệp khác mà có giá trị băm) 1.2.2.3 Tính kháng xung đột (Collission resistance) Khơng thể tính tốn để tìm hai liệu đầu vào x x’ phân biệt cho chúng có giá trị băm h(x)=h(x’) (hay sửa thông điệp mà không làm thay đổi giá trị băm nó) 1.2.3 Phân loại hàm băm mật mã Dựa tham biến đầu vào hàm băm, hàm băm mật mã phân thành hai lớp: Lớp hàm băm sử dụng khoá (keyed hash functions), chẳng hạn MAC (Message Authentication Codes): nhận hai giá trị đầu vào o Thơng điệp cần tính giá trị băm o Khố bí mật để băm văn theo chuẩn quy định Lớp hàm băm khơng sử dụng khố (unkeyed hash functions): nhận giá trị đầu vào Thông điệp (message) Trong lớp hàm băm khơng sử dụng khố MDCs (Modification Detection Codes – mã nhận diện thay đổi) lớp lớp Lớp hàm lại tiếp tục phân thành lớp nhỏ hơn: “Tìm hiểu, cài đặt thuật tốn SHA-256” Hàm băm chiều (One-Way Hash Functions - OWHFs): hàm lớp thoả tính chất với mã băm biết trước, khơng thể tính tốn để tìm chuỗi bit đầu vào có mã băm với mã băm cho Hàm băm kháng xung đột (Collision Resistant Hash Functions-CRHFs): hàm lớp thoã mãn tính chất khơng thể tính tốn để tìm hai chuỗi bit có giá trị băm 1.2.4 Cấu trúc thuật tốn hàm băm Thành phần hàm băm hàm nén hàm biến đổi khác Hàm nén thực thi nhiều lần để băm thông điệp ban đầu hàm băm thành chuỗi có chiều dài cố định Các hàm biến đổi khác (có thể có khơng) nhận vào chuỗi bít sau lần cuối thực thi hàm nén cho kết mã băm cuối hàm băm Hình cấu trúc tổng quát hàm băm Hình 1: Cấu trúc tổng quát hàm băm Có nhiều thuật tốn hàm băm sử dụng chung cấu trúc Cụ thể, hàm băm thường gồm bước sau: “Tìm hiểu, cài đặt thuật tốn SHA-256” Bước 1: Phân chia thông điệp đầu vào chiều dài hữu hạn thành khối thơng điệp liên tiếp có chiều dài cố định r (giả sử m1, m2, m3,…, mk) Bước 2: Do m có độ dài nên ln có bước thêm bit phụ cho chiều dài chuỗi m’ chia hết cho r (trong bit thêm thường thêm 64 bit để lưu lại chiều dài ban đầu chuỗi trước chèn) Bước 3: Đưa khối thông điệp m1, m2, m3,…, mk qua hàm nén f hàm băm h(m) Bước 4: Kết khối thứ mi-1 sau qua hàm nén f nguồn liệu đầu vào cho bước thứ I 1.2.5 Ứng dụng hàm băm mật mã Xác thực mật khẩu: Mật thông thường không lưu dạng rõ (plaint text), mà dạng tóm tắt Để xác thực người dùng, mật người nhập vào băm hàm Hash so sánh với kết băm lưu trữ Xác thực thông điệp: Giá trị đầu vào (tin nhắn, liệu,…) bị thay đổi tương ứng giá trị băm bị thay đổi Do kẻ cơng phá hoại, chỉnh sửa liệu server biết Bảo vệ tính tồn vẹn tập tin, thơng điệp gửi qua mạng: Hàm băm mật mã có tính chất hàm chiều Từ khối liệu hay giá trị đầu vào đưa giá trị băm Như biết tính chất hàm chiều Kẻ công bắt giá trị băm thông điệp gửi đường truyền suy ngược lại nội dung thơng điệp Tạo chữ ký điện tử: Chữ ký số có cách đem mã hóa tóm tắt thơng điệp khóa bí mật người ký “Tìm hiểu, cài đặt thuật tốn SHA-256” Hình 2: Quá trình ký số Chứng thực chữ ký số Hình 3: Quá trình xác thực Đây ứng dụng quan trọng hàm băm, đặc biệt thương mại điện tử “Tìm hiểu, cài đặt thuật toán SHA-256” 1.2.6 Các hàm băm mật mã Thuật tốn HAVAL Kích thước đầu 256/224/192/1 60/128 Kích thước trạng thái 256 Kích thước khối 1024 Độ dài 64 Kích thước world 32 Xung đột Có khả MD2 128 384 128 Khơng lớn MD4 128 128 512 64 32 Có MD5 128 128 512 64 32 Có PANAMA 256 8736 256 No 32 Có lỗi RIPEMD 128 128 512 64 32 Có 128/256 128/256 512 64 32 Khơng 160/320 160/320 512 64 32 Khơng RIPEMD128/256 RIPEMD160/320 “Tìm hiểu, cài đặt thuật toán SHA-256” SHA-0 160 160 512 64 32 Khơng SHA-1 160 160 512 64 32 Có lỗi 256/224 256 512 64 32 Không 512/384 512 1024 128 64 Không 192/160/128 192 512 64 64 Không 160/256 256/384 80/128 Không 320/512 512/768 160/256 Không 512 512 512 256 Không SHA256/224 SHA512/384 Tiger(2)192/160/128 VEST-4/8 (hash mode) VEST-16/32 (hash mode) WHIRLPO OL “Tìm hiểu, cài đặt thuật tốn SHA-256” 10 CHƯƠNG 2: THUẬT TỐN SHA-256 2.1 GIỚI THIỆU SHA SHA (Secure Hash Algorithm) thuật toán băm an toàn dùng để chuyển đoạn liệu định thành đoạn liệu có chiều dài khơng đổi với xác suất khác biệt cao Thuật tốn SHA gọi an tồn theo chuẩn FIPS 180-2 phát hành ngày tháng năm 2002: Cho giá trị băm định tạo nên thuật tốn SHA, việc tìm lại đoạn liệu gốc không khả thi Việc tìm hai đoạn liệu định có kết băm tạo thuật tốn SHA khơng khả thi Bất thay đổi đoạn liệu gốc, dù nhỏ, tạo nên giá trị băm hoàn toàn khác với xác suất cao SHA gồm thuật toán SHA-1 (trả lại kết dài 160 bit), SHA-224 (trả lại kết dài 224 bit), SHA-256 (trả lại kết dài 256 bit), SHA-384 (trả lại kết dài 384 bit) SHA512 (trả lại kết dài 512 bit) Các tính chất thuật tốn băm an tồn: Kích thước (đơn vị: bit) Thuật tốn Thơng điệp Khối Từ Độ an tồn Thơng điệp (đơn vị: bit) rút gọn SHA-1 < 264 512 32 160 80 SHA-224 < 264 512 32 224 112 SHA-256 < 264 512 32 256 128 SHA-384 < 2128 1024 64 384 192 SHA-512 < 2128 1024 64 512 256 “Tìm hiểu, cài đặt thuật toán SHA-256” 11 2.2 SHA-256 SHA-256 với SHA-224, SHA-384 SHA-512 bốn giải thuật thuộc họ SHA gọi chung SHA-2 Về giải thuật, biến thể SHA-2 không khác Mặc dù chúng sử dụng giá trị biến số độ dài từ,… khác SHA-256 hoạt động giống MD4, MD5 SHA-1 Gồm bước bản: Bước 1: Tiền xử lý o Mở rộng thông điệp Thông điệp M mở rộng trước thực băm Mục đich việc mở rộng để đảm bảo thơng điệp mở rộng có độ dài bội số 512 Giả sử độ dài thông điệp M l bit Thêm bit vào cuối thông điệp, theo sau k bit (k số không âm nhỏ cho l + + k ≡ 448(mod512)) Sau thêm khối 64 bit biểu diễn nhị phân l Ví dụ: thơng điệp “abc”(8 bit ASCII) có độ dài × = 24 Thêm bít vào cuối 448 – (24+1) =423 bit Cuối thêm độ dài thông điệp Lúc độ dài thông điệp mở rộng 512 bit 01100001 01100010 01100011 o Phân tích thơng điệp Sau thơng điệp mở rộng, thơng điệp cần phân tích thành N khối 512 bit: M(1), M(2),…, M(N) Mỗi khối lại chia thành 16 từ 32 bit.M0(i) chứa 32 bit đầu khối i, M1(i) chứa 32 bit tiếp theo,… o Khởi tạo biến (căn bậc số nguyên tố đầu tiên) = 6a09e667 = bb67ae85 = 3c6ef372 = a54ff53a “Tìm hiểu, cài đặt thuật tốn SHA-256” 12 = 510e527f = 9b05688c = 1f83d9ab = 5be0cd19 Bước 2: Tính tốn giá trị băm Việc tính toán giá trị băm thực sau: For i = to N (N số khối thông điệp mở rộng) { o Khởi tạo a,b,c,d,e,f,g,h với giá trị băm trung gian thứ (i-1) (= giá trị băm ban đầu i =1) a⃪ b⃪ ⋮ h⃪ o Áp dụng chức nén SHA-256 để cập nhật biến a,b,c,d,e,f,g,h For j = to 63 { Tính Ch(e,f,g), Maj(a,b,c), T1 ⃪ h + T2 ⃪ , Wj + Kj + Wj + Maj(a,b,c) h⃪g g⃪f f⃪e “Tìm hiểu, cài đặt thuật tốn SHA-256” 13 e ⃪ d + T1 d⃪c c⃪b b⃪a a ⃪ T1 + T2 } o Tính tốn giá trị băm trung gian thứ i, H(i) ⃪a+ ⃪b+ ⋮ ⃪h+ } H(N) = ( , ,…, ) mã băm thông điệp M Định nghĩa sáu hàm sử dụng SHA-256: Mỗi hàm hoạt động theo từ 32 bit có đầu từ 32 bit Các hàm định nghĩa sau: Ch(x,y,z) = (x ⋀ y) (x ⋀ z) Maj(x,y,z) = (x ⋀ y) (x ⋀ z) (y ⋀ z) = R2(x) R13 (x) R22(x) = R6(x) R11 (x) R25(x) 0(x)= R7(x) R18(x) S3(x) 1(x)= R17(x) R19(x) S10(x) Trong đó: : phép XOR ⋀ : phép AND : phép phủ định + : phép cộng modul 232 Rn : quay phải n bit Sn : dịch phải n bit “Tìm hiểu, cài đặt thuật tốn SHA-256” 14 Các khối thơng điệp W0, W1,…, W63 tính tốn sau: Wj = for j = 0,1,…,15 For j = 16 to 63 { Wj ⃪ 1(Wj-2) + Wj + 0(Wj-15) + Wj-16 } Khởi tạo số K0,…, K63 (căn bậc 64 số nguyên tố đầu tiên) 428a2f98 71374491 b5c0fbcf e9b5dba5 3956c25b 59f111f1 923f82a4 ab1c5ed5 d807aa98 12835b01 243185be 550c7dc3 72be5d74 80deb1fe 9bdc06a7 c19bf174 e49b69c1 efbe4786 0fc19dc6 240ca1cc 2de92c6f 4a7484aa 5cb0a9dc 76f988da 983e5152 a831c66d b00327c8 bf597fc7 c6e00bf3 d5a79147 06ca6351 14292967 27b70a85 2e1b2138 4d2c6dfc a2bfe8a1 53380d13 650a7354 766a0abb 81c2c92e 92722c85 a81a664b c24b8b70 c76c51a3 d192e819 d6990624 f40e3585 106aa070 19a4c116 1e376c08 2748774c 34b0bcb5 391c0cb3 4ed8aa4a 5b9cca4f 748f82ee 78a5636f 84c87814 8cc70208 90befffa 682e6ff3 a4506ceb bef9a3f7 c67178f2 Hình 4: Hàm nén SHA-256 “Tìm hiểu, cài đặt thuật tốn SHA-256” 15 Hình 5: SHA-256 message schedule “Tìm hiểu, cài đặt thuật toán SHA-256” 16 CHƯƠNG 3: CÀI ĐẶT THUẬT TỐN SHA-256 Việc cài đặt thuật tốn SHA-256 triển khai ngơn ngữ lập trình java Giao diện chương trình tạo Netbean Giao diện chương trình: Hình 6: Giao diện chương trình cài đặt thuật tốn SHA-256 Chương trình xây dựng với chức năng, băm file (chọn Encrypt File) băm thông điệp nhập vào từ bàn phím (chọn Encrypt Message) Một số giao diện khác chương trình: Chức băm file: Hình 7: Chức băm file “Tìm hiểu, cài đặt thuật tốn SHA-256” 17 Chọn file: chọn đường dẫn file cần băm Hình 8: Chọn file cần băm Khi băm xong file, giá trị băm hiển thị textbox SHA-256 Hình 9: Giá trị băm trả thực băm file Chức băm thông điệp nhập vào từ bàn phím: Hình 10: Chức băm thơng điệp nhập vào từ bàn phím “Tìm hiểu, cài đặt thuật tốn SHA-256” 18 Thông điệp nhập vào ô textbox Message giá trị băm trả textbox SHA-256 Hình 11: Giá trị băm trả thực băm thông điệp nhập vào từ bàn phím “Tìm hiểu, cài đặt thuật toán SHA-256” 19 KẾT LUẬN Với phát triển mạnh mẽ Internet hoạt động giao dịch điện tử, vấn đề an tồn thơng tin ngày quan tâm Việc nghiên cứu, xây dựng hàm băm mật mã để phục vụ cho vấn đề coi quan trọng ý nghĩa Vì đề tài: “Tìm hiểu, cài đặt thuật tốn SHA-256” đưa với mục đích trình bày tổng quan hàm băm mật mã, giúp bạn hiểu rõ tính chất, cấu trúc ứng dụng hàm băm mật mã Đồng thời vào nghiên cứu thuật toán băm SHA-256 cài đặt thuật tốn SHA-256 ngơn ngữ java, giúp có nhìn chi tiết cách thức thực thuật tốn “Tìm hiểu, cài đặt thuật tốn SHA-256” 20 TÀI LIỆU THAM KHẢO [1] Hàm băm http://vi.wikipedia.org/wiki/H%C3%A0m_b%C4%83m [2] Hàm băm mật mã http://vi.wikipedia.org/wiki/H%C3%A0m_b%C4%83m_m%E1%BA%ADt_m%C3% A3_h%E1%BB%8Dc [3] SHA vi.wikipedia.org/wiki/SHA [4] Descriptions of SHA-256, SHA-384, SHA-512 http://csrc.nist.gov/groups/STM/cavp/documents/shs/sha256-384-512.pdf [5] Recommendation for Applications Using Approved Hash Algorithms http://csrc.nist.gov/publications/nistpubs/800-107-rev1/sp800-107-rev1.pdf “Tìm hiểu, cài đặt thuật toán SHA-256” 21