Cuộc tấn công mở rộng chiều dài thay đổi kết quả băm do đó, với xác suất cao, các tham số độ khó không còn giá trị. Từ đây $$ h = \operatorname{SHA-256}(a\mathbin\|b\mathbin\|pad1)$$ vào cái này*. $$ h'= \operatorname{SHA-256}(a\mathbin\|b\mathbin\| \text{pad1}\mathbin\|\text{appended_data} \mathbin\| \text{pad2})$$ Chúng tôi không mong đợi chúng bằng nhau, sự bình đẳng là sự kiện không đáng kể.
Tất nhiên, kẻ tấn công có thể tìm kiếm tiện ích mở rộng (appended_data) có tham số độ khó tương tự.Tuy nhiên, họ không có nhiều thời gian vì một trong các khách hàng đã tìm thấy nonce hợp lệ cho tham số độ khó và nó đã được lan truyền trên mạng.
Người xác minh sẽ nhận được $a$ và $b$ và kết quả băm $h'$ (kích thước giới hạn là chìa khóa ở đây). Khi họ tính toán giá trị băm, họ sẽ tính toán $h = \operatorname{SHA-256}(a\mathbin\|b)$ và họ sẽ thấy rằng $h \neq h'$ và đẳng thức là biến cố không đáng kể.
Ngay cả khi chúng có cùng giá trị băm hoặc tham số độ khó hợp lệ, một máy khách được triển khai đúng cách sẽ thấy cuộc tấn công.
Do đó, với việc triển khai đúng cách, một cuộc tấn công kéo dài thời gian không phải là vấn đề. Tuy nhiên, đừng dựa vào việc triển khai vì chúng có thể không chính xác, hãy sử dụng SHA-256 kép như Bitcoin đã làm. Ngoài ra, hãy sử dụng các hàm băm kháng mở rộng độ dài như SHA-512/256, BLAKE2/3, SHA3-256.
Hãy nhớ rằng POW được thiết kế để yêu cầu nhiều công việc, vì vậy việc chọn đôi SHA-256 không phải là một ý tưởng tồi khi thiết kế Bitcoin bắt đầu.
*các miếng đệm
$pad1$ là phần đệm của SHA-256 nơi nắm tay 1
được nối thêm càng nhỏ càng tốt 0
s sao cho khi mã hóa độ dài được thêm vào, thông báo là bội số của 512.
Kẻ tấn công mở rộng độ dài phải sử dụng phần đệm này và sau đó thêm thông báo mở rộng, sau đó sẽ cần phần đệm bổ sung như $pad2$, quá.