Apa itu double-spending?
Double-spending merupakan masalah potensial di dalam sistem uang digital di mana dana yang sama dikirimkan ke dua penerima yang berbeda dalam waktu bersamaan. Tanpa tindakan pencegahan yang memadai, protokol yang tidak dapat menyelesaikan masalah ini merupakan protokol yang tidak baik secara fundamental – pengguna tidak dapat memverifikasi bahwa dana yang mereka terima belum dihabiskan di tempat lain.
Jika berbicara mengenai uang digital, memastikan bahwa unit tertentu tidak dapat diduplikasi adalah hal terpenting. Seluruh sistem akan rusak jika misalkan Alice menerima 10 unit, menggandakannya 10 kali, dan sekarang ia memiliki 100 unit. Sama halnya jika ia dapat mengirimkan 10 unit yang sama ke Bob dan Carol dalam waktu yang bersamaan. Jadi, agar uang digital berfungsi dengan baik, harus ada mekanisme yang dapat mencegah perilaku ini.
Bagaimana mencegah double-spending?
Pendekatan tersentralisasi
Jalur tersentralisasi dianggap lebih mudah untuk mengimplementasikan pencegahan dibandingkan dengan jalur terdesentralisasi. Biasanya ini melibatkan petugas pengamat yang mengelola sistem dan mengendalikan penerbitan dan pendistribusian unit. Salah satu contoh tersentralisasi yang baik dari solusi atas double-spend adalah eCash David Chaum.
Di dalam konteks ini, jika seorang pengguna (misalkan ia bernama Dani) akan menerima uang digital sebesar $100, ia harus menginformasikan ke bank lebih dahulu. Karena Dani memiliki saldo yang cukup di akunnya, ia akan membuat satu nomor acak (atau banyak nomor acak untuk denominasi yang lebih kecil). Mari katakan ia membuat lima nomor, setiap nomor bernilai $20. Untuk mencegah bank melacak unit-unit tertentu, Dani mengaburkan angka-angka acak dengan menambahkan faktor blinding pada masing-masing unit.
Kemudian ia mengembalikan data tersebut ke bank, yang mendebit akunnya sebesar $100, dan menandatangani pesan yang mengesahkan bahwa masing-masing dari lima unit informasi tersebut bernilai $20. Dani sekarang dapat membelanjakan dana yang diterbitkan oleh bank. Ia pergi ke restoran milik Erin, dan membeli makanan seharga $40.
Dani dapat menghapus faktor blinding untuk menunjukkan nomor acak yang mewakili ”nota” setiap uang digital, yang berfungsi sebagai alat pengidentifikasi yang unik untuk setiap unit (mirip dengan nomor seri). Ia menunjukkan dua unit ke Erin. Erin kemudian secara langsung mengambilnya dengan bantuan bank untuk mencegah Dani membelanjakannya ke toko lain. Bank akan memeriksa kevalidan tanda tangan, dan jika semua terlihat benar, akun Erin akan terkredit sebesar $40.
Nota yang digunakan telah dibakar, dan harus diterbitkan lagi nantinya jika Erin ingin membelanjakan uangnya dengan cara yang sama.
Penerapan eCash Chaumian mungkin sangat berguna dalam transfer pribadi. Tetapi dari segi resiliensi dapat dikatakan gagal, karena bank adalah pusat point of failure. Sebenarnya nota tersebut tidak bernilai apa-apa, karena nilainya berasal semata-mata dari itikad bank untuk menukarkannya dengan dollar. Nasabah berada di bawah kendali dan harus mengandalkan niat baik bank agar semuanya dapat berfungsi. Inilah sebenarnya masalah yang ingin dipecahkan oleh mata uang kripto.
Pendekatan terdesentralisasi
Memastikan agar dana tidak mengalami double-spent di dalam ekosistem tanpa pengawas sedikit lebih sulit. Semua partisipan yang memiliki kekuatan yang sama harus berkoordinasi membuat aturan untuk mencegah oknum jahat dan memberikan insentif kepada pengguna yang jujur.
Mari kita kembali ke skenario restoran. Dani kembali ke restoran, dan kali ini melihat sebuah sticker di jendela yang bertuliskan: Di Sini Menerima Bitcoin. Ia memesan makanan yang sama seperti ia terakhir ke sana. Harganya 0,005 BTC.
Seperti telah disebutkan sebelumnya, transaksi hanya dikatakan valid jika telah dimasukkan ke dalam sebuah blok yang sudah dikonfirmasi. Menerima transaksi yang tidak terkonfirmasi sama halnya dengan menerima eCash sebesar $40 dalam contoh sebelumnya, tanpa secara langsung menguangkannya dengan bantuan bank – ini memungkinkan pengirim untuk membelanjakannya ke tempat lain. Jadi, sangat disarankan agar Erin menunggu paling tidak 6 konfirmasi blok (kira-kira satu jam) sebelum menerima pembayaran dari Dani.
Double-spending dalam Bitcoin
Bitcoin dirancang dengan sangat hati-hati untuk mencegah serangan double-spending, paling tidak ketika protokol ini digunakan sebagaimana mestinya. Jika Anda menunggu transaksi dikonfirmasi di dalam blok, tidak ada kesempatan bagi pengirim untuk menariknya kembali. Untuk melakukannya mereka harus “membalikkan” blockchain, dan ini membutuhkan jumlah daya hash yang tidak realistis.
Namun, terdapat beberapa serangan double-spending yang menyasar pihak-pihak yang menerima transaksi tak terkonfirmasi. Untuk pembelian yang bernilai kecil, misalnya, toko tidak mau menunggu transaksi dimasukkan ke dalam blok. restoran cepat saji yang sibuk kemungkinan tidak dapat menunggu jaringan memproses setiap pembelian. Jadi, jika pebisnis memiliki alat pembayaran “instan”, mereka membuka diri kepada serangan double-spending. Seseorang mungkin memesan burger, membayarnya, kemudian langsung mengirimkan dana yang sama ke alamat mereka sendiri. Dengan biaya yang lebih mahal, transaksi baru ini kemungkinan akan dikonfirmasi lebih dulu, dan transaksi yang sebelumnya akan menjadi tidak valid.
Ada tiga metode populer dalam melakukan double-spend:
- Serangan 51%: ketika satu entitas dalam organisasi mengendalikan lebih dari 51% tingkat hash, yang meungkinkan mereka untuk mengeluarkan atau memodifikasi urutan transaksi. Serangan jenis ini sangat tidak mungkin terjadi pada Bitcoin, tetapi telah terjadi di beberapa jaringan yang lain.
- Serangan balapan/race: dua transaksi yang saling bertentangan disiarkan secara berurutan, menggunakan dana yang sama - tetapi hanya satu yang dikonfirmasi. Tujuan penyerang adalah membuat pembayaran tidak valid dengan cara hanya memvalidkan transaksi yang menguntungkannya (contohnya: mengirim dana yang sama ke alamat yang dikendalikan oleh penyerang). Serangan jenis ini terjadi pada penerima yang tidak mempermasalahkan transaksi tak terkonfirmasi sebagai pembayaran.
- Serangan Finney: penyerang melakukan pra-penambangan satu transaksi ke dalam blok tanpa menyiarkannya secara langsung ke jaringan. Sebaliknya, penyerang ini membelanjakan koin yang sama ke transaksi yang lain dan kemudian ia menyiarkan blok yang ditambang sebelumnya, yang kemungkinan akan membuat pembayaran tidak valid. Serangan Finney memerlukan urutan peristiwa tertentu untuk terjadi, dan juga bergantung pada penerima yang tidak mempermasalahkan transaksi tak terkonfirmasi.
Seperti yang kita lihat, toko yang menunggu konfirmasi blok akan menurunkan tingkat risiko menjadi korban double-spend.
Penutup
Double-spend memungkinkan pengguna mempermainkan sistem uang eletronik untuk keuntungan pribadi, menggunakan dana yang sama lebih dari satu kali. Kurangnya solusi yang memadai untuk masalah ini telah menghalangi kemajuan di bidang keuangan tradisional.