ENTROPY: Bagaimana cara hardware wallet mendapat angka acak untuk dijadikan seed phrase (private key)?
Setiap kali anda membeli hp baru pasti diminta untuk memasukkan password atau pattern rahasia yang hanya anda yang mengetahuinya, karena jika diketahui orang lain, mereka bisa membuka hp anda dan melihat semua isinya, jika password aplikasi2 bank anda di hp tersebut ketahuan mereka bisa mencuri uang anda juga.
Itulah sebabnya nomor rahasia atau password sangat penting untuk dirahasiakan dan tidak mudah ditebak. Jika password anda hanya berupa tanggal lahir anda atau anak anda, maka tentu saja itu akan sangat mudah ditebak karena data pribadi penduduk Indonesia sangat sering dibocorkan, nama, alamat, tempat tanggal lahir sudah pasti dapat diketahui, banyak juga yang mempamerkan itu semua di media sosial mereka. Jadi password pribadi harus kombinasi huruf, angka, dan simbol yang tidak mudah ditebak oleh orang lain. Apa itu? Entahlah, mungkin nama tempat yang hanya anda yang ketahui ditambah angka dan simbol acak, atau apa saja, semakin sulit ditebak dan semakin panjang kombinasi huruf angka dan simbolnya, maka semakin bagus, karena semakin susah ditebak.
Password sepanjang 8 karakter yang berisi huruf besar, kecil, angka dan simbol bisa didebak dengan komputer saat ini dengan cepat, dalam waktu kurang dari satu jam komputer yang menggunakan GPU terbaru bisa menebak semua kombinasi Password tersebut. Komputer itu ya menebak semua kombinasi abjad, angka, dan simbol itu, dari AAAAAAAA, AAAAAAAa, AAAAAAaa,... AAAABBBB, AAAABBbb, dst. Dengan GPU terbaru mereka bisa menebak miliaran kombinasi 8 karakter per detik, jadi jika password anda adalah AjXz801! maka bisa dipastikan itu akan ditebak dengan cepat.
Ini adalah tabel perbandingan berapa ceptat GPU RTX 2080, RTX 3090, dan RTX 4060 bisa menebak password, jika 8 karakter acak termasuk huruf besar, huruf kecil, angka, dan simbol yang umum dipakai ^*%$!&@#.
Sumber info: https://www.hivesystems.io/blog/are-your-passwords-in-the-green?
Ada sedikit detail yang perlu saya jelaskan, ketika anda memasukkan password kedalam sebuah perangkat keras seperti Laptop, HP, Komputer, dll. Password anda itu disimpan didalam memori perangkat keras tersebut dalam bentuk hash. Hash adalah angka acak yang dihasilkan dari password anda.
Misalnya password anda adalah Love123$
Love123$ dimasukkan kedalam proses hashing MD5
Akan menghasilkan 6f0e0bed7e9f0bb75711b1d3731728ea
Jika Love123! di hash dengan proses hashing SHA1 akan menghasilkan: 6a474e494c7153241cc1d7d438bc8697b8bf054e
Ada banyak software hashing selain MD5 dan SHA1, ada SHA256, SHA-384, SHA-512, BLAKE2, SpongeHash, ETHASH, Kawpow, dan lain-lain. Masing2 hashing algorithm atau software akan menghasilkan deretan hexadecimal yang berbeda walaupun inputnya sama. Intinya mereka itu mengacak data yang dimasukkan dengan fungsi yang hanya berjalan satu arah, dimana hasil akhir proses hashing tidak bisa dibalik/reverse, jika anda mengetahui 6a474e494c7153241cc1d7d438bc8697b8bf054e adalah hasil hash SHA1, anda tidak bisa merumuskan atau menghitung dari deretan hexadecimal untuk mendapat input awal yaitu Love123! karena dalam proses hashing terjadi banyak sekali pertambahan, perkalian, penambahan, penghilangan data. Sehingga proses penghitungan berbalik arah mustahil dilakukan. Shingga cara hacker menebak password adalah dengan brute force yaitu menebak semua kombinasi huruf dan angka sampai menemukan target yang diinginkan. Jadi software hacker seperti Hashcat akan menebak dimulai dari 00000000, 00000001, 00000002,... 0000Abc!... BBBbbb!, dan seterusnya sebanyak berapapun macam kombinasi angka, huruf, dan simbol yang ada, bisa triliunan triliunan kali.
Hasil hash SHA1 dari:
00000000 = 70352f41061eda4ff3c322094af068ba70c3b38b
00000001 = 1d102a8cf9879ceec3a7b26104b12e875c13d6a7
00000002 = a8eddff2ec7d016b82d3e187c86b100e11502aaa
0000Abc! = e7df74a06bad734e25c21a0f7bb5b8aa8ef842e1
BBBbbb! = 61c71fc427be7d05f066df7013a4dcefd2934e71
.
dan seterusnya selama triliunan kali
.
sampai ketemu
.
Love123$ = 6a474e494c7153241cc1d7d438bc8697b8bf054e
Bisa coba sendiri hashing disini: https://www.md5hashgenerator.com/
Jadi begitulah proses hashing dan brute force. Sehingga semakin banyak komputer dan kemampuan komputasinya semakin cepat target tersebut ditemukan. Untuk memahami betapa rumit proses hashing berikut ini adalah video proses hashing SHA256.
link selengkapnya: https://github.com/in3rsha/sha256-animation
Lalu hubungannya dengan Entropi apa?
Dalam dunia bitcoin ada istilah "Not your keys, not your coins!" atau kalau bukan kunci anda berarti bukan koin milik anda.
Cara agar memiliki kunci sendiri atas kepemilikan koin, harus disimpan secara offline dengan menggunakan hardware wallet atau sering juga disebut cold wallet. Kenapa harus offline? Karena kalau online berarti jika perangkat yang online tersebut diretas atau diakses orang yang niat mencuri, maka koin anda bisa diambil mereka. Ini termasuk exchange seperti Binance, Indodax, dll. Karena jika mereka diretas atau jika Pegawai atau Boss exchange tersebut ingin kabur dengan membawa koin anda, bisa saja mereka mencuri koin anda yang disimpan di exchange tersebut, ini sudah sering terjadi, kasus FTX dan MtGox contohnya.
Ketika anda membeli pertama kali membuka dan menghidupkan hardware wallet, dia akan memberikan pilihan untuk:
A. Setup wallet baru atau (Initialize).
B. Restore wallet lama (Recover).
*
Source: https://help.blockstream.com/hc/en-us/articles/900006223446
Ketika anda memilih New, harware wallet akan menciptakan deretan angka acak baru yang kemudian akan diubah kedalam bentuk 12 atau 24 kata-kata (seed phrase) agar lebih mudah diingat.
Sumber angka yang acak itulah yang disebut entropy. Entropy tidak boleh berasal dari daftar angka yang dapat dipilih, apalagi dari rumus yang dapat diprediksi. Jadi kuncinya sumber entropy harus berasal dari eksternal, diluar hardware dan software yang digunakan, agar tidak ada mekanisme penciptaan entropy yang predeterministik atau ditentukan sebelumnya. Karena sekali lagi entropy itu harus tidak bisa ditebak sebelumnya.
Beberapa contoh sumber entropy dalam hardware blockstream jade:
User input (input pengguna)
CPU counters*
Battery state (kondisi battery)
Ambient temperature (temperatur ruangan)
Multiple images taken with camera during boot (foto yang diambil kamera)
Built-in cryptographic-strength hardware number generator (random number generator yang ada didalam hardware)
Entropy from the Blockstream Green companion app (aplikasi yang terintegrasi dengan wallet
* CPU modern seringkali dilengkapi dengan generator bilangan acak berbasis
perangkat keras alias Random Number Generator (RNG) yang memanfaatkan berbagai sumber entropi,
seperti thermal noise atau peristiwa yang tidak dapat diprediksi didalam proses CPU.
RNG ini menghasilkan aliran kontinu bit-bit acak. CPU counter dapat digunakan untuk mengukur karakteristik tertentu dari
sumber entropi ini. Misalnya, mereka dapat melacak variasi waktu antara
peristiwa, fluktuasi tegangan, atau sifat fisik lainnya yang
berkontribusi pada keacak-acakan. Dengan mengamati sifat-sifat ini, CPU
counter dapat memberikan perkiraan tentang entropi atau keacak-acakan
yang tersedia. Dan dengan itu dia dapat memberikan angka acak sebagai sumber entropy.
Generator bilangan acak kriptografis berbasis perangkat keras
bawaan (CRNG) memperoleh entropi dari berbagai sumber, salah satunya adalah
radio yang terpasang (digunakan untuk Bluetooth). Ketika radio
dinonaktifkan dengan firmware "noradio" yang opsional (dapat dipilih dalam
aplikasi pendamping Green), CRNG kehilangan sumber tersebut dan, oleh
karena itu, mengalami pengurangan entropi. Untuk menanggulangi hal ini,
kami menggunakan panggilan API ESP32 yang disebut
"bootloader_random_enable()" untuk mengambil sampel kebisingan radio
mentah hanya saat booting, yang kemudian ditambahkan ke dalam kolam
entropi bersama dengan sumber-sumber yang disebutkan di atas sebelumnya.
Ketika Blockstream Jade diaktifkan, digunakan sebuah akumulator yang mirip dengan yang digunakan oleh Bitcoin Core. Ini menyimpan sebuah state berukuran 32 byte yang dihasilkan oleh fungsi hash SHA512 dari state sebelumnya bersama dengan sumber-sumber entropi yang disediakan di atas.
Hasil dari SHA512 dibagi menjadi dua bagian:
1. Setengah menjadi state baru berukuran 32 byte.
2. Setengah disediakan sebagai entropi yang diminta dan disuplai ke fungsi entropi BIP39 standar untuk pemulihan frase. Kode yang dipanggil ada disini.
Fungsi hash ini dipanggil setiap kali entropi diminta serta setiap kali tombol atau roda blockstream jade disentuh.
Jadi entropi dihasilkan dari banyak sumber eksternal dan internal
untuk hasil maksimal dan diulang setiap kali tombol atau roda hardware disentuh. Disini blockstream jade tidak hanya menggunakan
CPU Counter, Battery State, Ambient Temperature, dan CRNG saja, tetapi
kombinasi dari semuanya.
Berikut adalah snipped dari kode yang digunakan untuk memperoleh entropi, kodenya sangat panjang, selengkapnya bisa cek sendiri disni.
Jika anda kebingungan apa arti dari kode-kode tersebut untungnya sekarang anda bisa bertanya ke ChatGPT.
Kode menarik yang memanggil entropi dari CPU counter:
Seperti apa rupa kode-kode lainnya didalam software blockstream jade yang memproses entropi tersebut? bisa dilihat disini, ini saya yang bertanya ke developer blockstream jade dan dia menjawab dengan sangat lengkap: https://github.com/Blockstream/Jade/issues/69
Mari kita asumsikan perangkat entropi Anda menghasilkan entropi sebanyak 128 bit dalam bentuk angka heksadesimal berikut: 0x9A8B3C4D5E6F7A8B9C0D1E2F3A4B5C6D. 128 bit entropi adalah 128 digit 1 dan 0, ketika dalam bentuk heksadesimal akan terdiri dari 32 digit setelah awalan 0x.
Bagaimana kita bisa mendapatkan seed phrase berupa 12 atau 24 kata dari angka heksadesimal ini?
Pertama, Anda perlu mengonversi angka heksadesimal ke bentuk biner.
Untuk mengonversi angka heksadesimal 0x9A8B3C4D5E6F7A8B9C0D1E2F3A4B5C6D ke representasi biner, ikuti langkah-langkah berikut:
1. Hapus awalan "0x" dari angka heksadesimal.
2. Konversi setiap digit heksadesimal ke representasi biner. Berikut adalah tabel konversi:
Hex Biner
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111
3. Gabungkan representasi biner dari setiap digit heksadesimal untuk mendapatkan representasi biner dari seluruh angka.
Mari terapkan langkah-langkah ini untuk mengonversi 0x9A8B3C4D5E6F7A8B9C0D1E2F3A4B5C6D ke biner:
1. Hapus awalan "0x": 9A8B3C4D5E6F7A8B9C0D1E2F3A4B5C6D.
2. Konversi setiap digit heksadesimal ke biner:
9 -> 1001
A -> 1010
8 -> 1000
B -> 1011
3 -> 0011
C -> 1100
4 -> 0100
D -> 1101
5 -> 0101
E -> 1110
6 -> 0110
F -> 1111
7 -> 0111
A -> 1010
8 -> 1000
B -> 1011
9 -> 1001
C -> 1100
0 -> 0000
D -> 1101
1 -> 0001
E -> 1110
2 -> 0010
F -> 1111
3 -> 0011
A -> 1010
4 -> 0100
B -> 1011
5 -> 0101
C -> 1100
6 -> 0110
D -> 1101
3. Gabungkan semua representasi biner:
10011010100101011001111000100110101011110011011101111010100010111001110000011010001111000101111001110100100101101101110001101101.
4. Bagi menjadi 12 grup dengan masing-masing 11 bit:
10011010100
01011001111
00010011010
10111100110
11110111101
01000101110
01110000001
10100011110
00101111001
11010010010
11010111000
1101101 (bit ke-12 digunakan untuk checksum, kita membutuhkan 4 bit lagi, kita dapatkannya dengan menjalankan command echo … shasum -a 256 -0 di terminal seperti di bawah ini:
Ambil digit pertama 7 dan konversikan dari heksadesimal ke representasi biner.
7 = 0111
Tambahkan di atas ke bit ke-12:
12. 11011010111
Sekarang kita memiliki 12 grup masing-masing dengan 11 bit, kita dapat memasukkannya ke tabel Excel dan mendapatkan kata-kata BIP39 akhir.
Di sini, kita hanya menambahkan bit individu ke setiap sel di sebelahnya, angka di atas 1023, 512, 256, dan seterusnya akan dimasukkan di sel di bawahnya jika mengandung 1, dan jika sel di bawahnya mengandung 0, nilainya tetap nol, seperti yang akan Anda lihat pada gambar kedua di bawah ini.
1.
2.
SUM di sebelah kanan adalah hasil penjumlahan 1024+0+0+128+64+0+16+0+4+0+0 = 1236.
ADD 1 sangat sederhana, cukup tambahkan 1+1236 = 1237.
Akhirnya, temukan kata ke-1237 dari daftar kata BIP39, kata tersebut adalah 'once'.
Ulangi proses yang sama untuk bit yang tersisa dan Anda akan mendapatkan seed phrase 12 kata: "once fly battle rubber waste easy ice phrase connect spoil strike sustain".
Anda dapat melakukan perhitungan checksum lebih cepat tanpa menggunakan Excel di sini https://learnmeabitcoin.com/technical/mnemonic, Anda hanya perlu menambahkan 128 bit entropi dan itu akan menghitung checksum dan mendapatkan kata-kata BIP39 secara otomatis untuk Anda.
12 kata sandi (seed phrase) di atas kemudian dapat digunakan untuk membuat alamat wallet Bitcoin baru. Mari kita coba. Saya menggunakan wallet Electrum sebagai contoh ini: https://electrum.org/
1. Tambahkan seed phrase dan pilih BIP39:
2. Pilih jalur derivasi (p2pkh):
3. Tambahkan kata sandi pilihan Anda (bebas apa saja):
4. Voila! Berhasil. Inilah alamat wallet Bitcoin baru Anda yang berasal dari entropi dan seed phrase di atas. Tentu saja, saya tidak akan menggunakan wallet ini, dan Anda juga sebaiknya tidak melakukannya.
BIP39 adalah daftar kata yang berisi total 2048 kata. Ini digunakan sebagai kamus untuk membuat seed phrase. Semua kata-kata tersebut dapat ditemukan di sini: https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt
Tersedia dalam beberapa bahasa.
Untuk seed phrase 24 kata atau lebih, proses yang sama diikuti, hanya dengan penambahan entropi yang lebih banyak.
Seberapa aman seed phrase 12 kata?
Seed phrase 12 kata dalam standar BIP39 memiliki 128 bit entropi, yang berarti memiliki probabilitas teoritis dapat diretas sebesar 1 dari 2^128, atau sekitar 3.4 x 10^38. Ini dianggap sangat aman, dan tidak mungkin ditembus oleh teknologi yang diketahui dalam waktu yang dapat diprediksi.
Namun, penting untuk dicatat bahwa tidak ada langkah keamanan yang sempurna. Selalu ada risiko bahwa seed phrase 12 kata dapat diretas. Jika Anda khawatir tentang keamanan, Anda sebaiknya pertimbangkan untuk menggunakan seed phrase 24 kata, yang memiliki 256 bit entropi.
Berikut adalah beberapa tips untuk memilih seed phrase yang aman:
Gunakan hardware wallet untuk menghasilkan seed phrase Anda. Hardware wallet menggunakan banyak kombinasi sumber keacakan fisik untuk menghasilkan seed phrase mereka, yang membuatnya jauh lebih aman daripada seed phrase yang dihasilkan di komputer.
Gunakan seed phrase 24 kata. Seed phrase 24 kata jauh lebih aman daripada seed phrase 12 kata.
Jangan mengetik seed phrase Anda ke dalam komputer atau perangkat seluler.
Tulis seed phrase Anda di atas kertas atau pelat logam dan simpan di tempat yang aman. Jangan menyimpan seed phrase Anda dalam format digital, karena bisa diretas.
Jangan bagikan seed phrase Anda kepada siapa pun.
Jika Anda menganggap seed phrase Anda telah disusupi, segera buat yang baru.
Dengan mengikuti tips ini, Anda dapat membantu melindungi aset kriptocurrency Anda.
Berikut adalah beberapa informasi tambahan tentang seed phrase BIP39:
Seed phrase BIP39 dihasilkan menggunakan algoritma deterministik, yang berarti bahwa nomor acak yang sama akan selalu menghasilkan seed phrase yang sama. Ini memungkinkan untuk memulihkan wallet jika seed phrase hilang atau terlupa.
Seed phrase BIP39 dapat digunakan untuk memulihkan wallet pada setiap hardware wallet yang mendukung BIP39.
Seed phrase BIP39 adalah cara yang aman untuk menyimpan aset kriptocurrency.
Berikut adalah beberapa hal tambahan yang perlu dipertimbangkan ketika menggunakan seed phrase 12 kata (berlaku juga untuk seed phrase 24 kata atau lebih):
Kompatibilitas: Tidak semua wallet mendukung seed phrase 12 dan 24 kata. Pastikan wallet yang Anda gunakan mendukung BIP39 sebelum Anda membuat seed phrase Anda.
Kesalahan manusia: Kemungkinan membuat kesalahan saat menulis atau mengetik seed phrase Anda. Pastikan Anda memeriksa seed phrase Anda dengan teliti sebelum menyimpannya.
Bencana alam: Jika seed phrase Anda disimpan di lokasi fisik, seperti kertas atau pelat logam, pastikan Anda melindunginya dari bencana alam, seperti kebakaran, banjir, atau gempa bumi.
Pewarisan: Jika Anda berencana mewariskan aset kriptocurrency Anda, pastikan Anda memberikan instruksi yang jelas tentang cara menggunakan seed phrase Anda kepada pewaris Anda.
Jadi, meskipun seed phrase 12 kata dalam BIP39 dianggap aman, selalu bijak untuk mengambil tindakan pencegahan yang tepat untuk melindungi aset kriptocurrency Anda.
Fun fact: Anda bisa menciptakan 128 bit entropi dengan melempar dadu, agar menghemat waktu anda bisa melempar 8 biji dadu secara bersamaan sebanyak 16 kali. Ini contoh cara menciptakan entropi dengan dadu: https://www.youtube.com/watch?v=LxTkLwpV1Po&t=2315s
......
* Follow the rabbit into the deep!
......
Comments
Post a Comment