Dựa theo cái này có ít nhất 6 "thuộc tính" mà tất cả các hàm băm bảo mật bằng mật mã đều cố gắng đạt được:
- xác định: cùng một thông báo luôn dẫn đến cùng một hàm băm;
- Nhanh: tính toán giá trị băm cho bất kỳ thông báo cụ thể nào một cách nhanh chóng;
- chức năng một chiều: không thể tạo một thông báo từ giá trị băm của nó ngoại trừ bằng cách thử tất cả các thông báo có thể;
- hiệu ứng tuyết lở: một thay đổi nhỏ đối với thông báo sẽ thay đổi giá trị băm nhiều đến mức giá trị băm mới có vẻ không tương quan với giá trị băm cũ;
- chống va chạm: không thể tìm thấy hai thông báo khác nhau có cùng giá trị băm
- Chống tấn công trước hình ảnh: một cuộc tấn công tiền hình ảnh vào các hàm băm mật mã cố gắng tìm một thông báo có giá trị băm cụ thể. Hàm băm mật mã phải chống lại các cuộc tấn công vào hình ảnh trước của nó.
3 cái đầu tiên tôi nghĩ là khá dễ tuân thủ theo như tôi có thể tưởng tượng cho đến nay (chưa triển khai chức năng băm bảo mật bằng mật mã). Nhưng làm thế nào để bạn thiết kế một cái gì đó có 3 chữ cái cuối cùng?
- Hiệu ứng tuyết lở.
- Chống va chạm.
- Chống tấn công trước hình ảnh.
Có những điều cụ thể mà bạn có thể làm khi thiết kế một hàm băm để làm cho nó có 3 thuộc tính này bằng cách nào đó không? Làm thế nào để những người tạo ra các hàm băm mật mã từng đoạt giải thưởng làm điều đó?
Nếu không có nguyên tắc nào để áp dụng, cách tốt nhất tiếp theo là biết nên nghiên cứu những ví dụ nào để hiểu rõ hơn về cách họ quản lý để tuân thủ các thuộc tính này. Trong trường hợp đó, những bài báo hoặc thuật toán băm nào là tốt để nghiên cứu và phần nào cần tập trung vào những trường hợp đó?