Pembaruan Terkini: 17 November 2022
Artikel ini adalah lanjutan dari artikel sebelumnya yang membahas bahwa agar digital anonymous cash transaction dapat terjadi di internet, kita tidak lagi menggunakan identitas yang sesuai dengan kartu identitas atau alamat email atau nomor handphone seperti pada saat kita melakukan sebuah transaksi digital money, melainkan kita memanfaatkan sebuah teknologi yang sudah ada dari tahun 1970-an, yaitu public-key cryptograpy atau assymetric cryptography sebagai pengganti identitas kita di dunia nyata untuk dapat menerima dan mengirim bitcoin.
Dalam artikel ini, kita akan semakin paham bahwa keychain yang kita miliki merupakan salah satu komponen penting untuk membuat sebuah digital signature untuk memindahkan kepemilikan bitcoin kita ke pihak lain.
Menurut Wikipedia, digital signature adalah:
A digital signature is a mathematical technique used to validate the authenticity and integrity of a message, software or digital document. It's the digital equivalent of a handwritten signature or stamped seal, but it offers far more inherent security. A digital signature is intended to solve the problem of tampering and impersonation in digital communications. Digital signatures can provide evidence of origin, identity and status of electronic documents, transactions or digital messages.
Secara garis besarnya, untuk membuat sebuah digital signature adalah dengan mengaplikasikan sebuah rumus matematika menggunakan private key yang kita miliki terhadap pesan yang mau kita kirim.
Pesan + Private Key = Digital SignatureDan siapapun yang mengetahui public key kita secara matematika dapat memverifikasi bahwa si pengirim digital signature tersebut adalah pihak yang memiliki private key tersebut.
Pesan + Digital Signature + Public Key = Valid/InvalidApakah kalian pernah mengirim sebuah dokumen termasuk tanda tangan kita dalam format digital? Apakah itu:
sebuah hasil scan copy dari dokumen yang sudah kita tanda tangani secara basah sebelumnya, atau
sebuah dokumen dalam format digital dengan “tanda tangan digital” versi .png atau .jpg
Pertanyaannya adalah bagaimana pihak penerima dari dokumen tersebut dapat memiliki keyakinan bahwa pengirim dan yang menanda-tangani dokumen tersebut adalah kita?
Apa bedanya dokumen tersebut dengan file digital photo yang ada di hard drive kita? Yang sangat memungkinkan untuk diperbanyak dan dimanipulasi oleh pihak yang tidak bertanggung jawab.
Sebelum dapat menjawab pertanyaan-pertanyaan tersebut, mari kita lihat ilustrasi di bawah ini.
Lagi-lagi, Alice (A) dan Bob (B):
Alice sebagai pengirim pesan, membuat sebuah keypair (keychain). Dan memberikan public key-nya ke Bob sebagai pihak penerima pesan.
Alice membuat sebuah pesan (plaintext), kemudian pesan tersebut di hash secara kriptografi (cryptographic hash function) menjadi sebuah digest atau fingerprint. Dalam konteks ini kita sebut sebagai hash saja.
Alice melakukan proses digital signing (seperti proses encryption) menggunakan private key, sehingga hash dari pesan tersebut menjadi sebuah digital signature.
Alice mengirim pesan (plaintext) DAN digital signature tersebut kepada Bob.
Bob menggunakan public key milik Alice untuk mendekripsi digital signature agar kembali menjadi hash.
Bob melakukan proses hash dengan menggunakan metode cryptographic hash function yang sama seperti dilakukan Alice terhadap pesan (plaintext) yang dikirim oleh Alice.
Bob mencocokkan (memverifikasi) hasil dari hash dari proses no. 6 dan 7 di atas. Apabila:
a. Sesuai, maka Alice adalah pengirim dari pesan tersebut. Valid!
b. Tidak sesuai, maka ada tiga kemungkinan:
Alice memberikan public key yang tidak sesuai dengan private key-nya kepada Bob;
pengirim pesan bukanlah Alice; atau
ada pihak yang merubah isi pesan sebelum dikirim ke Bob.
Setelah melihat ilustrasi di atas, fungsi dari digital signature adalah untuk membuktikan (proof of ownership) bahwa pengirim pesan (dokumen) adalah Alice (pemilik keychain), tanpa Alice harus menunjukkan private key-nya kepada Bob.
Dengan kata lain, untuk dapat mengirim sebuah pesan/dokumen:
baik pihak pengirim maupun penerima tidak perlu saling mengenal satu sama lain, asalkan pihak penerima mengetahui public key dari private key yang dimiliki dan hanya diketahui oleh pihak pengirim dan
mereka tidak perlu saling percaya (trustless) satu sama lain.
Dengan mulai memahami apa fungsi dari digital signature, seharusnya kita juga mulai memahami bahwa cara yang mungkin masih kita lakukan sampai saat ini pada saat mengirim/menerima sebuah dokumen dengan “tanda tangan digital” membutuhkan kepercayaan antara kedua belah pihak sebelumnya.
Serupa tapi tidak sama, seperti di saat kita mengirim/menerima sebuah transaksi di sebuah aplikasi digital money yang di mana semua pihak yang terlibat harus sama-sama saling “kenal” dan percaya terhadap pihak ketiga (bank) selaku pengawas dan pencatat transaksi.
Di proses no.2 pada ilustrasi di atas ada istilah digest atau fingerprint atau hash?
Apakah itu?
A hash function is any function that can be used to map data of arbitrary size to fixed-size values. The values returned by a hash function are called hash values, hash codes, digests, or simply hashes.
Bayangkan kalau isi pesan (dokumen) yang mau kita kirim mengandung 10.000 kata atau lebih. Proses pengiriman pesan tersebut akan menjadi sangat tidak efisien.
Disinilah fungsi hash hadir.
Selain melakukan kompresi terhadap sebuah isi dokumen menjadi sebuah pesan dengan jumlah karakter yang fixed, hash juga berfungsi untuk membuktikan bahwa dua hal adalah sama tanpa harus mengetahui isi dari dua hal tersebut. Sesuai dengan poin no.7 pada ilustrasi di atas.
Bitcoin menggunakan cryptographic hash function SHA-256 (Secure Hash Algorithm) yang dibuat oleh NSA (National Security Agency) milik Amerika Serikat yang dirilis pada tahun 2001.
Mari kita coba fungsi SHA-256 melalui sebuah simulator online yang dapat kita temukan di sini.
Ini adalah contoh pesan yang saya masukan (input):
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Dan ini adalah hasil (output) hash-nya:
2d8c2f6d978ca21712b5f6de36c9d31fa8e96a4fa5d8ff8b0188dfb9e7c171bbSeberapa panjang dari pesan yang kita masukkan, setelah melalui sebuah metode cryptographic hash function yang sama akan menghasilkan sebuah pesan acak dengan jumlah karakter yang sama (fixed).
Kemudian, coba ganti huruf kapital “L” dari kata pertama “Lorem” di atas, kemudian hash kembali. Maka hasilnya, akan tetap berupa kombinasi karakter dan angka acak sejumlah 32-bit (64 karakter), tapi hasilnya akan menjadi seperti:
5a4f827dfbdaf5694fee1736a0dd5ac1981824a5b43762d4131408670750752dHal ini menunjukkan apabila seandainya ada pihak lain melakukan perubahan pada dokumen (plaintext) sesaat sebelum dikirim ke Bob tanpa sepengetahuan Alice, maka Bob akan menemukan ketidaksesuaian antara kedua hash (ilustrasi no. 7 di atas) pada saat melakukan proses verifikasi.
Dan satu hal lagi…
Cryptographic hash function ini adalah sebuah algoritma yang hanya dapat berjalan satu arah (one way function) saja.
Artinya kita tidak dapat menggunakan algoritma yang sama untuk dapat mengetahui isi pesan sebenarnya (plaintext) dari sebuah hash.
Yang dapat kita lakukan hanyalah dengan mencoba (menebak) semua kombinasi input untuk mendapatkan hasil hash yang sama, alias kita harus melakukan brute-force attack - persis seperti ilustrasi yang dilakukan oleh Chuck dalam usaha untuk menemukan private key dari public key milik Bob seperti di artikel sebelum ini.
Secara prinsip, melakukan sebuah transaksi adalah sama dengan membuat dan mengirim sebuah pesan (instruksi):
Di transaksi tunai: tanpa harus saling percaya dan memperkenalkan diri: “Ini uang tunai sejumlah (x) untuk sejumlah produk/jasa (A).”
Di digital money: setelah pihak bank “mengenal” kita dan kita percaya terhadap pihak bank, melalui aplikasi mobile banking: “Tolong transfer sejumlah (x) ke rekening pihak penerima.”
Begitu juga dengan membuat sebuah transaksi (create transaction) di Bitcoin.
Di mana isi dari pesan transaksi (message transaction) dari sebuah transaksi di Bitcoin (Bitcoin Transaction) adalah dengan mengirim pesan ke Bitcoin (peer-to-peer) Network:
Pindahkan sejumlah (x) bitcoin dari bitcoin address (public key) saya ke bitcoin address dari pihak penerima.
Mari kita lihat kembali bagan yang lebih lengkap dari solusi yang ditawarkan oleh Satoshi melalui Bitcoin di bawah ini.
Dari ilustrasi di atas, dapat dikatakan bahwa dalam membuat sebuah (1) transaksi di Bitcoin (Bitcoin transaction), Alice melalui Bitcoin Wallet-nya membuat:
(A) sebuah digital signature yang di sign menggunakan private key milik Alice terhadap transaksi sebelumnya yang sudah di hash (hash of the previous transaction) dan public key milik Bob.
(B) Sebuah transaction message, yang berisikan pesan untuk memindahkan kepemilikan sejumlah bitcoin milik Alice ke bitcoin address milik Bob.
Kemudian melalui wallet yang sama dikirim (A) dan (B) tersebut dikirim ke (2) Bitcoin Network.
Untuk kemudian dicatatkan pada sebuah block di (3) Bitcoin blockchain.
Secara teori, siapapun para pelaku di Bitcoin Network dapat memverifikasi pesan transaksi dan digital signature yang dibuat oleh Alice dengan menggunakan public key milik Alice.
Dan seandainya Bob ingin memindahkan kepemilikan dari bitcoin yang didapatkan dari Alice ke pihak selanjutnya, Bob melakukan hal yang sama seperti Alice, dan seterusnya.
We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership.
~ Satoshi Nakamoto, Bitcoin Whitepaper
Dalam kontek artikel ini, saya tidak (belum) membahas mengenai struktur transaksi yang lebih detail, apa yang sebenarnya terjadi saat transaksi tersebut dikirimkan ke Bitcoin Network, dan bagaimana sebuah transaksi yang valid dapat mulai dicatat ke dalam Bitcoin Blockchain.
Yang perlu kita pahami saat ini adalah bahwa fungsi dari digital signature di Bitcoin adalah:
Bukti kepemilikan (proof of ownership) bitcoin kita dan bahwa pengirim pesan transaksi (transaction message) tersebut berasal dari public key (bitcoin address) milik kita, tanpa harus menunjukkan private key kita kepada pihak penerima maupun Bitcoin Network.
Tapi apa yang terjadi kalau seandainya kita lupa menyimpan atau kehilangan private key kita?
Artinya, kita tidak dapat melakukan proses digital signing alias kita tidak dapat mengirim/memindahkan kepemilikan bitcoin milik kita ke pihak lain.
Dalam kata lain kita kehilangan akses terhadap coin kita!
Inilah kenapa cryptonians sering bilang bahwa:
Your private key is your asset.
Selanjutnya, kita akan bahas apa itu peer-to-peer network. Dengan memahami arsitektur dan cara kerja network ini, secara teori kita akan mulai memahami mengenai seberapa amannya Bitcoin Network dan crypto networks lainnya.
No posts

Comments
Nothing yet. Say the first thing.
Sign in to join the conversation.