คุณต้องการตระกูลของฟังก์ชั่นทางเดียวที่ทนต่อพรีอิมเมจที่สอง ตรวจจับไม่ได้ โดยทั่วไป ฟังก์ชันแฮชการเข้ารหัสลับที่ปลอดภัย (SHA2, SHA3, ...) ควรทำงานด้วยการปรับแต่งเล็กน้อยเพื่อให้เป็นคีย์ คุณไม่จำเป็นต้องเป็น PRF และฟังก์ชันมีความยาวคงที่ ดังนั้น หากคุณกำหนดความยาวของคีย์ด้วย ให้ใช้
SHA3(K || ม)
ไม่เป็นไร (จากนั้นรับจำนวนบิตเอาต์พุตที่ต้องการ) สำหรับ SHA2 (หรือโครงสร้าง Merkle-Damgard ใดๆ) คุณจะได้รับอาร์กิวเมนต์ความปลอดภัยที่ดีกว่า หากคุณดูดซับคีย์ในการเรียกใช้ฟังก์ชันการบีบอัดก่อน จากนั้นตามด้วยข้อความ นั่นคือคุณทำ
SHA2-256(แผ่น(K, 512) || M ),
โดยที่ pad(K, 512) ใช้การเติมแบบฉีดเพื่อเปลี่ยน K เป็นสตริง 512 บิต สมมติว่าความยาวคงที่สำหรับ K การต่อท้าย 0 จำนวนมากเพียงพอก็ใช้ได้ ที่นี่ฉันพิจารณาว่าความยาวบล็อกของ SHA2-256 คือ 512 บิต สำหรับความยาวบล็อกที่แตกต่างกัน คุณต้องปรับความยาวให้เหมาะสม เนื่องจากการเสริมความแข็งแกร่งของ Merkle-Damgard (ซึ่งต้องใช้การเติมความยาว) สิ่งนี้จึงไม่เพิ่มจำนวนการเรียกใช้ฟังก์ชันการบีบอัด ในเวลาเดียวกัน คุณสามารถคิดเกี่ยวกับสิ่งนี้เป็นอันดับแรก คำนวณ pseudorandom IV จาก K ซึ่งจะใช้เพื่อแฮช M