Google Tingkatkan Randomness di Javascript Engine V8

Yana Permana 18 Desember 2015

Google Tingkatkan Randomness di Javascript Engine V8

Randomness merupakan salah satu bagian penting dalam pengembangan perangkat lunak. Apabila perangkat lunak yang sedang dikembangkan membutuhkan semacam custom token, cookie, sessid haruslah yang sulit dideteksi dan tidak boleh berulang dalam satu waktu.

Misal E-Commerce, dalam setiap pembelian barang maupun transaksi ada token yang dihasilkan menggunakan nilai random. Tanpa random, token yang dihasilkan akan selalu sama. Masalahnya jika token yang dihasilkan sama, maka memudahkan para peretas untuk memanfaatkan celah ini, seperti mengurangi harga barang yang sesungguhnya.

Kabar baiknya Math.random() dalam Javascript V8 Engine kini telah ditingkatkan oleh salah satu Software Engineer Google, Yang Guo. Efeknya nilai random yang dihasilkan akan mempunyai periode yang panjang untuk menampilkan nilai yang sama di satu waktu.

Math.random() merupakan fungsi paling populer dan banyak digunakan dalam penggunaan randomness pada bahasa pemrograman Javascript. Di V8 dan kebanyakan engine Javascript lainnya, semuanya mengimplementasikan Pseudo Random Number Generator (PRNG). PRNG akan mengembalikan nilai random dari internal state yang diberikan.

Jadi setiap diberikan initial state, sekuen nilai random sebenarnya bersifat deterministik Karena ukuran bit n dari internal state telah dibatasi sehingga nilai PRNG hasilkan secara tak sengaja akan berulang. Karena batas atas dari panjang perode siklus permutasi ini adalah 2n

Sebenarnya banyak varian algoritma PRNG, namun yang paling dikenal adalah Marsenne Twister dan Linear Congruential Generator (LCG). Masing-masing PRNG memiliki karakteristik, keuntungan dan kekurangan. Idealnya algoritma PRNG menggunakan memori yang sedikit, sesuai dengan initial state yang diberikan. Karena performa akan lebih cepat dan mempunyai panjang periode yang cukup panjang sehingga menawarkan kualitas distribusi random yang lebih baik.

Ketika memori digunakan, performa dan panjang periode sebenarnya mudah untuk diukur dan dikalkulasikan kualitasnya. Properti tersebut digunakan untuk mendeteksi seberat rumit tingkat deterministiknya. Banyak teknik pengujian matematika yang berbasis statistik untuk memeriksa kualitas nilai random yang dihasilkan.

http://1.bp.blogspot.com/-92e22bUMwwk/VnKQn2VT3EI/AAAAAAAAB-E/8XD12xuGTXc/s640/Untitled%2Bdrawing.png

Math.random() yang baru menggunakan xorshift128 dan peningkatan MWC1616 (Multiply with Carry untuk setiap 16 bit). Tingkat randomness semakin meningkat dan sulit dideteksi. Untuk versi V8 4.9.41.0. sudah mengimplementasikannya.

Mengembangkan perangkat lunak memerlukan Randomness. Oleh karena itu, penggunaan API untuk menghasilkan nilai random haruslah dipilih secara hati-hati agar perangkat lunak yang dikembangkan selalu aman dari peretas. Kini Math.Random() telah ditingkatkan menjadi lebih sulit dideteksi. Apabila ingin mencoba alternatif lain, ada API window.crypto.getRandomValues yang menghasilkan nilai random yang aman secara kriptografi.

(yp/v8project)