Hàm băm mật mã học

Trong ngành mật mã học, một hàm băm mật mã học (tiếng Anh: Cryptographic hash function) là một hàm băm với một số tính chất bảo mật nhất định để phù hợp việc sử dụng trong nhiều ứng dụng bảo mật thông tin đa dạng, chẳng hạn như chứng thực (authentication) và kiểm tra tính nguyên vẹn của thông điệp (message integrity). Một hàm băm nhận đầu vào là một xâu ký tự dài (hay thông điệp) có độ dài tùy ý và tạo ra kết quả là một xâu ký tự có độ dài cố định, đôi khi được gọi là tóm tắt thông điệp (message digest) hoặc chữ ký số (digital fingerprint).
Trong nhiều chuẩn và ứng dụng, hai hàm băm thông dụng nhất là MD5 và SHA-1. Năm 2005, người ta đã tìm ra lỗi bảo mật của cả hai thuật toán trên.

Các thuật toán có liên quan

Các giá trị tổng kiểm và mã kiểm soát lỗi (cyclic redundancy check - CRC) rất khác với các hàm băm mật mã học, và được dùng cho các ứng dụng khác. Nếu dùng cho bảo mật, các loại kiểm tra đó rất dễ bị tấn công.
Một mã xác thực thông điệp (message authentication code - MAC) lấy một thông điệp và một khóa bí mật, và tạo ra một "thẻ MAC" (MAC tag), sao cho kẻ tấn công khó có thể tạo một cặp (thông điệp, thẻ) hiệu lực khớp với thẻ được biết; ngoài các ứng dụng khác, loại mã hóa này dùng để ngăn chặn những kẻ tấn công tạo các thông điệp giả. Tuy đôi khi được gọi là "hàm băm có khóa" (keyed hash function), MAC phục vụ một mục đích rất khác và có các tính chất rất khác với một hàm băm mật mã học; ví dụ, nếu một người biết khóa MAC có thể dễ dàng tạo 2 thông điệp có cùng MAC, thì đây không phải một lỗi. Có thể dùng các hàm băm để tạo các hàm MAC; ví dụ, xem HMAC.

Ứng dụng của các hàm băm mật mã học

Một ứng dụng điển hình của một hàm băm mật mã học như sau: Alice đưa cho Bob một câu đố khó và tuyên bố rằng cô ấy đã giải được rồi. Bob muốn tự giải, nhưng cũng muốn chắc chắn là Alice đúng là đã giải được. Do đó, Alice viết đáp án, gắn thêm một nonce ngẫu nhiên, tính giá trị băm của nó, và đưa kết quả băm cho Bob (trong khi vẫn giữ bí mật đáp án và nonce). Bằng cách này, khi Bob tự giải xong, Alice có thể chứng minh rằng cô đã có đáp án từ trước bằng cách đưa nonce cho Bob.
Trong thực tiễn, Alice và Bob thường là các chương trình máy tính, và bí mật thường là cái gì đó không dễ lừa bằng một lời giải cho câu đó. Ứng dụng trên được gọi là một hệ thống tin cậy (commitment scheme). Một ứng dụng quan trọng khác của các hàm băm bảo mật là sự kiểm tra tính toàn vẹn của thông điệp. Ví dụ, việc xác định xem một file hay một thông điệp có bị sửa đổi hay không có thể thực hiện bằng cách so sánh tóm tắt được tính trước và sau khi gửi (hoặc một sự kiện bất kỳ nào đó). Còn có thể dùng tóm tắt thông điệp làm một phương tiện đáng tin cậy cho việc nhận dạng file. Một ứng dụng có liên quan là kiểm tra mật khẩu. Mật khẩu thường không được lưu dưới dạng văn bản rõ (clear text), mà ở dạng tóm tắt. Để xác thực một người dùng, mật khẩu do người đó nhập vào được băm và so sánh với kết quả băm được lưu trữ.
Do các lý do cả về bảo mật và hiệu năng chương trình, đa số các thuật toán chữ ký số nói rằng chỉ có tóm lược của thông điệp, chứ không phải toàn văn thông điệp, được "ký". Các hàm băm còn có thể được dùng để tạo các bit giả ngẫu nhiên (pseudorandom).
SHA-1, MD5, và RIPEMD-160 nằm trong số các thuật toán tóm tắt thông điệp được dùng rộng rãi nhất của năm 2005. Tháng 8 năm 2004, các nhà nghiên cứu đã tìm được các điểm yếu của một loạt hàm băm, trong đó có MD5, SHA-0 và RIPEMD. Tháng 2 năm 2005, người ta ghi nhận một tấn công đối với SHA-1. Tháng 8 năm 2005, người ta lại ghi nhận một tấn công khác đối với SHA-1.
Các hàm băm được dùng để nhận dạng các file trong các mạng chia sẻ tệp đồng đẳng. Ví dụ, trong một ed2k link, một biến thể của MD4 được kết hợp với kích thước file để cung cấp thông tin cho việc xác định nguồn file, tải xuống và kiểm tra nội dung.