Score:1

xChaCha20 บล็อกคีย์สำหรับ Poly1305

ธง cn

ดังนั้น xChaCha20 จึงมีขนาด nonce ที่ใหญ่พอที่จะใช้ nonce แบบสุ่มด้วยคีย์เดียวกันได้อย่างปลอดภัย โดยทั่วไปแล้ว Poly1305 จะใช้บล็อกแรกของเอาต์พุตของรหัสเพื่อสร้าง nonce สำหรับ xChaCha20 จะเป็นศูนย์บล็อกสำหรับ poly1305 key/nonce และข้อมูลที่เหลือจะถูกเข้ารหัสด้วยบล็อก 1 ขึ้นไป ดังนั้นหากมีใครส่งข้อความ คุณจะได้รับบางสิ่งตามบรรทัดเหล่านี้ (ลำดับอาจแตกต่างกันไปขึ้นอยู่กับโปรโตคอล):

$$\text{Msg} = \{ \text{แท็ก Poly1305}\} \mathbin\| \{\text{24 ไบต์ Nonce} \} \mathbin\| \{ \text{ข้อมูลที่เกี่ยวข้อง} \}\mathbin\| \{\text{ข้อความรหัส} \}$$

ด้วยเลย์เอาต์นี้ การส่งและสร้าง nonce ใหม่ดูเหมือนเป็นการสิ้นเปลืองเล็กน้อยกับทุกๆ ข้อความ เช่น โอเวอร์เฮดแพ็กเก็ต/ข้อความ 24 ไบต์ และเวลา CPU สร้าง nonce แบบสุ่ม โดยเฉพาะอย่างยิ่งเนื่องจาก xChaCha20 สามารถส่ง $2^{64}$ บล็อกด้วยคีย์เดียวและไม่มีคู่ เราสามารถส่ง nonce ครั้งเดียวแล้วเริ่มส่งกระแสข้อมูลและในข้อความสุดท้ายส่งแท็ก poly1305 อย่างไรก็ตาม หากเป็นข้อมูลจำนวนมากที่ต้องรอให้มีการส่งทั้งหมดก่อนที่จะตรวจสอบว่าแท็ก poly1305 นั้นมีปัญหามากมาย ดูเหมือนว่าจะเป็นประโยชน์มากกว่าในการสร้างแท็ก Poly1305 ในขณะที่คุณใช้งาน

อย่างไรก็ตาม โครงสร้างเกือบทั้งหมดที่ฉันเห็นว่าใช้เฉพาะบล็อก 0 สำหรับคีย์ Poly1305/nonce ดูเหมือนว่าสมเหตุสมผลอย่างยิ่งสำหรับฉันที่จะใช้ตัวนับบล็อกอื่นสำหรับคีย์ Poly1305 ตัวอย่างเช่น สมมติว่ามีคนต้องการส่งข้อมูลจำนวนมาก เพื่อจุดประสงค์ในการอธิบาย ลองพิจารณาโครงสร้างคร่าวๆ ที่ส่ง 7 xChaCha20 บล็อกต่อครั้ง:

ตัวอย่างการก่อสร้าง

ตอนนี้คำถามของฉันคือ ทำไมฉันไม่เห็นมีการก่อสร้างตามแนวนี้เลย มีบางอย่างที่ฉันมองข้ามไป หรือ xChaCha20 ใหม่เกินไป หรือนี่เป็นปัญหาเฉพาะกลุ่ม หรือฉันดูไม่ละเอียดพอ? เนื่องจากโครงสร้างบางส่วนตามบรรทัดเหล่านี้ช่วยให้สามารถตรวจสอบข้อมูลที่ได้รับและยังหลีกเลี่ยงการสร้าง nonce ใหม่จำนวนมากและต้องส่งซ้ำเพื่อเพิ่มข้อความเหนือศีรษะ

แก้ไข: น่าจะมีความชัดเจนมากขึ้นที่นี่ poly1305_tag(block_x) ควรจะมีทั้งไซเฟอร์เท็กซ์และข้อมูลที่เกี่ยวข้อง ภาพด้านบนเริ่มกว้างขึ้นแล้วสำหรับบางอย่างเช่น

$$poly1305_{tag}(block_x, \text{associated data} \mathbin\| ciphertext).$$

คล้ายกับที่กล่าวไว้ในหมายเหตุด้านล่างที่ xChaCha20_x() รวมถึงคีย์และ nonce ส่วนใหญ่เป็นคำถามเกี่ยวกับการใช้ตัวนับบล็อกอื่นที่ไม่ใช่ศูนย์เพื่อเป็นคีย์สำหรับ poly1305 เพื่อสร้างแท็กหลายรายการสำหรับสตรีมข้อมูลที่ยาวขึ้น

kelalaka avatar
in flag
ข้อมูลที่เกี่ยวข้องจะต้องได้รับการรับรองความถูกต้อง คุณมีปัญหาหรือไม่ [คล้ายกับสิ่งนี้](https://crypto.stackexchange.com/q/86080/18298)
cn flag
บางทีฉันอาจไม่ชัดเจนเพียงพอว่าข้อมูลที่เกี่ยวข้องกำลังถูกเรียกใช้ผ่าน poly1305 อย่างน้อยนั่นคือความตั้งใจของฉันเมื่ออธิบายสิ่งนี้ มิฉะนั้นอาจถูกจัดการได้แน่นอน สิ่งที่ฉันพูดข้างต้นคือการเรียกใช้ poly1305 โดยมีหมายเลขบล็อก x เป็นคีย์ poly1305
cn flag
นอกจากนี้ยังเกี่ยวกับการใช้บล็อกต่างๆ เพื่อคีย์แท็กการตรวจสอบสิทธิ์ poly1305 ไปพร้อมกัน เมื่อฉันดูการใช้งาน พวกเขาค่อนข้างใช้บล็อก 0 ของ chacha20 ฉันไม่เห็นเหตุผลว่าทำไมการใช้เอาต์พุตบล็อกอื่นจาก chacha20/xchacha20 จะทำให้เกิดปัญหาเนื่องจาก poly1305 จะได้รับอินพุตที่ไม่ซ้ำ จากนั้นคุณสามารถใช้เพื่อสร้างแท็กเพื่อตรวจสอบความถูกต้องของข้อความเข้ารหัสและข้อมูลที่เกี่ยวข้อง โครงสร้างโดยทั่วไปเหมือนกับที่คุณทำตามปกติสำหรับ block_0 แล้วเข้ารหัส block_1 เป็น block_n แต่คุณใช้หลายบล็อกจาก xchacha20 สำหรับแท็ก poly1305 หลายแท็ก
kelalaka avatar
in flag
คุณสามารถแก้ไขคำถามของคุณให้ชัดเจนโดยเฉพาะเกี่ยวกับเป้าหมายของคุณ ปีศาจอยู่ในรายละเอียด
cn flag
เพิ่มการแก้ไขโดยสรุปสิ่งที่ฉันพูดที่นี่

โพสต์คำตอบ

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