อธิบายเป็นภาษาอังกฤษแบบธรรมดาเกี่ยวกับ Entropy


28

ถ้าฉันใช้คำสั่งนี้ใน Ubuntu

sudo cat /proc/sys/kernel/random/entropy_avail

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

คำตอบ:


22

ระบบของคุณรวบรวมตัวเลขสุ่ม "ของจริง" โดยจับตาดูเหตุการณ์ต่าง ๆ : กิจกรรมเครือข่ายตัวสร้างหมายเลขสุ่มฮาร์ดแวร์ (ถ้ามีตัวอย่างเช่นตัวประมวลผล VIA มักจะมีตัวสร้างตัวเลขสุ่ม "ของจริง") และอื่น ๆ หากฟีดเหล่านั้นไปยังกลุ่มเอนโทรปีของเคอร์เนลซึ่งถูกใช้โดย / dev / random แอปพลิเคชั่นที่ต้องการความปลอดภัยสูงมีแนวโน้มที่จะใช้ / dev / random เป็นแหล่งข้อมูลเอนโทรปีหรือกล่าวอีกนัยหนึ่งคือแหล่งความสุ่ม

หาก / dev / Random หมดเอนโทรปีที่มีอยู่ก็ไม่สามารถให้บริการแบบสุ่มมากขึ้นและแอปพลิเคชันที่รอแผงสุ่มอยู่จนกว่าจะมีสิ่งที่สุ่มมากขึ้น ตัวอย่างที่ฉันเห็นในอาชีพของฉันคือ Cyrus IMAP daemon ต้องการใช้ / dev / random สำหรับการสุ่มและเซสชัน POP ต้องการสร้างสตริงแบบสุ่มในการเชื่อมต่อ APOP จาก / dev / random ในสภาพแวดล้อมที่ยุ่งมีการพยายามล็อกอินมากกว่าการรับส่งข้อมูลสำหรับ / dev / random -> ทุกอย่างจนตรอก ในกรณีนั้นฉันติดตั้ง rng-tools และเปิดใช้งาน rngd มัน - นั่นคือตัวเลขกึ่งสุ่มที่โกยจาก / dev / urandom เป็น / dev / random ในกรณี / dev / random หมดในเอนโทรปี "ของจริง"


19

หากคุณต้องการภาพรวมที่ง่ายขึ้นของปัญหาพื้นฐาน: บางแอปพลิเคชั่น (เช่นการเข้ารหัส) ต้องมีหมายเลขสุ่ม คุณสามารถสร้างตัวเลขสุ่มโดยใช้อัลกอริทึม - แม้ว่าสิ่งเหล่านี้ดูจะสุ่มในแง่หนึ่ง แต่พวกมันสามารถคาดเดาได้ทั้งหมด ตัวอย่างเช่นถ้าฉันให้คุณ 58209749445923078164062862089986280348253421170679 พวกเขาดูสุ่มสวย แต่ถ้าคุณรู้ว่าพวกมันคือตัวเลขหลักของ PI คุณก็จะรู้ว่าอันถัดไปจะเท่ากับ 8

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


2
คำอธิบายที่ดี ...
pradipta

แต่ PI นั้นไม่มีเหตุผลและมันจะรวมทุกลำดับรวมถึงลำดับข้างต้นตามด้วย 9 (แทน 8)
Ajay Brahmakshatriya

9

เอนโทรปีเป็นศัพท์เทคนิคสำหรับ "Randomness" คอมพิวเตอร์ไม่ได้สร้างเอนโทรปีจริงๆ แต่รวบรวมโดยการดูสิ่งต่าง ๆ เช่นความเร็วในการหมุนของฮาร์ดไดรฟ์ (ปรากฏการณ์ทางกายภาพที่ยากต่อการคาดเดาเนื่องจากแรงเสียดทาน ฯลฯ ) เมื่อคอมพิวเตอร์ต้องการสร้างข้อมูลสุ่มหลอกมันจะ เมล็ดสูตรทางคณิตศาสตร์ด้วยเอนโทรปีที่แท้จริงที่พบโดยการวัด mouseclicks ฮาร์ดไดรฟ์รูปแบบการหมุน ฯลฯ การพูดอย่างคร่าวๆentropy_availคือการวัดบิตที่มีให้อ่านในปัจจุบัน/dev/random

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

หากคุณมีเอนโทรปี 4096 บิตและคุณ/dev/randomคาดหวังว่าคุณจะสามารถอ่านเอนโทรปีได้ 512 ไบต์ (4096 บิต) ก่อนบล็อกไฟล์ในขณะที่รอเอนโทรปีมากกว่า

ตัวอย่างเช่นถ้าคุณ“ cat /dev/random” เอนโทรปีของคุณจะลดลงเหลือศูนย์ ในตอนแรกคุณจะได้รับขยะแบบสุ่ม 512 ไบต์ แต่มันจะหยุดและค่อย ๆ คุณจะเห็นรางข้อมูลแบบสุ่มมากขึ้น

นี้ไม่ได้เป็นวิธีการที่คนควรดำเนินการ/dev/randomแต่ โดยปกตินักพัฒนาซอฟต์แวร์จะอ่านข้อมูลจำนวนเล็กน้อยเช่น 128 บิตและใช้เพื่อหว่านอัลกอริทึม PRNG บางประเภท มันสุภาพที่จะไม่อ่านเอนโทรปีจากที่/dev/randomคุณต้องการตั้งแต่ใช้เวลานานในการสร้างและถือว่ามีค่า ดังนั้นหากคุณระบายไฟล์โดยcatใช้ไฟล์อย่างที่กล่าวมาข้างต้นอย่างไม่ระมัดระวังคุณจะทำให้แอปพลิเคชันอื่น ๆ ที่จำเป็นต้องอ่านจาก/dev/randomบล็อก ในที่ทำงานหนึ่งระบบเราสังเกตว่ามีการเข้ารหัสลับจำนวนมากที่ทำงานจนตรอก เราค้นพบว่างาน cron กำลังเรียกสคริปต์ไพ ธ อนที่เริ่มต้นอย่างต่อเนื่องramdom.random()ในการวิ่งแต่ละครั้งซึ่งวิ่งทุกสองสามวินาที ในการแก้ไขปัญหานี้เราเขียนสคริปต์ python ใหม่เพื่อให้มันทำงานเป็น daemon ที่เริ่มต้นเพียงครั้งเดียวและงาน cron จะอ่านข้อมูลผ่านทาง XMLRPC เพื่อที่จะไม่ให้อ่าน/dev/randomต่อเมื่อเริ่มต้น


1
"ในการแก้ไขปัญหานี้เราเขียนสคริปต์ python ใหม่เพื่อให้มันทำงานเป็น daemon ที่เริ่มต้นเพียงครั้งเดียวและงาน cron จะอ่านข้อมูลผ่าน XMLRPC เพื่อที่จะไม่อ่านต่อจาก / dev / random เมื่อเริ่มต้น" --- ยกเว้นส่วนที่ผมยกมาซึ่งยากที่จะประเมินเพราะมันไม่ชัดเจนว่าสคริปต์ของคุณต้องการการสุ่มหรือไม่คำตอบของคุณชัดเจนและชัดเจนมาก
Craig Hicks

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.