Ngoài các cuộc tấn công va chạm và tạo ảnh trước, còn có vấn đề về các cuộc tấn công kéo dài thời gian (mà tôi nghĩ là lý do "thực sự" cho thuộc tính này của SHA3).
Nếu bạn có một hàm băm $H$ sau đó nó là hấp dẫn để điều trị $H(k,m)$ như một MAC của $m$, với khóa bí mật $k$.
Thật không may, điều này không dẫn đến một MAC an toàn nếu bạn đang sử dụng các hàm băm thế hệ trước (SHA1, SHA2).
Các cuộc tấn công mở rộng chiều dài xảy ra chính xác bởi vì hàm băm xuất ra toàn bộ trạng thái bên trong.
Ý tưởng đằng sau các cuộc tấn công mở rộng chiều dài là như sau:
nếu $m$ là tiền tố của $m'$ sau đó đầu ra $H(k,m)$ xảy ra dưới dạng trạng thái bên trong khi tính toán $H(k,m')$.
Trên thực tế, kể từ khi $H(k,m)$ là toàn bộ trạng thái bên trong tại một số điểm, sau đó bạn có thể tính toán $H(k,m')$ nếu bạn biết $H(k,m)$ - ngay cả khi bạn không biết $k$!
Điều này vi phạm thuộc tính bảo mật mà bạn muốn từ MAC (tìm hiểu MAC của $m$ không nên giúp bạn dự đoán MAC của một $m'$, thậm chí nếu $m$ là tiền tố của $m'$).
(Ở đây tôi đang đề cập đến các vấn đề về độ dài đệm, vốn không tạo ra rào cản đáng kể đối với kiểu tấn công mà tôi đang phác thảo.)
Trong cuộc thi SHA3, hầu hết các bài nộp được thiết kế để chống lại các cuộc tấn công kéo dài.
Cách để làm điều này là với cái gọi là cấu trúc "đường ống rộng": chỉ cần làm cho trạng thái bên trong lớn hơn đầu ra.
Nói cách khác, hàm băm chỉ xuất ra một phần trạng thái bên trong của nó khi kết thúc quá trình tính toán.
Nếu bạn làm điều đó, sau đó $H(k,m)$ sẽ không chứa mọi thứ cần thiết để tính toán $H(k,m')$, và điều này cản trở cuộc tấn công kéo dài thời gian.