Score:1

PRNG จะใช้เมื่อใดและจะใช้ CSPRNG เมื่อใด

ธง ng

ฉันเข้าใจว่า PRNG เป็นตัวสร้างตัวเลขสุ่มที่ใช้อัลกอริทึมกำหนดขึ้นจากเมล็ด

ฉันเข้าใจด้วยว่า CSRNG เป็น PRNG ที่ปลอดภัยสำหรับการเข้ารหัสเพื่อสร้างตัวเลขสุ่ม

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

หากมีข้อผิดพลาดใดๆ ข้างต้น ฉันจะขอบคุณสำหรับการชี้แจงเพราะคำถามของฉันขึ้นอยู่กับความถูกต้อง

ดังนั้นคำถามหลักของฉันคือคุณต้องการ PRNG เมื่อใด และเมื่อใดที่คุณต้องใช้ CSPRNG

คำตอบแรกของฉันคือควรใช้ CSPRNG เมื่อสร้างคีย์ แต่เมื่อฉันค้นหา "prng ใช้สำหรับอะไร" หน้าหนึ่งที่ฉันพบคือ นี้ ซึ่งระบุว่า:

ในการเข้ารหัส PRNG ถูกใช้เพื่อสร้างคีย์เซสชันและรหัสสตรีม

ซึ่งทำให้ฉันสับสนเล็กน้อย ทำไม PRNG ที่ไม่แข็งแกร่งในการเข้ารหัสจึงควรใช้สำหรับคีย์ ฉันคาดว่าจะใช้ CSPRNG แทน

สิ่งนี้ทำให้ฉันรู้ว่าบางทีฉันยังไม่เข้าใจ PRNG และ CSPRNG อย่างถ่องแท้ และวิธีการใช้ ดังนั้นคำถามนี้: ในการเข้ารหัส PRNG จะใช้เมื่อใดและจะใช้ CSPRNG เมื่อใด

