Score:2

ประโยชน์ของการแฮชเมล็ดพันธุ์เฉพาะใน PRNG

ธง il

คำถามนี้เชื่อมโยงกับ คำถามนี้ (สแต็คโอเวอร์โฟลว์) ที่ฉันถามเกี่ยวกับรายละเอียดการใช้งานเฉพาะของตัวสร้างตัวเลขสุ่มของ Python (Mersenne Twister) ที่นี่ ฉันมีโฟกัสที่แตกต่างกันเล็กน้อย อย่าลังเลที่จะปิด แต่ฉันไม่พบคำถามที่คล้ายกันซึ่งตอบคำถามของฉันทุกประการ

  • ใน PRNG ประโยชน์ของการแฮชเมล็ดพันธุ์เฉพาะ (ผู้ใช้ระบุ) มีประโยชน์อย่างไร
  • จะมีประโยชน์อะไรเพิ่มเติมหรือไม่หากใช้เกลือ?

ตัวอย่างเช่นในกรณีของ Pythons พวกเขาทำทั้งสองอย่างโดยที่เกลือที่ใช้คือเมล็ดพืช

แก้ไข: ฉันถูกถามเกี่ยวกับกรณีการใช้งานที่ฉันหาคำตอบได้ยาก การศึกษาการนำ PRNG ไปใช้ในหลายภาษายอดนิยม ดูเหมือนจะแฮช / เกลือ / แก้ไขเมล็ดพันธุ์ที่ผู้ใช้ให้ไว้เสมอ ดูตัวอย่าง https://github.com/python/cpython/blob/a57ec7a4feaf24f470a9d1e5b1b3f2cb1b062af7/Lib/random.py#L157

เนื่องจากภาษาส่วนใหญ่ดูเหมือนจะทำเช่นนี้ ฉันจึงถามว่าทำไมพวกเขาจึงแฮชเมล็ดผู้ใช้แทนที่จะแยกวิเคราะห์ลงใน PRNG

AleksanderCH avatar
nl flag
สิ่งนี้ตอบคำถามของคุณหรือไม่ [คุณสมบัติของ PRNG / แฮช?](https://crypto.stackexchange.com/questions/277/properties-of-prng-hashes)
il flag
@AleksanderCH น่าเศร้าที่ไม่มีคำถามถามเกี่ยวกับประโยชน์ของ _always_ การแฮชเมล็ด (ซึ่งฉันสามารถเห็นได้ว่าคุณท่อตรงเวลาหรืออย่างอื่น) ที่นี่ฉันกำลังถามว่าประโยชน์ที่จะได้รับเมื่อเราตั้งค่าเมล็ดด้วยตนเอง
kodlu avatar
sa flag
กรณีการใช้งานสำหรับการปฏิบัติดังกล่าวคืออะไร? คุณต้องให้รายละเอียดเพิ่มเติมในคำถาม
SAI Peregrinus avatar
si flag
PRNG ควรแสดงลำดับเดียวกันสำหรับเมล็ดที่กำหนด CSPRNG ไม่ควรเลย หากต้องใช้เมล็ดพันธุ์ที่ผู้ใช้ควบคุม ก็ควรผสมกับแหล่งที่มาของเอนโทรปีอื่นก่อนใช้งาน Python ที่คุณเชื่อมโยงนั้นเป็น PRNG ปกติ มันแค่แฮชอินพุตเพื่อให้แน่ใจว่ามีจำนวนไบต์ที่เหมาะสมสำหรับการดำเนินการต่อไปนี้
Paul Uszak avatar
cn flag
@SAIPeregrinus เรื่อง _"ไม่ควรเป็น CSPRNG"_ คุณแน่ใจไหม? มีโอกาสไหมที่คุณจะรวม CSPRNG กับ TRNG ChaCha, SecureRandom และ RNG ที่ใช้การเข้ารหัสแบบบล็อกทั้งหมดถือเป็น CSPRNG แต่ทั้งหมดถูกกำหนดไว้แล้ว
SAI Peregrinus avatar
si flag
ChaCha เป็นรหัสสตรีม ไม่ใช่ CSPRNG CSPRNG ถูกกำหนดโดยคำจำกัดความ (นั่นคือ P) นอกจากนี้ยังไม่พึ่งพาข้อมูลเอนโทรปีของผู้ใช้เพียงอย่างเดียวในการใช้งานจริงใดๆ (SecureRandom ไม่มี, getrandom() ไม่มี, CryptGenRandom ไม่ เป็นต้น) CSPRNG *ควร* รับเอนโทรปีอินพุตจาก HWRNG หากมี และจากแหล่งฮาร์ดแวร์อื่นๆ เมื่อไม่มีคุณสามารถสร้าง CSPRNG จากรหัสสตรีมได้ แต่รหัสสตรีมไม่จำเป็นต้องเป็น CSPRNG
Score:1
ธง fr

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

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

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

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

มีบางกรณีที่เราใช้การออกแบบ CSPRNG สำหรับผลลัพธ์ที่กำหนดซึ่งแยกไม่ออกจากการสุ่ม และเกลือก็มีประโยชน์ที่นั่น ตัวอย่างเช่น ใน RFC 6979 ซึ่งอธิบาย DSA และ ECDSA เชิงกำหนด เราใช้ HMAC_DRBG เพื่อสร้างค่าสุ่ม $k$. คีย์ส่วนตัวคืออินพุตเอนโทรปีของเราและแฮชของข้อความคือเกลือ และทั้งสองอย่างนี้จำเป็นสำหรับการรักษาความปลอดภัย

โพสต์คำตอบ

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