ดาวน์โหลดโปรแกรมฟรี
       
   สมัครสมาชิก   เข้าสู่ระบบ
ไทยแวร์รีวิว
 

การสุ่ม (Random) เรื่องง่าย ที่ไม่ง่ายสำหรับคอมพิวเตอร์

การสุ่ม (Random) เรื่องง่าย ที่ไม่ง่ายสำหรับคอมพิวเตอร์

เมื่อ :
|  ผู้เข้าชม : 11,714
เขียนโดย :
0 %E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%AA%E0%B8%B8%E0%B9%88%E0%B8%A1+%28Random%29+%E0%B9%80%E0%B8%A3%E0%B8%B7%E0%B9%88%E0%B8%AD%E0%B8%87%E0%B8%87%E0%B9%88%E0%B8%B2%E0%B8%A2+%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B9%84%E0%B8%A1%E0%B9%88%E0%B8%87%E0%B9%88%E0%B8%B2%E0%B8%A2%E0%B8%AA%E0%B8%B3%E0%B8%AB%E0%B8%A3%E0%B8%B1%E0%B8%9A%E0%B8%84%E0%B8%AD%E0%B8%A1%E0%B8%9E%E0%B8%B4%E0%B8%A7%E0%B9%80%E0%B8%95%E0%B8%AD%E0%B8%A3%E0%B9%8C
A- A+
แชร์หน้าเว็บนี้ :

การสุ่ม (Random) งานง่ายที่ไม่ง่ายสำหรับคอมพิวเตอร์

"ไม่ว่าคอมพิวเตอร์ที่คุณใช้จะแรงขนาดไหน มันก็ยังโยนเหรียญเสี่ยงทายได้แย่อยู่ดี" เป็นประโยคที่ Steve Ward ศาสตราจารย์ด้านวิทยาการคอมพิวเตอร์ และวิศวกรรม แห่งสถาบันเทคโนโลยีแมสซาชูเซตส์ (MIT) ได้เคยกล่าวเอาไว้

บทความเกี่ยวกับ Computer อื่นๆ

เมื่อเราสั่งให้คอมพิวเตอร์ "สุ่ม (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 หากนำข้อมูลการสุ่มด้วยวิธีนี้มาวิเคราะห์ไปเรื่อยๆ ก็มีความเป็นไปได้ที่จะย้อนรอยอัลกอริทีมเพื่อคาดเดาคำตอบได้ ทำให้เราไม่สามารถนิยามสิ่งที่คาดการณ์ผลลัพธ์ได้เป็น "การสุ่มที่แท้จริง" 

การสุ่ม (Random) นั้น สำคัญอย่างไร?

การสุ่มมีมาหลายพันปี ไม่ว่าจะการโยนเหรียญ หรือทอยลูกเต๋า เป้าหมายก็เหมือนกันตรงที่ คือ การหาผลลัพธ์แบบสุ่ม การสุ่มด้วยคอมพิวเตอร์ก็เฉกเช่นเดียวกัน มีซอฟต์แวร์หลายอย่างที่ใช้ประโยชน์จากการสุ่ม เช่น เกมคอมพิวเตอร์ การสุ่มเพื่อวิทยาการเข้ารหัส (Cryptography) การสุ่มเพื่อการเสี่ยงโชค การสุ่มผลลัพธ์ในฐานข้อมูล ฯลฯ แม้แต่เรื่องใกล้ตัวง่ายๆ อย่างการเล่นเพลงแบบ Shuffle ก็เป็นการสุ่มเช่นกันนะ

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

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

การสุ่มแบบ Pseudo-random 

การสุ่มด้วยคอมพิวเตอร์ ปัจจุบันนี้ จะมีอยู่ 2 รูปแบบ แบบแรก คือ Pseudo-random ที่เราเกริ่นไปในย่อหน้าที่ผ่านมาที่แม้ตัวเลขจะดูเหมือนเป็นการสุ่ม แต่ความจริง คือ หากเรารู้อัลกอริทึมที่มันใช้ เราก็ค้นหาคำตอบที่จะถูกสุ่มขึ้นมาได้อย่างไม่ยากเย็นนัก

อันที่จริง Pseudo-random มันก็ไม่ได้แย่เสมอไปนะ สามารถใช้ประโยชน์ได้อยู่ ที่เห็นได้ชัดเจน ก็อย่างการสุ่มผลลัพธ์ภายในเกม เช่น โอกาสที่จะอัปเกรดอาวุธสำเร็จ, โอกาสที่มอนสเตอร์จะปรากฏตัว ฯลฯ ซึ่งไม่มีความจำเป็นอะไรที่ต้องใช้การสุ่มที่แท้จริง กับงานที่ไม่ต้องการความปลอดภัยสูง หรือเครื่องเล่น MP3 ที่มีระบบ Shuffle เล่นเพลงแบบสุ่ม แค่ Pseudo-random  ก็เพียงพอต่อการทำงานแล้ว

