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
Let's say your entropy device generated 128 bits entropy in the form of the following hexadecimal number 0x9A8B3C4D5E6F7A8B9C0D1E2F3A4B5C6D. 128 bits entropy is 128 bits of 1s and 0s, when in hexademical form it will be 32 digits after the prefix 0x.
How to we get from this hexadecimal into a 12 or 24 words seed phrase? First you need to convert the hexadecimal to its binary form.
To convert the hexadecimal number 0x9A8B3C4D5E6F7A8B9C0D1E2F3A4B5C6D to its binary representation, you can follow these steps:
Remove the prefix "0x" from the hexadecimal number.
Convert each hexadecimal digit to its binary representation. Here is a conversion table:
HexadecimalBinary00000100012001030011401005010160110701118100091001A1010B1011C1100D1101E1110F1111
Concatenate the binary representations of each hexadecimal digit to obtain the binary representation of the entire number.
Let's apply these steps to convert 0x9A8B3C4D5E6F7A8B9C0D1E2F3A4B5C6D to binary:
Remove the prefix "0x": 9A8B3C4D5E6F7A8B9C0D1E2F3A4B5C6D
Convert each hexadecimal digit to binary:
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
Concatenate the binary representations: 1001 1010 1000 1011 0011 1100 0100 1101 0101 1110 0110 1111 0111 1010 1000 1011 1001 1100 0000 1101 0001 1110 0010 1111 0011 1010 0100 1011 0101 1100 0110 1101
10011010100010110011110001001101010111100110111101111010100010111001110000001101000111100010111100111010010010110101110001101101
4. Divide into 12 groups each 11 bits:
10011010100
01011001111
00010011010
10111100110
11110111101
01000101110
01110000001
10100011110
00101111001
11010010010
11010111000
1101101 (12th bits are used for checksum, we need 4 more bits, we'll get it by running echo shasum -a 256 -0 on terminal as below:
Take the first digit 7 and convert it from hexadecimal to binary representations.
7 = 0111
add above to the 12th bits:
12. 11011010111
Now that we have 12 groups each with 11 bits, we can put them into excel table and get to the final BIP39 words.
Here we just add the individual bits into each cells next to it, the numbers on the top 1023, 512, 256 and so on will be inserted on the cells below if it contains 1 and if the cells below contains 0, the value in it will remain zero, as you will see on the second picture below.
1.
2.
SUM on the right is the result of additions of 1024+0+0+128+64+0+16+0+4+0+0 = 1236
ADD 1 is very simple, just add 1+1236 = 1237
Finally, find the word number 1237 from BIP39 wordlist, that word is 'once'.
Repeate the same process for the remaining bits and we get our final 12 word seed phrase: "once fly battle rubber waste easy ice phrase connect spoil strike sustain".
You can do checksum faster without using excel in here https://learnmeabitcoin.com/technical/mnemonic, you just need to add the 128 bits entropy and it will count the checksum and derive the BIP39 words automatically for you:
The 12 mnemonic words (seed phrase) above can then be used to create a new bitcoin wallet address. Let's try. I am using Electrum wallet in this example:
https://electrum.org/
1. Add seed phrase and select BIP39:
2. Choose derivation path legacy (p2pkh)
3. Add any password of your choosing
4. Voila! It works. Here's your new bitcoin wallet address derived from entropy and seed phrase above. Of course I will never use this wallet, and neither should you.
BIP39 is a wordlist that contains 2048 words in total. This is used as library to create seed phrase. Words can be found here: https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt
It is available in multiple languages.
For 24 words seed phrase or more, the same process is followed, just with more bits of entropy added.
How secure is a 12 word seed phrase?
A 12-word seed phrase in BIP39 standard has 128 bits of entropy, which means that it has a theoretical probability of being cracked of 1 in 2^128, or about 3.4 x 10^38. This is considered to be very secure, and is unlikely to be cracked by any known technology in the foreseeable future.
However, it is important to note that no security measure is perfect. There is always a risk that a 12-word seed phrase could be compromised. If you are concerned about security, you may want to consider using a 24-word seed phrase, which has 256 bits of entropy.
Here are some tips for choosing a secure seed phrase:
Use a hardware wallet to generate your seed phrase. Hardware wallets use a physical source of randomness to generate their seed phrases, which makes them much more secure than seed phrases generated on a computer.
Use a 24-word seed phrase. 24-word seed phrases are much more secure than 12-word seed phrases.
Never type your seed phrase into a computer or mobile device.
Write your seed phrase down on paper or metal plates and store it in a safe place. Do not store your seed phrase in a digital format, as it could be hacked.
Do not share your seed phrase with anyone.
If you think your seed phrase has been compromised, generate a new one immediately.
By following these tips, you can help to protect your cryptocurrency assets.
Here are some additional information about BIP39 seed phrases:
BIP39 seed phrases are generated using a deterministic algorithm, which means that the same random number will always produce the same seed phrase. This makes it possible to recover a wallet if the seed phrase is lost or forgotten.
BIP39 seed phrases can be used to restore wallets on any hardware wallet that supports BIP39.
BIP39 seed phrases are a secure way to store cryptocurrency assets.
Here are some additional things to consider when using a 12-word seed phrase (same applies for 24 or more seed phrases):
Compatibility: Not all wallets support 12-word seed phrases. Make sure that the wallet you are using supports BIP39 before you create your seed phrase.
Human error: It is possible to make a mistake when writing down or typing your seed phrase. Make sure that you check your seed phrase carefully before you store it.
Natural disasters: If your seed phrase is stored in a physical location, it is possible that it could be lost or destroyed in a natural disaster. Consider storing your seed phrase in multiple locations to protect it from this risk.
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:
......
* Follow the rabbit into the deep!
......