Băm "an toàn" là một hàm băm được cho là khó "giả mạo" theo cách có thể lặp lại theo công thức mà không có kiến thức trước về thông điệp được sử dụng để tạo ra hàm băm. Vì thông tin đó nói chung là bí mật, do đó cần có hàm băm, đây là một đặc tính tốt của hàm băm dành cho sử dụng trong xác thực.
Hàm băm thường được coi là "an toàn" nếu, được đưa ra một thông báo M, hàm băm hàm băm () và giá trị băm H được tạo bởi hàm băm (M) với độ dài tính bằng bit L, không có cách nào dưới đây có thể được thực hiện dưới Thời gian O (2 L ):
- Cho băm () và H, tạo ra M. (kháng preimage)
- Cho hàm băm () và M, tạo ra M 2 khác nhau sao cho hàm băm (M 2 ) == H. (khả năng chống va chạm yếu)
- Cho hàm băm (), tạo ra bất kỳ M 1 và M 2 sao cho hàm băm (M 1 ) == băm (M 2 ). (khả năng chống va chạm mạnh)
Ngoài ra, hàm băm "an toàn" phải có độ dài băm L sao cho 2 Lkhông phải là một số bước khả thi để máy tính thực hiện phần cứng hiện tại. Băm số nguyên 32 bit chỉ có thể có 2,1 tỷ giá trị; trong khi một cuộc tấn công tiền tố (tìm một thông điệp tạo ra một hàm băm cụ thể H) sẽ mất một thời gian, nó không khả thi đối với nhiều máy tính, đặc biệt là các máy tính trong tay các cơ quan chính phủ được điều lệ với việc phá mã. Ngoài ra, theo thuật toán xác suất, thuật toán tạo và lưu trữ các tin nhắn ngẫu nhiên và băm của chúng sẽ có 50% trong việc tìm kiếm một hàm băm trùng lặp với mỗi tin nhắn mới sau khi chỉ thử 77.000 tin nhắn và có 75% cơ hội trúng nhân đôi chỉ sau 110.000. Ngay cả băm 64 bit vẫn có 50% cơ hội va chạm sau khi chỉ thử khoảng 5 tỷ giá trị. Đó là sức mạnh của cuộc tấn công sinh nhật vào băm nhỏ. Ngược lại,số thập phân (1,5 * 10 34 ).
Hầu hết các cuộc tấn công được chứng minh vào băm mật mã là các cuộc tấn công va chạm và đã chứng minh khả năng tạo ra các tin nhắn va chạm trong thời gian chưa đến 2 L (hầu hết vẫn là thời gian theo cấp số nhân, nhưng giảm một nửa số mũ là giảm độ phức tạp đáng kể vì nó tạo ra sự phức tạp hàm băm 256 bit dễ giải quyết như 128 bit, 128 bit dễ giải quyết như 64 bit, v.v.).
Ngoài kích thước băm nhỏ, các yếu tố khác có thể khiến băm không an toàn là:
Công việc thấp - một hàm băm được thiết kế để sử dụng bởi hàm băm hoặc cho các mục đích "tổng kiểm tra" khác thường được thiết kế để tính toán không tốn kém. Điều đó làm cho một cuộc tấn công vũ phu dễ dàng hơn nhiều.
"Trạng thái dính" - Hàm băm thiên về các mẫu đầu vào trong đó giá trị băm hiện tại của tất cả các đầu vào cho đến nay không thay đổi khi được cung cấp thêm một byte đầu vào cụ thể. Có "trạng thái dính" giúp dễ dàng tìm thấy các xung đột, bởi vì một khi bạn xác định được một thông báo tạo ra hàm băm "trạng thái dính", việc tạo ra các thông điệp khác có cùng hàm băm bằng cách nối thêm các byte đầu vào giữ cho băm ở trạng thái "dính" ".
Khuếch tán - Mỗi byte đầu vào của tin nhắn nên được phân phối giữa các byte của giá trị băm theo cách phức tạp như nhau. Các hàm băm nhất định tạo ra các thay đổi có thể dự đoán được đối với các bit nhất định trong hàm băm. Điều này một lần nữa làm cho sự va chạm tạo ra tầm thường; đưa ra một thông điệp tạo ra một hàm băm, các xung đột có thể được tạo ra dễ dàng bằng cách đưa ra các giá trị mới cho thông điệp chỉ ảnh hưởng đến các bit thay đổi có thể dự đoán được.