Random Number
Serangan yang umum adalah:
- Nilai random bisa diprediksi
- Nilai random bisa dibruteforce dengan cepat
- Nilai random ternyata tidak penting dalam program
Pseudo Random
Jika bilangan acak dihasilkan dengan fungsi rand
, random
dan sejenisnya, maka kemungkinan yang dipakai adalah PRNG (pseudo random number generator). Jika kita punya seednya maka kita bisa memprediksi angka berikutnya yang muncul. Jika aplikasi C memakai seed berupa time
, maka tidak sulit menebaknya karena presisi time
adalah detik (dalam satu hari hanya ada 86400 detik).
Algoritma PRNG
PRNG yang umum:
Mersenne Twister dipakai di PHP, Python, Visual C++, Excel, R, Ruby.
True Random
Jika ada program yang membaca /dev/random
atau /dev/urandom
sudah dipastikan hasilnya benar-benar random dan tidak bisa diprediksi. Tapi lihat juga poin berikutnya: apakah nilai ini diproses apa adanya atau diambil sebagian bitnya atau modulusnya saja.
Jika nilai dipakai seluruhnya, maka hampir bisa dipastikan attack-nya melalui hal lain, bukan dengan mengakali random number generator. Jika hasil pembacaan /dev/random
atau /dev/urandom
hanya dipakai sebagai seed, maka masih ada kemungkinan bisa diakali.
Key space
Tidak semua random sulit ditebak, contohnya jika ternyata ada modulus nilai kecil (rand() % 255
), maka nilai 0-254 bisa dibruteforce dengan cepat (nilai sampai 16 bit masih bisa dibrute force dengan cepat).
Contoh soal
Museum of Fine Arts
Bruteforce seed
http://blog.rentjong.net/2015/03/boston-key-party-2015-museum-of-fine.html
HITBKul 2014 Daemon 4
Brute force seed
http://blog.rentjong.net/2014/10/hitbkul-2014-daemon-4.html
Copyright © 2009-2018 Yohanes Nugroho