Skip to main content

Anonymous Dalam Rantai Blok Pertambangan Bitcoin


Pada artikel ini kita akan membahas tentang konsensus "Anonymous Dalam Rantai Blok Pertambangan Bitcoin", yang mana pada bagian pembahasan kali ini akan melihat detail teknis algoritma konsensus Bitcoin. Perlu diingat kembali bahwa node Bitcoin tidak memiliki identitas secara jangka panjang dan tetap. Salah satu alasannya kurangnya identitas ini adalah karena sistem Bitcoin menggunakan jaringan peer-to-peer. Sehingga tidak ada otoritas pusat untuk menetapkan identitas pengguna. Dan kemudian memverifikasi node.

Istilah akan hal ini disebut dengan Sybil attack. Sybil berupa salinan node yang berpotensi merusak, dan membuatnya seperti ada banyak pengguna yang berbeda. Padahal sebenarnya semua "pseudo" pengguna yang nampak berbeda tersebut dikendalikan oleh orang yang sama. Disisi lain, pembentukan nama samaran sebagai identitas ini sebenarnya juga menjadi tujuan utama dalam sistem Bitcoin.

Bahkan jika memungkinkan untuk membangun identitas bagi semua node, tentu kita tidak akan mau melakukan hal tersebut. Meskipun Bitcoin tidak memberikan jaminan atas anonimitas secara penuh, dalam sebuah transaksi sering dihubungkan secara bersama-sama. Ada properti yang tidak bisa memaksa para pengguna untuk mengungkapkan identitas asli penggunanya. Seperti nama atau alamat IP pengguna saat berpartisipasi di sistem Bitcoin. Hal itu menjadi sifat penting dari desain sistem Bitcoin.

Mari kita lanjutkan. Jika node sudah memiliki sebuah identitas. Maka desain menjadi lebih mudah. Pertama identitas tersebut akan memungkinkan kita untuk memasukkan identitas tersebut kedalam protokol. Identitas pengguna berupa ID numerik itu harus melewati beberapa langkah. Jika node tanpa identitas, ada set instruksi yang lebih membatasi hal ini. Yang jelas bahwa ada alasan serius agar node tersebut memiliki identitas. Hal itu dilakukan untuk bisa meningkatkan keamanan.

Setelah identitas node tersebut diidentifikasi, bukan hal sepele lagi untuk bisa membuat identitas baru di Bitcoin. Selanjutnya, bisa menyusun asumsi tentang sejumlah node yang dianggap berpotensi berbahaya. Hal ini bisa dilakukan, meski karena adanya potensi node yang tidak memiliki identitas ini akan menjadi hambatan protokol konsensus Bitcoin.

Agar node tanpa identitas ini bisa diimbangi, bisa dengan membuat asumsi sederhana. Misalkan bagaimana untuk memilih node secara acak di dalam sistem. Kita ambil contoh pada sebuah lotere atau undian. Cukup sulit dalam sistem undian atau lotere tersebut untuk melacak, memberikan identitas, dan memverifikasi identitasnya. Yang bisa dilakukan adalah dengan memberikan mereka semacam token atau tiket. Kemudian dengan token atau tiket tersebut bisa dipilih ID secara acak. Hingga selenjutnya memanggil pemilik ID tersebut.

Konsensus Implisist

Asumsi ini didasarkan pada sejumlah node acak yang memungkinkan sesuatu dan disebut dengan konsensus implisit. Ada beberapa putaran dalam protokol. Masing-masing berbeda dalam rantai blok. Di setiap putaran, node secara acak dipilih. Selanjutnya simpul node ini mengusulkan blok berikutnya kedalam rantai block (blockchain).

Sementara tidak ada algoritma tertentu untuk memilih blok. Simpul node yang dipilih tersebut secara sepihak mengusulkan blok apa yang akan dimasukkan dalam rantai blok berikutnya. Namun, bagaimana jika node yang dipilih tersebut adalah node yang berbahaya atau malicious? Konsensus implisit inilah yang akan menangani hal tersebut. Perlu diingat bahwa setiap blok mempunyai hash dari setiap blok yang telah dimasukkan. Dan hal ini adalah mekanisme teknis agar node tersebut bisa mengirimkan signal bahwa sebuah blok telah dimasukkan kedalam rantai blok.

Algoritma konsensus Bitcoin (disederhanakan)

