อ่าน 9 นาที
การสร้างเลขสุ่ม
การสร้างเลขสุ่ม เป็นกระบวนการที่มักใช้ เครื่องกำเนิดเลขสุ่ม ( RNG ) ในการสร้างลำดับของ ตัวเลข หรือ สัญลักษณ์ ที่ไม่สามารถคาดเดาได้ดีไปกว่าโอกาส แบบสุ่ม...
การสร้างเลขสุ่ม

การสร้างเลขสุ่มเป็นกระบวนการที่มักใช้เครื่องกำเนิดเลขสุ่ม ( RNG ) ในการสร้างลำดับของตัวเลขหรือสัญลักษณ์ ที่ไม่สามารถคาดเดาได้ดีไปกว่าโอกาส แบบสุ่มหมายความว่าลำดับผลลัพธ์ที่ได้จะมีรูปแบบบางอย่างที่สามารถตรวจจับได้ในภายหลัง แต่เป็นไปไม่ได้ที่จะคาดการณ์ล่วงหน้า เครื่องกำเนิดเลขสุ่มที่แท้จริงอาจเป็นเครื่องกำเนิดเลขสุ่มแบบฮาร์ดแวร์ (HRNG) ซึ่งแต่ละรุ่นจะเป็นฟังก์ชันของค่าปัจจุบันของคุณลักษณะของสภาพแวดล้อมทางกายภาพที่เปลี่ยนแปลงอยู่ตลอดเวลาในลักษณะที่แทบจะเป็นไปไม่ได้ที่จะจำลอง ซึ่งจะแตกต่างจากการสร้างเลขสุ่มที่เรียกว่า " เลขสุ่มเทียม" (PRNG) ซึ่งสร้าง เลข สุ่มเทียมที่ถูกกำหนดไว้ล่วงหน้าแล้ว—ตัวเลขเหล่านี้สามารถสร้างขึ้นใหม่ได้ง่ายๆ เพียงแค่รู้สถานะเริ่มต้นของ PRNG และวิธีการที่ใช้ในการสร้างตัวเลข[ 1 ]นอกจากนี้ยังมีเครื่องกำเนิดเลขสุ่มจริงที่ไม่ใช่ทางกายภาพ (NPTRNG) ที่สร้างเลขสุ่มจริงโดยไม่ต้องเข้าถึงแหล่งฮาร์ดแวร์เฉพาะ โดยการเก็บเกี่ยวเอนโทรปีที่มีอยู่ในระบบคอมพิวเตอร์[ 2 ]ดูรายละเอียดใน เลขสุ่มจริงเทียบกับเลข สุ่ม เทียม
การประยุกต์ใช้ความสุ่มในหลากหลายด้านนำไปสู่การพัฒนาวิธีการสร้าง ข้อมูล สุ่ม ที่แตกต่างกันออกไป บางวิธีมีมาตั้งแต่สมัยโบราณแล้ว รวมถึงตัวอย่างที่รู้จักกันดี เช่น การทอยลูกเต๋าการโยนเหรียญ การสับไพ่การใช้ก้าน ต้น ยาร์โรว์ (สำหรับการทำนาย ) ในคัมภีร์อี้จิงตลอดจนเทคนิคอื่นๆ อีกมากมาย เนื่องจากลักษณะเชิงกลของเทคนิคเหล่านี้ การสร้างตัวเลขสุ่มจำนวนมาก (ซึ่งสำคัญในทางสถิติ) จึงต้องใช้แรงงานและเวลามาก ดังนั้นบางครั้งจึงมีการรวบรวมและเผยแพร่ผลลัพธ์ในรูปแบบตาราง ตัวเลขสุ่ม
มีวิธีการคำนวณหลายวิธีสำหรับการสร้างเลขสุ่มเทียม แต่ทั้งหมดก็ยังไม่สามารถสร้างความสุ่มอย่างแท้จริงได้ แม้ว่าอาจจะผ่านการทดสอบทางสถิติ บางอย่าง ที่มุ่งวัดความไม่แน่นอนของผลลัพธ์ (กล่าวคือ รูปแบบของผลลัพธ์นั้นสามารถสังเกตได้มากน้อยเพียงใด) โดยทั่วไปแล้ว วิธีเหล่านี้จึงไม่สามารถนำไปใช้ในแอปพลิเคชันต่างๆ เช่นการเข้ารหัสลับได้อย่างไรก็ตาม ยังมี เครื่องกำเนิดเลขสุ่มเทียมที่มีความปลอดภัยทางด้านการเข้ารหัสลับ (CSPRNGS) ที่ออกแบบมาอย่างดี ซึ่งมีคุณสมบัติพิเศษที่ออกแบบมาเพื่อใช้ในการเข้ารหัสลับโดยเฉพาะ
การประยุกต์ใช้และการใช้งานจริง
เครื่องกำเนิดเลขสุ่มมีแอปพลิเคชันในด้านการพนันการสุ่มตัวอย่างทางสถิติการจำลองด้วยคอมพิวเตอร์การเข้ารหัสการออกแบบแบบสุ่มโดยสมบูรณ์และด้านอื่นๆ ที่ต้องการผลลัพธ์ที่คาดเดาไม่ได้ โดยทั่วไป ในแอปพลิเคชันที่ความไม่แน่นอนเป็นคุณลักษณะสำคัญ เช่น ในแอปพลิเคชันด้านความปลอดภัยเครื่องกำเนิดเลขสุ่มแบบฮาร์ดแวร์มักได้รับความนิยมมากกว่าอัลกอริธึมแบบสุ่มเทียม หากเป็นไปได้
เครื่องกำเนิดเลขสุ่มเทียมมีประโยชน์มากในการพัฒนาการ จำลอง ด้วยวิธีมอนเตคาร์โลเนื่องจากช่วยให้การแก้ไข ข้อผิดพลาดง่ายขึ้นด้วยการเรียกใช้ลำดับเลขสุ่มเดียวกันซ้ำอีกครั้งโดยเริ่มต้นจาก ค่าเริ่มต้นสุ่ม เดียวกัน นอกจากนี้ยังใช้ในด้านการเข้ารหัสลับด้วย ตราบใดที่ค่าเริ่มต้น นั้น เป็นความลับ ผู้ส่งและผู้รับสามารถสร้างชุดตัวเลขเดียวกันโดยอัตโนมัติเพื่อใช้เป็นกุญแจได้
การสร้างเลขสุ่มเทียมเป็นงานสำคัญและพบได้ทั่วไปในการเขียนโปรแกรมคอมพิวเตอร์ แม้ว่าการเข้ารหัสและการคำนวณเชิงตัวเลขบางอย่างต้องการ ความสุ่ม ที่เห็นได้ชัด ในระดับสูงมาก แต่การดำเนินการอื่นๆ อีกมากมายต้องการความไม่แน่นอนในระดับปานกลางเท่านั้น ตัวอย่างง่ายๆ อาจเป็นการแสดง "คำคมประจำวันแบบสุ่ม" ให้กับผู้ใช้ หรือการคาดการณ์ว่าฝ่ายตรงข้ามที่ควบคุมโดยคอมพิวเตอร์จะเคลื่อนที่ไปในทิศทางใดในเกมคอมพิวเตอร์ รูปแบบความสุ่ม ที่อ่อนกว่านั้น ถูกนำมาใช้ในอัลกอริทึมแฮชและในการสร้างอั ลก อริทึม การค้นหาและการเรียงลำดับ แบบเฉลี่ย
แอปพลิเคชันบางอย่างที่ดูเหมือนจะเหมาะสมกับการสุ่ม ในตอนแรก นั้น แท้จริงแล้วไม่ได้เรียบง่ายอย่างที่คิด ตัวอย่างเช่น ระบบที่ "สุ่ม" เลือกเพลงสำหรับระบบเพลงประกอบนั้น จะต้องดูเหมือนสุ่มเท่านั้น และอาจมีวิธีการควบคุมการเลือกเพลงด้วยซ้ำ ระบบสุ่มที่แท้จริงจะต้องไม่มีข้อจำกัดว่าเพลงเดียวกันจะปรากฏซ้ำสองหรือสามครั้งติดต่อกัน
ตัวเลขสุ่มจริงเทียบกับตัวเลขสุ่มเทียม
มีวิธีการหลักสองวิธีที่ใช้ในการสร้างตัวเลขสุ่ม วิธีแรกคือการวัดปรากฏการณ์ทางกายภาพบางอย่างที่คาดว่าจะเกิดขึ้นแบบสุ่ม แล้วจึงชดเชยความคลาดเคลื่อนที่อาจเกิดขึ้นในกระบวนการวัด ตัวอย่างแหล่งที่มา ได้แก่ การวัดสัญญาณรบกวนในบรรยากาศสัญญาณรบกวนจากความร้อน และปรากฏการณ์ทางแม่เหล็กไฟฟ้าและควอนตัมภายนอกอื่นๆ ตัวอย่างเช่น รังสีพื้นหลังของจักรวาลหรือการสลายตัวของกัมมันตรังสีที่วัดได้ในช่วงเวลาสั้นๆ ถือเป็นแหล่งที่มาของเอนโทรปี ตามธรรมชาติ (ซึ่งเป็นตัววัดความไม่แน่นอนหรือความประหลาดใจของกระบวนการสร้างตัวเลข)
ความเร็วที่สามารถได้รับเอนโทรปีจากแหล่งธรรมชาติขึ้นอยู่กับปรากฏการณ์ทางกายภาพพื้นฐานที่กำลังวัดอยู่ ดังนั้น แหล่งเอนโทรปีที่เกิดขึ้นตามธรรมชาติจึงถูกเรียกว่าเป็นแบบบล็อก – อัตราการทำงานจะถูกจำกัดจนกว่าจะเก็บเกี่ยวเอนโทรปีได้เพียงพอต่อความต้องการ ในระบบที่คล้าย Unix บางระบบ รวมถึงการแจกจ่าย Linux ส่วนใหญ่ ไฟล์อุปกรณ์เสมือน/dev/randomจะบล็อกจนกว่าจะเก็บเกี่ยวเอนโทรปีจากสภาพแวดล้อมได้เพียงพอ[ 3 ]เนื่องจากพฤติกรรมการบล็อกนี้ การอ่านข้อมูลจำนวนมากจาก/dev/randomเช่น การเติมฮาร์ดดิสก์ไดรฟ์ด้วยบิตสุ่ม มักจะช้าในระบบที่ใช้แหล่งเอนโทรปีประเภทนี้
วิธีที่สองใช้อัลกอริธึมการ คำนวณ ที่สามารถสร้างลำดับผลลัพธ์ที่ดูเหมือนสุ่มได้ยาว ซึ่งในความเป็นจริงแล้วถูกกำหนดโดยค่าเริ่มต้นที่สั้นกว่า เรียกว่าค่าเริ่มต้น (seed value) หรือคีย์ (key ) ดังนั้น หากทราบค่าเริ่มต้น ลำดับที่ดูเหมือนสุ่มทั้งหมดจึงสามารถสร้างขึ้นใหม่ได้ เครื่องกำเนิดเลขสุ่มประเภทนี้มักเรียกว่าเครื่องกำเนิดเลขสุ่มเทียม (pseudorandom number generator ) เครื่องกำเนิดประเภทนี้โดยทั่วไปไม่พึ่งพาแหล่งเอนโทรปีที่เกิดขึ้นตามธรรมชาติ แม้ว่าอาจจะมีการเติมค่าเริ่มต้นจากแหล่งธรรมชาติเป็นระยะๆ เครื่องกำเนิดประเภทนี้ไม่ปิดกั้นการทำงาน ดังนั้นจึงไม่ถูกจำกัดอัตราโดยเหตุการณ์ภายนอก ทำให้สามารถอ่านข้อมูลจำนวนมากได้
การออกแบบการเข้ารหัสมาตรฐานใช้แนวทางแบบผสมผสาน โดยใช้ความสุ่มที่เก็บเกี่ยวจากแหล่งธรรมชาติเพื่อสร้างตัวสร้างเลขสุ่มเทียมที่มีความปลอดภัยทางการเข้ารหัส (CSPRNG) โดยทั่วไปแล้ว ตัวสร้างเลขสุ่มแบบฮาร์ดแวร์จะสร้างบิตสุ่มได้เพียงจำนวนจำกัดต่อวินาที เพื่อเพิ่มอัตราข้อมูลเอาต์พุตที่มีอยู่ มักจะใช้เพื่อสร้าง " เมล็ดพันธุ์ " สำหรับ PRNG ที่เร็วกว่า PRNG ยังช่วยในการ "ปกปิด" แหล่งกำเนิดสัญญาณรบกวน (ทำให้ลักษณะเฉพาะของแหล่งกำเนิดสัญญาณรบกวนจางลง) และการสกัดเอนโทรปีด้วยการเลือกอัลกอริทึม PRNG ที่เหมาะสม ( ตัวสร้างเลขสุ่มเทียมที่มีความปลอดภัยทางการเข้ารหัส , CSPRNG) การรวมกันนี้สามารถตอบสนองความต้องการของมาตรฐานการประมวลผลข้อมูลของรัฐบาลกลางและมาตรฐานCommon Criteria ได้ [ 4 ]
วิธีการสร้าง
วิธีการทางกายภาพ
วิธีการสร้างเลขสุ่มที่เก่าแก่ที่สุด เช่น การใช้ลูกเต๋า การโยนเหรียญ และวงล้อรูเล็ต ยังคงถูกนำมาใช้ในปัจจุบัน โดยส่วนใหญ่ใช้ในเกมและการพนัน เนื่องจากวิธีการเหล่านี้มักจะช้าเกินไปสำหรับการใช้งานส่วนใหญ่ในด้านสถิติและการเข้ารหัส

