Panduan mengenai Double-Spending bagi Pemula
Beranda
Artikel
Panduan mengenai Double-Spending bagi Pemula

Panduan mengenai Double-Spending bagi Pemula

Tingkat Menengah
Diterbitkan Feb 17, 2020Diperbarui Jan 31, 2023
7m

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. 

Untuk menerbitkan aset digital yang menirukan uang tunai bagi pengguna (memungkinkan untuk melakukan pertukaran secara anonim dan peer-to-peer), bank dapat menggunakan tanda tangan buta – seperti yang diuraikan oleh kriptografer David Chaum dalam makalahnya pada tahun 1982: Tanda Tangan Buta untuk Pembayaran yang Tidak Dapat Dilacak.

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.

Inovasi terbesar yang ada dalam white paper Bitcoin adalah solusi atas masalah double-spending. Walaupun tidak tertulis secara gamblang, Satoshi mengusulkan struktur data yang saat ini dikenal luas sebagai blockchain.
Blockchain sebenarnya hanya sebuah database dengan beberapa properti yang unik. Para partisipan dalam jaringan (disebut dengan nodes) menjalankan perangkat lunak tertentu, yang memungkinkan mereka untuk menyinkronkan salinan database dengan sesama peserta. Hasilnya adalah seluruh jaringan dapat mengedit riwayat transaksi sejak blok genesis. Dengan memiliki blockchain yang dapat dilihat oleh publik, sangat mudah untuk mendeteksi dan mencegah aktivitas jahat, seperti transaksi yang mencoba untuk double-spend.
Ketika seorang pengguna menyiarkan sebuah transaksi, transaksi tersebut tidak langsung ditambahkan ke blockchain – harus terlebih dahulu dimasukkan ke dalam blok melalui penambangan. Dengan demikian, penerima hanya mengakui transaksi tersebut valid jika blok sudah ditambahkan ke chain. Jika ini tidak terjadi, mereka berisiko kehilangan dana, karena pengirim bisa saja telah membelanjakan koin yang sama ke tempat lain. 
Setelah transaksi dikonfirmasi, koin tidak dapat mengalami double-spent, karena kepemilikan telah beralih ke pungguna baru – dan seluruh jaringan dapat memverifikasi ini. Inilah alasan mengapa banyak orang yang lebih memilih menunggu beberapa konfirmasi sebelum menerima kevalidan pembayaran. Setiap blok berikutnya secara drastis meningkatkan jumlah upaya yang dibutuhkan untuk memodifikasi atau menulis ulang chain (yang mungkin terjadi dalam serangan 51%).

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. 

Erin memberikan alamat publik yang merupakan tujuan pengiriman dana. Dani menyiarkan transaksi, yang intinya adalah sebuah pesan bertanda tangan yang menyatakan bahwa 0,005 BTC yang dulunya milik Dani sekarang menjadi milik Erin. Tanpa membutuhkan banyak detail, setiap orang yang menerima transaksi yang telah ditandatangani Dani dapat memverifikasi bahwa ia adalah pemilik koin tersebut, dan memiliki wewenang untuk mengirimkannya.

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.

Namun kabar baiknya, penggunaan tanda tangan buta menawarkan solusi menarik bagi lingkungan keuangan tersentralisasi. Tidak lama kemudian, penciptaan mekanisme Proof of Work dan teknologi blockchain melahirkan Bitcoin sebagai bentuk uang terdesentralisasi yang mapan – yang selanjutnya menginspirasi ribuan proyek mata uang kripto lainnya.