Hàm băm mật mã là một phép biến đổi nhận đầu vào (hoặc thông điệp) và trả về chuỗi có kích thước cố định, gọi là giá trị băm. Giá trị băm h được tạo bởi hàm H dạng:
h = H(M)
trong đó M là thông điệp độ dài biến đổi và H(M) là giá trị băm độ dài cố định.
Hàm băm là các hàm toán học phổ biến trong mật mã học để thực hiện bảo mật. Hàm băm chuyển đổi giá trị đầu vào kích thước tùy ý thành giá trị kích thước cố định. Do đó, đầu vào có thể là bất kỳ độ dài nào nhưng đầu ra luôn có độ dài cố định. Đầu ra được gọi là giá trị băm hoặc băm.
Việc sử dụng chung của băm là kiểm tra mật khẩu. Khi người dùng nhập mật khẩu, băm của mật khẩu được tạo và so sánh với băm trong cơ sở dữ liệu. Nếu cả hai băm giống nhau, người dùng được phép đăng nhập, ngược lại phải nhập lại mật khẩu.
Giá trị băm được thêm vào thông điệp tại nguồn khi thông điệp được coi là chính xác. Người nhận xác thực thông điệp bằng cách tính lại giá trị băm.
Hàm băm tạo chuỗi độ dài bất kỳ làm đầu vào và tạo chuỗi độ dài cố định đóng vai trò như một loại chữ ký cho dữ liệu hỗ trợ. Theo cách này, người biết giá trị băm không thể suy ra thông điệp gốc, nhưng người biết thông điệp gốc có thể chứng minh băm được tạo từ thông điệp đó.
Hàm băm mật mã nên hoạt động như một hàm ngẫu nhiên nhưng vẫn xác định và tính toán hiệu quả. Các hàm băm mật mã là công cụ thiết yếu trong mật mã học và được dùng để thực hiện nhiều mục tiêu bảo mật như tính xác thực, chữ ký số, tạo số giả ngẫu nhiên, giấu tin số, đóng dấu thời gian số, v.v.
Có một số yêu cầu của hàm băm như sau:
Hàm băm tạo dấu vân tay của một tập tin, thông điệp hoặc khối thông tin khác. Hàm băm H nên có các thuộc tính sau:
Hàm băm có thể áp dụng cho khối thông tin bất kỳ kích thước nào.
H(x) dễ dàng tính toán cho bất kỳ x cho trước, làm cho cả triển khai phần cứng và phần mềm trở nên thực tế.
Với bất kỳ giá trị h cho trước, về mặt tính toán là không thể tìm x sao cho H(x) = h. Thuộc tính này gọi là tính một chiều (one-way property).
Với bất kỳ khối x cho trước, về mặt tính toán là không thể tìm y ≠ x với H(y) = H(x). Thuộc tính này gọi là kháng va chạm yếu (weak collision resistance).
Về mặt tính toán là không thể tìm cặp (x, y) sao cho H(x) = H(y). Thuộc tính này gọi là kháng va chạm mạnh (strong collision resistance).