Score:1

มีวิธีออนไลน์ในการใช้ block cipher เพื่อสร้างบิต $n$ ที่ไม่ซ้ำกันซึ่งรับประกันการปราศจากการชนกันเป็นเวลา $2^n$ หรือไม่

ธง in

$n$ เป็นตัวแปรรันไทม์ที่เลือกในแต่ละครั้งที่ผู้ใช้รันการใช้งาน

วิธีหนึ่งที่ฉันคิดได้คือใช้รหัสบล็อกใด ๆ เช่น AES เป็น CSPRNG ที่เมล็ดเพื่อสุ่มรายการตัวเลขแบบสุ่ม $0, 1, \ldots, 2^n-1$. ด้วยวิธีนี้ฉันรับประกันการปราศจากการชนกันได้ถึง $2^n$ ตัวเลข แต่วิธีการนี้แพงเกินไปเพราะจะต้องเปลี่ยน $2^n$ ตัวเลข

อีกวิธีหนึ่งที่ฉันคิดได้คือการใช้ block cipher เพื่อสร้าง ciphertext $c = \mathrm{enc}(\mathrm{0x000}\ldots, \mathrm{key})$, ที่ไหน $\mathrm{len}(c) \ge n$. แล้วเอาที่ 1 $n$ หลายบิตของ $ค$; มาเรียกมันว่า $c_n$. จากนั้นทำ: $c_n \oplus 0, c_n \oplus 1, \ldots, c_n \oplus 2^n-1$. สิ่งนี้มีประสิทธิภาพ แต่ปัญหาคือ ฉันคิดว่าลำดับไม่สุ่ม เช่น. $c_n \oบวก 0$ โดยทั่วไปจะใกล้เคียงกับ $c_n \oบวก 1$ กว่าพูด $c_n \oบวก 100$.

คำถาม: มีวิธีไหนเร็วกว่านี้ไหม ที่ฉันสามารถใช้รหัสบล็อกใดๆ ก็ได้เพียงครั้งเดียว เพื่อสร้างตัวเลขถัดไป เช่นนั้น เมื่อฉันทำกระบวนการซ้ำ ฉันจะได้รับ $2^n$ ตัวเลขที่ไม่ซ้ำกันมากมายโดยไม่มีการชนกัน?

ในแง่หนึ่ง ฉันเดาว่าฉันอาจเรียกมันว่า: เวอร์ชั่นออนไลน์ของการสับตัวเลข $0, 1, \ldots, 2^n-1$โดยไม่จำเป็นต้องเก็บรายการไว้ในหน่วยความจำนั่นคือ $2^n$ ยาว.

ตามหลักการแล้ว หากพบการสุ่มออนไลน์ที่สมบูรณ์แบบ จะต้องมีการกระจายนี้ (โดยที่ $i$ เป็นเลขใดใน $\{0, 1, \ldots, 2^n-1\}$ และ $N_j$ เป็นตัวแปรสุ่มที่จะรับค่าของตัวเลขในชุดนั้นมาไว้ใน $j^{th}$ การโทรของ shuffler ออนไลน์ในอุดมคติ):

$$\begin{แยก} \Pr(N_0 = ผม) &= 1/2^n \ \Pr(N_1 = ผม) &= 1/(2^n - 1) \ \Pr(N_2 = ผม) &= 1/(2^n - 2) \ \vจุด & \ \Pr(N_{2^n-1} = i) &= 1/(2^n - (2^n-1)) = 1\ \end{แยก}$$

