ไม่มีจุดอ่อนดังกล่าวหากใช้ SHA-256 ในโหมด CTR ChaCha20 ถูกสร้างขึ้นด้วยวิธีนี้แล้ว
คุณกำลังใช้ SHA-256 ในการผูกมัดเพื่อส่งออกสตรีมเพื่อเข้ารหัสข้อความด้วย x-or;
\begin{จัด}
O_1 & = H(คีย์) \oplus H(ข้อความ)\
O_i & = H(O_{i-1})
\end{แนว}
จากนั้นการเข้ารหัสจะดำเนินการด้วย x-oring $O_i$ส.
$$C_i = P_i \oบวก O_i$$
สมมติว่าคุณมีข้อความธรรมดาที่รู้จักสำหรับบางบล็อก $เจ$. ซึ่งหมายความว่าคุณได้รับ $O_j$
$$O_j = P_j \oบวก C_j$$
ตอนนี้ใช้สมการการผลิตกระแส
\begin{จัด}
O_{j+1} &= H(O_j)\
O_{j+2} &= H(O_{j+1})\
\vdots \quad & \quad\quad\vdots \
O_{j+t} &= H(O_{j+t-1})\
\vdots \quad & \quad\quad\vdots \
\end{แนว}
อย่างที่คุณเห็น คุณจะได้รับเอาต์พุตสตรีมที่เหลือจากตำแหน่ง $เจ$. หากคุณมีตำแหน่งแรก คุณจะได้รับทั้งหมด
นี่เป็นจุดอ่อนของโครงร่างดังกล่าว ในทางกลับกัน โหมด CTR ได้รับการออกแบบมาสำหรับ PRF และเป็นเรื่องปกติที่จะเริ่มต้นมันด้วยฟังก์ชันแฮชที่ดี
ดูด้วยภาพ
อย่างที่เห็น ถ้าคุณได้ผลลัพธ์ใดๆ $O_j$ จากนั้นคุณจะได้รับส่วนที่เหลือเนื่องจากการผูกมัดแฮช