การสุ่มแบบ RdRand - Intel Hardware Random Number Generator

เพื่อให้นักพัฒนาซอฟต์แวร์สามารถสร้างระบบสุ่มได้ง่าย และคาดเดารูปแบบได้ยากขึ้น Intel ผู้พัฒนาชิปชื่อดังจึงพัฒนาระบบสุ่มแบบฮาร์ดแวร์ขึ้นมา เรียกว่า RdRand โดยในชิปเซตจะมีฐานข้อมูลสำหรับสุ่มตัวอย่างเก็บเอาไว้อยู่ (Entropy source) เมื่อซอฟต์แวร์ต้องการสุ่มก็จะดึงค่า Seed จาก RdRand มาใช้งานได้ทันที

การสุ่ม (Random) เรื่องง่าย ที่ไม่ง่ายสำหรับคอมพิวเตอร์
ภาพจาก 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 เกิดขึ้น

การสุ่มแบบ True Random Numbers

Pseudo-random ก็สุ่มไม่จริง RdRand ก็มีความกังวลด้านความปลอดภัย แล้วทำอย่างไร คอมพิวเตอร์ถึงจะทำการสุ่มที่แท้จริง (True Random) ได้ล่ะ ?

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

ยังมีอีกหลายตัวแปรที่คอมพิวเตอร์สามารถนำมาใช้สุ่มได้ เช่น ใช้เสียงที่เกิดจากการกดลงบนแป้นพิมพ์คีย์บอร์ด สมมติให้คอมพิวเตอร์ตรวจจับว่าคุณมีการกดคีย์บอร์ดหนึ่งครั้งที่เวลา 0.23423523 วินาที หลัง 14.00 น. และเก็บข้อมูลรูปแบบเดียวกันนี้ใหม่เพิ่มเรื่อยๆ เพื่อสร้างเป็น Entropy Source ขึ้นมาสำหรับใช้ในการสุ่ม ก็สามารถมองว่านี่เป็นการสุ่มที่แท้จริงได้เช่นกัน เพราะเราไม่มีทางรู้เลยว่าเวลาที่ถูกนำมาใช้สุ่มแต่ละครั้งมีค่าเท่าไหร่

การสุ่ม (Random) เรื่องง่าย ที่ไม่ง่ายสำหรับคอมพิวเตอร์


อ่านกันถึงบรรทัดนี้ น่าจะพอเห็นภาพกันแล้วใช่ไหมครับ ว่าทำไมการสุ่มในคอมพิวเตอร์ที่เป็นงานง่ายๆ ความจริงมันไม่ง่ายเลย มีอะไรที่ซับซ้อนเป็นอย่าง หากต้องการให้ได้ค่าสุ่มที่เกิดจากการสุ่มที่แท้จริง

 


ที่มา : www.howtogeek.com , www.euronews.com , engineering.mit.edu , th.wikipedia.org

 
0 %E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%AA%E0%B8%B8%E0%B9%88%E0%B8%A1+%28Random%29+%E0%B9%80%E0%B8%A3%E0%B8%B7%E0%B9%88%E0%B8%AD%E0%B8%87%E0%B8%87%E0%B9%88%E0%B8%B2%E0%B8%A2+%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B9%84%E0%B8%A1%E0%B9%88%E0%B8%87%E0%B9%88%E0%B8%B2%E0%B8%A2%E0%B8%AA%E0%B8%B3%E0%B8%AB%E0%B8%A3%E0%B8%B1%E0%B8%9A%E0%B8%84%E0%B8%AD%E0%B8%A1%E0%B8%9E%E0%B8%B4%E0%B8%A7%E0%B9%80%E0%B8%95%E0%B8%AD%E0%B8%A3%E0%B9%8C
แชร์หน้าเว็บนี้ :
Keyword คำสำคัญ »
เขียนโดย
ระดับผู้ใช้ : Admin    Thaiware
แอดมินสายเปื่อย ชอบลองอะไรใหม่ไปเรื่อยๆ รักแมว และเสียงเพลงเป็นพิเศษ
 
 
 

รีวิวที่เกี่ยวข้อง

 


 

แสดงความคิดเห็น