Câu hỏi đặt ra là đoán hàm nén là gì và nó sử dụng các vòng như thế nào. Điều đó là không xác định, không, việc tăng số vòng trong chức năng nén cuối cùng không được đảm bảo để ngăn chặn cuộc tấn công mở rộng độ dài, ngay cả khi chức năng nén được thay đổi và được cải thiện bằng cách thêm nhiều vòng hơn vào nó.
Bằng chứng bằng phản ví dụ: sửa đổi SHA-512 bằng cách
- loại bỏ OR độc quyền ở cuối mỗi chức năng nén, thực tế là sử dụng mật mã khối của Davies-Meyer chức năng nén trực tiếp như chức năng nén;
- và sửa đổi lịch trình khóa của mật mã đó để nó lặp lại sau số vòng được sử dụng trong mật mã khối của chức năng nén (nhưng mật mã khối đó lại an toàn)
- và nhân đôi số vòng trong mật mã khối đó trong hàm nén cuối cùng, sử dụng lại các hằng số giống như trong nửa đầu
Sự kết hợp đó có tác dụng băm hai lần khối cuối cùng của thông báo được mở rộng và sử dụng chức năng nén có thể đảo ngược. Điều đó khiến hàm băm bị suy yếu về mặt lý thuyết trước một số cuộc tấn công, nhưng vẫn không thể bị phá vỡ từ mọi quan điểm thực tế. Và điều đó khiến nó dễ bị tấn công kéo dài trong một số trường hợp. Ví dụ: khi đầu vào không xác định là một khối thông báo (128 byte) và chúng tôi biết đó là hàm băm, chúng tôi có thể tính toán chắc chắn hàm băm của đầu vào 3 khối (384 byte) bắt đầu như khối gốc, tiếp theo là hai lần khối đã biết khối bằng với khối đệm của SHA-512 cho đầu vào 128 byte.
Mặt khác, nếu thay đổi mà chúng ta thực hiện trong chức năng nén cuối cùng làm cho nó về cơ bản không liên quan đến nén thông thường, thì có thể chứng minh là chúng ta an toàn trước cuộc tấn công mở rộng độ dài. Thay đổi các hằng số được sử dụng ở mỗi vòng của mật mã khối của Davies-Meyer hoặc Matyas-Meyer-Oseas chức năng nén như trong SHA-2 (không thay đổi số vòng) sẽ làm được, ngoài sự nghi ngờ hợp lý. Vì vậy, sẽ nhân đôi số vòng và sử dụng các hằng số mới trong nửa sau. Tôi không đưa ra tuyên bố nào về việc nhân đôi số vòng với cùng các hằng số.