Score:1

วิธีถอดรหัส sha256 ที่ใช้เป็น streamcipher ด้วยบล็อกที่รู้จักหรือเดาได้

ธง cn

การใช้ SHA-256 เป็นรหัสสตรีมดูเหมือนจะมีจุดอ่อนในการเข้ารหัส อย่างไรก็ตาม ฉันไม่ค่อยแน่ใจว่าจะใช้มันอย่างไรในการถอดรหัส

สมมติว่าฉันมีฟังก์ชันการเข้ารหัสโดยใช้บล็อก 64 ไบต์ ฉันเข้ารหัสแต่ละบล็อกด้วยแฮชของบล็อกก่อนหน้าเพื่อสร้างไซเฟอร์เท็กซ์ของฉัน จุดอ่อนที่นี่คือที่ฉันรู้หรือเดาบล็อกแรกของไบต์ได้

ในหนึ่งในโพสต์ที่เชื่อมโยงด้านล่าง ฉันอ่าน:

ฉันควรจะพูดถึงว่าหากมีบล็อกข้อความธรรมดาที่รู้จักหรือเดาได้เต็มบล็อกในข้อความของคุณ โครงร่างของคุณจะพังได้ง่ายเพราะแพด (i) ที่กำหนดให้ทุกคนสามารถคำนวณแพด (i+1) ได้ ดังนั้นเดาบล็อกของข้อความธรรมดาหนึ่งบล็อก XOR กับข้อความรหัสเพื่อกู้คืนค่าแพดที่เป็นไปได้ จากนั้นคำนวณค่าแพดถัดไปและดูว่าข้อความไซเฟอร์เท็กซ์ที่กู้คืนในบล็อกนั้นถูกต้องหรือไม่

ใครสามารถอธิบายรายละเอียดเกี่ยวกับความหมายที่นี่ได้บ้าง ถ้าฉันรู้บล็อกแรก ฉันจะ xor เทียบกับบล็อกแรกที่แฮชหรือไม่ ถ้าเป็นเช่นนั้นจะช่วยฉันถอดรหัสแฮชถัดไปที่เป็น H (prevHashedBlock + currentPlaintextBlock) ได้อย่างไร

ฉันทราบว่าสิ่งนี้เกี่ยวข้องกับสถานะการแฮชและอื่นๆ แต่ฉันไม่พบอะไรมากมายบนเว็บ

ฉันได้อ่านข้อความต่อไปนี้:
เป็นไปได้หรือไม่ที่จะสร้างการเข้ารหัสสตรีมจากฟังก์ชันแฮชการเข้ารหัส
SHA-256 ปลอดภัยเหมือนรหัสบล็อก CTR หรือไม่

Score:2
ธง in

ไม่มีจุดอ่อนดังกล่าวหากใช้ 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$ จากนั้นคุณจะได้รับส่วนที่เหลือเนื่องจากการผูกมัดแฮช

CrazyPhil avatar
cn flag
ดังนั้น XORing Oj กับ Cj ควรให้ข้อความธรรมดาของบล็อก j หรือไม่ ขอบคุณสำหรับรูปภาพ ช่วยให้ฉันเข้าใจคำอธิบายของคุณได้ดีขึ้น
CrazyPhil avatar
cn flag
นอกจากนี้ Oj คืออะไรกันแน่? เพราะเห็นได้ชัดว่าไม่ใช่แฮชที่เสร็จแล้วใช่ไหม เนื่องจาก H(key+ptxt) = C1 ไม่ใช่ O1; ดังนั้นเมื่อถอดรหัสสิ่งนี้ในโปรแกรม ฉันจะให้ O1 ได้อย่างไร
kelalaka avatar
in flag
นั่นคือเหตุผลที่ฉันวาดมัน บางครั้งภาพสามารถบอกความหมายได้นับพันคำ $O_j$'s เป็นเอาต์พุตของฟังก์ชันแฮชเมื่อถอดรหัส x-หรือข้อความเข้ารหัสด้วย $O_j$ เหมือนใน One-time-Pad
kelalaka avatar
in flag
แฮชแรกต้องเป็น $hash(key)\oplus hash(ptxt)$ ซึ่งไม่ได้เปลี่ยนการโจมตี ฉันจะแก้ไขในภายหลัง...

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา