Một hàm băm tốt có các thuộc tính sau:
Cho một băm của thông điệp đó là tính toán không khả thi đối với một kẻ tấn công để tìm thông điệp khác mà băm của họ giống hệt nhau.
Cho một cặp thông điệp, m 'và m, nó là tính toán để tìm hai ví dụ rằng h (m) = h (m')
Hai trường hợp là không giống nhau. Trong trường hợp đầu tiên, có một băm đã tồn tại từ trước mà bạn đang cố gắng tìm ra một vụ va chạm. Trong trường hợp thứ hai, bạn đang cố gắng tìm bất kỳ hai thư nào va chạm. Nhiệm vụ thứ hai là dễ dàng hơn đáng kể do sinh nhật "nghịch lý".
Trường hợp hiệu suất không phải là vấn đề lớn, bạn nê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 ép xung đột trong một băm. Nếu bạn sử dụng một cái gì đó mạnh mẽ ngay từ đầu, bạn sẽ bảo vệ mình chống lại những điều này.
Không sử dụng MD5 hoặc SHA-1 trong thiết kế mới. Hầu hết các nhà mật mã, tôi đưa vào, sẽ xem chúng bị hỏng. Nguồn gốc của sự yếu kém trong cả hai thiết kế này là tài sản thứ hai, mà tôi đã nêu ở trên, không giữ cho những công trình này. Nếu kẻ tấn công có thể tạo ra hai thông điệp, m và m ', thì cả hai hàm băm đều có cùng giá trị mà chúng có thể sử dụng những thông điệp này chống lại bạn. SHA-1 và MD5 cũng bị tấn công tin nhắn mở rộng, 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à lựa chọn tốt hơn. Nó không bị các cuộc tấn công tin nhắn mở rộng và sử dụng cùng một toán học như AES sử dụng để chứng minh an ninh chống lại một loạt các cuộc tấn công.
Hy vọng điều đó sẽ hữu ích!
Nguồn
2008-08-29 16:41:57
Bạn đã cân nhắc sử dụng một hoặc nhiều hàm băm mục đích chung sau: http://www.partow.net/programming/hashfunctions/index.html –
Trong fnv_func, loại p [i] là char, điều gì sẽ xảy ra với h sau lần lặp đầu tiên? Được thực hiện có mục đích? –
@martinatime cho biết: * Có một loạt thông tin về hàm băm trong wikipedia http://en.wikipedia.org/wiki/Hash_function và cuối bài viết này http://www.partow.net/programming/hashfunctions/ index.html có các thuật toán được triển khai bằng nhiều ngôn ngữ khác nhau. * – 2501