Bạn là người phù hợp nhất. Nếu hệ thống của bạn không có bất kỳ đối thủ nào, việc sử dụng hàm băm mật mã là quá mức cần thiết cho các thuộc tính bảo mật của chúng.
Va chạm phụ thuộc vào số lượng bit, b, các hàm băm của bạn và số của băm giá trị, N, bạn ước tính để tính toán. Tài liệu học thuật bảo vệ xác suất va chạm này phải dưới xác suất lỗi phần cứng, do đó ít có khả năng gây xung đột với hàm băm hơn so sánh dữ liệu byte-by-byte [ref1, ref2, ref3, ref4, ref5]. Xác suất lỗi phần cứng nằm trong phạm vi 2^-12 và 2^-15 [ref6]. Nếu bạn mong muốn tạo ra N = 2^q giá trị băm thì khả năng va chạm của bạn có thể được đưa ra bởi phương trình này, trong đó đã đưa vào tài khoản birthday paradox:
Số bit của hàm băm của bạn là tỷ lệ thuận với độ phức tạp tính toán của nó. Vì vậy, bạn quan tâm đến việc tìm kiếm hàm băm với các bit tối thiểu có thể, trong khi có thể duy trì xác suất va chạm ở các giá trị chấp nhận được.
Dưới đây là một ví dụ về cách làm cho phân tích rằng:
Từ phương trình rằng xác suất va chạm trong vài kích thước băm như sau:
- P (hash = 64 bit) = 2^(2 * 25-64 + 1) = 2^-13 (nhỏ hơn 2^-12)
- P (băm = 128 bit) = 2^(2 * 25-128 + 1) 2^-77 (cách nhỏ hơn 2^-12)
Bây giờ bạn chỉ cần quyết định hàm băm không mã hóa nào của 64 hoặc 128 bit bạn sẽ sử dụng, biết 64 bit nó khá gần với xác suất lỗi phần cứng (nhưng sẽ nhanh hơn) và 128 bit là một lựa chọn an toàn hơn nhiều (mặc dù chậm hơn).
Dưới đây bạn có thể tìm thấy một danh sách nhỏ được xóa khỏi wikipedia các hàm băm mật mã không. Tôi biết Murmurhash3 và nó là nhanh hơn nhiều so với bất kỳ hàm băm mật mã:
- Fowler–Noll–Vo: 32, 64, 128, 256, 512 và 1024 bit
- Jenkins: 64 và 128 bit
- MurmurHash: 32, 64, 128, và 160 bit
- CityHash: 64, 128 và 256 bit
Trước hết, cảm ơn bạn đã dành thời gian giải thích điều này; Tôi rất trân trọng điều này. Thứ hai, tôi muốn hỏi một câu hỏi làm rõ: làm thế nào để bạn bảo vệ khác với một đối thủ so với một số lượng lớn các tệp? Không phải là kết quả cuối cùng giống nhau: thế hệ của đủ dữ liệu mà cuối cùng bạn tìm thấy hai mẩu dữ liệu mà băm giống nhau không? (Hoặc ngẫu nhiên, hoặc thông qua phân tích nhắm mục tiêu của thuật toán.) –