Algoritma ini disederhanakan. Untuk bisa mengasumsikan kemampuan dalam memilih node secara acak, yang tahan terhadap serangan Sybil.

1. Transaksi baru disiarkan ke semua node

2. Setiap node mengumpulkan transaksi baru ke dalam blok

3. Dalam setiap putaran, node secara acak akan mendapat siaran blok nya

4. Node lain menerima blok – hanya jika semua transaksi di dalamnya adalah valid (terpakai, dan telah ditandatangani)

5. Nodes mengungkapkan penerimaan blok dengan memasukkan hash di blok berikutnya.

Mencuri Bitcoin

Bagaimana algoritma ini akan bisa bekerja? Untuk bisa melihatnya, kita ambil sebuah contoh. Misalkan ada seorang penyerang bernama Nita yang ingin menggagalkan proses algoritma ini. Bisakah Nita disini untuk mencuri Bitcoin dari pengguna lain? Jawabannya adalah tidak bisa. Meskipun Nita bisa mengusulkan blok berikutnya, namun Nita tidak bisa mencuri Bitcoin dari pengguna lainnya. Karena Nita harus membuat sebuah transaksi yang benar-benar valid atas Bitcoin tersebut. Selain itu, Nita juga harus menempa tanda tangan pemilik Bitcoin tersebut. Sedangkan hal itu tidak bisa dilakukan Nita. Jadi selama kriptografi yang melandasi sistem ini cukup solid, maka Nita tidak bisa mencuri Bitcoin dari pengguna yang lain.

Denial of service attack

Sekarang kita coba apakah algoritma tersebut bisa bekerja jika ada bentuk serangan lain. Sebagai contoh, misalkan Nita tidak suka dengan pengguna lain bernama Rudi. Kemudian nita memutuskan untuk tidak mencantumkan transaksi yang berasal dari alamat Bitcoin Rudi. Selanjutnya disetiap blok yang diusulkan Nita, dia tiak mencantumkan transaksi Rudi kedalam rantai blok. Atau bisa dikatakan Nita melakukan Denial of Service Attack terhadap Rudi.

Nita dalam serangannya terhadap Rudi, yang coba dilakukan Nita adalah untuk menyusun ulang kembali. Sedangkan hal itu sebenarnya tidak lebih dari sebuah gangguan kecil saja. Sementara jika transaksi Rudi tidak dimasukkan ke blok berikutnya pada usulan blok Nita, maka Nita hanya akan terus menunggu sampai mendapat kesempatan blok tersebut dimasukkan ke dalam rantai blok. Sehingga bisa dikatakan bahwa serangan yang dilakukan oleh Nita terhadap Rudi pun adalah serangan yang bagus. Karena pada dasarnya Nita pun cukup kesulitan untuk bisa memasukkan blok usulannya tersebut kedalam blockchain.

Untuk bisa lebih mengetahui mengapa serangan Nita terhadap Rudi ini menjadi tidak berfungsi bisa di review kembali bahasan-bahasan sebelumnya di topik konsep dasar Bitcoin.

Double-spend attack

Bisa jadi, karena Nita gagal mencoba pada sebelumnya, maka mencoba lagi serangan dengan serangan lain berupa serangan transaksi ganda (double-spend attack). Kita asumsikan dalam contoh kali ini, bahwa Nita adalah seorang pelanggan sebuah merchant online pada situs milik Rudi. Di situs tersebut Rudi menyediakan layanan online berupa pertukaran file dan pembayarannya dilakukan dengan menggunakan Bitcoin. Jika pembayaran sudah dilakukan, pelanggan bisa mendownload sebuah aplikasi atau file tersebut.

Double-spend attack akan terjadi seperti berikut ini. Nita akan menambahkan beberapa item di keranjang belanjanya pada website Rudi. Selanjutnya server website Rudi itu akan meminta pembayaran transaksi Nita. Setelah selesai, transaksi Nita pun disiarkan kedalam jaringan Bitcoin. Node yang jujur dalam jaringan Bitcoin selanjutnya akan membuat blok berikutnya. Termasuk juga transaksi-transaksi yang ada dalam blok tersebut. Salah satunya, adalah transaksi pembayaran Nita kepada Rudi melalui situsnya tersebut.

