พิจารณา $H$ กำหนดเป็น: SHA-512 โดยเป็นเอาต์พุต XORed พร้อม 512 บิตแรกของข้อความอินพุต (เติมด้วยเลขศูนย์สำหรับข้อความสั้น) ด้วยประการฉะนี้ $H$MAC ที่เสนอนั้นไม่ปลอดภัย แต่เท่าที่ทราบมานี้ $H$ ไม่เลวร้ายไปกว่า SHA-512 จากมุมมองมาตรฐาน
อาร์กิวเมนต์: สังเกตว่าถ้า $H(m_1\mathbin\|m_2)=\operatorname{SHA-512}(m_1\mathbin\|m_2)\oplus m_1$ และ $\operatorname{MAC}_k(m)=H(k\mathbin\|m)\oplus k$จากนั้นสำหรับคีย์ 512 บิต¹ $k$ มันถือ $\operatorname{MAC}_k(m)=\operatorname{SHA-512}(k\mathbin\|m)$. ดังนั้นสิ่งนี้ $\operatorname{MAC}$ มีความอ่อนไหวต่อการโจมตีขยายความยาว²
ดังนั้นจึงเป็นไปไม่ได้ที่จะพิสูจน์ว่า $H(k\mathbin\|m)\oplus k$ เป็น MAC ที่ปลอดภัยโดยไม่มีข้อมูลเชิงลึกเกี่ยวกับโครงสร้างภายในของ $H$.
ฉันค่อนข้างมั่นใจว่าโครงสร้าง MAC ที่เสนอนั้นปลอดภัยจริงสำหรับแฮชของตระกูล SHA-2 และแม้แต่ SHA-1 เราอาจต้องการ พิสูจน์ ความปลอดภัยภายใต้สมมติฐานที่แฮชมี Merkle-DamgÃ¥rd โครงสร้าง ฟังก์ชันการบีบอัดที่สร้างขึ้นจากรหัสบล็อก $E$ ต่อ เดวีส์-เมเยอร์ ก่อสร้างโดยมีขนาดบล็อกและแป้นที่เหมาะสมกับ $E$. ฉันคิดว่าสิ่งนี้จะเป็นไปได้ภายใต้โมเดลรหัสในอุดมคติ แต่ไม่ใช่โมเดลมาตรฐานของการรักษาความปลอดภัย $E$. ปัญหาคือการ XORing คีย์ที่มีเอาต์พุตของรหัสบล็อกอาจทำให้คีย์อ่อนลงได้ เป็นกรณีเช่นสำหรับ AES-128 ในโหมดถอดรหัส โดยที่ XOR จะลบความปลอดภัยที่มีมูลค่าหนึ่งรอบออกไป
¹ สำหรับคีย์ที่มีขนาดตามอำเภอใจ $\operatorname{MAC}_k(m)=\operatorname{SHA-512}(k\mathbin\|m)\oplus F_{|k|}(m)$ ที่ไหน $F_{|k|}(ม)$ เป็น $0^{\min(|k|,512)}$ตามด้วยอันแรก $\min(\max(512-|k|,0),|m|)$ บิตของ $m$, ติดตามโดย $0^{\max(512-|k|-|m|,0)}$. สิ่งนี้ยังคงอนุญาตให้โจมตีได้
² ตรงกันข้ามกับสิ่งที่ฉันเขียนในตอนเริ่มต้น เราไม่สามารถกู้คืนได้ $k$ จากการสอบถาม.