ในแอปพลิเคชันส่วนใหญ่ เป็นที่พึงปรารถนาว่าฟังก์ชันแฮชจะต้องทำงานเร็ว และจะไม่มีปัญหาหากทำงานเร็วเป็นพิเศษ (กล่าวคือ เร็วที่สุดเท่าที่อินพุตในหน่วยความจำแคชสามารถเข้าถึง CPU ได้) ถ้า นั่นไม่ใช่ค่าใช้จ่ายในการรักษาความปลอดภัย ซึ่งรวมถึงการใช้งานในลายเซ็น การเติมการเข้ารหัส การสร้างบล็อกรหัส
ในการสมัครทำ การยืดที่สำคัญรวมถึงการควบคุมการเข้าถึงด้วยรหัสผ่าน หรือการได้รับคีย์การเข้ารหัสแบบสมมาตรจากวลีรหัสผ่าน ควรมีฟังก์ชันแฮชที่ช้า แม่นยำยิ่งขึ้น พารามิเตอร์ควรควบคุมระยะเวลา และต้นทุนการคำนวณต่อแฮชสำหรับฝ่ายตรงข้ามไม่ควรต่ำกว่าสำหรับผู้ใช้ที่ถูกต้อง¹ ในแอปพลิเคชันดังกล่าว เมื่อเราจัดการกับการแฮชช้าลงด้วยปัจจัยของ $ค$ สำหรับศัตรู เราได้รับเทียบเท่ากับ $\log_2(c)$ บิตเพิ่มเติมเกี่ยวกับเอนโทรปีในการป้อนรหัสผ่าน/ข้อความรหัสผ่าน ตัวอย่างเช่น เมื่อเราเพิ่มต้นทุนหนึ่งพัน (สำหรับ $c\ประมาณ 2^{10}$ ) สำหรับการโจมตีการถอดรหัสรหัสผ่าน เราได้รับความปลอดภัยเทียบเท่ากับการเพิ่มทศนิยมสามหลักต่อท้ายรหัสผ่านโดยไม่จำเป็นต้องจำ
การพิจารณาความเร็วนั้นแตกต่างอย่างมากจากการต้านทานการชนกัน (นั่นคือ เป็นไปไม่ได้ในทางปฏิบัติที่จะแสดงข้อความสองข้อความที่มีแฮชเดียวกัน) สำหรับการต้านทานการชนเพื่อถือเป็นสิ่งจำเป็น (ไม่เพียงพอ)
- ที่แฮชนั้นกว้างพอ เนื่องจากมีการโจมตีแบบกระจายทั่วๆ ไปที่มีประสิทธิภาพ² ซึ่งค้นหาการชนกันใน $n$บิตแฮชกับเกี่ยวกับ $2^{n/2+2}$ กัญชา ดังนั้นการแฮชที่รวดเร็วใดๆ ที่มีผลลัพธ์น้อยกว่า 192 บิต (ให้หรือรับ 32) นั้นไวต่อการชนกัน (สำหรับฝ่ายตรงข้ามที่มีวิธีการเทียบเท่ากับที่ใช้โดยนักขุด bitcoin บางราย) เมื่อเราทำให้แฮชช้าลง นั่นจะเป็นการเพิ่มค่าใช้จ่ายในการคำนวณเพื่อค้นหาการชนกัน ต้นทุนเพิ่มขึ้นตามปัจจัย $ค$ อนุญาตให้แฮชแคบลงโดยประมาณ $2\log_2(ค)$ บิตจากมุมมองของการต้านทานการชนกัน (คำเตือน: สำหรับแฮชที่เร็วมากซึ่งอาจใช้เฉพาะกับ $ค$ ผ่านเกณฑ์เล็กน้อย) ตัวอย่างเช่น ถ้าแทนที่จะใช้ SHA-224 เราใช้ PBKDF2-HMAC-SHA-256 ที่มีเอาต์พุต 184 บิตและการวนซ้ำ 6 แสนครั้ง (สำหรับ $c\ประมาณ 2^{20}$ ) เราจะได้ความปลอดภัยเทียบเท่ากับความต้านทานการชน
- การแฮชนั้นไม่เร็วนัก นั่นเกิดจากการทำให้ข้อมูลภายในง่ายขึ้นมากเกินไป ทำให้สามารถโจมตีที่แตกต่างกันและเฉพาะเจาะจงได้ สุดโต่ง เฉพาะหรือบล็อกของอินพุตที่กว้างเท่ากับเอาต์พุต เป็นแฮชที่เร็วมาก แต่ก็ไม่ป้องกันการชนกันเล็กน้อย มีการโจมตีต่อ นพ.5, SHA(-0) และ SHA-1อาจเป็นเพราะการออกแบบของพวกเขาให้ความสำคัญกับความเร็วมากเกินไป และมีการโจมตีต่อ SHA-256 ถ้าเราลดจำนวนรอบลงเหลือ 31 (จาก 64)
¹ วิธีที่ดีที่สุดที่เราต้องทำให้สำเร็จคือการสร้างแฮช หน่วยความจำยากนั่นคือการประเมินควรต้องมีการเข้าถึงหน่วยความจำจำนวนมากในหน่วยความจำจำนวนมากที่ทุ่มเทให้กับการใช้งานนั้นในระหว่างการประเมินทั้งหมด ฟังก์ชั่นดังกล่าวรวมถึงความทันสมัย อาร์กอน2, เข้ารหัสและในระดับหนึ่งล้าสมัย เข้ารหัสแต่ก็ไม่เลวตรง PBKDF2 (ซึ่งเป็นหายนะเพราะใช้ RAM ต่ำทำให้ได้เปรียบคู่แข่งด้วย ASIC, FPGA หรือ GPU เมื่อเทียบกับผู้ใช้ส่วนใหญ่ที่ใช้ CPU)
² ดูของ Paul C. van Oorschot และ Michael J. Wiener การค้นหาการชนกันแบบขนานด้วยแอปพลิเคชัน Cryptanalytic, ใน วารสารวิทยาการเข้ารหัสลับ, 2542.
³ ดู Florian Mendel, Tomislav Nad และ Martin Schläffer's การปรับปรุงการชนในพื้นที่: การโจมตีใหม่บน SHA-256 ที่ลดลง, ใน การดำเนินการของ Eurocrypt 2013