Yang perlu diingat disini, bahwa transaksi tersebut sudah ada tanda tangan Nita. Transaksi Nita tersebut berisi tentang instruksi untuk membayar transaksi pada public key milik Rudi dan juga hash transaksinya. Sedangkan hash transaksi ini merepresentasikan output pointer transaksi Nita sebelumnya. Yaitu transaksi saat Nita memperoleh Bitcoin, dan sekarang transaksi pembayaran. Sementara pointer tersebut harus bisa menunjukkan referensi transaksi sebelumnya yang telah terjadi. Yang kemudian dimasukkan kedalam blok sebelumnya pada rantai konsensus.

Perlu dijadikan catatan juga agar tidak menjadi bingung. Bahwa disini ada dua type pointer hash, Blok mencakup pointer hash pada blok sebelumnya. Sedangkan transaksi mencakup satu atau lebih pointer hash pada output transaksi sebelumnya.

Sekarang mari kita lanjutkan kembali apa yang Nita lakukan agar ia bisa melakukan Double-Spend Attack. Sebuah blok terbaru yang telah dihasilkan dari node yang jujur termasuk juga transaksi Nita kepada Rudi tadi telah termasuk di dalam blockchain. Rudi menyimpulkan bahwa Nita telah membayar transaksi tersebut, dan Nita telah bisa mendownload aplikasi di situs Rudi tersebut.

Misalkan simpul acak berikutnya dipilih dalam putaran berikutnya terjadi dan dikendalikan oleh Nita. Maka Nita bisa mengusulkan blok berikutnya. Nita bisa mengusulkan blok selanjutnya dengan mengabaikan blok yang telah berisi transaksinya kepada Rudi, dan tidak berisi pointer hash ke blok sebelumnya. Setelah itu Nita memasukkkan transaksi yang dia kirimkan ke Rudi ke alamat yang berbeda atas kendali Nita sendiri.

Contoh ini adalah contoh klasik double-spend. Dua transaksi dengan koin yang sama, sedangkan yang dimasukkan kedalam rantai blok hanya satu transaksi saja. Jika Nita berhasil memasukkan transaksi pembayaran ke alamatnya sendiri di dalam rantai blok, maka transaksinya kepada Rudi menjadi tidak berguna karena tidak dimasukkan kedalam rantai blok.

Lantas bagaimana caranya untuk mengetahui apakah upaya Nita ini berhasil atau tidaknya? Hal ini akan bergantung pada blok mana yang akhirnya akan berakhir di struktur konsensus rantai blok. Satu pada blok yang berisi transaksi Nita kepada Rudi. Atau blok satunya lagi yang berisi transaksi Nita kepada Nita sendiri.

Lalu apa yang menentukan blok manakah yang akan dimasukkan kedalam Blockchain? Node yang jujur akan mengikuti prosedur perpanjangan blockchain secara valid. Sehingga bisa menentukan cabang blok manakah yang akan diikutkan dalam blockchain. Pada poin ini, sebenarnya dua blok yang berbeda tersebut sama-sama memiliki panjang yang sama. Hanya saja, antara keduanya memiliki perbedaan di blok terakhir. Node yang jujur akan dapat memutuskan pilihan blok manakah yang akan dimasukkan. Dan pilihan inilah yang menentukan apakah upaya Nita disini berhasil atau gagal.

Jika kita hanya melihatnya dari sisi moral, maka kita bisa melihat perbedaan jelas antara kedua blok tersebut. Kita bisa melihat bahwa satu blok berisi transaksi valid Nita kepada Rudi. Sementara blok lainnya berisi transaksi Nita kepada Nita sendiri. Sementara jika kita melihat dari sisi teknologi, dua blok ini akan terlihat cukup identik. Sehingga cukup sulit untuk bisa mengetahui transaksi manakah yang benar-benar valid.

Dalam prakteknya, node lebih sering mengikuti perpanjangan blok itu dari urutan blok yang pertama dalam jaringan peer-to-peer secara heuristik. Meski hal itu tidaklah menjadi aturan yang pasti. Sementara dalam kondisi apapun, karena adanya kondisi laten dalam jaringan, menjadi mudah bahwa sebuah blok yang didengar node pertama adalah blok yang diciptakan kedua. Jadi memang ada sebuah kesempatan bahwa node berikutnya akan mengusulkan blok yang bisa jadi berisi transaksi ganda.

