โดยใช้ $$token = SHA256(APIKey \mathbin\| SecretKey \mathbin\| หมดอายุการประทับเวลา) \mathbin\| การประทับเวลาหมดอายุ $$
ไม่ปลอดภัยเนื่องจากอาจทำให้เกิดการโจมตีแบบขยายความยาวได้ เช่น
$$token2 = SHA256(APIKey \mathbin\| SecretKey \mathbin\| expiderTimestamp \| \color{red}{extension}) \mathbin\| (expireTimestamp \| \color{red}{extension}) $$
นี่เป็นโทเค็นที่ถูกต้องสำหรับการปลอมแปลง
NIST ในการโทรหาผู้สมัคร SHA3 จะต้องเป็น ทนต่อการยืด-ยาว
การโจมตี. ตอนนี้ Keccak เสนอชื่อให้ SHA3 เป็นผู้ชนะ และ Blake2 ยังคงเป็นทางเลือกที่ดีจากการแข่งขัน ทั้งคู่ทนทานต่อการโจมตีแบบขยายความยาว Keccak โดยใช้ความจุและ Blake2 ใช้ ไฮฟา การก่อสร้างมีความปลอดภัยในการโจมตีส่วนขยาย
เพื่อลดการใช้ HMAC;
$$token = \operatorname{HMAC-SHA256}(คีย์ส่วนตัว, คีย์สาธารณะ \mathbin\| หมดอายุเวลาประทับ) \mathbin\| การประทับเวลาหมดอายุ $$ โปรดทราบว่าสิ่งนี้จะเรียก SHA-256 อย่างน้อยสองครั้ง (สามครั้งหากคีย์ยาวกว่าขนาดบล็อกของฟังก์ชันแฮช 512 บิตสำหรับ SHA-256)
แทนที่จะใช้ HMAC เราสามารถใช้ BLAKE2 ได้ BLAKE2 เร็วมาก และเรายังมีเวอร์ชันคู่ขนาน เบลค3 และใช้
$$token = \operatorname{BLAKE2}( publicKey \mathbin\| คีย์ส่วนตัว \mathbin\|expireTimestamp) \mathbin\| การประทับเวลาหมดอายุ $$ ปลอดภัย
NIST ยังได้กำหนดมาตรฐาน MAC สำหรับชื่อ SHA3 สจล( หรือ ที่นี่).
ทั้ง BLAKE2 และ KMAC ดีกว่า HMAC
หากคุณยืนยันที่จะใช้ SHA2 กับขนาดเอาต์พุต 256 บิต ให้ใช้ SHA-512/256 ซึ่งเป็นเวอร์ชันที่ถูกตัดทอนของ SHA-512/256 โดยมีค่าเริ่มต้นต่างกันเพื่อแยกโดเมน SHA-512/256 มีภูมิคุ้มกันต่อการโจมตีแบบขยายความยาว และออกแบบมาให้เป็นมิตรกับ CPU 64 บิต