Author

Topic: [Challenge] Membuat Custom BIP-39 Mnemonic [Closed] (Read 246 times)

legendary
Activity: 2254
Merit: 2253
From Zero to 2 times Self-Made Legendary
* Challenge ditutup

Dengan pertimbangan: tidak ada satupun partisipan sampai saat ini, sehingga saya asumsikan Challenge ini kurang menarik atau ada kendala bagi calon partisipan dalam menyelesaikan Challenge.



Berikut akan saya jabarkan solusi dari [Challenge] Membuat Custom BIP-39 Mnemonic. Setidaknya bisa menjadi informasi buat rekan-rekan SFI yang sekiranya membutuhkan.


1. The Easy Way

Menggunakan tool Mnemonic Code Converter https://iancoleman.io/bip39/

- Merubah username "abhiseshakana" ke bentuk Binary data (https://www.rapidtables.com/convert/number/ascii-to-binary.html)
Code:
01100001011000100110100001101001011100110110010101110011011010000110000101101011011000010110111001100001
Ukuran 104 bits

- Menyiapkan 152 bits random binary (https://iancoleman.io/entropy_bias_calculator/)

[1] Pilih "Flip a coin"
[2] Tentukan jumlah Bits yang diinginkan (untuk melengkapi 256 Bits Entropy)
[3] Pilih jumlah sample yang diinginkan (1 sample saja sudah cukup)



Didapatkan 152 bits random entropy
Code:
11110111010000000110011100100000111101110100011100110010111011101010101010000001011001010011010111100010010101011001011101001101000001111110110010011011

- Menggabungkan 104 bits "username" entropy dan 152 bits random entropy menjadi 256 bits entropy
Code:
0110000101100010011010000110100101110011011001010111001101101000011000010110101101100001011011100110000111110111010000000110011100100000111101110100011100110010111011101010101010000001011001010011010111100010010101011001011101001101000001111110110010011011

- Tool Mnemonic Code Converter https://iancoleman.io/bip39/[/b][/u]

[1] Checklist Show entropy details
[2] Checklist Binary [0-1]
[3] Paste 256 Bits Entropy ke kolom Entropy



[4] Didapatkan Binary Checksum 00010110
[5] Didapatkan BIP39 Mnemonic:
Code:
gesture battle bottom traffic fire reflect mad history hover autumn source soft author phone slight stem lift claim joy private inquiry loop raven glare



[6] Merubah Derivation Path ke BIP84 (standard derivation path Bech32 Address)



- Tentukan index yang mewakili Hardened 777' (referensi >>> https://github.com/bitcoin/bips/blob/master/bip-0088.mediawiki#matching)
- Hardened index merupakan nilai dari 2147483648 s/d 4294967295 dan dimulai dari Hardened 0'
- Jika index Hardened 0' adalah 2147483648, berarti Hardened 777' memiliki index 2147484425

[7] Tuliskan index 2147484426 yang merupakan index Hardened 777'
[8] Tekan tombol "more rows"
[9] Didapatkan Address, Public Key, WIF Private key dari Derivation Path m/84'/0'/0'/0/777'  (bc1qut46ulkq3v55nxckhruhmyu500f0hnj6sp5f4v)




Menggunakan tool https://learnmeabitcoin.com/technical/mnemonic

[1] Paste 256 Bits Entropy ke kolom Entropy
[2] Didapatkan Checksum 00010110
[3] Didapatkan Mnemonic:
Code:
gesture battle bottom traffic fire reflect mad history hover autumn source soft author phone slight stem lift claim joy private inquiry loop raven glare



- https://learnmeabitcoin.com/technical/derivation-paths (Section Example)

[4] Tuliskan Mnemonic
[5] Tuliskan Path m/84h/0h/0h/0/777h
[6] Didapatkan address dari Path m/84h/0h/0h/0/777h: bc1qut46ulkq3v55nxckhruhmyu500f0hnj6sp5f4v




2. The Hard Way

- 256 Bits Entropy
Code:
0110000101100010011010000110100101110011011001010111001101101000011000010110101101100001011011100110000111110111010000000110011100100000111101110100011100110010111011101010101010000001011001010011010111100010010101011001011101001101000001111110110010011011

- Merubah 256 Bits Entropy ke dalam format Hex 32 bytes (https://www.rapidtables.com/convert/number/binary-to-hex.html)
Code:
6162686973657368616b616e61f7406720f74732eeaa816535e255974d07ec9b

- Menggunakan Node.JS untuk mencari Checksum
Code:
const bitcoin = require('bitcoinjs-lib');
const crypto = require('crypto');
const HexEntropy = Buffer.from('6162686973657368616b616e61f7406720f74732eeaa816535e255974d07ec9b', 'hex');
const HashEntropy = bitcoin.crypto.sha256(HexEntropy);
console.log(HashEntropy.toString('hex'));
Code:
16aaec39868471212bbba941e01de36bc5b6740f0bca54074c0fa3eb698184dd
Checksum = 2 bytes pertama dari SHA-256 Entropy Hexadecimal = 16
Merubah [hex] 16 ke Binary Checksum = 00010110

- Menggabungkan 256 bits entropy dan 8 bits checksum menjadi 264 bits entropy
Code:
011000010110001001101000011010010111001101100101011100110110100001100001011010110110000101101110011000011111011101000000011001110010000011110111010001110011001011101110101010101000000101100101001101011110001001010101100101110100110100000111111011001001101100010110

- Grouping Entropy @11 bits
Code:
01100001011 00010011010 00011010010 11100110110 01010111001 10110100001 10000101101 01101100001 01101110011 00001111101 11010000000 11001110010 00001111011 10100011100 11001011101 11010101010 10000001011 00101001101 01111000100 10101011001 01110100110 10000011111 10110010011 01100010110

- Convert setiap 11 bits ke Decimal agar bisa didapatkan Base Word Indexes
Code:
779, 154, 210, 1846, 697, 1441, 1069, 865, 883, 125, 1664, 1650, 123, 1308, 1629, 1706, 1035, 333, 964, 1369, 934, 1055, 1427, 790

- Untuk mendeskripsikan BIP-39 Word Indexes, maka untuk setiap Base Word Indexes harus ditambah dengan +1
Code:
780, 155, 211, 1847, 698, 1442, 1070, 866, 884, 126, 1665, 1651, 124, 1309, 1630, 1707, 1036, 334, 965, 1370, 935, 1056, 1428, 791

- Berdasarkan BIP-39 Word Indexes, didapatkan mnemonic
Code:
gesture battle bottom traffic fire reflect mad history hover autumn source soft author phone slight stem lift claim joy private inquiry loop raven glare

- Mendapatkan Bech32 Address pada Hardened Index 777' menggunakan Node.JS
Code:
const bitcoin = require('bitcoinjs-lib');
const bip39 = require('bip39');
const ecc = require('tiny-secp256k1');
const { BIP32Factory } = require('bip32');
const bip32 = BIP32Factory(ecc);
const mnemonic = 'gesture battle bottom traffic fire reflect mad history hover autumn source soft author phone slight stem lift claim joy private inquiry loop raven glare';
const seed = bip39.mnemonicToSeedSync(mnemonic);     
const root = bip32.fromSeed(seed);   
const path = "m/84'/0'/0'/0/777'";   
const child = root.derivePath(path);
const { address } = bitcoin.payments.p2wpkh({ pubkey: child.publicKey });
console.log('Bech32 Address: ' + address);

Bech32 Address pada Hardened Index 777' = bc1qut46ulkq3v55nxckhruhmyu500f0hnj6sp5f4v

- Mendapatkan Bech32 Address pada hardened index 777' menggunakan python
Code:
from hdwallet import HDWallet
from hdwallet import BIP84HDWallet
from hdwallet.cryptocurrencies import BitcoinMainnet
from hdwallet.derivations import BIP84Derivation
from hdwallet.utils import generate_mnemonic, is_mnemonic
from hdwallet.cryptocurrencies import BitcoinMainnet
from hdwallet.derivations import BIP84Derivation
MNEMONIC: str = "gesture battle bottom traffic fire reflect mad history hover autumn source soft author phone slight stem lift claim joy private inquiry loop raven glare"
LANGUAGE: str = "english"
assert is_mnemonic(mnemonic=MNEMONIC, language=LANGUAGE)
BIP84_HDWallet: BIP84HDWallet = BIP84HDWallet(cryptocurrency=BitcoinMainnet, account=0, change=False, address=(777, True))
BIP84_HDWallet.from_mnemonic(mnemonic=MNEMONIC, language=LANGUAGE)
print("Bech32 Address:", BIP84_HDWallet.p2wpkh_address())

Bech32 Address: bc1qut46ulkq3v55nxckhruhmyu500f0hnj6sp5f4v
legendary
Activity: 2254
Merit: 2253
From Zero to 2 times Self-Made Legendary
Challenge ini kalo dikerjakan secara manual, mulai dari proses flipping coin sampai melakukan coding sendiri pasti akan cukup sulit dan panjang prosesnya. Namun untuk menyelesaikan Challenge tidak harus (dan tidak wajib) melakukannya secara manual. Bahkan saya lihat dari beberapa postingan diatas ada yang sudah memberikan informasi yang sebenarnya merupakan kisi-kisi untuk menyelesaikan Challenge ini secara menyeluruh.

Oleh karena itu, dengan pertimbangan ada opsi yang mudah buat menyelesaikan Challenge yang bisa diselesaikan hanya menggunakan Tools Online, maka untuk reward challenge hanya terbatas pada 3 merit buat yang bisa menyelesaikan tantangan.
legendary
Activity: 2660
Merit: 1261
-snip-
Si punya thread aj lagi (M.....) WKWKKW

Nanti ane coba pantau2 dulu sekalian explorer, maklum masalah gini2 an agak kurang cepet ama lola. Coba kita liat siapa yang bakal entry duluan, biasanya udah pasti langganan @Husna_QA. Untuk yang lain belum.

Ane pribadi dari challenge sebelumnya, lebih idep yang sebelumnya dari pada ini. Tapi entah yang entry cuman 3 doang WKWKWKWKW.
legendary
Activity: 2254
Merit: 2253
From Zero to 2 times Self-Made Legendary
Lebih gak familiar masalah coding juga ~xd

Ane pribadi mau test cuman kayaknya emang harus install beberapa library dulu buat created ini, agak sedikit pusing kalau masalah coding2. Kemaren2 ajh search dapet bahan yang make dari phyton dll.

Cuman yah ane skip ~xd.
Kagak ada pake coding, bisa manual, cukup pahami aja prosesnya.
Tutorial ada di sini: https://bitcointalksearch.org/topic/m.41403564

Ane pengen ikutan tapi terkendala M... alias males karena 256 bits / 24 kata (kalau manual pegel).
Yuk yg butuh merit seharusnya cukup worth it ini.
Kalo prosedur untuk menghasilkan mnemonic, checksum dan sampai didapatkan sebuah address jelas harus melalui proses coding, namun untuk pengerjaan Challenge ini tetap bisa didapatkan hasilnya meski tanpa harus melakukan coding sendiri. Bahkan tanpa perlu repot-repot ngelempar coin sebanyak 256 kali (dikurangi binary "username") dan tanpa harus mencocokan 24 kata-kata yang match satu persatu  Grin
copper member
Activity: 2324
Merit: 2142
Slots Enthusiast & Expert
Lebih gak familiar masalah coding juga ~xd

Ane pribadi mau test cuman kayaknya emang harus install beberapa library dulu buat created ini, agak sedikit pusing kalau masalah coding2. Kemaren2 ajh search dapet bahan yang make dari phyton dll.

Cuman yah ane skip ~xd.
Kagak ada pake coding, bisa manual, cukup pahami aja prosesnya.
Tutorial ada di sini: https://bitcointalksearch.org/topic/m.41403564

Ane pengen ikutan tapi terkendala M... alias males karena 256 bits / 24 kata (kalau manual pegel).
Yuk yg butuh merit seharusnya cukup worth it ini.
legendary
Activity: 2366
Merit: 2054
Njirrr,,, baru baca ininya aja pala udh pusing maksudnya itu apaan dah, asing semua istilahnya uy.. ijin sersing sersing dulu gan kali aja bisa nemu caranya. Meski reward_nya cuma 3 tapi ane yakin nanti bakalan jadi 5 karena disupport juga ama agan @Husna QA, mention dulu orangnya kali aja beneran kan...  Cheesy
Kalau mau lebih mudah sebaiknya sampeyan main-main dulu di https://iancoleman.io/bip39/, di sana sampeyan akan lebih banyak belajar cara generate word mnemonic seed sesuai keinginan sampeyan. Nah nanti ketika mengunjungi website tersebut sampeyan centang tuh "show entropy details" untuk melihat proses lebih detailnya.
legendary
Activity: 2660
Merit: 1261
-snip-
Lebih gak familiar masalah coding juga ~xd

Ane pribadi mau test cuman kayaknya emang harus install beberapa library dulu buat created ini, agak sedikit pusing kalau masalah coding2. Kemaren2 ajh search dapet bahan yang make dari phyton dll.

Cuman yah ane skip ~xd.
legendary
Activity: 2254
Merit: 2253
From Zero to 2 times Self-Made Legendary
Njirrr,,, baru baca ininya aja pala udh pusing maksudnya itu apaan dah, asing semua istilahnya uy.. ijin sersing sersing dulu gan kali aja bisa nemu caranya. Meski reward_nya cuma 3 tapi ane yakin nanti bakalan jadi 5 karena disupport juga ama agan @Husna QA, mention dulu orangnya kali aja beneran kan...  Cheesy
Terlihat susah karena mungkin agan belum familiar dengan istilah maupun kata-kata yang digunakan, namun saya kira kalo hal tersebut sudah dipelajari maka tidak akan sulit bagi agan untuk memahami maksud dari istilah yang ada di Task maupun Ketentuan Challenge. Seinget saya sudah pernah ada Thread yang memberikan tutorial bagaimana Mnemonic (BIP39) dibuat, dan seharusnya itu bisa dijadikan bahan pembelajaran, serta mencari sumber referensi lain jika sekiranya ada yang kurang jelas.
sr. member
Activity: 350
Merit: 343
Jolly? I think I've heard that name before. hmm
Deskripsi Challenge
Membuat Custom BIP-39 Mnemonic dengan basis Entropy yang berasal dari (Binary data) "Username Bitcointalk"

Njirrr,,, baru baca ininya aja pala udh pusing maksudnya itu apaan dah, asing semua istilahnya uy.. ijin sersing sersing dulu gan kali aja bisa nemu caranya. Meski reward_nya cuma 3 tapi ane yakin nanti bakalan jadi 5 karena disupport juga ama agan @Husna QA, mention dulu orangnya kali aja beneran kan...  Cheesy
legendary
Activity: 2254
Merit: 2253
From Zero to 2 times Self-Made Legendary

[Challenge] Membuat Custom BIP-39 Mnemonic



Deskripsi Challenge
Membuat Custom BIP-39 Mnemonic dengan basis Entropy yang berasal dari (Binary data) "Username Bitcointalk"

Tasks Challenge
  • Membuat Custom BIP-39 Mnenomic
  • Menentukan Checksum Entropy (8 bits)
  • Membuat Bech32 (Segwit) Address pada index Hardened 777' / 777h (Bagian dari Path: Bitcoin, first account, external chain (receiving address))

Ketentuan Challenge
  • BIP-39 Mnenomic merupakan susunan 24 kata (English - BIP39 Wordlists)
  • BIP-39 Mnenomic berasal dari 264 bits entropy
  • Komposisi 264 bits entropy = 256 bits + 8 bits (Checksum)
  • Komposisi 256 bits entropy = "Username" bits entropy + random bits entropy
  • 8 bits (Checksum) harus sesuai ketentuan BIP-39

Format Posting
Code:
Username =
BIP-39 Mnenomic =
Entropy Checksum (8 bits) =
Bech32 Address (Hardened index 777') =

Hints
Username "abhiseshakana" mewakili 104 bits entropy, sehingga dibutuhkan 152 bits random entropy untuk membuatnya menjadi 256 bits entropy. Dari 256 bits yang telah dibuat didapatkan 8 bits Checksum dan digunakan untuk melengkapi keseluruhan 264 bits Entropy. Setelah Mnemonic dibuat maka akan bisa didapatkan Bech32 Address pada index Hardened 777' (777h) yang diturunkan dari BIP32 Extended Key.

Reward
Untuk masing-masing 10 partisipan tercepat akan mendapatkan @3 Merit sesuai dengan Ketentuan dan Task Challenge

Partisipan
  • All Rank (Newbie s/d Legendary)
  • No Alts Account

Note
  • Tingkat kesulitan Challenge Normal, hanya perlu memahami "Task" dan "Ketentuan" secara teliti saja
  • Bagi partisipan yang jika binary data dari "username" memiliki ukuran lebih dari 256 bits, maka hanya gunakan 256 bits pertama dari binary data yang dihasilkan
  • Please, Respect the topic. Jadi buat siapa saja yang berhasil memecahkan Challenge, saya harap untuk tidak membeberkan caranya secara detail karena itu akan membuat Challenge menjadi tidak seru lagi. Namun kalo hanya memberikan kisi-kisi atau hint secara tipis sih tidak masalah

Disclaimer
  • Pembuatan Custom BIP-39 Mnemonic hanya untuk kepentingan Challenge saja
  • Sangat tidak disarankan untuk mempergunakannya dalam aktifitas di luar Challenge ini
  • Do-With-Your-Own-Risk
Jump to: