"ไม่ว่าคอมพิวเตอร์ที่คุณใช้จะแรงขนาดไหน มันก็ยังโยนเหรียญเสี่ยงทายได้แย่อยู่ดี" เป็นประโยคที่ Steve Ward ศาสตราจารย์ด้านวิทยาการคอมพิวเตอร์ และวิศวกรรม แห่งสถาบันเทคโนโลยีแมสซาชูเซตส์ (MIT) ได้เคยกล่าวเอาไว้
เมื่อเราสั่งให้คอมพิวเตอร์ "สุ่ม (Random)" เช่น เล่นเพลงแบบสุ่ม การสุ่มตัวเลข การสุ่มตัวอักษร (ทั้ง การสุ่มตัวอักษรภาษาไทย หรือ การสุ่มตัวอักษรภาษาอังกฤษ) ฯลฯ ผลลัพธ์ที่ได้เกิดจากการคำนวณตามอัลกอริทึมที่ผู้พัฒนาโปรแกรมได้เขียนขึ้นมา หลักการคร่าวๆ ก็คือ มีเลขตั้งต้น (Seed) อยู่ชุดหนึ่ง จากนั้นก็นำมาเข้าสมการที่แสนซับซ้อนให้ยากต่อการคาดเดารูปแบบ แม้ผลลัพธ์จะคาดเดาได้ยาก แต่ก็ไม่สามารถบอกว่ามันเป็นการสุ่มค่าที่แท้จริงได้อยู่ดี
ตัวอย่างอัลกอริทึมของการสุ่มด้วยคอมพิวเตอร์
A = Constant 1;
M = Constant 2;Q = M / A;
R = M % A;number = ( A * (number mod Q) ) - ( R * floor(number / Q) );
if (number is negative)
number = number + M;end
ตัวอย่างจาก https://www.cs.utah.edu/~germain/PPS/Topics/random_numbers.html
เราอาจจะรู้สึกว่า "เอ...สุ่มตั้งหลายรอบผลลัพธ์มันก็ไม่เห็นจะมีรูปแบบตายตัวนี่" นั่นก็เพราะนักพัฒนาได้เขียนอัลกอริทึมการสุ่ม (Random Algorithm) ขึ้นมาอย่างระมัดระวัง อาจมีการใช้อัลกอริทีมหลายรูปแบบในการทำงาน เพื่อให้ยากต่อการคาดเดารูปแบบ ซึ่งการสุ่มแบบนี้จะเรียกว่า Pseudo-random หากนำข้อมูลการสุ่มด้วยวิธีนี้มาวิเคราะห์ไปเรื่อยๆ ก็มีความเป็นไปได้ที่จะย้อนรอยอัลกอริทีมเพื่อคาดเดาคำตอบได้ ทำให้เราไม่สามารถนิยามสิ่งที่คาดการณ์ผลลัพธ์ได้เป็น "การสุ่มที่แท้จริง"
การสุ่มมีมาหลายพันปี ไม่ว่าจะการโยนเหรียญ หรือทอยลูกเต๋า เป้าหมายก็เหมือนกันตรงที่ คือ การหาผลลัพธ์แบบสุ่ม การสุ่มด้วยคอมพิวเตอร์ก็เฉกเช่นเดียวกัน มีซอฟต์แวร์หลายอย่างที่ใช้ประโยชน์จากการสุ่ม เช่น เกมคอมพิวเตอร์ การสุ่มเพื่อวิทยาการเข้ารหัส (Cryptography) การสุ่มเพื่อการเสี่ยงโชค การสุ่มผลลัพธ์ในฐานข้อมูล ฯลฯ แม้แต่เรื่องใกล้ตัวง่ายๆ อย่างการเล่นเพลงแบบ Shuffle ก็เป็นการสุ่มเช่นกันนะ
ในด้าน Cryptography มีความสำคัญมากต่อการเข้ารหัสข้อมูลเพื่อความปลอดภัย เราไม่สามารถใช้รูปแบบเดิมซ้ำไปซ้ำมาได้ เพราะผู้โจมตีอาจจะวิเคราะห์วิธีการสร้างรหัสได้ในท้ายที่สุด
หรือหากมีเว็บให้เล่นเกมแลกของรางวัลโดยการสุ่ม หากเราสามารถแกะรอยหาวิธีที่เขาใช้ในการสุ่มได้สำเร็จ เราก็จะสามารถชนะเกมนั้นได้ตลอดเวลาที่ต้องการเลยล่ะ
การสุ่มด้วยคอมพิวเตอร์ ปัจจุบันนี้ จะมีอยู่ 2 รูปแบบ แบบแรก คือ Pseudo-random ที่เราเกริ่นไปในย่อหน้าที่ผ่านมาที่แม้ตัวเลขจะดูเหมือนเป็นการสุ่ม แต่ความจริง คือ หากเรารู้อัลกอริทึมที่มันใช้ เราก็ค้นหาคำตอบที่จะถูกสุ่มขึ้นมาได้อย่างไม่ยากเย็นนัก
อันที่จริง Pseudo-random มันก็ไม่ได้แย่เสมอไปนะ สามารถใช้ประโยชน์ได้อยู่ ที่เห็นได้ชัดเจน ก็อย่างการสุ่มผลลัพธ์ภายในเกม เช่น โอกาสที่จะอัปเกรดอาวุธสำเร็จ, โอกาสที่มอนสเตอร์จะปรากฏตัว ฯลฯ ซึ่งไม่มีความจำเป็นอะไรที่ต้องใช้การสุ่มที่แท้จริง กับงานที่ไม่ต้องการความปลอดภัยสูง หรือเครื่องเล่น MP3 ที่มีระบบ Shuffle เล่นเพลงแบบสุ่ม แค่ Pseudo-random ก็เพียงพอต่อการทำงานแล้ว
เพื่อให้นักพัฒนาซอฟต์แวร์สามารถสร้างระบบสุ่มได้ง่าย และคาดเดารูปแบบได้ยากขึ้น Intel ผู้พัฒนาชิปชื่อดังจึงพัฒนาระบบสุ่มแบบฮาร์ดแวร์ขึ้นมา เรียกว่า RdRand โดยในชิปเซตจะมีฐานข้อมูลสำหรับสุ่มตัวอย่างเก็บเอาไว้อยู่ (Entropy source) เมื่อซอฟต์แวร์ต้องการสุ่มก็จะดึงค่า Seed จาก RdRand มาใช้งานได้ทันที
ภาพจาก https://software.intel.com/content/www/us/en/develop/articles/intel-digital-random-number-generator-drng-software-implementation-guide.html
ปัญหาอยู่ตรงที่ระบบการสุ่ม Seed ของ RdRand นั้นถูกปิดซ่อนเอาไว้ในกล่องดำ เราไม่รู้เลยว่ามันทำงานอย่างไร มีอะไรอยู่ในกล่องแพนโดราอันนี้บ้าง ทำให้เกิดกระแสความวิตกกังวลไม่ไว้วางใจ RdRand ขึ้นมา เพราะหากในนั้นมีประตูหลัง (Backdoors) ให้ NSA ใช้ รัฐบาลจะสามารถใช้ประโยชน์จาก RdRand ในการถอดรหัสที่ถูกสุ่มด้วยระบบนี้ได้
National Security Agency หรือย่อว่า NSA เป็นองค์กรข่าวกรองของรัฐบาลกลางสหรัฐ มีหน้าที่สังเกตการณ์ รวบรวม และประมวลผลข้อมูลเพื่อหาข่าวกรองต่างประเทศและหน้าที่การต่อต้านการข่าวกรองของประเทศอื่น
ตกเป็นประเด็นใหญ่เมื่อ เอ็ดเวิร์ด สโนว์เดน อดีตเจ้าหน้าที่ของ CIA ได้ออกมาเปิดโปงเรื่อง “พริซึมเกต” โครงการลับที่เจาะเข้าไปในเซิร์ฟเวอร์ของบริษัทไอทีชื่อดังต่างๆ และมีการกล่าวอ้างว่าบางบริษัทได้ให้ความร่วมมือด้วยการสร้างประตูหลังให้ FBI และ CIA ได้ใช้ในการเข้าไปสอดส่องข้อมูลได้
ความหวาดระแวงนี้ได้ทำให้ในเดือนธันวาคม ปี ค.ศ. 2013 (พ.ศ. 2556) ที่ทางผู้พัฒนา FreeBSD ได้หยุดสนับสนุนการสร้างผลลัพธ์โดยใช้ RdRand โดยให้เหตุผลว่าไม่อาจไว้วางใจระบบนี้ได้ อย่างไรก็ตาม ก็มีการแก้ไขปัญหาด้วยการนำข้อมูลที่ถูกสุ่มด้วย Entropy Source ของ RdRand มาใช้เป็น Seed ของอัลกอริทึมอีกชุดเพื่อคำนวณค่าสุ่มซ้ำอีกครั้งหนึ่ง เพื่อให้มั่นใจว่าผลลัพธ์จะไม่ถูกนำไปใช้หากมีการ Backdoors เกิดขึ้น
Pseudo-random ก็สุ่มไม่จริง RdRand ก็มีความกังวลด้านความปลอดภัย แล้วทำอย่างไร คอมพิวเตอร์ถึงจะทำการสุ่มที่แท้จริง (True Random) ได้ล่ะ ?
ในการที่คอมพิวเตอร์จะ "สุ่มจริง" ให้เราได้ จำเป็นจะต้องใช้ "ตัวแปร" ที่อยู่นอกระบบคอมพิวเตอร์ มาคำนวณร่วมในอัลกอริทึมด้วย อย่างเช่น อัตราการสลายกัมมันตภาพรังสีของอะตอม อ้างอิงจากทฤษฏีควอนตัมแล้ว เราไม่มีทางรู้ว่าการเสื่อมสลายจะเกิดขึ้นเมื่อไหร่ นั่นถึงจะทำให้เราเรียกการสุ่มนี้ว่าเป็นการสุ่มที่แท้จริงได้ เพราะไม่มีแฮกเกอร์คนไหนสามารถคาดการณ์ได้แน่ว่าเมื่อไหร่ที่กัมมันตภาพรังจะเริ่มสลายตัว
ยังมีอีกหลายตัวแปรที่คอมพิวเตอร์สามารถนำมาใช้สุ่มได้ เช่น ใช้เสียงที่เกิดจากการกดลงบนแป้นพิมพ์คีย์บอร์ด สมมติให้คอมพิวเตอร์ตรวจจับว่าคุณมีการกดคีย์บอร์ดหนึ่งครั้งที่เวลา 0.23423523 วินาที หลัง 14.00 น. และเก็บข้อมูลรูปแบบเดียวกันนี้ใหม่เพิ่มเรื่อยๆ เพื่อสร้างเป็น Entropy Source ขึ้นมาสำหรับใช้ในการสุ่ม ก็สามารถมองว่านี่เป็นการสุ่มที่แท้จริงได้เช่นกัน เพราะเราไม่มีทางรู้เลยว่าเวลาที่ถูกนำมาใช้สุ่มแต่ละครั้งมีค่าเท่าไหร่
อ่านกันถึงบรรทัดนี้ น่าจะพอเห็นภาพกันแล้วใช่ไหมครับ ว่าทำไมการสุ่มในคอมพิวเตอร์ที่เป็นงานง่ายๆ ความจริงมันไม่ง่ายเลย มีอะไรที่ซับซ้อนเป็นอย่าง หากต้องการให้ได้ค่าสุ่มที่เกิดจากการสุ่มที่แท้จริง
|
แอดมินสายเปื่อย ชอบลองอะไรใหม่ไปเรื่อยๆ รักแมว และเสียงเพลงเป็นพิเศษ |