ต่อไปนี้คือวิธีที่เป็นไปได้ในการแฮชการเข้ารหัสลับแบบวนซ้ำให้เร็วเป็นสองเท่าของวิธีปกติ
กำหนดฟังก์ชั่นการบีบอัด $f: \{0,1\}^{a+b} \rightarrow \{0,1\}^b$. สมมติว่าข้อความมีความยาว $4a$ บิตหลังจากการเติม โดยปกติบล็อกข้อความทั้งสี่จะถูกแทรกลงในบล็อกข้อมูล $x_i \ใน \{0,1\}^b$:
$$
ม = m_0 \| m_1 \| m_2 \| m_3; \; |m_i| = ก
$$
$$
x_{i+1} = ฉ(x_i \| m_i); \; ผม=0,1,2,3; \; x_0 = IV
$$
$$
ชั่วโมง = x_4
$$
แนวคิดแรกในการแฮชให้เร็วขึ้นคือการลดความซับซ้อนของฟังก์ชันการบีบอัด เช่น ช. แทนที่ $f$ โดยฟังก์ชัน $g$ ที่สร้างคล้ายๆ กัน แต่ใช้อย่างเดียว $\frac 1 4$ ของรอบภายใน. คำนวณ $x_4$ เหมือนด้านบนโดยใช้ $g$ แทน $f$ และปิดท้ายโดย $h=p(x_4)$, ที่ไหน $p$ เป็นฟังก์ชันสุ่มเทียมที่ไม่อนุญาตให้คำนวณ $x_4$ จากแฮช $h$.
ฉันคิดว่าสิ่งนี้อาจปลอดภัยจากพรีอิมเมจ แต่ไม่ใช่การโจมตีแบบชนกัน เนื่องจากมีความสัมพันธ์กันมากเกินไป $x_i$ และ $x_{i+1}$อนุญาตให้สร้างบล็อกข้อความ $m_i, \overline m_i, m_{i+1}, \overline m_{i+1}$ ดังนั้น
$$g(g(x_i\|m_i)\|m_{i+1})=g(g(x_i\|\overline m_i)\|\overline m_{i+1})$$
แนวคิดคือการแทรกแต่ละบล็อกข้อความสองครั้ง:
$$
x_{i+1} = g(x_i \| m_{i \bmod 4}); \; ฉัน=0,...,7
$$
$$
ชั่วโมง = x_8
$$
ขณะนี้มีการโทรอย่างน้อยห้าสาย $g$ ระหว่างการฉีดของสองบล็อกที่แตกต่างกัน $m_i, m_j$. ตัวอย่างเช่น $m_2$ จะถูกแฮชเมื่อ $i=2$ และ $m_3$ เมื่อไร $i=7$ดังนั้นจึงไม่ควรมีความสัมพันธ์ที่หาประโยชน์ได้ระหว่าง $x_2$ และ $x_7$. แต่รูปแบบนี้ใช้เท่านั้น $\frac 1 2$ รอบทั้งหมดเมื่อเทียบกับวิธีปกติ
สิ่งนี้จะปลอดภัยหรือไม่ เมื่อพิจารณาจากจำนวนรอบของ $f$ เพียงพอที่จะทำให้วิธีธรรมดาปลอดภัยหรือไม่?