Atas dasar ini Nita lebih jauh berusaha meningkatkan peluang dengan menyuap node berikutnya untuk bisa memasukkan usulan blok Nita. Jika node berikutnya tidak membangun blok berikutnya yang berisi transaksi ganda, maka rantai blok ini tidak akan melebihi panjang dari blok yang berisi transaksi Nita kepada Rudi. Pada titik ini, node berikutnya jauh lebih besar kemungkinannya untuk meneruskan blok yang lebih panjang, dan mengabaikan blok yang berisi transaksi ganda. Jelas, karena blok yang berisi transaksi valid Nita kepada Rudi telah menjadi lebih blok berukuran lebih panjang setelah dibangun pada node sebelumnya bukan?

Namun jika proses upaya Nita ini terus berlanjut, maka akan menjadi bagian dari rantai konsensus jangka panjang. Sementara di sisi lain, blok yang berisi transaksi valid Nita kepada Rudi akan benar-benar diabaikan didalam jaringan Bitcoin. Blok yang seperti ini disebut dengan Orphan Block (blok yatim).

Sekarang mari kita melihat dari sudut pandang Rudi sebagai merchant dalam contoh ini. Bagaimana Rudi bisa melindungi dirinya sendiri atas upaya serangan transaksi ganda ini? Karena dari sisi inilah kita akan mengetahui bagaimana Rudi bisa melindungi dirinya. Dan dari sisi inilah yang juga menjadi bagian penting keamanan dalam sistem Bitcoin atas upaya double-spending ini.

Ketika Nita menyiarkan transaksinya yang merepresentasikan transaksi pembayarannya kepada Rudi, maka Rudi mendengarkan hal tersebut didalam jaringan Bitcoin. Dan Rudi juga mendengarkan transaksi lanjutan dari blok selanjutnya. Namun jika Rudi ternyata lebih bodoh dari yang sebelumnya disebutkan, maka Rudi bisa menyelesaikan proses transaksi itu, dan memperbolehkan Nita untuk mengunduh aplikasi tersebut pada saat itu juga. Dan hal inilah yang disebut dengan transaksi zero-confirmation. Transaksi inilah yang lebih banyak memungkinkan terjadinya double-spend attack.

Sebelumnya, ketika terjadi serangan double-spend, kita mengasumsikan bahwa ada seseorang yang berusaha mengontrol node untuk mengusulkannya kepada blok selanjutnya. Sementara jika Rudi memungkinkan Nita untuk mengunduh aplikasi tepat sebelum pembayaran transaksi mendapat satu konfirmasi di blockchain, maka Nita bisa sesegera mungkin untuk menyiarkan transaksi gandanya. Sedangkan node berikutnya akan bisa memasukkan blok berisi transaksi ganda tersebut. Sedangkan blok yang berisi transaksi valid Nita kepada Rudi tidak dimasukkan.

Seharusnya, agar Rudi bisa melindungi dirinya dari serangan double-spend, Rudi harus menunggu sampai setidaknya ada satu atau lebih konfirmasi yang didapat saat Nita membayar transaksinya tersebut. Disisi lainnya, seorang pedagang harus berhati-hati juga ketika transaksi terjadi, bahkan ketika transaksi tersebut sudah dimasukkan kedalam rantai blok. Jika Rudi dalam hal ini bisa melihat bahwa Nita berhasil meluncurkan serangan double-spend, maka Rudi bisa menyadari hal itu karena blok yang berisi transaksi validnya telah menjadi orphan block. Jika hal itu terjadi Rudi sepatutnya tidak mengabaikan transaksi itu, dan tidak membiarkan Nita mendownload aplikasinya. Sebaliknya jika itu terjadi meskipun ada upaya serangan transaksi ganda, beberapa node berikutnya akan membangun blok yang berisi transaksi valid pembayaran Nita ke Rudi. Karena keyakinan dalam konsensus akan berada pada blok yang terpanjang.

Secara umum, semakin banyak konfirmasi transaksi yang didapat, maka semakin tinggi kemungkinan akan berada pada konsensus blok jangka panjang. Perlu diingat lagi bahwa node yang jujur kecenderungannya akan lebih banyak memperpanjang blok yang berukuran lebih panjang saat mereka melihatnya di rantai blok. Sehingga peluang cabang blok yang pendek berisi transaksi ganda tersebut makin sempit.

