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 aplikasi atau hardware wallet yang digunakan untuk melakukan transaksi.
Sekarang kita sudah memiliki bagian No.1 Bagian acak, ini kita sebut sebagai (r). Tinggal Bagian No.2.
Bagian Signature. Ini terdiri dari Private Key + Data transaksi yang sedang kita buat tanda tangan digitalnya.
1. r dikalikan private key wallet yang akan mengirim transaksi. Seperti representasi dibawah ini. r adalah bagian acak yang pertama, gambar kunci berwarna merah adalah private key.
2. Message (pesan). Message adalah hash dari seluruh data transaksi yang berisi output yang ingin kita buka kuncinya.
(r x private key) + message
Langkah terakhir adalah membagi (r x private key) + message dengan angka acak yang kita gunakan di langkah pertama ketika mencari Bagian Acak diatas. Ini bukan Bagian Acak atau r atau generator point, apalagi private key ya, harus dibedakan. Ini adalah angka acak yang dikalikan generator point untuk memperoleh Bagian acak yang disebut (r) di bagian pertama diatas.
Kalau dirumuskan seperti ini:
(r x private key) + message
______________________________ =
angka acak
Dengan ini kita akan memperoleh hasil akhir yang disebut Digital Signature atau Signature saja untuk dipersingkat. Ini bisa disingkat sebagai s.
Jika seseorang meminta anda untuk membuktikan bahwa anda mengetahui private key untuk sebuah public key (wallet address), anda dapat memberikan Digital Signature (r & s) sebagai bukti. Dengan ini anda bisa membuktikan kepemilikan koin tanpa membeberkan private key anda. Karena jika itu dibeberkan maka koin ada bisa dicuri orang yang mengetahuinya.
Bagaimana cara orang membuktikan kalau Signature itu benar?
Untuk memverifikasi kita membutuhkan dua titik di elliptic curve. Titik pertama adalah:
(Message / Signature) x Generator Point
Message dan Signature bisa didapat dari semua data pembuatan Digital Signature diatas. Sedangkan Generator Point atau Titik Generator selalu sama untuk ECDSA.
Titik kedua adalah:
( r / Signature ) x public key
Kita bisa memperoleh r dan Signature dari data Digital Signature diatas, tetapi disitu tidak ada informasi public key. Lalu public key si pengirim transaksi didapat dari mana?
Itu diperoleh dari output transaksi sebelumnya dimana si pengirim saat ini memperoleh bitcoin yang dia miliki - yang akan dikirim ke wallet lain di transaksi yang kita bikin saat ini.
Karena sebelum anda bisa mengirim bitcoin tentu saja anda harus sudah menerima bitcoin itu dari orang lain sebelumnya kan. Kalau anda miner berarti itu didapat dari coinbase transaction di block yang berhasil anda mining. Karena semua bitcoin yang ada bisa di lacak mundur ke semua wallet sebelumnya dimana koin itu berasal sampai titik akhir dimana bitcoin itu diciptakan pertama kali pada coinbase transaction. Setiap kurang lebih 10 menit ada miner yang berhasil menambang block yang baru dan mereka akan memperoleh bitcoin sebagai penghargaan. Bitcoin dalam block inilah yang disebut coinbase transaction karena itu muncul tanpa berasal dari wallet address sebelumnya tetapi diciptakan dari ketiadaan di block baru tersebut. Jumlah bitcoin yang diberikan didalam setiap block baru ini sudah ditentukan di kode software bitcoin dan ini tidak bisa diubah tanpa konsensus semua miner dan node yang menjalankan bitcoin. Jumlah penghargaan bitcoin ini berkurang setengahnya setiap 4 tahun. Saat ini pada 8 Juni 2023, penambang yang berhasil memvalidasi blok baru di blockchain Bitcoin akan mendapatkan 6,25 BTC. Namun, hadiah ini akan dikurangi pada halvening berikutnya, yang diperkirakan akan terjadi pada tahun 2024. Setelah itu miner akan memperoleh 3,12 Bitcoin untuk setiap block yang berhasil divalidasi. Proses Mining/menambang bitcoin lebih jelasnya bisa baca disini.
Ok, sampai disini saya harap anda memahami darimana public key itu diperoleh.
LANGKAH TERAKHIR: Tarik garis lurus yang melewati titik 1 dan 2, itu akan menghasilkan titik ketiga (berwarna hijau di gambar dibawah ini).
Jika titik koordinat x ketiga ini (titik hijau diatas) sama dengan koordinat x pada (r) Bagian acak yang kita bahas pertama kali di bagian teratas artikel ini, maka ini diterima sebagai bukti bahwa titik ketiga dan r diciptakan dengan private key yang sama. Dengan ini transaksi tersebut akan diterima dalam network bitcoin. Dengan ini kerahasiaan private key tetap terjaga.
Singkatnya,
Tanda Tangan Digital (Penandatanganan & Verifikasi) diatas adalah proses Membuktikan bahwa Signature dan Public Key dibuat oleh Private Key yang sama. Tanpa membeberkan Private Key tersebut.
Ini penting karena kerahasiaan private key adalah hal utama dalam keamanan bitcoin. Terutama dalam cold/hardware wallet. Ketika anda mengirim transaksi dengan hardware wallet, wallet tersebut hanya mengirim Digital Signature tanpa membeberkan private key anda. Sehingga private key anda lebih aman dibandingkan jika anda mengirim transaksi langsung dari aplikasi di hp atau komputer, dimana private key anda tersimpan di hp dan komputer tersebut, jadi walaupun kecil kemungkinannya, private key anda bisa saja diretas oleh peretas yang berhasil mengakses hp atau komputer anda. Disinilah pentingnya penggunaan hardware wallet yang tidak terkoneksi ke internet. Agar kemungkinan private key anda diretas semakin kecil.
Update: Ini adalah kode yang mensimulasi proses step by step cara verifikasi public key: https://belajarbitcoin.substack.com/p/bitcoin-digital-signature-verification
Gambar2 dan sebagian besar tulisan ini dicopy dari https://learnmeabitcoin.com/beginners/digital_signatures_signing_verifying
Video youtube yang mendalami kode-kode dalam proses ini bisa dilihat disini: https://www.youtube.com/watch?v=U2bw_N6kQL8
Comments
Post a Comment