Skip to main content

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: 

  1. 10011010100  

  2. 01011001111  

  3. 00010011010  

  4. 10111100110  

  5. 11110111101  

  6. 01000101110  

  7. 01110000001  

  8. 10100011110  

  9. 00101111001  

  10. 11010010010  

  11. 11010111000  

  12. 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

Popular posts from this blog

Apakah Kita Bisa Berenang di Kolam Penyimpanan Sisa Bahan Bakar Nuklir? Spent Nuclear Fuel Pool - The Forbidden Pool

Ini adalah foto kolam penyimpanan sisa bahan bakar reaktor nuklir. Katanya kalau renang di sana anda tidak akan kena radiasi mematikan kecuali mendekati batang-batang nuklir (rods) yang di simpan di peti di dasar kolam. Suhu air dalam kolam juga tidak begitu panas sekitar 35 derajat Celcius karena kolam selalu di isi ulang dengan air dingin murni secara berkala. Sementara di dalam reaktor yang aktif beroprasi batang2 nuklir (rods) bisa membuat air mendidih sampai 300 derajat Celcius sehingga menghasilkan uap yang di alirkan untuk memutar turbin dan menghasilkan listrik. Jika air pendingin tidak di ganti secara berkala itu bisa mengakibatkan bencana nuclear meltdown seperti yang terjadi di Chernobyl dimana reaktor meledak karena kelebihan uap dan batang2 nuklir tersebut melelehkan bangunan reaktor nuklir yang di desain untuk mengcontain mereka. Tapi seandainya anda nekat untuk renang di sana kemungkinan besar anda akan mati di tembak security sebelum nyebur ke kolam. "U

Digital Signature: Bagaimana Private Key diverifikasi Bitcoin Network tanpa membeberkan Private Key tersebut.

Untuk Membahas topik ini sebaiknya anda memahami dulu apa itu Private Key dan Public Key dalam ECDSA. Itu sudah saya bahas cukup jelas disini. Digital Signature (tanda tangan digital) memiliki dua bagian: 1. Bagian acak. 2. Bagian Signature. Ini terdiri dari Private Key + Data transaksi yang sedang kita buat tanda tangan digitalnya.   Bagian acak Mulailah dengan menghasilkan sebuah angka acak . Kemudian kalikan angka ini dengan titik generator pada kurva eliptik (titik generator yang sama digunakan saat membuat kunci publik di ECDSA). Titik generator selalu sama pada setiap operasi ECDSA bitcoin. Bagian acak dari tanda tangan digital adalah titik pada kurva yang didapatkan diatas. Tapi kita ambil koordinat x-nya saja, ini kita sebut sebagai (r) :   Ini pada dasarnya sama dengan membuat kunci privat dan kunci publik. Tapi di sini kami melakukannya untuk menambahkan elemen acak ke tanda tangan digital kami. Angka acak itu bisa didapat dari sumber entropi yang bermacam-macam dari aplik