Kenyatannya adalah, double-spend ini akan bisa diminimalisir dengan banyaknya jumlah konfirmasi transaksi. Sehingga transaksi yang telah menerima sejumlah konfirmasi lebih banyak maka peluang adanya serangan double-spend menjadi lebih sedikit. Secara heuristik, dalam transaksi Bitcoin paling tidak menunggu setelah ada enam konfirmasi. Meski tidak ada penjelasan secara lebih detail bahwa transaksi anda harus menunggu enam konfirmasi tersebut. Angka enam konfirmasi itu hanya sebagai jaminan saja bahwa transaksi anda akan benar-benar aman dan bisa berada dalam konsensus panjang blockchain.

Perlindungan atas upaya transaksi ganda ini sepenuhnya dilakukan dalam kriptografi. Namun hal itu juga perlu ditegakkan dalam konsensus. Artinya, bahwa jika sebuah node berusaha memasukkan transaksi yang tidak valid, maka satu-satunya alasan yang akan membantahnya adalah beberapa dan mayoritas node yang jujur tidak akan memasukkan transaksi tersebut sebagai transaksi yang sah didalam rantai blok.

Di sisi lainnya, perlindungan dari upaya transaksi ganda ini didasarkan pada konsensus. Dalam hal ini, kriptografi tidak bisa banyak berperan dalam hal ini. Dan dua transaksi yang salah satunya mewakili upaya transaksi ganda hanya berlaku pada perspektif kriptografi. Tapi konsensus tersebut menentukan blok manakah yang akan dimasukkan dalam konsensus blok jangka panjang. Pada akhirnya, anda tidak bisa 100 persen yakin bahwa transaksi anda akan bisa berada di cabang konsensus blok. Namun jaminan probabilitas eksponensial ini sudah cukup baik. Setidaknya setelah enam konfirmasi transaksi, maka hampir tidak ada peluang akan ada hal salah terjadi berikutnya.

Comments

Popular posts from this blog

Evolusi Pertambangan Bitcoin

Di dalam pertambangan Bitcoin telah terjadi evolusi yang sangat lambat. Mulai dari pertambangan dengan CPU, beralih ke GPU, lalu kepada FPGA, dan sampai sekarang telah didominasi oleh ASIC. Sama seperti yang terjadi pada evolusi dalam pertambangan emas. Di dalam evolusi pertambangan emas, dimulai dengan pertambangan individu-individu yang menggunakan panci untuk mendulang emas. Beralih kemudian menggunakan kotak-kotak yang menggunakan pintu air, dan dilanjutkan dengan menggunakan peledak di lereng-lereng bukit oleh kelompok-kelompok penambang emas. Hingga kemudian mulai terjadi penambangan emas modern yang melakukan penambangan raksasa dan telah membuat lubang besar di muka bumi. Berdasarkan dua evolusi pertambangan tersebut, ada penurunan peran secara individu yang sama-sama menurun dari waktu ke waktu. Beralih pada dominasi perusahaan besar untuk mengeruk keuntungan secara lebih besar. Namun, ada pola lain yang menunjukkan sebagian besar keuntungan tersebut di dapat dari piha

Penambang Bitcoin

Pertambangan Bitcoin yang sebenarnya, adalah sebuah kegiatan menambang menggunakan perangkat tertentu. Prosesnya melalui memecahkan serangkaian persoalan matematis (puzzle) berdasarkan tingkat kesulitan tertentu. Nah kegiatan inilah yang disebut dengan "Menambang" atau istilah kerennya adalah "Bitcoin Mining". Jadi jelasnya, bahwa jika seseorang menambang Bitcoin, artinya orang tersebut menggunakan perangkat pertambangan. Bisa menggunakan CPU, GPU, FPGA, maupun ASIC. Penjelasan tentang perangkat ini akan dibahas di bagian selanjutnya. Pelaku pertambangan, disebut dengan istilah "penambang", atau bahasa kerennya adalah "Miner". Nah, kadang kala, kita juga masih menyisakan pertanyaan, apa sebenarnya yang dilakukan oleh Penambang Bitcoin ini? Mari kita membahasnya. Proses pertambangan Bitcoin mirip seperti halnya dengan pertambangan logam mulia seperti emas. Hanya saja perbedaannya, kalau Bitcoin pertambangannya dilakukan secara digital un