ปรากฏการณ์ทางธรรมชาติหลายอย่างก่อให้เกิด สัญญาณ" เสียงรบกวน " ระดับต่ำแบบสุ่มทางสถิติ รวมถึง เสียงรบกวนจากความร้อนและช็อตความผันผวนและความไม่เสถียรของวงจรไฟฟ้าการเคลื่อนที่แบบบราวน์และ เสียงรบกวน ในบรรยากาศ[ 5 ]นักวิจัยยังใช้ปรากฏการณ์โฟโตอิเล็กทริกซึ่งเกี่ยวข้องกับตัวแยกแสงปรากฏการณ์ควอนตัมอื่นๆ[ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ]และแม้แต่การสลายตัวของนิวเคลียร์ (เนื่องจากข้อจำกัดในทางปฏิบัติ ปรากฏการณ์หลังนี้ รวมถึงเสียงรบกวนในบรรยากาศ จึงไม่สามารถใช้งานได้ ยกเว้นสำหรับการใช้งานที่ค่อนข้างจำกัดหรือบริการเผยแพร่ทางออนไลน์) [ 5 ]ในขณะที่ปรากฏการณ์ "คลาสสิก" (ไม่ใช่ควอนตัม) ไม่ใช่แบบสุ่มอย่างแท้จริง ระบบทางกายภาพที่ไม่สามารถคาดเดาได้มักเป็นที่ยอมรับว่าเป็นแหล่งที่มาของความสุ่ม ดังนั้นคำว่า "จริง" และ "ทางกายภาพ" จึงใช้แทนกันได้[ 11 ]
คาดว่าเครื่องกำเนิดเลขสุ่มแบบฮาร์ดแวร์จะสร้างเลขสุ่มที่เกือบสมบูรณ์แบบ (" เอนโทรปีเต็ม ") [ 12 ]กระบวนการทางกายภาพโดยทั่วไปไม่มีคุณสมบัตินี้ และ TRNG ที่ใช้งานได้จริงมักประกอบด้วยบล็อกเพียงไม่กี่บล็อก: [ 13 ]
- แหล่งกำเนิดสัญญาณรบกวนที่จำลองกระบวนการทางกายภาพที่ก่อให้เกิดเอนโทรปี โดยปกติกระบวนการนี้จะเป็นแบบอนาล็อกดังนั้นจึง ใช้ ตัวแปลงสัญญาณดิจิทัลเพื่อแปลงเอาต์พุตของแหล่งกำเนิดอนาล็อกให้เป็นรูปแบบไบนารี
- ตัวปรับสภาพ ( ตัวสกัดความสุ่ม ) ที่ปรับปรุงคุณภาพของบิตสุ่ม;
- การทดสอบสุขภาพ TRNG ส่วนใหญ่ใช้ในอัลกอริธึมการเข้ารหัสลับ ซึ่งจะถูกทำลายโดยสิ้นเชิงหากตัวเลขสุ่มมีเอนโทรปีต่ำ ดังนั้นฟังก์ชันการทดสอบจึงมักถูกรวมไว้ด้วย
วิธีการคำนวณ
ด้วยเหตุผลด้านประสิทธิภาพและความปลอดภัย เครื่องกำเนิดตัวเลขสุ่มส่วนใหญ่จึงใช้ PRNG ในการสร้าง (สถาปัตยกรรมนี้เป็นข้อกำหนดในมาตรฐานอุตสาหกรรม เช่นNIST SP 800-90A )
เครื่องกำเนิดเลขสุ่มเทียม (PRNG) หรือที่รู้จักกันในชื่อเครื่องกำเนิดบิตสุ่มแบบกำหนด (DRBG) [ 14 ]เป็นอัลกอริทึมสำหรับการสร้างลำดับตัวเลขที่มีคุณสมบัติใกล้เคียงกับคุณสมบัติของลำดับตัวเลขสุ่ม ลำดับที่สร้างโดย PRNG ไม่ใช่เลขสุ่ม อย่างแท้จริง เนื่องจากถูกกำหนดโดยค่าเริ่มต้นที่เรียกว่าseed ของ PRNG (ซึ่งอาจรวมถึงค่าสุ่มอย่างแท้จริง) แม้ว่าลำดับที่ใกล้เคียงกับเลขสุ่มอย่างแท้จริงจะสามารถสร้างได้โดยใช้เครื่องกำเนิดเลขสุ่มแบบฮาร์ดแวร์แต่เครื่องกำเนิดเลขสุ่มเทียมมีความสำคัญในทางปฏิบัติเนื่องจากความเร็วในการสร้างตัวเลขและความสามารถในการทำซ้ำ[ 15 ]
ตัวสร้างเลขสุ่ม เทียม (PRNG) มีบทบาทสำคัญในแอปพลิเคชันต่างๆ เช่นการจำลอง (เช่นวิธีมอนเตคาร์โล ) เกมอิเล็กทรอนิกส์ (เช่นการสร้างแบบขั้นตอน ) และการเข้ารหัสลับแอปพลิเคชันด้านการเข้ารหัสลับต้องการให้ผลลัพธ์ไม่สามารถคาดเดาได้จากผลลัพธ์ก่อนหน้า และ จำเป็นต้องใช้ อัลกอริธึมที่ซับซ้อน กว่า ซึ่งไม่ได้รับคุณสมบัติเชิงเส้นจาก PRNG ที่เรียบง่ายกว่า
คุณสมบัติทางสถิติที่ดีเป็นข้อกำหนดที่สำคัญสำหรับผลลัพธ์ของ PRNG โดยทั่วไป การวิเคราะห์ทางคณิตศาสตร์อย่างระมัดระวังเป็นสิ่งจำเป็นเพื่อให้มั่นใจได้ว่า PRNG สร้างตัวเลขที่ใกล้เคียงกับการสุ่มมากพอที่จะเหมาะสมกับการใช้งานที่ตั้งใจไว้จอห์น ฟอน นอยมันน์เตือนเกี่ยวกับการตีความ PRNG ผิดว่าเป็นเครื่องกำเนิดตัวเลขสุ่มอย่างแท้จริง โดยพูดติดตลกว่า "ใครก็ตามที่พิจารณาวิธีการทางคณิตศาสตร์ในการสร้างตัวเลขสุ่ม แน่นอนว่าอยู่ในสถานะของบาป" [ 16 ]
โดยมนุษย์
การสร้างตัวเลขสุ่มอาจกระทำโดยมนุษย์ได้เช่นกัน ในรูปแบบของการรวบรวมอินพุตต่างๆ จากผู้ใช้ปลายทางและใช้เป็นแหล่งกำเนิดการสุ่ม อย่างไรก็ตาม การศึกษาส่วนใหญ่พบว่ามนุษย์มีความไม่เป็นแบบสุ่มในระดับหนึ่งเมื่อพยายามสร้างลำดับแบบสุ่ม เช่น ตัวเลขหรือตัวอักษร พวกเขาอาจสลับไปมาระหว่างตัวเลือกมากเกินไปเมื่อเทียบกับเครื่องกำเนิดตัวเลขสุ่มที่ดี[ 17 ]ดังนั้น วิธีการนี้จึงไม่เป็นที่นิยมใช้กันอย่างแพร่หลาย อย่างไรก็ตาม ด้วยเหตุผลที่ว่ามนุษย์ทำได้ไม่ดีในงานนี้ การสร้างตัวเลขสุ่มโดยมนุษย์จึงสามารถใช้เป็นเครื่องมือในการทำความเข้าใจการทำงานของสมองซึ่งไม่สามารถเข้าถึงได้ด้วยวิธีอื่น[ 17 ]
การประมวลผลภายหลังและการตรวจสอบทางสถิติ
แม้ว่าจะมีแหล่งที่มาของตัวเลขสุ่มที่ดูน่าเชื่อถือ (อาจมาจากเครื่องกำเนิดตัวเลขสุ่มที่ใช้หลักการควอนตัม) การจะได้ตัวเลขที่ปราศจากอคติโดยสิ้นเชิงนั้นก็ต้องใช้ความระมัดระวัง นอกจากนี้ พฤติกรรมของเครื่องกำเนิดตัวเลขสุ่มเหล่านี้มักเปลี่ยนแปลงไปตามอุณหภูมิ แรงดันไฟฟ้าของแหล่งจ่ายไฟ อายุของอุปกรณ์ หรือการรบกวนจากภายนอกอื่นๆ
บางครั้งตัวเลขสุ่มที่สร้างขึ้นจะถูกทดสอบทางสถิติก่อนใช้งานเพื่อให้แน่ใจว่าแหล่งที่มายังคงใช้งานได้ จากนั้นจึงทำการประมวลผลภายหลังเพื่อปรับปรุงคุณสมบัติทางสถิติ ตัวอย่างเช่น เครื่องกำเนิดตัวเลขสุ่มฮาร์ดแวร์ TRNG9803 [ 18 ]ซึ่งใช้การวัดเอนโทรปีเป็นการทดสอบฮาร์ดแวร์ จากนั้นจึงประมวลผลลำดับสุ่มด้วยการเข้ารหัสสตรีมรีจิสเตอร์แบบเลื่อน โดยทั่วไปแล้วการใช้การทดสอบทางสถิติเพื่อตรวจสอบความถูกต้องของตัวเลขสุ่มที่สร้างขึ้นนั้นทำได้ยาก Wang และ Nicol [ 19 ]เสนอเทคนิคการทดสอบทางสถิติตามระยะทางที่ใช้ในการระบุจุดอ่อนของเครื่องกำเนิดตัวเลขสุ่มหลายตัว Li และ Wang [ 20 ]เสนอวิธีการทดสอบตัวเลขสุ่มโดยใช้แหล่งเอนโทรปีแบบโกลาหลของเลเซอร์โดยใช้คุณสมบัติการเคลื่อนที่แบบบราวน์
นอกจากนี้ ยังมีการใช้การทดสอบทางสถิติเพื่อให้มั่นใจว่าผลลัพธ์สุดท้ายหลังการประมวลผลจากตัวสร้างเลขสุ่มนั้นปราศจากอคติอย่างแท้จริง โดยมีการพัฒนาชุด ทดสอบความสุ่ม จำนวนมาก
ข้อพิจารณาอื่นๆ
การปรับเปลี่ยนรูปแบบการกระจาย
การแจกแจงแบบสม่ำเสมอ
เครื่องกำเนิดเลขสุ่มส่วนใหญ่ทำงานกับจำนวนเต็มหรือบิตแต่ละบิตโดยธรรมชาติ ดังนั้นจึงต้องมีขั้นตอนเพิ่มเติมเพื่อให้ได้ การกระจายแบบสม่ำเสมอ มาตรฐานระหว่าง 0 และ 1 การใช้งานไม่ได้ง่ายเหมือนการหารจำนวนเต็มด้วยค่าสูงสุดที่เป็นไปได้ โดยเฉพาะอย่างยิ่ง: [ 21 ] [ 22 ]
- จำนวนเต็มที่ใช้ในการแปลงต้องมีจำนวนบิตเพียงพอสำหรับความแม่นยำที่ต้องการ
- โดยธรรมชาติแล้ว คณิตศาสตร์เลขทศนิยมจะมีความแม่นยำมากขึ้นเมื่อตัวเลขเข้าใกล้ศูนย์ ความแม่นยำที่เพิ่มขึ้นนี้มักไม่ได้ถูกนำมาใช้เนื่องจากจำนวนบิตที่ต้องการมีมากเกินไป (ผลที่ตามมาอย่างหนึ่งคือการแปลงบ็อกซ์-มุลเลอร์ § การตัดส่วนท้าย )
- ความคลาดเคลื่อนจากการปัดเศษในการหารอาจทำให้ผลลัพธ์คลาดเคลื่อนได้ ในกรณีที่แย่ที่สุด ขอบเขตที่ควรจะถูกตัดออกอาจได้ผลลัพธ์ที่ขัดแย้งกับความคาดหวังตามหลักคณิตศาสตร์ของจำนวนจริง
อัลกอริทึมหลักที่ใช้โดยOpenJDK , RustและNumPyได้รับการอธิบายไว้ในข้อเสนอสำหรับSTL ของC++ โดยไม่ได้ใช้ความแม่นยำเพิ่มเติมและประสบปัญหาจากอคติเฉพาะในบิตสุดท้ายเนื่องจาก การปัดเศษครึ่งให้เป็นเลขคู่ [ 23 ] ข้อกังวลเชิงตัวเลขอื่นๆ มีความจำเป็นเมื่อเปลี่ยน การกระจายแบบสม่ำเสมอ มาตรฐาน นี้ ไปเป็นช่วงที่แตกต่างกัน[ 24 ]วิธีการที่เสนอสำหรับภาษาการเขียนโปรแกรม Swiftอ้างว่าใช้ความแม่นยำเต็มที่ทุกที่[ 25 ]
จำนวนเต็มที่กระจายอย่างสม่ำเสมอมักใช้ในอัลกอริทึม เช่นการสับเปลี่ยน Fisher–Yatesอีกครั้ง การใช้งานแบบง่ายๆ อาจทำให้เกิดอคติโมดูลัสในผลลัพธ์ ดังนั้นจึงต้องใช้อัลกอริทึมที่ซับซ้อนกว่า วิธีการที่แทบจะไม่ทำการหารเลยได้รับการอธิบายในปี 2018 โดย Daniel Lemire [ 26 ]โดยสถานะปัจจุบันคือ "อัลกอริทึมที่เหมาะสมที่สุด" ที่ได้รับแรงบันดาลใจจากการเข้ารหัสทางคณิตศาสตร์ในปี 2021 โดย Stephen Canon จากApple Inc. [ 27 ]
ตัวสร้างเลขสุ่ม 0 ถึง 1 ส่วนใหญ่จะรวม 0 แต่ไม่รวม 1 ในขณะที่บางตัวอาจรวมหรือไม่รวมทั้ง 0 และ 1
การแจกจ่ายอื่นๆ
เมื่อกำหนดแหล่งที่มาของตัวเลขสุ่มแบบสม่ำเสมอแล้ว จะมีวิธีการสร้างแหล่งที่มาแบบสุ่มใหม่ที่สอดคล้องกับฟังก์ชันความหนาแน่นของความน่าจะเป็น อยู่สอง วิธี วิธีหนึ่งเรียกว่าวิธีผกผันซึ่งเกี่ยวข้องกับการรวมพื้นที่ให้มากกว่าหรือเท่ากับตัวเลขสุ่ม (ซึ่งควรสร้างขึ้นระหว่าง 0 ถึง 1 สำหรับการแจกแจงที่เหมาะสม) วิธีที่สองเรียกว่าวิธีการยอมรับ-การปฏิเสธซึ่งเกี่ยวข้องกับการเลือกค่า x และ y แล้วทดสอบว่าฟังก์ชันของ x มากกว่าค่า y หรือไม่ ถ้าใช่ ค่า x จะถูกยอมรับ มิฉะนั้น ค่า x จะถูกปฏิเสธและอัลกอริทึมจะลองใหม่อีกครั้ง[ 28 ] [ 29 ]
ตัวอย่างเช่น สำหรับการสุ่มตัวอย่างแบบปฏิเสธ เพื่อสร้างคู่ของตัวเลขสุ่มที่มีการแจกแจงแบบปกติมาตรฐานที่เป็นอิสระทางสถิติ ( x , y ) เราอาจสร้างพิกัดเชิงขั้ว (r, θ) ก่อนโดยที่r² ~ χ²²และθ ~ UNIFORM ( 0,2π ) (ดูการแปลง Box–Muller )
ฟอกฟันขาว
สามารถนำผลลัพธ์จากตัวสร้างเลขสุ่มอิสระหลายตัวมารวมกันได้ (เช่น โดยใช้ การดำเนินการ XOR ระดับบิต ) เพื่อให้ได้ตัวสร้างเลขสุ่มแบบผสมที่มีคุณภาพอย่างน้อยก็เทียบเท่ากับตัวสร้างเลขสุ่มที่ดีที่สุดที่ใช้ วิธีการนี้เรียกว่า การปรับค่าความสม่ำเสมอของเลขสุ่ม ด้วยซอฟต์แวร์ (Software Whitening )
บางครั้งมีการผสมผสานตัวสร้างเลขสุ่มแบบคำนวณและแบบฮาร์ดแวร์เข้าด้วยกัน เพื่อสะท้อนข้อดีของทั้งสองประเภท โดยทั่วไปแล้ว ตัวสร้างเลขสุ่มแบบคำนวณสามารถสร้างเลขสุ่มเทียมได้เร็วกว่าตัวสร้างเลขสุ่มแบบฮาร์ดแวร์ ในขณะที่ตัวสร้างเลขสุ่มแบบฮาร์ดแวร์สามารถสร้างเลขสุ่มที่แท้จริงได้
ลำดับความคลาดเคลื่อนต่ำเป็นทางเลือกอื่น
การคำนวณบางอย่างที่ใช้ตัวสร้างเลขสุ่มสามารถสรุปได้ว่าเป็นการคำนวณค่ารวมหรือค่าเฉลี่ย เช่น การคำนวณอินทิกรัลด้วยวิธีมอนเตคาร์โลสำหรับปัญหาดังกล่าว อาจสามารถหาคำตอบที่แม่นยำกว่าได้โดยใช้ลำดับความคลาดเคลื่อนต่ำหรือที่เรียกว่า เลข กึ่งสุ่มลำดับดังกล่าวมีรูปแบบที่แน่นอนซึ่งเติมช่องว่างได้อย่างสม่ำเสมอในเชิงคุณภาพ ในขณะที่ลำดับสุ่มที่แท้จริงอาจ (และมักจะ) ทิ้งช่องว่างที่ใหญ่กว่าไว้
กิจกรรมและการสาธิต
เว็บไซต์ต่อไปนี้มีตัวอย่างเลขสุ่มให้ใช้งาน:
- หน้า เว็บแหล่งข้อมูล ของ SOCRมีกิจกรรมเชิงโต้ตอบและการสาธิตการสร้างเลขสุ่มโดยใช้แอปเพล็ต Java จำนวนมาก
- กลุ่มวิจัยด้านควอนตัมออปติกส์แห่ง มหาวิทยาลัยแห่ง ชาติออสเตรเลีย (ANU)สร้างตัวเลขสุ่มจากสุญญากาศควอนตัม ตัวอย่างตัวเลขสุ่มสามารถดูได้ที่หน้างานวิจัยเกี่ยวกับเครื่องกำเนิดตัวเลขสุ่มควอนตัมของพวกเขา
- Random.org ให้บริการตัวเลขสุ่มที่ได้มาจากความสุ่มของสัญญาณรบกวนในชั้นบรรยากาศ
- บริการสร้างบิตสุ่มควอนตัม (Quantum Random Bit Generator Service) ที่สถาบัน Ruđer Boškovićเก็บเกี่ยวความสุ่มจากกระบวนการควอนตัมของการปล่อยโฟตอนในสารกึ่งตัวนำ พวกเขามีวิธีการดึงข้อมูลที่หลากหลาย รวมถึงไลบรารีสำหรับภาษาโปรแกรมหลายภาษา
- กลุ่มวิจัยที่มหาวิทยาลัยเทคโนโลยีไท่หยวนสร้างเลขสุ่มจากเลเซอร์ที่มีลักษณะอลหม่าน ตัวอย่างเลขสุ่มสามารถดูได้จากบริการสร้างเลขสุ่มทางกายภาพของกลุ่มวิจัยนี้
ช่องทางลับ
เนื่องจากการเข้ารหัสส่วนใหญ่ขึ้นอยู่กับตัวสร้างเลขสุ่มที่มีความปลอดภัยทางด้านการเข้ารหัสสำหรับการสร้างคีย์และค่า nonce ทางด้านการเข้ารหัสดังนั้นหากสามารถทำให้ตัวสร้างเลขสุ่มสามารถคาดเดาได้ ผู้โจมตีก็สามารถใช้มันเป็นช่องโหว่เพื่อถอดรหัสได้
มีรายงานว่า NSA ได้แทรกช่องโหว่เข้าไปในเครื่องกำเนิดเลขสุ่มเทียมDual EC DRBGที่ได้รับ การรับรองความปลอดภัยทางด้านการเข้ารหัส จาก NISTตัวอย่างเช่น หากมีการสร้างการเชื่อมต่อ SSL โดยใช้เครื่องกำเนิดเลขสุ่มนี้ ตามที่Matthew Green กล่าวไว้ จะทำให้ NSA สามารถตรวจสอบสถานะของเครื่องกำเนิดเลขสุ่มได้ และในที่สุดก็จะสามารถอ่านข้อมูลทั้งหมดที่ส่งผ่านการเชื่อมต่อ SSL ได้[ 30 ]แม้ว่าจะเป็นที่ชัดเจนว่า Dual_EC_DRBG เป็นเครื่องกำเนิดเลขสุ่มเทียมที่แย่มากและอาจมีช่องโหว่ซ่อนอยู่มานานก่อนที่ช่องโหว่ของ NSA จะได้รับการยืนยันในปี 2013 แต่ก็ยังมีการใช้งานอย่างแพร่หลายในทางปฏิบัติจนถึงปี 2013 ตัวอย่างเช่น โดยบริษัทรักษาความปลอดภัยที่มีชื่อเสียงอย่างRSA Security [ 31 ] ต่อมามีการกล่าวหาว่า RSA Security จงใจแทรกช่องโหว่ของ NSA เข้าไปในผลิตภัณฑ์ของตน ซึ่งอาจเป็นส่วนหนึ่งของโครงการ Bullrun RSA ปฏิเสธว่าไม่ได้จงใจแทรกช่องโหว่เข้าไปในผลิตภัณฑ์ของตน[ 32 ]
นอกจากนี้ ยังมีทฤษฎีที่ว่าฮาร์ดแวร์ RNG อาจถูกดัดแปลงอย่างลับๆ เพื่อให้มีเอนโทรปีน้อยกว่าที่ระบุไว้ ซึ่งจะทำให้การเข้ารหัสโดยใช้ฮาร์ดแวร์ RNG มีความเสี่ยงต่อการโจมตี วิธีการหนึ่งที่ได้รับการเผยแพร่คือการแก้ไขหน้ากากโดแพนต์ของชิป ซึ่งจะไม่สามารถตรวจจับได้ด้วยการวิศวกรรมย้อนกลับทางแสง[ 33 ]ตัวอย่างเช่น สำหรับการสร้างเลขสุ่มใน Linux การใช้ ฮาร์ดแวร์ RNG RDRAND ของ Intel โดยไม่ผสมเอาต์พุตของ RDRAND กับแหล่งเอนโทรปีอื่นๆ เพื่อต่อต้านช่องโหว่ใดๆ ในฮาร์ดแวร์ RNG ถือว่าไม่เป็นที่ยอมรับ โดยเฉพาะอย่างยิ่งหลังจากการเปิดเผยโปรแกรม NSA Bullrun [ 34 ] [ 35 ]
ในปี 2010 การจับสลากลอตเตอรี่ของสหรัฐฯ ถูกโกงโดยผู้อำนวยการฝ่ายความปลอดภัยของข้อมูลของสมาคมลอตเตอรี่หลายรัฐ (MUSL) ซึ่งแอบติดตั้งมัลแวร์ แบ็กดอร์ บนคอมพิวเตอร์ RNG ที่ปลอดภัยของ MUSL ระหว่างการบำรุงรักษาตามปกติ[ 36 ]ในระหว่างการแฮ็ก ชายคนนี้ได้รับเงินรางวัลรวม 16,500,000 ดอลลาร์สหรัฐฯ ในช่วงหลายปีที่ผ่านมา
ดูเพิ่มเติม
แหล่งที่มา
- Saarinen, Markku-Juhani O.; Newell, G. Richard; Marshall, Ben (2020-11-09). การสร้าง TRNG สมัยใหม่: อินเทอร์เฟซแหล่งกำเนิดเอนโทรปีสำหรับ RISC-V (PDF)นิวยอร์ก, นิวยอร์ก, สหรัฐอเมริกา: ACM. doi : 10.1145/3411504.3421212 . เก็บถาวรจากต้นฉบับเมื่อ 2021-03-16 . สืบค้นเมื่อ2023-09-09 .
{{cite conference}}: CS1 maint: bot: สถานะ URL เดิมไม่ทราบ ( ลิงก์ ) - Schindler, Werner (2008). "เครื่องกำเนิดเลขสุ่มสำหรับการใช้งานด้านการเข้ารหัส"ใน Koc, CK (บรรณาธิการ). วิศวกรรมการเข้ารหัส . บอสตัน, แมสซาชูเซตส์: Springer US. หน้า 5–23 . doi : 10.1007/978-0-387-71817-0_2 . ISBN 978-0-387-71817-0สืบค้นข้อมูลเมื่อ24 สิงหาคม 2024
- Turan, Meltem Sönmez; Barker, Elaine; Kelsey, John; McKay, Kerry A; Baish, Mary L; Boyle, Mike (2018). NIST SP800-90B: ข้อแนะนำสำหรับแหล่งกำเนิดเอนโทรปีที่ใช้สำหรับการสร้างบิตสุ่ม (รายงาน). Gaithersburg, MD: สถาบันมาตรฐานและเทคโนโลยีแห่งชาติ. doi : 10.6028/nist.sp.800-90b .
- Sunar, Berk (2009). "เครื่องกำเนิดเลขสุ่มแท้จริงสำหรับการเข้ารหัส" วิศวกรรมการเข้ารหัส . บอสตัน, แมสซาชูเซตส์: Springer US. หน้า 55–73 . doi : 10.1007/978-0-387-71817-0_4 . ISBN 978-0-387-71816-3.
- Herrero-Collantes , Miguel; Garcia-Escartin, Juan Carlos (2017-02-22). "เครื่องกำเนิดเลขสุ่มควอนตัม". บทวิจารณ์ฟิสิกส์สมัยใหม่ 89 (1) 015004. สมาคมฟิสิกส์อเมริกัน (APS). arXiv : 1604.03304 . Bibcode : 2017RvMP...89a5004H . doi : 10.1103/revmodphys.89.015004 . ISSN 0034-6861 .
- Mannalath, Vaisakh; Mishra, Sandeep; Pathak, Anirban (2023). "การทบทวนอย่างครอบคลุมเกี่ยวกับเครื่องกำเนิดเลขสุ่มควอนตัม: แนวคิด การจำแนกประเภท และที่มาของความสุ่ม"การประมวลผลข้อมูลควอนตัม 22 ( 12): 439. arXiv : 2203.00261 . Bibcode : 2023QuIP...22..439M . doi : 10.1007/s11128-023-04175-y .
- ดับเบิลยูเอ วาเกนาร์ (1972) "การสร้างลำดับแบบสุ่มโดยอาสาสมัครที่เป็นมนุษย์: การสำรวจเชิงวิพากษ์วิจารณ์วรรณกรรม" กระดานข่าวทางจิตวิทยา . 77 (1): 65– 72. CiteSeerX 10.1.1.211.9085 . ดอย : 10.1037/h0032060 .
อ่านเพิ่มเติม
- Donald Knuth (1997). "บทที่ 3 – ตัวเลขสุ่ม". ศิลปะแห่งการเขียนโปรแกรมคอมพิวเตอร์ . เล่ม 2: อัลกอริทึมกึ่งตัวเลข (ฉบับที่ 3).
- L'Ecuyer, Pierre (2017). "ประวัติความเป็นมาของการสร้างเลขสุ่มแบบสม่ำเสมอ" (PDF) . รายงานการประชุม Winter Simulation Conference ปี 2017.สำนักพิมพ์ IEEE. หน้า 202–230 .
- L'Ecuyer, Pierre (2012). "การสร้างเลขสุ่ม" (PDF)ใน JE Gentle; W. Haerdle; Y. Mori (บรรณาธิการ). คู่มือสถิติเชิงคำนวณ: แนวคิดและวิธีการคู่มือสถิติเชิงคำนวณ (ฉบับที่สอง). Springer-Verlag. หน้า 35–71 . doi : 10.1007/978-3-642-21551-3_3 . hdl : 10419/22195 . ISBN 978-3-642-21550-6.
- Kroese, DP ; Taimre, T.; Botev, ZI (2011). "บทที่ 1 – การสร้างเลขสุ่มแบบสม่ำเสมอ" . คู่มือวิธีการมอนเตคาร์โล . นิวยอร์ก: John Wiley & Sons. หน้า 772. ISBN 978-0-470-17793-8.
- Press, WH; Teukolsky, SA; Vetterling, WT; Flannery, BP (2007). "บทที่ 7. ตัวเลขสุ่ม" . สูตรเชิงตัวเลข: ศิลปะแห่งการคำนวณทางวิทยาศาสตร์ (ฉบับที่ 3). นิวยอร์ก: สำนักพิมพ์มหาวิทยาลัยเคมบริดจ์. ISBN 978-0-521-88068-8.
- เอกสาร NIST SP800-90A, B, C series เกี่ยวกับการสร้างเลขสุ่ม เก็บถาวรเมื่อวันที่ 12 กันยายน 2017 ที่Wayback Machine
- M. Tomassini; M. Sipper; M. Perrenoud (ตุลาคม 2000). "เกี่ยวกับการสร้างตัวเลขสุ่มคุณภาพสูงโดยใช้เซลลูลาร์ออโตมาตาแบบสองมิติ" . IEEE Transactions on Computers . 49 (10): 1146– 1151. Bibcode : 2000ITCmp..49.1146T . doi : 10.1109/12.888056 . S2CID 10139169 .
ลิงก์ภายนอก
- RANDOM.ORGบริการสร้างเลขสุ่มแท้จริง
- เครื่องกำเนิดเลขสุ่มควอนตัมที่ ANU
- การสุ่มและการสุ่มเทียมในรายการIn Our Timeทางช่องBBC
- jRandเป็นเฟรมเวิร์กที่ใช้ภาษา Java สำหรับสร้างลำดับการจำลอง รวมถึงลำดับตัวเลขสุ่มเทียม
- ตัวสร้างเลขสุ่มในไลบรารี NAG Fortran
- อุปกรณ์ส่งสัญญาณความสุ่ม (Randomness Beacon)ที่NISTส่งสัญญาณบิตสตริงที่ มีเอน โทรปีเต็มรูป แบบเป็นบล็อกขนาด 512 บิตทุกๆ 60 วินาที ออกแบบมาเพื่อมอบความไม่แน่นอน ความเป็นอิสระ และความสม่ำเสมอ
- ฟังก์ชันเรียกใช้ระบบสำหรับสร้างตัวเลขสุ่ม: getrandom()บทความจาก LWN.netที่อธิบายถึงฟังก์ชันเรียกใช้ระบบเฉพาะของ Linux
- คุณสมบัติทางสถิติของลำดับสุ่มเทียมและการทดลองกับ PHP และ Debian OpenSSL
- เครื่องกำเนิดลำดับสุ่มโดยใช้สัญญาณรบกวนแบบ Avalanche
- เครื่องกำเนิดตัวเลขสุ่ม
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ การสร้างเลขสุ่ม
การสร้างเลขสุ่ม เป็นกระบวนการที่มักใช้ เครื่องกำเนิดเลขสุ่ม ( RNG ) ในการสร้างลำดับของ ตัวเลข หรือ สัญลักษณ์ ที่ไม่สามารถคาดเดาได้ดีไปกว่าโอกาส แบบสุ่ม...
การประยุกต์ใช้และการใช้งานจริง
เครื่องกำเนิดเลขสุ่มมีแอปพลิเคชันในด้านการ พนัน การ สุ่มตัวอย่างทางสถิติ การจำลองด้วยคอมพิวเตอร์ การ เข้ารหัส การ ออกแบบแบบสุ่มโดยสมบูรณ์ และด้านอื่นๆ ที่ต้องการผลลัพธ์ที่คาดเดาไม่ได้ โดยทั่วไป ในแอปพลิเคชันที่ความไม่แน่นอนเป็นคุณลักษณะสำคัญ เช่น...
ตัวเลขสุ่มจริงเทียบกับตัวเลขสุ่มเทียม
มีวิธีการหลักสองวิธีที่ใช้ในการสร้างตัวเลขสุ่ม วิธีแรกคือการวัดปรากฏการณ์ทางกายภาพบางอย่างที่คาดว่าจะเกิดขึ้นแบบสุ่ม แล้วจึงชดเชยความคลาดเคลื่อนที่อาจเกิดขึ้นในกระบวนการวัด ตัวอย่างแหล่งที่มา ได้แก่ การวัด สัญญาณรบกวนในบรรยากาศ สัญญาณรบกวนจากความร้อน...
วิธีการทางกายภาพ
วิธีการสร้างเลขสุ่มที่เก่าแก่ที่สุด เช่น การใช้ลูกเต๋า การโยนเหรียญ และวงล้อรูเล็ต ยังคงถูกนำมาใช้ในปัจจุบัน โดยส่วนใหญ่ใช้ในเกมและการพนัน เนื่องจากวิธีการเหล่านี้มักจะช้าเกินไปสำหรับการใช้งานส่วนใหญ่ในด้านสถิติและการเข้ารหัส