Hàm băm có khóa không dễ bị xung đột/nghịch lý sinh nhật vì kẻ tấn công không có khóa; bạn không thể thực hiện bất kỳ phép tính trước nào và tạo một tập hợp các giá trị băm đã biết vì điều đó (tốt, bạn có thể làm được nếu bạn có một Oracle có khóa, nhưng trong trường hợp đó, Oracle sẽ ký dữ liệu ngẫu nhiên được gửi đến nó).
Vì vậy, bạn đánh giá thấp khả năng bảo mật do HMAC cung cấp; trong hầu hết các trường hợp, nó cung cấp bảo mật gần giống với kích thước / kích thước đầu ra của khóa. Xem thêm keylength.com/NIST khuyến nghị chẳng hạn (bạn cần xem "Hash (B)" cho HMAC trong bảng).
Tuy nhiên, bạn đang sử dụng y = SHA384(w)
. Bây giờ nếu kẻ tấn công có thể thử và tạo xung đột cho các giá trị cụ thể của w
, điều đó có nghĩa là xung đột hàm băm được sử dụng trong đầu vào HMAC, điều này tất nhiên cũng sẽ dẫn đến cùng một giá trị HMAC. Vì vậy, ở đây giới hạn sinh nhật được áp dụng.
Vì vậy, có, trong trường hợp này, bạn có thể thử và sử dụng SHA-384 hoặc SHA-512 (vì các cuộc tấn công mở rộng độ dài sẽ không dẫn đến xung đột, vì vậy chúng không nằm trong chủ đề). SHA-384 có thể được sử dụng nếu bạn nghi ngờ rằng cần có một khối băm khác nếu SHA-512 được sử dụng; SHA-384 sau đó có thể hiệu quả hơn một chút - nếu hiệu quả đó là bắt buộc.
Tuy nhiên, xin lưu ý rằng chúng tôi thường cho rằng SHA-256 đã có độ mạnh 128 bit ngay cả khi giả định các cuộc tấn công sinh nhật, do đó, vẫn không cần thiết phải sử dụng SHA-384 ngay cả khi đó.