Entropi dan Keacakan dalam Cryptocurrency: Mengapa Ini Penting
Setiap private key cryptocurrency, setiap seed phrase, dan setiap alamat yang Anda gunakan berawal dari sebuah angka acak. Keamanan seluruh portofolio crypto Anda bergantung pada satu asumsi: angka itu benar-benar tidak dapat diprediksi. Jika generator angka acak yang menghasilkan kunci Anda lemah, bias, atau dapat diprediksi, dana Anda bisa dicuri — bukan dengan memecahkan kriptografi, tetapi dengan menebak kuncinya.
Panduan ini menjelaskan apa arti entropi dalam konteks kriptografi, bagaimana generator angka acak bekerja, apa saja yang pernah salah secara historis ketika keacakan gagal, dan bagaimana memastikan pembuatan kunci Anda benar.
Apa Itu Entropi?
Dalam teori informasi, entropi mengukur tingkat ketidakpastian atau ketidakdapatdiprediksian dalam sebuah data. Dalam kriptografi, entropi mengukur berapa banyak bit keacakan asli yang dimiliki suatu nilai.
Sebuah private key 256-bit seharusnya memiliki entropi 256 bit — artinya penyerang harus mencoba rata-rata 2^255 tebakan untuk menemukannya (setengah ruang pencarian, secara rata-rata). Jika kunci dihasilkan dengan hanya 32 bit entropi aktual (karena RNG cacat), penyerang hanya membutuhkan sekitar 2^31 tebakan — kira-kira 2 miliar — yang dapat dihabiskan komputer modern dalam hitungan menit.
Mengukur Entropi
Entropi diukur dalam bit. Entropi dari variabel acak X adalah:
H(X) = -sum(p(x) * log2(p(x))) for all possible values x
Untuk angka acak seragam 256-bit:
- Setiap bit memiliki probabilitas 0.5 untuk bernilai 0 atau 1.
- Entropi = 256 bit (maksimum untuk ukuran ini).
Untuk generator bias di mana setiap bit memiliki probabilitas 0.7 untuk bernilai 1:
- Entropi per bit = -(0.7 * log2(0.7) + 0.3 * log2(0.3)) = 0.881 bit.
- Total entropi untuk 256 bit = 225.5 bit (11.9% lebih rendah dari ideal).
Bahkan bias kecil akan terakumulasi di banyak bit dan dapat secara signifikan menurunkan tingkat keamanan efektif.
Entropi dalam Konteks BIP-39
| Mnemonic Length | Entropy | Security Level | Brute-Force at 10^12/sec |
|---|---|---|---|
| 12 words | 128 bits | 128-bit | ~10^19 years |
| 15 words | 160 bits | 160-bit | ~10^28 years |
| 18 words | 192 bits | 192-bit | ~10^38 years |
| 24 words | 256 bits | 256-bit | ~10^57 years |
Angka-angka ini mengasumsikan bahwa entropi benar-benar seragam. Jika RNG cacat, tingkat keamanan aktual bisa jauh lebih rendah.
Jenis Generator Angka Acak
True Random Number Generators (TRNG)
TRNG mengambil sampel fenomena fisik yang secara inheren tidak dapat diprediksi pada tingkat kuantum:
- Thermal noise — Fluktuasi tegangan acak pada resistor yang disebabkan agitasi termal elektron.
- Shot noise — Fluktuasi arus acak akibat sifat diskret aliran elektron.
- Radioactive decay — Waktu kejadian peluruhan individual secara fundamental tidak dapat diprediksi.
- Atmospheric noise — Derau frekuensi radio dari petir dan proses atmosfer lainnya.
Hardware wallet seperti Ledger dan Trezor menggunakan TRNG on-chip. Perangkat ini mengambil sampel sumber derau fisik dan mengondisikan output melalui whitening serta health tests.
Kelebihan: Keacakan asli dari fisika; tidak ada state deterministik untuk diprediksi.
Kekurangan: Bergantung pada hardware; dapat gagal tanpa tanda jika sumber derau menurun; throughput bisa terbatas.
Cryptographically Secure Pseudo-Random Number Generators (CSPRNG)
CSPRNG adalah algoritma deterministik yang menghasilkan output yang tidak dapat dibedakan dari keacakan asli, jika diberi seed yang cukup acak:
- Linux:
/dev/urandom(menggunakan ChaCha20 atau cipher serupa, di-seed dari entropi hardware). - macOS:
/dev/urandom(arc4random, di-seed dari entropi hardware). - Windows:
BCryptGenRandom(provider CNG). - Web browsers:
crypto.getRandomValues()(mendelegasikan ke CSPRNG OS). - Python:
os.urandom()atau modulsecrets. - Node.js:
crypto.randomBytes().
Kelebihan: Cepat; algoritma dipelajari dengan baik; tersedia di semua platform.
Kekurangan: Hanya sekuat entropi seed awal; deterministik — jika state internal diketahui, seluruh output berikutnya dapat diprediksi.
PRNG Non-Kriptografis (JANGAN PERNAH Gunakan untuk Kunci)
Fungsi random pustaka standar di sebagian besar bahasa pemrograman dirancang untuk simulasi statistik, bukan kriptografi:
- Python:
random.random()(Mersenne Twister — deterministik, state bisa dipulihkan dari 624 output). - JavaScript:
Math.random()(xorshift128+ di V8 — dapat diprediksi). - C:
rand()(linear congruential generator — sangat mudah diprediksi). - Java:
java.util.Random(linear congruential — dapat diprediksi).
Generator ini memiliki entropi rendah, periode pendek, dan state yang dapat diprediksi. Menggunakannya untuk pembuatan kunci setara dengan tidak menggunakan keacakan sama sekali. Jangan pernah membuat private key atau seed phrase dengan fungsi-fungsi ini.
Kegagalan Keacakan dalam Sejarah
Bug Android SecureRandom (2013)
Pada Agustus 2013, ditemukan cacat kritis pada implementasi SecureRandom di Android. PRNG Java tidak di-seed dengan benar pada perangkat Android tertentu, menyebabkan banyak aplikasi wallet Bitcoin menghasilkan private key dari state yang dapat diprediksi. Penyerang memanfaatkan ini untuk mencuri sekitar 55 BTC. Bug ini memengaruhi pembuatan nonce tanda tangan ECDSA — menggunakan nonce yang sama dua kali memungkinkan private key dihitung dari dua tanda tangan.
"Blockchain Bandit" (2019)
Peneliti keamanan Adrian Bednarek menemukan bahwa wallet telah dibuat dengan private key yang sangat lemah — kunci seperti 1, 2, 3, atau kata kamus sederhana yang di-hash sekali. Seorang penyerang telah secara sistematis menyapu dana dari alamat-alamat ini selama bertahun-tahun, mengumpulkan lebih dari 45.000 ETH. Bandit ini hanya mengenumerasi kunci berentropi rendah dan memeriksa apakah kunci tersebut menyimpan dana.
Contoh kunci yang dikuras:
- Private key
0x0000000000000000000000000000000000000000000000000000000000000001(angka 1) - Private key yang diturunkan dari kata sandi dan frasa umum
Kerentanan Milk Sad (2023)
Perintah seed pada alat libbitcoin-explorer (bx) menggunakan Mersenne Twister yang di-seed hanya dengan 32 bit waktu sistem. Ini berarti semua kunci yang dihasilkan dengan alat ini memiliki entropi maksimum 32 bit — sekitar 4,3 miliar kemungkinan. Penyerang melakukan brute-force pada kunci-kunci ini dan mencuri dana.
Bug Kunci Lemah Debian OpenSSL (2008)
Seorang maintainer Debian tanpa sengaja menghapus baris kode yang menyediakan entropi ke generator angka acak OpenSSL. Selama dua tahun (2006-2008), setiap kunci kriptografis yang dihasilkan pada sistem Debian dan Ubuntu hanya memiliki 15 bit entropi dari process ID, sehingga menghasilkan maksimal 32.767 kunci unik. Semua kunci SSH, sertifikat SSL, dan setiap kunci cryptocurrency yang dihasilkan selama periode ini pada sistem terdampak menjadi terkompromi.
Pelajaran Penting
- Jangan pernah mempercayai satu sumber entropi tanpa verifikasi.
- Kesalahan implementasi kecil dapat menurunkan entropi secara katastrofik.
- Penyerang secara aktif mengeksploitasi keacakan lemah — ini bukan sekadar teori.
- Kode open-source yang diaudit sangat penting untuk operasi yang kritis terhadap entropi.
Sumber Entropi Secara Detail
Entropy Pool Sistem Operasi
Sistem operasi modern mempertahankan entropy pool yang diberi masukan dari banyak sumber:
- Interrupt timing — Waktu interrupt hardware (keyboard, mouse, disk, jaringan) memberi masukan yang tidak dapat diprediksi.
- Disk I/O timing — Waktu presisi operasi baca/tulis disk bervariasi karena faktor mekanis dan elektronik.
- Hardware RNG — CPU modern (Intel RDRAND, AMD) menyertakan generator angka acak on-chip.
- Boot-time entropy — Beberapa sistem menyimpan entropi antar-reboot (
/var/lib/systemd/random-seeddi Linux).
OS mencampur sumber-sumber ini ke dalam entropy pool menggunakan primitive kriptografis, lalu menggunakan pool tersebut untuk me-seed CSPRNG-nya. Pada kernel Linux modern (5.18+), /dev/urandom akan block sampai entropi cukup terkumpul saat boot, lalu tidak akan block lagi.
Entropi Browser (crypto.getRandomValues)
Saat Anda menggunakan alat berbasis web seperti generator milik SafeSeed, API crypto.getRandomValues() browser digunakan. Ini mendelegasikan ke CSPRNG sistem operasi:
- Chrome: Mendelegasikan ke CSPRNG OS (BoringSSL).
- Firefox: Mendelegasikan ke CSPRNG OS (NSS).
- Safari: Mendelegasikan ke CSPRNG OS (CommonCrypto).
Ini dianggap aman untuk pembuatan kunci, dengan syarat OS yang mendasari aman. Kekhawatiran utama adalah berjalan di lingkungan di mana CSPRNG OS bisa terkompromi (misalnya mesin virtual dengan sumber entropi tidak memadai, atau sistem operasi yang sudah disusupi).
Entropi Hardware Wallet
Hardware wallet menggunakan true random number generator on-chip:
- Ledger (Secure Element ST33): Menggunakan TRNG chip ST33, yang mengambil sampel derau analog. Output melewati NIST SP 800-90B health tests sebelum digunakan.
- Trezor: Menggunakan hardware RNG chip STM32. Trezor juga mendukung pencampuran entropi dari lemparan dadu yang diberikan pengguna.
- Coldcard: Menggunakan TRNG secure element ATECC608A plus hardware RNG MCU, mencampur kedua sumber.
Entropi dari Lemparan Dadu
Melempar dadu secara manual adalah metode pembuatan entropi paling transparan:
- Dadu fair enam sisi menghasilkan log2(6) = 2.585 bit entropi per lemparan.
- 100 lemparan menghasilkan sekitar 258.5 bit entropi — cukup untuk seed phrase 24 kata.
- Pengguna dapat memverifikasi keacakan secara fisik (dadu fair, lemparan fair, tanpa manipulasi).
Memverifikasi keadilan dadu:
- Gunakan dadu presisi kelas kasino (tepi tajam, bukan membulat).
- Lempar di permukaan keras dan datar dengan penahan.
- Jangan "menempatkan" dadu — biarkan menggelinding bebas.
- Catat setiap hasil segera dan berurutan.
SafeSeed Seed Phrase Generator memungkinkan Anda memasukkan entropi Anda sendiri (seperti hasil lemparan dadu) untuk menghasilkan seed phrase BIP-39. Ini memungkinkan Anda memverifikasi sumber keacakan sambil tetap mendapat manfaat dari implementasi BIP-39 yang benar dari alat tersebut. Gunakan alat ini secara offline untuk keamanan maksimal — lihat panduan Offline Key Generation kami.
Menguji dan Memverifikasi Keacakan
NIST Statistical Test Suite
NIST SP 800-22 mendefinisikan serangkaian uji statistik untuk mengevaluasi generator angka acak:
- Frequency test — Apakah jumlah 0 dan 1 kira-kira seimbang?
- Block frequency test — Apakah sub-blok bit terdistribusi kira-kira seimbang?
- Runs test — Apakah urutan bit identik berurutan (runs) memiliki panjang yang diharapkan?
- Longest run test — Apakah run terpanjang berada dalam batas yang diharapkan?
- Matrix rank test — Apakah rank matriks biner mengikuti distribusi yang diharapkan?
- Spectral test — Apakah DFT dari urutan bit menunjukkan sifat yang diharapkan?
Uji-uji ini dapat mendeteksi bias dan pola tetapi tidak dapat membuktikan bahwa generator aman. Uji ini hanya dapat mendeteksi kegagalan.
Dieharder Test Suite
Rangkaian uji statistik yang lebih komprehensif yang mencakup uji Diehard asli plus uji tambahan. Tersedia sebagai perangkat lunak open-source di Linux.
Verifikasi Praktis untuk Pengguna
Sebagian besar pengguna tidak dapat menjalankan NIST test suite. Langkah verifikasi praktis:
- Verifikasi sumber — Apakah alat menggunakan
crypto.getRandomValues(),os.urandom(), atau hardware RNG? Periksa source code. - Uji lintas-generasi — Buat beberapa seed phrase dan verifikasi semuanya berbeda setiap kali.
- Tampilan entropi — Beberapa alat menampilkan entropi mentah; verifikasi terlihat acak (tidak ada pola yang jelas).
- Audit open-source — Apakah alat open-source dan sudah diaudit?
Mencampur Sumber Entropi
Praktik terbaik untuk pembuatan kunci berkeamanan tinggi adalah mencampur beberapa sumber entropi:
Final Entropy = Hash(Hardware RNG output || OS CSPRNG output || User dice rolls || Timing data)
Mencampur sumber memastikan bahwa bahkan jika satu sumber terkompromi atau bias, output akhir tetap aman selama setidaknya satu sumber memberikan entropi yang cukup. Ini adalah pendekatan yang digunakan oleh hardware wallet dan alat pembuatan kunci yang dirancang dengan baik.
Pencampuran XOR
Metode pencampuran sederhana adalah XOR: jika Anda punya 256 bit dari sumber A dan 256 bit dari sumber B:
Mixed = A XOR B
Jika A atau B benar-benar acak, hasilnya benar-benar acak. Jika keduanya bias tetapi independen, hasilnya lebih sedikit bias daripada masing-masing sumber.
Pencampuran Hash
Untuk mencampur sumber dengan panjang atau kualitas berbeda, hash semuanya bersama:
Mixed = SHA-256(Source_A || Source_B || Source_C)
Fungsi hash bertindak sebagai entropy extractor, menghasilkan output seragam terlepas dari format input.
Entropi dalam Setup Multi-Signature
Wallet multi-signature menyediakan bentuk redundansi entropi: bahkan jika satu kunci dihasilkan dengan entropi lemah, penyerang juga harus mengompromikan kunci lainnya. Multisig 2-of-3 di mana setiap kunci dihasilkan secara independen memberikan keamanan setara kunci terkuat, bukan yang terlemah.
Ini adalah argumen kuat untuk setup multi-signature dalam penyimpanan bernilai tinggi.
FAQ
Apa itu entropi dalam cryptocurrency?
Entropi adalah ukuran keacakan atau ketidakdapatdiprediksian pada data yang digunakan untuk menghasilkan kunci kriptografis. Dalam cryptocurrency, keamanan private key dan seed phrase Anda sepenuhnya bergantung pada entropi yang cukup. Kunci 256-bit seharusnya berisi 256 bit keacakan asli — jika entropinya lebih rendah, kunci menjadi bisa ditebak.
Berapa banyak entropi yang saya butuhkan untuk wallet yang aman?
Seed phrase BIP-39 12 kata menyediakan 128 bit entropi, dan frasa 24 kata menyediakan 256 bit. Keduanya dianggap aman terhadap serangan brute-force dengan teknologi saat ini. Untuk penyimpanan jangka panjang bernilai tinggi, 256 bit (24 kata) direkomendasikan untuk memberikan margin keamanan maksimum.
Apakah Math.random() aman untuk menghasilkan kunci crypto?
Sama sekali tidak. Math.random() dan PRNG non-kriptografis serupa (seperti random di Python, rand() di C) bersifat deterministik, dapat diprediksi, dan memiliki entropi rendah. Semuanya tidak boleh digunakan untuk pembuatan kunci kriptografis. Selalu gunakan crypto.getRandomValues() di browser, os.urandom() di Python, atau hardware random number generator.
Bisakah saya membuat entropi sendiri dengan memikirkan angka acak?
Tidak. Manusia terkenal buruk dalam menghasilkan angka acak. Studi secara konsisten menunjukkan bahwa rangkaian "acak" yang dipilih manusia memiliki entropi jauh lebih rendah daripada yang terlihat. Gunakan proses fisik (dadu, hardware RNG) atau software RNG yang aman secara kriptografis.
Bagaimana cara memverifikasi bahwa generator angka acak wallet saya aman?
Periksa source code wallet (jika open-source) untuk memverifikasi bahwa ia menggunakan CSPRNG atau hardware TRNG. Cari pemanggilan ke crypto.getRandomValues(), os.urandom(), atau API hardware RNG. Untuk hardware wallet, periksa dokumentasi keamanan dari pabrikan dan laporan audit pihak ketiga.
Apa itu "blockchain bandit" dan apa pelajarannya tentang entropi?
"blockchain bandit" adalah penyerang yang secara sistematis mencuri cryptocurrency dari wallet yang dibuat dengan private key lemah (seperti angka 1, 2, 3, atau kunci yang diturunkan dari kata sandi sederhana). Ini menunjukkan bahwa penyerang secara aktif mengenumerasi kunci berentropi rendah dan menyapu dana apa pun yang mereka temukan. Ini menegaskan pentingnya penggunaan pembuatan angka acak berentropi tinggi.
Apakah generator angka acak hardware wallet dapat dipercaya?
TRNG hardware wallet umumnya dapat dipercaya, tetapi tetap merupakan satu titik kepercayaan. Untuk keamanan maksimum, Anda bisa mencampur output hardware RNG dengan entropi yang diberikan pengguna (lemparan dadu). Beberapa hardware wallet (seperti Trezor dan Coldcard) mendukung pencampuran ini secara native. Ini memastikan bahwa bahkan jika hardware RNG terkompromi, kunci yang dihasilkan tetap aman.
Apakah sistem operasi (Linux, macOS, Windows) memengaruhi keamanan kunci?
Ya. Kualitas dan implementasi CSPRNG OS memengaruhi keamanan kunci. Versi modern Linux, macOS, dan Windows semuanya menyediakan generator angka acak aman secara kriptografis (/dev/urandom, arc4random, BCryptGenRandom). Namun, bug Debian OpenSSL tahun 2006-2008 menunjukkan bahwa kerentanan tingkat OS dapat menurunkan entropi secara katastrofik. Jaga OS Anda tetap diperbarui dan gunakan perangkat lunak yang telah diaudit dengan baik.