Score:2

ไบต์สุ่มเหล่านั้นมีความปลอดภัยน้อยเพียงใด

ธง kn

ใน Python codebase ของเรา มีการสร้างไบต์แบบสุ่มขึ้นมาซึ่งเราต้องการให้มีความปลอดภัยในการเข้ารหัส ก่อนหน้านี้รหัสคือ:

ความสามารถ = "".join(secrets.choice(string.digits) for i in range(33))

ฉันเปลี่ยนเป็น:

ความสามารถ = secrets.token_bytes(16)

จากการประมาณของฉัน เวอร์ชันแรกเลือก 33 ครั้งระหว่างตัวเลข 10 หลัก ดังนั้นจึงมีล็อก 33*2(10)=110 บิตของเอนโทรปี ในขณะที่อันที่สองมี 128 บิตของเอนโทรปี การคำนวณนี้ถูกต้องหรือไม่?

poncho avatar
my flag
"ไบต์สุ่มเหล่านั้นมีความปลอดภัยน้อยเพียงใด"; นอกจากนี้ยังขึ้นอยู่กับสิ่งที่คุณทำกับไบต์เหล่านั้นด้วย ตัวอย่างเช่น หากคุณใช้เป็นคีย์ AES-128 นั่นหมายความว่าคุณน่าจะใช้เฉพาะ 16 ไบต์แรกของตัวอย่างแรกเท่านั้น ซึ่ง *แย่กว่า "ความปลอดภัย 110 บิต" อย่างมาก
Maarten Bodewes avatar
in flag
ฉันเห็นด้วยกับปอนโช ฉันไม่เห็นอะไรผิดปกติกับการคำนวณของคุณ แต่จากนั้นขึ้นอยู่กับวิธีการใช้ตัวเลข (และพิจารณาวิธีการสร้างตัวเลขเหล่านั้น ซึ่งอาจเป็นวิธีที่ดีหรือไม่ดีก็ได้) สิ่งหนึ่งก็คือว่าหากสิ่งนี้ถือเป็นตัวเลข คุณอาจลงเอยด้วยเลขศูนย์นำหน้าสองสามตัว ซึ่งอาจถูกลบออกก่อนที่จะใช้ค่า มันขึ้นอยู่กับรหัสหลังจากนั้นว่ามีผลกระทบอย่างมีนัยสำคัญหรือไม่
Maarten Bodewes avatar
in flag
ระวังการพิมพ์ Duck ที่ใช้ใน Python การมีสตริงที่ประกอบด้วยตัวเลขหรือไบต์นั้นค่อนข้างแตกต่าง ฉันไม่ชอบใช้สตริงสำหรับค่าไบนารี ถ้าฉันจะออกแบบ API ฉันจะยอมรับ [`bytes` หรือ `bytearray`](https://www.w3resource.com/python/python-bytes.php) สำหรับ Python 3
kn flag
เราใช้สิ่งทั้งหมดเพื่อสร้าง URL ที่คาดเดาไม่ได้ (ด้วย base64)
Score:3
ธง us

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

เมื่อพิจารณาถึงการสุ่ม มีสองสิ่งที่คุณควรคำนึงถึง: ความคาดเดาไม่ได้และความสม่ำเสมอ

  • ไม่ใช่กรณีของคุณ แต่ถ้าคุณใช้ python ในตัวเช่น สุ่มคุณมีความสม่ำเสมอแต่ไม่คาดเดาไม่ได้ เพราะใช้ PRNG ดังนั้น หากพูดถึงการเข้ารหัสอย่างชาญฉลาดตามกฎของ Kerchoff คุณจะได้รับค่าเอนโทรปีเป็น 0
  • หากคุณกำลังใช้ ความลับ. มันใช้ (ใน Linux สำหรับตัวอย่าง) /dev/urandom ซึ่งโดยทั่วไปถือว่ามีความปลอดภัยในการเข้ารหัส * ยกเว้นในบางกรณี (เช่น ขณะบู๊ต) คุณจะได้รับไฟล์ โดยประมาณ จำนวนเอนโทรปี (คุณไม่สามารถวัดได้จริงๆ) ที่คุณหวังว่ามันจะน้อยกว่าค่าทางทฤษฎีของคุณเล็กน้อย

* มีการถกเถียงกันอย่างต่อเนื่องว่าจะใช้หรือไม่ /dev/urandom หรือ /dev/สุ่ม. คุณสามารถอ่านเพิ่มเติม ที่นี่ และคุณยังสามารถตรวจสอบความคิดเห็นด้านล่างของ SAI Peregrinus

Paul Uszak avatar
cn flag
เอ่อ คุณหมายถึงอะไร _"การใช้ตัวเลขที่พิมพ์ได้เพื่อจัดเก็บแบบสุ่มเป็นการแลกเปลี่ยนระหว่างการจัดเก็บและความสามารถในการอ่าน"_ คุณกังวลเกี่ยวกับความจุในการจัดเก็บหรือไม่?
SAI Peregrinus avatar
si flag
"การโต้วาทีที่กำลังดำเนินอยู่" นั้นไม่ได้เป็นการโต้วาทีมาระยะหนึ่งแล้ว เคอร์เนล Linux ปัจจุบัน *ไม่มี* ความแตกต่างในการทำงานระหว่าง /dev/random และ /dev/urandom พวกเขาบล็อกตอนบู๊ตจนกว่าพูลจะถูก seed จากนั้นจะไม่บล็อกในภายหลัง

โพสต์คำตอบ

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