Random Generator : Apa itu seed ?
Komputer tidak dapat menghasilkan angka acak sejati (true random numbers) dengan sendirinya. Ini dikarena komputer adalah mesin yang beroperasi berdasarkan aturan dan algoritma tertentu, sehingga jika Anda memberikan input yang sama, komputer akan menghasilkan hasil yang sama, selama proses nya tetap sama.
Oleh karena itu, dalam prakteknya, kita menggunakan pseudorandom number generators (PRNGs) untuk menghasilkan angka yang tampak acak, meskipun sebenarnya mereka dihasilkan oleh algoritma matematika.
Sebuah pseudorandom number generator (PRNG) akan menghasilkan urutan angka yang sama jika dimulai dengan titik awal (seed) yang sama. Artinya, jika Anda memberikan PRNG seed yang sama, Anda akan mendapatkan urutan angka yang identik. Ini adalah sifat yang terkait dengan algoritma yang digunakan oleh PRNG.
Seed adalah nilai awal yang digunakan oleh generator untuk memulai proses menghasilkan angka acak.
PRNG tidak menghasilkan angka yang sepenuhnya acak, tetapi mereka sering cukup acak untuk banyak aplikasi praktis. Namun, jika Anda memerlukan tingkat ketidakdugaan yang lebih tinggi, seperti dalam keamanan kriptografi, Anda perlu menggunakan random number generators yang lebih kuat yang mengandalkan sumber entropi fisik atau algoritma kriptografis yang sangat rumit untuk menghasilkan angka acak yang lebih aman.
Di dalam implementasi sebenarnya, generator angka pseudorandom seperti yang digunakan dalam kebanyakan bahasa pemrograman, seperti JavaScript, Java, Python, dll., biasanya tidak menyimpan seluruh rangkaian angka yang akan digunakan (seperti 2³² angka pada 32-bit generator). Sebaliknya, generator tersebut biasanya hanya menyimpan nilai “seed” sebagai indeks awal dari mana ia akan membaca angka-angka selanjutnya.
import random
# Menggunakan seed 42
seed = 42
random.seed(seed)
# Menghasilkan angka acak antara 0 (inklusif) dan 1 (eksklusif)
random_number = random.random()
print(random_number)
// Menggunakan seed pseudo-random
function getRandomNumberWithSeed(seed) {
const x = Math.sin(seed) * 10000;
return x - Math.floor(x);
}
// Menghasilkan angka acak dengan seed 42
const seed = 42;
const randomNumber = getRandomNumberWithSeed(seed);
console.log(randomNumber);
import java.util.Random;
public class RandomExample {
public static void main(String[] args) {
// Membuat objek Random dengan seed 42
long seed = 42;
Random random = new Random(seed);
// Menghasilkan angka acak antara 0 (inklusif) dan 1 (eksklusif)
double randomNumber = random.nextDouble();
System.out.println(randomNumber);
}
}
Sistem umumnya menggunakan berbagai sumber entropi untuk menghasilkan angka acak. Sumber-sumber khusus dapat bervariasi tergantung pada sistem dan lingkungannya, tetapi berikut adalah beberapa sumber entropi yang umumnya digunakan oleh sistem:
- Gerakan Mouse: Gerakan mouse komputer, terutama saat mereka acak dan tidak dapat diprediksi, dapat menjadi sumber entropi.
- Ketikan Keyboard: Ketukan pada keyboard dapat menjadi sumber entropi, terutama saat mengetik dengan cepat dan acak.
- Aktivitas Jaringan: Lalu lintas jaringan dan waktu paket data dapat menjadi sumber entropi, terutama saat ada banyak transmisi data.
- Sensor Hardware: Beberapa komponen perangkat keras, seperti noise elektronik dalam sirkuit atau peluruhan partikel radioaktif, dapat menjadi sumber entropi.
- Peristiwa Sistem: Berbagai peristiwa sistem, seperti waktu henti perangkat keras, aktivitas disk, atau interaksi pengguna, dapat berkontribusi pada entropi.
- Faktor Lingkungan Eksternal: Faktor lingkungan seperti noise atmosfer, fluktuasi suhu, atau bahkan peluruhan radioaktif dapat digunakan sebagai sumber entropi.
- Perangkat Khusus: Beberapa sistem menggunakan komponen perangkat keras khusus, yang disebut generator angka acak perangkat keras (HRNGs), yang dirancang untuk memberikan entropi berkualitas tinggi. Perangkat ini sering mengandalkan proses fisik, seperti noise elektronik atau fenomena kuantum.
- Seed Berbasis Waktu: Dalam situasi di mana sumber-sumber entropi lainnya terbatas (misalnya, selama startup sistem), waktu saat ini dan statistik sistem dapat digunakan untuk menginisialisasi generator angka acak.