Score:3

ข้ามเอาต์พุตแรกของรหัสสตรีม

ธง tf
Tom

ฉันจำได้ว่าเคยอ่านที่ไหนสักแห่งที่บางครั้งในรหัสสตรีมบางตัวจำเป็นต้องข้ามค่าแรกที่สร้างขึ้น ฉันไม่พบข้อมูลใด ๆ เกี่ยวกับเรื่องนี้ในขณะนี้

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

คุณจะกำหนดจำนวนการวนซ้ำนี้ได้อย่างไร หรือมีวิธีอื่นในการแก้ปัญหานี้หรือไม่? เพื่อให้ผลลัพธ์สุ่มจากการวนซ้ำครั้งแรก ก็เพียงพอแล้วที่จะมีการเริ่มต้นที่เหมาะสมด้วยคีย์สุ่มและเมล็ด (ซึ่งสามารถถือเป็นคีย์ได้เช่นกัน) แต่ฉันไม่คิดว่านี่จะช่วยแก้ปัญหาของผลลัพธ์ตัวสร้างแรกได้ คุณยังสามารถอ่านคุณสมบัติหลักบางอย่างจากผลลัพธ์แรกเหล่านั้นได้ เหมือนกับว่าคุณไม่ได้ปัดเศษมากพอในฟังก์ชันแฮช

ป.ล. ความคิดของฉันที่จะทดสอบจำนวนการวนซ้ำที่เราต้องข้ามคือให้ถือว่า CSPRNG เป็นฟังก์ชันแฮชด้วยคีย์และป้อนด้วยตัวเลข $1,2,3,...$ เป็นเมล็ดพันธุ์ที่มีคีย์บางตัว โดยเฉพาะอย่างยิ่งที่เลือกมาเป็นพิเศษเพื่อให้ดูอ่อนแอ (แต่ก็มีคีย์สุ่มด้วย) จากนั้นดูว่าฟังก์ชันแฮชดังกล่าวผ่านการทดสอบทางสถิติ เช่น PractRand หรือไม่ นี่จะเป็นเงื่อนไขขั้นต่ำ ยังไม่ได้กีดกันว่าจะมีวิธีการโจมตีแบบเข้ารหัสลับที่ซับซ้อนซึ่งจะเลือกบิตของคีย์จากตัวเลขที่ค้นหา PractRand เป็นตัวเลขสุ่ม

Maarten Bodewes avatar
in flag
รหัสสตรีมที่ดีไม่ควรมีคุณสมบัติดังกล่าว รหัสกระแสที่เก่ากว่า / ไม่ดีเช่น RC4 มีคุณสมบัติที่แตกต่างในสตรีมคีย์เอาต์พุต บางส่วนบ่งชี้ถึงปัญหากับเอาต์พุตไบต์โดยทั่วไป แต่บางส่วนขึ้นอยู่กับความสัมพันธ์กับสถานะภายในของอัลกอริทึม และแน่นอนว่าสิ่งเหล่านั้นเป็นอัลกอริทึมเฉพาะเจาะจง นี่คือประเภทของปัญหา: ประการแรก ปัญหาที่เป็นไปได้บางอย่างอาจตรวจไม่พบโดยการวิเคราะห์ผลลัพธ์ "อย่างง่าย" ในตอนแรก สำหรับคนอื่น ๆ การโจมตีขึ้นอยู่กับอัลกอริทึมทั้งหมด จำนวนการวนซ้ำจึงขึ้นอยู่กับ
Score:3

ฉันจำได้ว่าเคยอ่านที่ไหนสักแห่งที่บางครั้งในรหัสสตรีมบางตัวจำเป็นต้องข้ามค่าแรกที่สร้างขึ้น

ไม่ใช่รหัสสตรีมบางตัว แต่เป็นรหัสเฉพาะหนึ่งรหัส: อาร์ซี4. RC4 มาจากยุคก่อนๆ ที่การเข้ารหัสแบบดั้งเดิมไม่ได้รับการเหลียวแลมากนัก อันที่จริง เดิมที RC4 เป็นอัลกอริทึมลับ เมื่อการออกแบบ RC4 เผยแพร่สู่สาธารณะ จุดอ่อนจำนวนหนึ่งก็ถูกค้นพบ จุดอ่อนหลักคือการมีอคติในช่วงเริ่มต้นของคีย์สตรีม RC4 ได้รับความนิยมในช่วงเวลาที่มีการค้นพบการโจมตีบนพื้นฐานของอคตินี้เป็นครั้งแรก และวิธีรับมือคือทิ้งสองสามไบต์แรก เมื่อเวลาผ่านไป การวิเคราะห์อคติได้รับการปรับปรุง ซึ่งทำให้การละทิ้งไม่เพียงพอ และ RC4 ก็ค่อย ๆ หมดความนิยมไป

RC4 มีการออกแบบที่เรียบง่ายมาก: แต่ละรอบประกอบด้วยการรบกวนสถานะภายในอย่างง่าย และปล่อยเอาต์พุตหนึ่งไบต์ ปรากฎว่าจนกว่าจะมีรอบเพียงพอ ผลลัพธ์ค่อนข้างจะคาดเดาได้

การเข้ารหัสส่วนใหญ่จะทำการเข้ารหัสหลายรอบก่อนที่จะปล่อยเอาต์พุตใดๆ และรหัสลับที่ใช้กันทั่วไปได้รับการตรวจสอบโดยการศึกษาหลายปีโดยชุมชนการวิจัยการเข้ารหัสลับ

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

