Score:1

เครื่องกำเนิด PRNG ซึ่งสามารถทำซ้ำบล็อกได้

ธง tf
Tom

มาใช้ AES เป็นรหัสสตรีม และใช้เป็นตัวเลขอินพุตกันเถอะ $1,2,3,...$. ด้วยวิธีนี้เราควรจะได้บล็อกแบบสุ่มและทุกบล็อกจะแตกต่างกัน

แต่ฉันมีตัวสร้างบล็อกสุ่มเทียมซึ่งสร้างบล็อกที่แตกต่างกันไม่เสมอไป ดังนั้นเราจึงสามารถบล็อกได้ $B$ ครั้งแล้วครั้งเล่าหลังจากสมมติว่าล้านบล็อกเป็นไปได้ที่จะได้รับบล็อกเดิมอีกครั้ง $B$ (แต่อาจจะหายาก)

มันยังเป็นเครื่องกำเนิดบล็อกแบบสุ่มที่ดี (ผ่านการทดสอบทั้งหมด) อาจเป็นปัญหาหรือไม่หากมีคนต้องการใช้เป็น PRNG หรือถ้ามีคนต้องการใช้เป็นสตรีมสำหรับการเข้ารหัส

การเข้ารหัสส่วนใหญ่ตรงตามเงื่อนไขที่พวกเขาสร้างค่าเฉพาะ แต่ในกรณีนี้ เราสามารถรับการเข้ารหัสเดียวกันของบล็อกเดียวกันได้หลังจากน้อยกว่า $2^{128}$ บล็อก

Maarten Bodewes avatar
in flag
อย่างไรก็ตาม มีหลายวิธีในการสร้างรหัสสตรีมจาก AES; ดูเหมือนว่าคุณกำลังอธิบาย AES ในโหมด CTR อย่างชัดเจน ไม่ใช่เช่น CFB หรือ OFB
Score:2
ธง in

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

สมมติว่าคุณต้องการใช้ CSPRNG เพื่อสร้างชุดของบล็อก 128 บิต ซึ่งเป็นขนาดบล็อกของ AES ประมาณล้านนึงครับ $2^{20}$. คุณจะคาดหวังโอกาสที่จะ $1 - (1 - {1 \มากกว่า 2^{128}})^{1000000} \ประมาณ 2^{-108}$ สำหรับบล็อกเริ่มต้นที่จะทำซ้ำและ ${1000000 \มากกว่า 2^{128}} \ประมาณ 2^{-(128 - 20)} = 2^{-108}$ สำหรับการชนกันในล้านบล็อกแรกที่จะเกิดขึ้น เหตุผลที่ค่าเหล่านี้มีค่าใกล้เคียงกันคือหนึ่งล้านมีค่าน้อยกว่าค่าใดสำหรับค่า 128 บิต อย่างที่คุณเห็น โอกาสที่จะเกิดการชนมีน้อยมากจนแทบไม่มีนัยสำคัญ นี่คือเหตุผลว่าทำไมการเข้ารหัสของสตรีม เช่น AES-CTR จึงถูกมองว่าเป็น CSPRNG นั่นเอง

โดยทั่วไป CSPRNG มีสถานะภายในขนาดใหญ่ ซึ่งหมายความว่าเป็นไปไม่ได้ที่จะรู้ เมื่อไร PRNG ซ้ำ ที่สำคัญโอกาสที่พวกเขาโดน รอบ ต่ำมาก (หากเกิดการวนซ้ำ CSPRNG จะสร้างรูปแบบซ้ำๆ กันขนาดใหญ่) ดังนั้นเนื่องจากความคาดเดาไม่ได้ คุณจึงใช้ CSPRNG เป็นรหัสสตรีมได้ นี่เป็นเรื่องจริงสำหรับ AES / CTR เช่นกัน หากคุณดูรูปแบบอื่นที่ไม่ใช่ 128 บิต ในสถานที่ที่เหมาะสม เห็นได้ชัดว่ารูปแบบของบิตเดียวจะทำซ้ำ อย่างที่สุด บ่อยครั้งที่คุณไม่สามารถรู้ได้ว่าคุณจะพบค่าบิตใดในตำแหน่งที่กำหนด ปัญหาของ AES-CTR คือมันจะเข้าสู่วงจรอย่างแม่นยำหลังจากที่ตัวนับหมดลง

อย่างไรก็ตาม เนื่องจาก CSPRNG หลายๆ การใช้งาน ยังไม่ได้รับการออกแบบ เพื่อสร้างสตรีมเชิงกำหนดแบบเดียวกัน คุณควรจะเป็น ระมัดระวังเป็นอย่างยิ่ง ของการใช้อันหนึ่งเป็นรหัสสตรีม ตัวอย่างเช่น พวกเขาอาจทำการรีซีด ใช้เมล็ดพันธุ์ที่กำหนดเป็นเอนโทรปีเพิ่มเติม สร้างผลลัพธ์ที่แตกต่างกันเมื่อเมธอดถูกเรียกแตกต่างกัน หรือแม้แต่มีการแก้ไขอัลกอริทึม หากคุณโชคไม่ดี คุณจะไม่สามารถสร้างสตรีมคีย์เดิมขึ้นมาใหม่ได้ และข้อมูลของคุณจะสูญหาย (ดูเช่น getRawKey() บนอุปกรณ์ Android)

แน่นอน โดยทั่วไป AES-CTR จะเร็วกว่า CSPRNG เช่นกัน หากคุณไม่ชอบ AES หรือไม่มีการเร่งด้วยฮาร์ดแวร์ การเข้ารหัสสตรีมเช่น ChaCha มักจะเป็นวิธีที่จะไป โดยปกติแล้ว คุณจะใช้การเข้ารหัสเหล่านี้ในโหมดตรวจสอบสิทธิ์โดยใช้ GMAC (AES-GCM) หรือ Poly1305

ในเอกสารเกี่ยวกับการเข้ารหัส คุณมักจะพบว่าคำว่า "stream cipher" และ "CSPRNG" ใช้แทนกันได้ แต่ระวังความแตกต่างในทางปฏิบัติในสองส่วนสุดท้าย

โพสต์คำตอบ

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