Score:0

Nonces ใน chacha20poly1305 vs chacha20

ธง cn

ขณะนี้ฉันกำลังทำงานเพื่อแทนที่การเข้ารหัส chacha20 ในแอปของฉันด้วย chacha20poly1305 แต่ฉันพบคำถามสองสามข้อที่ดูเหมือนจะไม่สามารถหาคำตอบที่ชัดเจนได้ ส่วนใหญ่เกิดจากสนิม chacha20poly1305 ลัง:

  • ทำไม chacha20poly1305 ลังต้องใช้ nonce สำหรับทุกข้อความ แต่ chacha20 ต้องการเพียง nonce เดียวเมื่อเริ่มต้นรหัส? เหตุใดจึงไม่เป็นเช่นนั้นสำหรับไลบรารีอื่นเช่น Python's Pyคริปโทโดม?
  • อัลกอริทึม ChaCha20Poly1305 ต้องการ nonce ใหม่สำหรับทุกข้อความหรือไม่
  • ฉันเข้าใจว่าอัลกอริทึม ChaCha20 มีตัวนับภายในซึ่งรวมกับคีย์และ nonce เพื่อสร้างบล็อกของคีย์สตรีม (หนึ่งบล็อกต่อการเพิ่มตัวนับ) นี่ไม่ใช่กรณีที่ใช้ใน ChaCha20Poly1305 ใช่ไหม

สุดท้าย หาก ChaCha20Poly1305 (หรือในกรณีของฉันคือ XChaCha20Poly1305) ต้องการ nonce ใหม่สำหรับทุกข้อความ ตัวนับ 4 ไบต์ต่อข้อความรวมกับ 20 ไบต์แบบสุ่มต่อเซสชัน nonce จะเหมาะสมที่จะใช้เป็น nonce ต่อข้อความหรือไม่ ? (คีย์นั้นมาจากรหัสผ่านและมีแนวโน้มที่จะทำซ้ำระหว่างเซสชัน และการเก็บตัวนับสากลในทุกเซสชันก็ไม่สามารถทำได้)

ขอบคุณ!

kelalaka avatar
in flag
รหัสสตรีมทุกรายการต้องใช้คู่ (nonce,key) เพียงครั้งเดียว เราไม่สามารถรับผิดชอบต่อตัวเลือกที่ไม่ดีหรือการอ่านผิดของคุณเกี่ยวกับเรื่องนี้
kelalaka avatar
in flag
ฉันเกรงว่าคำถามนี้เกี่ยวข้องกับการวิเคราะห์ความปลอดภัยของการใช้งาน Rust มากกว่า`การเริ่มต้นการเข้ารหัส' เป็นทางเลือกของห้องสมุด ไลบรารี่ที่ดีต้องจัดการทั้งหมดได้อย่างราบรื่นและให้พลังแก่ผู้ใช้ผ่านตัวเลือกต่างๆ ตัวอย่างเช่น เราสามารถสร้าง IV แบบสุ่มได้หากไม่ได้ให้มา หรือรับจากผู้ใช้ เป็นต้น
Keegan Conlee avatar
cn flag
@kelalaka แล้วสิ่งนี้จะถูกต้องหรือไม่ที่จะบอกว่าในรหัส ChaCha20Poly1305 ตัวนับรหัสของ ChaCha20 ภายในจะถูกรีเซ็ตสำหรับทุกข้อความ สิ่งนี้จะอธิบายว่าต้องการ nonce ที่ไม่ซ้ำกันต่อข้อความ ซึ่งตรงข้ามกับ ChaCha20 ธรรมดาที่เริ่มต้นคีย์สตรีมสำหรับแต่ละข้อความใหม่ในทุกที่ที่ทิ้งข้อความสุดท้ายไว้
kelalaka avatar
in flag
โดยปกติแล้วเมื่อคุณเริ่มต้นการเข้ารหัส บางทีคุณอาจลืมที่จะเริ่มต้นใน ChaCha20?
Keegan Conlee avatar
cn flag
@kelalaka มันทำอะไร? ความเข้าใจของฉันหลังจากค้นหาเอกสารเพิ่มเติมในที่สุดก็คือ อย่างน้อยที่สุดสำหรับไลบรารี่ที่ฉันใช้อยู่ เมื่อคุณเริ่มต้นการเข้ารหัส ChaCha20 คุณจะต้องให้คีย์และโนนซ์ วัตถุเข้ารหัสจะคงสถานะ (ตัวนับภายใน) และเพิ่มตัวนับตามต้องการ เมื่อคุณเริ่มต้นการเข้ารหัส ChaCha20Poly1305 คุณจะให้คีย์แก่มันเท่านั้นเพราะมันไม่มีสถานะอื่นนอกเหนือจากนั้น รีสตาร์ทตัวนับภายใน (และสตรีมคีย์) สำหรับทุกข้อความใหม่ที่คุณต้องการเข้ารหัส และทำให้ต้องมีเวกเตอร์การเริ่มต้นใหม่ (ซึ่ง เป็น nonce ใหม่ที่มีคีย์เดียวกัน)
SAI Peregrinus avatar
si flag
API ของไลบรารีต่างๆทั้ง ChaCha20 และ ChaCha20-Poly1305 ต้องการ nonce ใหม่สำหรับทุกข้อความเพื่อมอบความปลอดภัย ไลบรารี่บางแห่งจะสร้าง nonce ใหม่ให้คุณเป็นการภายในจากอินพุตเดียวที่ให้มา nonce ส่วนบางไลบรารีจะไม่สร้าง โดยทั่วไปลังที่ใช้คุณสมบัติ `cipher` จะมีระดับต่ำกว่าลังที่ใช้คุณสมบัติ `aead`
SAI Peregrinus avatar
si flag
นอกจากนี้ กล่อง chacha20poly1305 ให้คุณใช้ xChaCha20-Poly1305 ที่ช่วยให้เกิด nonce แบบสุ่ม หากคุณใช้พื้นที่ nonce เต็ม 192 บิต ด้วยวิธีนี้คุณไม่ต้องจัดเก็บอะไรระหว่างข้อความ ตัวนับข้อความถูกจัดการภายใน
Keegan Conlee avatar
cn flag
@SAIPeregrinus ดูเหมือนว่าจะไม่มีตัวนับข้อความ ดังนั้นโพสต์นี้ คุณต้องส่ง nonce ทุกครั้งที่เรียก `encrypt()` และไม่ยอมรับ nonce เมื่อเริ่มต้นอ็อบเจ็กต์ `XChaCha20Poly1305` ใหม่ เว้นแต่ว่าฉันจะขาด API จำนวนมากไปโดยสิ้นเชิง
Keegan Conlee avatar
cn flag
ฉันได้ดูซอร์สโค้ดสำหรับลัง `chacha20poly1305` และมันเพิ่งเริ่มต้นรหัสใหม่ทั้งหมดสำหรับการโทรเข้ารหัส () ทุกครั้ง: https://docs.rs/chacha20poly1305/latest/src/chacha20poly1305/lib.rs .html#271 ฉันสามารถสันนิษฐานได้ว่านี่หมายความว่าฉันต้องติดตามตัวนับข้อความของฉันเอง
SAI Peregrinus avatar
si flag
encrypt() ถูกเรียกหนึ่งครั้งต่อข้อความ โดยมี nonce ใหม่ทุกครั้ง ตัวนับใน ChaCha ไม่ใช่ตัวนับข้อความ แต่เป็นตัวนับภายในที่เพิ่มขึ้นทุกๆ 512 บิตของข้อความ

โพสต์คำตอบ

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