ใช่และไม่. เป็นความจริงที่ CSPRNG ต้องการการแย่งชิงจากเมล็ดอย่างเพียงพอแต่การสแกมลิงนั้นถูกสร้างขึ้นในองค์ประกอบพื้นฐานของอัลกอริทึม CSPRNG สมัยใหม่ทั่วไปขึ้นอยู่กับแฮช (ซึ่งมีหลายรอบอยู่แล้วข้างใน) หรือบนบล็อกหรือสตรีม cipher (ซึ่งมีหลายรอบอยู่ข้างใน)

ความคิดของฉันที่จะทดสอบจำนวนการวนซ้ำที่เราต้องข้ามคือให้ถือว่า CSPRNG เป็นฟังก์ชันแฮชด้วยคีย์และป้อนด้วยตัวเลข 1,2,3,... เป็นเมล็ดพันธุ์ที่มีคีย์บางคีย์

นี่เป็นแนวทางที่ถูกต้องและเป็นที่นิยมสำหรับ ฟังก์ชันการได้มาของคีย์ â กำหนดการสร้างวัตถุสุ่มเทียมจากเมล็ดพืช (โปรดทราบว่าฉันกำลังพูดถึงการได้มาของคีย์จากเนื้อหาที่มีเอนโทรปีสูง ไม่ใช่การได้มาของคีย์ที่ใช้รหัสผ่าน หรือที่เรียกว่าการยืดคีย์ซึ่งมีข้อกำหนดต่างกัน) ตัวอย่างของอัลกอริทึมการหาค่าคีย์ที่เป็นไปตามกระบวนทัศน์นี้ ได้แก่ NIST SP 800-108 KDF ในโหมดตัวนับ และ HKDF.

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

kelalaka avatar
in flag
คุณต้องการการแก้ไข ดู [ที่นี่](https://chat.stackexchange.com/transcript/message/61198977#61198977)
Gilles 'SO- stop being evil' avatar
@kelalaka คุณ (คือ Squeamish Ossifrage) ช่วยขยายความหรือให้ข้อมูลอ้างอิงได้ไหม AFAIK ARC4 เผยแพร่ในปี 1994 และทราบความผิดปกติทางสถิติค่อนข้างเร็วแต่ไม่ใช่ภายใน 24 ชั่วโมง แต่การโจมตีไม่เกิดขึ้นจนกระทั่งช่วงต้นทศวรรษ 2000 (โดยเฉพาะอย่างยิ่ง https://www.mattblaze.org/papers/others/rc4_ksaproc.pdf ในปี 2544 ซึ่งส่วน “การโจมตีครั้งก่อน” อ้างถึงเอกสารปี 2540 และ 2541 ซึ่ง 1. ไม่ได้นำไปสู่การโจมตีจริง และ 2. มาหลังจากที่ RC4 ได้รับความนิยม เช่น ใช้ใน SSL)
kelalaka avatar
in flag
[Bob Jenkins 15 ก.ย. 1994 18:51:50](https://groups.google.com/g/sci.crypt/c/JsO3xEATGFA/m/-wO4ttv7BCYJ) พูดคุยเกี่ยวกับอคติใน Sci.Crypt .
Gilles 'SO- stop being evil' avatar
@kelalaka อา ขอบคุณฉันเข้าใจ ใช่ ฉันเขียนเกี่ยวกับอคติ แต่หมายถึงการโจมตี (เชิงปฏิบัติ) ตามอคตินั้น ซึ่งใช้เวลาสองสามปี
Score:1
ธง sa

รหัสสตรีมแบบดั้งเดิมส่วนใหญ่มีสถานะ $S=(s_1,\ldots,s_n)$ ขนาด $n$ บิต ฟังก์ชันอัพเดตสถานะ $\phi:S\ลูกศรขวา S$ซึ่งเริ่มต้นจากวัสดุคีย์สุ่ม เช่น $S_0=(k_1,\ldots,k_n)$ และการวนซ้ำสถานะคือ $S_{t+1}=\phi(S_t),$ สำหรับ $t=1,2,\ldots.$ นอกจากนี้ยังมีฟังก์ชันเอาต์พุต $f:S\rightarrow \{0,1\}^\ell,$ ซึ่งเอาต์พุต $\ell$ บิตในครั้งเดียว โดยทั่วไปเราสามารถมี $\ell=1,$ หรือ $\ell=8.$

ดังนั้น จึงจำเป็นต้องมีการวนซ้ำจำนวนหนึ่งสำหรับความสัมพันธ์ที่คำนวณได้ง่ายจากเนื้อหาหลักเพื่อกระจายไปในลำดับคีย์สตรีมที่สังเกตได้ $f(S_t),f(S_{t+1}),\ldots$ (สมมติว่าข้อความรหัสที่รู้จักหรือข้อความธรรมดาที่รู้จักและรหัสเสริมที่ข้อความธรรมดาถูก XORed ด้วยคีย์สตรีม)

การทำแผนที่แบบดั้งเดิม $\phi$ เป็นรูปแบบ $$ \phi(s_1,\ldots,s_n)=(s_2,\ldots,s_n,s_{n+1}),\quad s_{n+1}=g(s_1,\ldots,s_n) $$

ด้วยเหตุผลด้านประสิทธิภาพ เช่นเดียวกับการลงทะเบียนกะ คุณจึงต้องการผลคูณคงที่ของ $n$ การทำซ้ำก่อนที่จะใช้คีย์สตรีมจริง

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

Tom avatar
tf flag
Tom
ขอบคุณ คำตอบนี้ทำให้หัวข้อนี้ชัดเจนยิ่งขึ้นสำหรับฉัน

โพสต์คำตอบ

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