31 Agustus, 2008

Random Number Generator

Random number generator (RNG) atau pembangkit bilangan acak, kerap kali diimplementasikan di dalam berbagai algoritma kriptografi. Contohnya saja pada algoritma kriptografi Deffie-Helman yang memerlukan bilangan prima sebagai input. Nah, cara yang paling efektif untuk mendapatkan suatu bilangan prima acak adalah dengan cara melakukan pembangkitan bilangan acak kemudian mengetes apakah bilangan yang dibangkitkan itu berupa bilangan acak atau tidak.

Sekarang pertanyaannya adalah……apa algoritma untuk melakukan pembangkitan bilangan acak tersebut? Yeah, Anda dapat menggunakan rand() atau Math.Random() pada C++ atau System.Random pada C# (red. C sharp) atau java.util.Random pada Java. Namun, jika Anda memeriksa algoritma yang digunakan oleh fungsi-fungsi tersebut, Anda akan menemukan bahwa itu adalah RNG yang lambat…..masih ada cara untuk mempercepatnya beberapa CPU clock cylces…lagipula baru-baru ini ditemukan security flaw pada fungsi rand() sehingga bilangan acak ini dapat dibangkitkan kembali (artinya tidak benar-benar acak) dan ini merupakan ancaman yang serius untuk dunia kriptografi.

Kalau Anda adalah orang yang haus akan ilmu hacking dan matematika diskrit…….inilah jawabannya……..

Algortima pertama adalah R250/5231 yang diciptakan oleh Kirkpatrick dan Stoll yang dipublikasikan di A Very Fast Shift-Register Sequence Random Number Generator, J. Computational Physics, vol 40, pp. 517-526.

Algoritma yang kedua adalah Mersenne Twister yang diciptakan pada tahun 1996 oleh Matsumora dan Nishimura.

Source codenya dapat di compile dengan gcc v3.3…….atau kalau Anda benar-benar kreatif, ubahlah source code ini sesuai dengan keinginan Anda……tetapi jangan lupa pada kontribusi orang-orang yang menciptakan algoritma ini. Saya lupa kalau source code java dan C#nya juga ada. Berikut linknya dari semua source codenya.

http://www.4shared.com/file/32947855/4bc0a7c/RNG_520_dan_MT.html

Jangan lupa kasih komentarnya… Hhee…^_^

Tidak ada komentar: