Hàm băm tốt có các thuộc tính sau:
Đưa ra một hàm băm của một tin nhắn, kẻ tấn công không thể tính toán được để tìm một tin nhắn khác sao cho băm của chúng giống hệt nhau.
Cho một cặp thông điệp, m 'và m, không thể tính toán được hai thông số sao cho h (m) = h (m')
Hai trường hợp không giống nhau. Trong trường hợp đầu tiên, có một hàm băm có sẵn mà bạn đang cố gắng tìm sự va chạm. Trong trường hợp thứ hai, bạn đang cố gắng tìm bất kỳ hai tin nhắn va chạm. Nhiệm vụ thứ hai dễ dàng hơn đáng kể do "nghịch lý" sinh nhật.
Trong đó hiệu suất không phải là vấn đề lớn, bạn nên luôn luôn sử dụng hàm băm an toàn. Có những cuộc tấn công rất thông minh có thể được thực hiện bằng cách buộc các va chạm trong một hàm băm. Nếu bạn sử dụng thứ gì đó mạnh mẽ ngay từ đầu, bạn sẽ tự bảo vệ mình trước những thứ này.
Không sử dụng MD5 hoặc SHA-1 trong các thiết kế mới. Hầu hết các nhà mật mã học, bao gồm tôi, sẽ xem xét chúng bị hỏng. Nguồn gốc của điểm yếu trong cả hai thiết kế này là thuộc tính thứ hai, mà tôi đã nêu ở trên, không giữ cho các công trình này. Nếu kẻ tấn công có thể tạo ra hai tin nhắn, m và m ', cả hai đều băm đến cùng một giá trị, chúng có thể sử dụng những tin nhắn này để chống lại bạn. SHA-1 và MD5 cũng bị tấn công mở rộng tin nhắn, có thể làm suy yếu nghiêm trọng ứng dụng của bạn nếu bạn không cẩn thận.
Một hàm băm hiện đại hơn như Whirpool là một lựa chọn tốt hơn. Nó không bị các cuộc tấn công mở rộng tin nhắn này và sử dụng toán học giống như AES sử dụng để chứng minh bảo mật chống lại một loạt các cuộc tấn công.
Mong rằng sẽ giúp!