kelalaka avatar
in flag
[อะไรคือความแตกต่างระหว่าง CSPRNG และ PRNG](https://crypto.stackexchange.com/questions/12436/what-is-the-difference-between-csprng-and-prng), [https://crypto. stackexchange.com/questions/60405/why-are-prng-in-programming-languages-not-cryptographically-secure-by-default/60407#60407](https://crypto.stackexchange.com/q/60405/18298 ) คุณควรดูที่เว็บไซต์ของเราด้วย นี่คือตัวอย่างบางส่วน
Finlay Weber avatar
ng flag
ในลิงก์ใดลิงก์หนึ่ง คำถามระบุว่า "เราใช้ PRNG สำหรับการสร้างคีย์" จริงหรือไม่ PRNG ใช้สำหรับการสร้างคีย์หรือไม่ หรือเป็น CSPRNG ที่ใช้?
Finlay Weber avatar
ng flag
ฉันได้ดูทั้งสองลิงก์แล้วและฉันไม่แน่ใจว่าลิงก์เหล่านั้นตอบคำถามหลักของฉัน: ในการเข้ารหัส PRNG จะใช้เมื่อใดและ CSPRNG จะใช้เมื่อใด
kelalaka avatar
in flag
คำถามหลักของคุณขาดบริบท คำตอบง่ายๆ ใช้ CSPRNG ทุกครั้งที่มี? ดังนั้น สิ่งที่ระบบของคุณล้มเหลวในการมี CSPRNG และสิ่งที่คุณมีในระบบของคุณ เพื่อให้ระบบเป้าหมายของคุณปลอดภัยจากการโจมตี x,y,z นอกจากคำถามของคุณกว้างแล้วใช่ไหม? คำตอบของโทมัสครอบคลุมความคลุมเครือของคุณอยู่แล้ว
kelalaka avatar
in flag
`การปลอมแปลงดังกล่าวสามารถรักษาความปลอดภัยด้วยการเข้ารหัสหรือไม่ก็ได้ มีความปลอดภัยในการเข้ารหัสหากไม่มีใครสามารถแยกแยะเอาต์พุตจากการสุ่มที่แท้จริงได้อย่างน่าเชื่อถือ แม้ว่าอัลกอริทึม PRNG จะเป็นที่รู้จักอย่างสมบูรณ์ (แต่ไม่ใช่สถานะภายใน) PRNG ที่ไม่มีการเข้ารหัสที่ปลอดภัยจะหลอกการทดสอบทางสถิติขั้นพื้นฐาน แต่ผู้โจมตีที่ชาญฉลาดสามารถแยกแยะได้จากการสุ่มที่แท้จริง
Maarten Bodewes avatar
in flag
คำตอบอื่นไม่ครอบคลุม: "และด้วยการเข้ารหัสที่ปลอดภัย ฉันเชื่อว่านี่หมายความว่าแม้ว่าผู้โจมตีจะรู้อัลกอริทึมเชิงกำหนดและเมล็ด พวกเขาจะไม่สามารถทำนายหมายเลขสุ่มถัดไปได้ ฉันเข้าใจว่านี่เป็นเพราะ CSRNG ยังใช้ประโยชน์จากสถานะภายในบางอย่างด้วย" สิ่งนี้ไม่ถูกต้อง PRNG เป็นอัลกอริทึมและกำหนดขึ้นได้ หากคุณรู้หรือเดาเมล็ดพืชได้ (และเมื่อผสมเข้าไปในสถานะ) คุณก็จะสามารถคำนวณสถานะภายในและผลลัพธ์ทั้งหมดได้ กล่าวอีกนัยหนึ่ง: เมล็ดเป็นแหล่งของเอนโทรปีของ PRNG
Score:2
ธง cr

ประการแรก คำจำกัดความบางประการ:

  • PRNG คือ เครื่องกำเนิดตัวเลขสุ่มหลอก. อาจเป็นสิ่งที่ไม่ดีหรือมีคุณสมบัติทางคณิตศาสตร์ที่แข็งแกร่งมาก ไม่สำคัญสำหรับคำจำกัดความนี้
  • CSPRNG คือ PRNG ที่ปลอดภัยด้วยการเข้ารหัส. เป็น PRNG ที่มีข้อกำหนดบางอย่างที่เข้มงวด

ในของคุณ ลิงค์ผู้เขียนกำลังเขียนเกี่ยวกับ CSPRNG แต่เรียกมันว่า PRNG องค์ประกอบ "ความปลอดภัยในการเข้ารหัส" เป็นไปตามข้อกำหนดนี้:

สตริงบิตที่สร้างขึ้นควร "ดูสุ่ม" สำหรับฝ่ายตรงข้าม

แท้จริงแล้ว CSPRNG จำเป็นเมื่อเอาต์พุตของ PRNG ต้องแยกไม่ออกจากการสุ่มที่สม่ำเสมออย่างสมบูรณ์ สิ่งนี้จำเป็นสำหรับอัลกอริธึมการเข้ารหัสบางอย่าง

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

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

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

นอกจากนี้ หากคุณต้องการเอาต์พุตที่ทำซ้ำได้ซึ่งแยกไม่ออกจากการสุ่มที่เหมือนกันอย่างสมบูรณ์ คุณจำเป็นต้องมี รหัสสตรีมไม่ใช่ PRNG

A. Hersean avatar
cr flag
@fgrieu นั่นไม่ใช่สิ่งที่ฉันเขียน อย่างไรก็ตาม ฉันแก้ไขคำตอบให้ชัดเจนขึ้น เกี่ยวกับ TRNG ในคำตอบของฉัน ฉันไม่ได้แยกความแตกต่างของ PRNG จากการเพาะ แต่จากการอัปเดต (หรือขาดไป) ของสถานะภายในหลังจากที่เพาะแล้ว ดังที่ทำโดย OpenSSL หรือ /dev/urandom บน Linux เนื่องจากมีความคลุมเครือในความหมายของ "จริง" ใน TRNG (ขึ้นอยู่กับว่าใครเป็นคนพูด) ฉันจึงไม่ใช้คำนี้
fgrieu avatar
ng flag
ฉันจะไม่เรียก /dev/urandom เป็น CSPRNG หรือ PRNGสำหรับฉันแล้ว PRNG ถูกกำหนดขึ้นแล้ว (ซึ่งนัยโดยหลอก) และ CSPRNG จะคาดเดาไม่ได้ก็ต่อเมื่อรวมกับแหล่งเอนโทรปีที่เหมาะสมเท่านั้น ทำให้เป็น CSRNG ซึ่งหมายถึง Cryptographically Secure (จริง มักจะทิ้งไว้โดยนัยแทนที่จะระบุ) จำนวนสุ่ม เครื่องกำเนิดไฟฟ้า. ไม่ใช่ CSRNG ทั้งหมดที่มี CSPRNG: เป็นเรื่องปกติที่จะสร้าง True RNG ที่ปลอดภัยด้วยการเข้ารหัสจากเมล็ดพันธุ์ที่ดีด้วยการทดสอบออนไลน์ที่ดีและ PRNG ที่ไม่ปลอดภัยด้วยการเข้ารหัส เช่น LFSR พื้นฐานพร้อมการทำลายล้างบางส่วน
A. Hersean avatar
cr flag
@fgrieu ถ้าฉันเข้าใจคำจำกัดความของคุณอย่างถูกต้อง Mersenne twister (MT19937) ที่เพาะจาก /dev/urandom จะกลายเป็น CSRNG แต่ผลลัพธ์ของ RNG นี้สามารถทำนายได้จากการสังเกตการวนซ้ำ 624 ครั้ง สำหรับฉัน (และวิกิพีเดีย) สิ่งนี้ไม่สามารถเป็น CS ได้ และขัดแย้งกับข้อกำหนดที่คุณระบุซึ่งไม่สามารถคาดเดาได้สำหรับ CSRNG เนื่องจากคุณมีประสบการณ์มากกว่าฉัน ฉันรู้สึกเหมือนขาดอะไรไป คุณช่วยสอนฉันได้ไหม
A. Hersean avatar
cr flag
@fgrieu คุณคิดว่า MT19937 เพาะ CSRNG อย่างลับๆ โดยคาดเดาไม่ได้ภายใต้เงื่อนไขว่าสร้างได้สูงสุด 64x624 บิตหรือไม่ แม้ว่าเงื่อนไขที่คล้ายคลึงกันจะบ่งบอกเป็นนัยสำหรับทุก RNG ที่สถานะภายในขึ้นอยู่กับเมล็ดเท่านั้น ฉันคิดว่าการเรียก MT19937 ว่า CSRNG เป็นการไม่เหมาะสมที่นี่ หมายเหตุด้านข้าง: โดยส่วนตัวแล้ว ฉันใช้ "หลอก" เมื่อบิตถูกสร้างขึ้นโดยอัลกอริทึม ดังนั้นฉันจึงไม่แยกความแตกต่างระหว่าง CSPRNG และ CSRNG ฉันจะสงวนการขาด "หลอก" (หรือการใช้ "จริง") กับ RNG ฮาร์ดแวร์ที่สมบูรณ์แบบในจินตนาการและฉันชอบ HRNG สำหรับตัวสร้างฮาร์ดแวร์จริง (ลำเอียง)
fgrieu avatar
ng flag
การใช้ "หลอก" ทุกครั้งที่มีอัลกอริทึมเข้ามาเกี่ยวข้องจะไม่ถูกมองข้าม และฉันตกลงที่จะเรียก /dev/urandom เป็น Pseudo-TRNG หรือระบุว่า _uses_ a (CS)PRNG; แต่ไม่ใช่ว่า _is_ a (CS)PRNG ซึ่งมีคำจำกัดความที่ชัดเจนในการเข้ารหัสลับสมัยใหม่ แท้จริงแล้ว MT19937 ไม่ปลอดภัยด้วยการเข้ารหัสเมื่อใช้อย่างที่คุณอธิบาย ดังนั้นจึงไม่ใช่ CSRNG เมื่อใช้เพียงอย่างเดียว ข้อความของฉันเกี่ยวกับ LFSR (เช่น ในโหมด [scrambler](https://en.wikipedia.org/wiki/Scrambler#Additive_(synchronous)_scramblers)) ที่ป้อนด้วยแหล่งเอนโทรปีและที่สำคัญที่สุดคือการสลายตัว (ทำให้เอาต์พุตน้อยลงอย่างมาก มากกว่าอินพุต)
Score:1
ธง cn

มันค่อนข้างง่ายจริงๆ

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

. CSPRNG คือ PRNG ที่อัปเกรดซึ่งคุณไม่สามารถคาดเดาหมายเลขถัดไปได้ เรียกว่าการทดสอบบิตถัดไป กล่าวคือ คุณไม่สามารถคาดเดาบิตเอาต์พุตถัดไปได้ไม่ว่าคุณจะสังเกตอะไรก็ตาม (ไม่ทราบสถานะภายในที่ซ่อนอยู่) ดังนั้น:-

$$ P(x_{i} = 1) = \frac{1}{2} + \epsilon $$

โดยที่อคติจากคู่คือ (โดยทั่วไป) $< 2^{-64}$. หากคุณตั้งสมมติฐานเกี่ยวกับส่วนแรกของข้อความเข้ารหัส ก็จะไม่มีประโยชน์ในส่วนถัดไปและคุณก็จะจบลงที่อะไร ซึ่งเป็นสิ่งที่เราต้องการปกปิดเป็นความลับ. ตัวอย่างคือ ซัลซ่า20 เป็นส่วนหนึ่งของรหัสสตรีม

ในการเข้ารหัส PRNG ถูกใช้เพื่อสร้างคีย์เซสชันและรหัสสตรีม

เป็นเพียงการพูดจาฉาบฉวย ฉันเรียกมันว่า RNG ทั้งหมด เว้นแต่ว่าต้องการคำจำกัดความที่แคบลง


  1. Nuance: PRNG สามารถสร้างตัวเลขได้ทุกประเภท แปลกประหลาด การแจกแจงที่เป็นประโยชน์สำหรับวิทยาศาสตร์และสิ่งนั้น ในการเข้ารหัส เราสร้างการแจกแจงแบบเดียวกันเพื่อปกปิดข้อความของเรา

  2. มองไปที่ https://en.m.wikipedia.org/wiki/List_of_random_number_generators.

  3. สังเกตการมีอยู่ของ TRNGซึ่งเป็นการผสมผสานระหว่างด้านบนกับฮาร์ดแวร์

SAI Peregrinus avatar
si flag
ฉัน (ตามปกติ) คัดค้านการเรียก HWRNGs TRNG ไม่มีอะไร "จริง" เกี่ยวกับพวกเขามากไปกว่า CSPRNG ใดๆ นี่เป็นข้อโต้แย้งเชิงอภิปรัชญา: กฎของฟิสิกส์นั้นสอดคล้องกับเอกภพที่กำหนดขึ้นทั้งหมด ดังนั้นจึงไม่มีเหตุผลที่จะสันนิษฐานว่ามีแหล่งที่มาของเอนโทรปีที่ซ่อนอยู่ซึ่งอนุญาตให้มีการไม่กำหนดทั้งหมด แทนที่จะเป็นเพียงความโกลาหลทางคณิตศาสตร์ ส่งผลให้ไม่สามารถทำนายเหตุการณ์ในอนาคตได้ ไม่ใช่ความแตกต่างในทางปฏิบัติ แต่การเรียกพวกเขาว่า TRNG สามารถให้ความคิดที่ผิดแก่ผู้คนเกี่ยวกับวิธีการทำงานของเอนโทรปี
Paul Uszak avatar
cn flag
@SAIPeregrinus โอ้ที่รัก - คุณทำให้ฉันผิดหวัง ;-) เหยื่อกลืนและย่อยแล้ว วันนี้คุณล้างหน้าแล้วหรือยัง? ไม่ใช่การวิจารณ์ส่วนบุคคล แต่เป็นวิทยาศาสตร์ น้ำไหลวนลงมาตามรูปลั๊ก ในพลศาสตร์ของของไหล เรียกว่าการไหลแบบปั่นป่วน (ไม่ใช่แบบราบเรียบ) ในขณะที่มันหมุนตามเข็มนาฬิกา (ในภาคเหนือ) มันเป็นไปตามการสุ่มบางอย่าง คุณไม่คิดเหรอ? คลื่น เส้นโค้ง เป็นต้น รูปแบบที่คาดเดาไม่ได้? ยังอยู่ในอ่างล้างจาน วางท่อประปาไม่ดี น้ำไม่ท่วมห้องใต้หลังคาข้างบ้าน นี่เป็นข้อพิสูจน์ว่าจุลภาคที่ไม่แน่นอนและมาโครที่คาดเดาได้สามารถอยู่ร่วมกันได้โดยที่จักรวาลไม่ระเบิด
Paul Uszak avatar
cn flag
ดู [เพจ](http://www.reallyreallyrandom.com/zener/why-its-random/) ของฉันสำหรับคำอธิบายทางเทคนิคเพิ่มเติมเกี่ยวกับความไม่แน่นอนของควอนตัมและเหตุใด TRNG จึงมีอยู่จริง นอกจากนี้ ให้พิจารณาด้วยว่า CSPRNG ถูกกำหนดขึ้นโดยสมบูรณ์ คาดเดาได้โดยใครบางคน มีผลลัพธ์ที่จำกัด และมีความซับซ้อนเป็นศูนย์ของ Kolmogorov ดังนั้นโดยการโหลด CSPRNGs $\ne$ TRNGs แล้วก็มีของใส่ครั้งเดียว หรือว่าไม่มีอยู่เหมือนกัน..?
Paul Uszak avatar
cn flag
แต่ฉันไม่เข้าใจ _"เอนโทรปี"_ ประโยคสุดท้ายของคุณ
SAI Peregrinus avatar
si flag
คุณเชื่อว่ากลศาสตร์ควอนตัมนั้นไม่สามารถกำหนดได้ ฉันไม่: สมมติว่าไม่ใช่ค่ากำหนดไม่จำเป็นสำหรับการคำนวณทางคณิตศาสตร์ ดังนั้นฉันจึงแยกแยะระหว่างกระบวนการสุ่มที่ "จริง" กับกระบวนการที่วุ่นวายเท่านั้น ไม่มีทางที่จะบอกความแตกต่างจากผลลัพธ์ได้ ดังนั้นจึงเป็นคำถามที่เลื่อนลอย เช่นเดียวกับที่เป็นไปไม่ได้ที่จะเรียกใช้ "การทดสอบบิตถัดไป" ในจักรวาลจริง
SAI Peregrinus avatar
si flag
เอนโทรปีของข้อมูลเป็นเรื่องเกี่ยวกับปริมาณที่ชุดของสถานะหนึ่งๆ ของระบบครอบครองในสเตทสเปซของสถานะที่เป็นไปได้ทั้งหมดของระบบนั้น และความน่าจะเป็นของเส้นทางที่กำหนดผ่านสเตทสเปซที่เข้าสู่วอลุ่มนั้น มักจะสับสนกับ "ความสุ่ม" หรือ "ความไม่แน่นอน" (แนวคิดต่างกัน) การยืนยันการมีอยู่ของการสุ่มแบบ "จริง" มีแนวโน้มที่จะทำให้เกิดความสับสน โดยเฉพาะอย่างยิ่งเมื่อใช้เอนโทรปีเพื่ออธิบายระบบที่ดูเหมือนสุ่ม
Paul Uszak avatar
cn flag
@SAIPeregrinus Heisenberg, Born, Bohr และ Schrödinger เพื่อนของพวกเขาจะไม่เห็นด้วยกับคุณ
SAI Peregrinus avatar
si flag
และโบห์ม เอเวอเรตต์และคนอื่นๆ จะชี้ให้เห็นถึงสูตรที่กำหนดขึ้นได้ ฉันสงสัยว่า Heisenberg, Born หรือ Bohr จะยืนยันอย่างผิดพลาดว่าการตีความแบบโคเปนเฮเกนที่พวกเขาต้องการเป็นการตีความที่ถูกต้องเท่านั้น หรือว่าคณิตศาสตร์ต้องการการไม่กำหนด พวกเขาไม่เห็นด้วยว่าข้อสันนิษฐานใดง่ายกว่ากัน ไม่เกี่ยวกับสิ่งที่เป็นข้อสันนิษฐาน

โพสต์คำตอบ

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