fgrieu avatar
ng flag
มีข้อกำหนดบางอย่างที่ไม่เป็นไปตามวิธีการแบบดั้งเดิมหรือไม่: การเข้ารหัสตัวนับ $n$-bit ด้วยรหัสบล็อก $n$-บิต ถ้าเป็นเช่นนั้นโปรดระบุ
caveman avatar
in flag
@fgrieu - ไม่แน่ใจ (ฉันเดาว่ามันเป็นแค่ความไม่รู้) $n$ ในกรณีของฉันคือตัวแปร (ผู้ใช้กำหนด ณ เวลาทำงาน) ฉันไม่ได้คิดถึงมัน ChaCha20 เป็นหนึ่งในอัลกอริทึมดังกล่าวหรือไม่ ที่ฉันสามารถระบุขนาดบล็อกตามอำเภอใจในขณะรันไทม์ และมีผลตามข้างต้นหรือไม่
Maarten Bodewes avatar
in flag
ใช่ ฉันคิดว่าคีย์สตรีมที่สร้างโดยโหมดตัวนับจะเหมาะกับปัญหานี้อย่างสมบูรณ์ หากคุณมีเพียงการเข้ารหัส การเข้ารหัสจะถูกกำหนดโดยการเข้ารหัสโหมด CTR ของบล็อคทั้งหมดเป็นศูนย์
caveman avatar
in flag
@MaartenBodewes - น่าสนใจ เนื่องจากภายใน ChaCha20 มีบล็อก 512 ไบต์ (อย่างน้อยวิธีการนำไปใช้ตามปกติ เช่น`libsodium`'s) เป็นไปได้หรือไม่ที่จะเพิ่มประสิทธิภาพการใช้งานสำหรับ $n
fgrieu avatar
ng flag
อา ดังนั้นข้อกำหนดที่ขาดหายไปคือ $n$ ตัวแปร ณ รันไทม์ ซึ่งบังคับให้ใช้เทคนิคการเข้ารหัสการจองรูปแบบ โปรดเพิ่มในคำถามนี้ ช่วงสำหรับ $n$ (ค่า $n$ ที่มากเกินไปนั้นไม่สมเหตุสมผลเลย เนื่องจากการชนกันระหว่างค่าสุ่มที่เป็นอิสระต่อกันของ $n\ge256$ บิตนั้นไม่สามารถสังเกตได้อยู่ดี); และบางทีสิ่งใดก็ตามที่จำกัดไว้สำหรับจำนวน $n$-bit ค่าที่ฝ่ายตรงข้ามอาจได้รับสำหรับลำดับ/คีย์ที่กำหนด หมายเหตุ: ChaCha20 ไม่ใช่รหัสบล็อก ความกว้างของบล็อกตัวแปรน้อยกว่ามากตามต้องการ แต่อาจใช้เป็นบล็อกสร้างสำหรับบล็อกหนึ่ง
caveman avatar
in flag
@fgrieu - ขอบคุณ! นอกประเด็น: ถ้าฉันไปกับ ChaCha20 512 จะลดขนาดลงได้หรือไม่โดยไม่เปลี่ยนผลลัพธ์ (ถ้า $n
Score:3
ธง my

มีวิธีออนไลน์ในการใช้ block cipher เพื่อสร้างเอกลักษณ์หรือไม่ $n$ บิตที่รับประกันการปราศจากการชนสำหรับ $2^n$ ครั้ง?

วิธีที่ชัดเจนในการทำเช่นนี้คือเลือก รูปแบบการรักษาการเข้ารหัส โหมดของรหัสบล็อกของคุณพูดว่า FF1. นั่นคือโหมดที่ใช้บล็อกความยาวตามอำเภอใจ (ในกรณีของคุณ $n$ บิต); คุณจะใส่คีย์และเข้ารหัสตัวนับ ด้วยคีย์คงที่ (และไม่ใช่เลย) การเข้ารหัสจะกลับด้านได้ และมีเอาต์พุตที่มีความยาวเท่ากับอินพุตทุกประการ ซึ่งให้สิ่งที่คุณต้องการได้อย่างแม่นยำ

ข้อเสียเดียวที่ฉันเห็นคือ FF1 อาจมีปัญหาด้านความปลอดภัยสำหรับบล็อกขนาดเล็กจริงๆ (ในกรณีของคุณ $n \le 6$). แน่นอนว่าหากผู้ใช้ขอเพียงเล็กน้อย $n$คุณสามารถถอยกลับบน 'เปลี่ยนค่าจาก 0 เป็น $2^n-1$ กลยุทธ์...)

โพสต์คำตอบ

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