การโจมตีส่วนขยายความยาวเปลี่ยนผลลัพธ์แฮช ดังนั้นมีความเป็นไปได้สูงที่พารามิเตอร์ความยากจะไม่สามารถใช้ได้อีกต่อไป จากนี้ $$ h = \operatorname{SHA-256}(a\mathbin\|b\mathbin\|pad1)$$ ในการนี้*. $$ h'= \operatorname{SHA-256}(a\mathbin\|b\mathbin\| \text{pad1}\mathbin\|\text{appended_data} \mathbin\| \text{pad2})$$ เราไม่ได้คาดหวังให้พวกเขาเท่าเทียมกัน ความเท่าเทียมกันเป็นเหตุการณ์เล็กน้อย
แน่นอน ผู้โจมตีอาจค้นหาส่วนขยายดังกล่าว (appended_data) ที่มีพารามิเตอร์ความยากคล้ายกันอย่างไรก็ตาม พวกเขามีเวลาไม่มากเนื่องจากหนึ่งในไคลเอ็นต์ได้พบ nonce ที่ถูกต้องสำหรับพารามิเตอร์ความยากแล้ว และกำลังเผยแพร่บนเครือข่ายแล้ว
ผู้ตรวจสอบจะได้รับ $a$ และ $ข$ และผลลัพธ์แฮช $h'$ (ขนาดจำกัดเป็นกุญแจสำคัญที่นี่). เมื่อพวกเขาคำนวณค่าแฮช พวกเขาจะคำนวณ $h = \operatorname{SHA-256}(a\mathbin\|b)$ และพวกเขาจะเห็นว่า $h \neq h'$ และความเท่าเทียมกันเป็นเหตุการณ์เล็กน้อย
แม้ว่าพวกเขาจะมีค่าแฮชเดียวกันหรือพารามิเตอร์ความยากที่ถูกต้องเหมือนกัน ไคลเอนต์ที่ใช้งานอย่างถูกต้องก็จะเห็นการโจมตี
ดังนั้นด้วยการใช้งานที่เหมาะสม การโจมตีแบบขยายความยาวจึงไม่ใช่ปัญหา อย่างไรก็ตาม อย่าพึ่งพาการใช้งานเนื่องจากอาจไม่ถูกต้อง ให้ใช้ SHA-256 สองเท่าเหมือนที่ Bitcoin ทำ อีกวิธีหนึ่งคือใช้ฟังก์ชันแฮชที่ทนต่อการขยายความยาว เช่น SHA-512/256, BLAKE2/3, SHA3-256
โปรดทราบว่า POW ได้รับการออกแบบมาเพื่อให้ใช้งานจำนวนมาก ดังนั้นการเลือก SHA-256 สองเท่าไม่ใช่ความคิดที่ดี เมื่อการออกแบบ Bitcoin เริ่มต้นขึ้น
*ช่องว่างภายใน
$pad1$ เป็นช่องว่างภายในของ SHA-256 ที่กำปั้น 1
ถูกต่อท้ายให้เล็กที่สุด 0
ดังนั้นเมื่อมีการเพิ่มการเข้ารหัสความยาวข้อความจะเป็นทวีคูณของ 512
ผู้โจมตีส่วนขยายความยาวต้องใช้ช่องว่างภายในนี้แล้วเพิ่มข้อความที่ขยายจากนั้นจะต้องมีช่องว่างภายในเพิ่มเติมเป็น $pad2$, ด้วย.