V8 ปรับปรุงคุณภาพเลขสุ่ม จับรูปแบบได้ยากขึ้น เริ่มใช้ใน Chrome 49

by lew
17 December 2015 - 14:44

เอนจินจาวาสคริปต์ V8 ที่เป็นพื้นฐานสำคัญของโครม อิมพลีเมนต์ฟังก์ชั่น Math.random() ด้วยฟังก์ชั่น MWC1616 มาโดยตลอด แต่หลังจากรุ่น 4.9.41.0 จะปรับเป็นฟังก์ชั่น xorshift128+

ฟังก์ชั่น MWC1616 ทำงานได้เร็วและเรียบง่าย แต่ปริมาณเลขสุ่มที่ผลิตได้ก่อนจะเริ่มซ้ำไม่มากนัก ในกรณีที่ดีที่สุดอาจจะได้ถึง 2^32 บิต แต่บางสถานะเริ่มต้นก็สร้างเลขซ้ำหลังจากสุ่มไปเพียง 40 ล้านบิต ในแง่สถิติแล้วก็มีคุณสมบัติไม่ดีนัก ขณะที่ฟังก์ชั่น xorshift128+ มีคุณบัติที่ดีกว่ามาก สามารถสร้างเลขสุ่มได้ถึง 2^128 - 1 บิต และคุณสมบัติทางสถิติก็ดีกว่า

ทาง V8 ย้ำกว่า xorshift128+ ยังไม่ดีพอสำหรับการใช้งานเพื่อการเข้ารหัส และหากใช้เพื่อสร้างกุญแจเข้ารหัส ควรใช้ฟังก์ชั่น window.crypto.getRandomValues ที่สร้างเลขสุ่มได้ดีกว่าแทน โดยจะแลกกับระยะเวลาสร้างเลขสุ่มที่นานขึ้น

ที่มา - V8 Project

ภาพแสดงรูปแบบของเลขสุ่มที่ได้จาก Math.random ใน V8 ก่อนและหลังจากเปลี่ยนฟังก์ชั่น โดย Mike Malone

Blognone Jobs Premium