Pada saat pembuatan address pada walet Metamask atau wallet web3 lainnya, public key selalu tidak ditampilkan walaupun sebenarnya sudah dibuat.
Ini menjadi masalah tersendiri jika kita ingin memanfaatkan key ini untuk percakapan dengan enkripsi asimetri.
Address yang dihasilkan wallet web3 tidak bisa dikonversi langsung menjadi public key dengan mudah walaupun address tersebut merupakan turunan dari public key. Ini karena address itu dihasilkan melalui tahapan dari public key yang melibatkan fungsi satu arah (hashing) seperti berikut;
1. Mendapatkan Public Key
Setelah private key di generate. artinya kita juga memiliki asosiasi dengan public key. Public key disini dinamakan dengan Public ECDSA Key
Public key ini dimasukkan kedalam fungsi keccak-256(public key)
2. Dimasukkan kedalam fungsi Keccak-256 hash
3. Mengambil 20 bytes terakhir
Untuk mengenerate secara online, Anda dapat mencoba pada link berikut: https://www.rfctools.com/ethereum-address-test-tool/
Harap berhati-hati, jangan pernah memasukkan private key Anda.
Sedangkan untuk mendapatkan public key jika addressnya diketahui, kita tidak dapat membalik alur tersebut. Satu-satunya langkah yang dapat dilakukan adalah dengan membuat transaksi ethereum sehingga kita bisa mendapatkan nilai v, r dan s dari transaksi tersebut
Berikut adalah codenya;
Pada code diatas, kita menggunakan web3 wallet Metamask. Disini kita menghindari meg-ekspose private key.
Strategi yang digunakan adalah;
1. Menandatangani sebuah pesan.
2. Meng-ekstrak v, r dan s
3. Membuat message hash
4. Merecover public key dengan function ecrecover dan memasukkan nilai message hash, v, r dan s
5. Mengambil address dengan function pubToAddress
Untuk memastikan public key yang Anda convert kepada Address adalah benar, Anda dapat melakukan test sekali lagi dengan mengambil public key dari baris `console.log(`Public Key (Hex): ${publicKeyHex}`);` dan memasukkannya pada public key ECDSA pada link https://www.rfctools.com/ethereum-address-test-tool/
Tidak ada komentar:
Posting Komentar