Dalam kerangka artikel ini, kami mencoba menjawab pertanyaan tentang apa kerahasiaan itu dan bagaimana hal itu dapat dicapai dalam Bitcoin dan mata uang digital lainnya. Selain itu, di sini Anda akan belajar tentang mekanisme spesifik untuk mencapai kerahasiaan, serta bagaimana mereka diterapkan dalam praktik. Topiknya akan menarik bagi mereka yang bekerja secara langsung dengan cryptocurrency, serta bagi para pecinta protokol yang meningkatkan tingkat privasi pengguna.
Mari kita tentukan persyaratannya
Topik kerahasiaan (privasi) dan cara memastikannya cukup banyak. Yang terbaik adalah mulai mempelajarinya dengan pemahaman tentang definisi dasar.
Konsep privasi mencakup dua komponen utama: ketidaklacakan dan anonimitas. Untraceability, atau unraceability, menyiratkan ketidakmampuan untuk menetapkan sekelompok kegiatan kepada beberapa pengguna di jaringan. Anonimitas, atau anonimitas, dikaitkan dengan ketidakmampuan untuk secara andal menetapkan identitas pengguna di jaringan ini.
Privasi standar Bitcoin
Bitcoin memiliki properti anonimitas, tetapi sangat mudah untuk kalah dalam praktiknya. Properti untraceability tidak sepenuhnya tercapai. Kita dapat menganalisis grafik transaksi dan menyimpulkan bahwa mereka terlibat dalam dompet anonim tertentu. Jika setidaknya satu alamat dikompromikan dalam konteks anonimitas, maka keterlibatan dalam individu tertentu dapat dibentuk. Implementasi paling sederhana dari dompet bitcoin hanya mampu memberikan tingkat privasi minimum.
Misalnya, untuk setiap pembayaran atau perubahan yang masuk, pengguna membuat alamat baru. Auditor yang menganalisis grafik transaksi, dalam hal ini, tidak dapat lagi secara andal menghubungkan fakta spesifik yang terkait dengan tindakan pengguna dan distribusi mata uang di antara mereka. Tetapi bahkan dalam situasi ini, privasi tidak dapat diandalkan seperti kelihatannya.
Biasanya pada jaringan Bitcoin, privasi Anda tergantung pada lawannya. Orang yang menerima pembayaran tahu sejarah asal usul koin, dan orang yang mengirim koin tahu ke mana ia mengirimnya. Selain itu, ada serangkaian metadata yang mungkin tersedia untuk orang luar: sifat transaksi, data tentang dompet, data tentang lokasi pengguna, dll.
Jenis data transaksi apa yang harus disembunyikan pertama-tama untuk memastikan tingkat kerahasiaan maksimum? Ini termasuk data tentang asal-usul koin, yang terkait dengan properti yang dapat dipertukarkan, atau fungibilitas. Sangat penting untuk setiap uang dan barang berharga. Pada tingkat protokol Bitcoin, properti ini disediakan (semua koin adalah sama dan aturan untuk memprosesnya adalah umum untuk semua orang), tetapi dalam praktiknya fungibilitas mudah dilanggar. Misalnya, beberapa pedagang dapat menganalisis sejarah asal koin yang diterima dan menolak pembayaran jika hal itu menyebabkan mereka ragu.
Hal berikutnya yang masuk akal untuk disembunyikan adalah jumlah transfer, alamat pengirim dan penerima di badan transaksi. Penting juga untuk menyembunyikan alamat jaringan pengguna, yang biasanya dicapai menggunakan darknet, di mana protokol seperti Freenet, TOR dan I2P digunakan. Bagaimana cara menyembunyikan jumlah, riwayat, dan alamat?
Coinjoin
Metode paling sederhana untuk mengaburkan grafik transaksi disebut CoinJoin. Kami akan mulai dengannya. Esensinya adalah untuk menciptakan transaksi bersama, sebagai akibat dari mana asal koin yang dikirim menjadi ambigu. Grup terbentuk dari pengguna yang membuat transaksi umum, di mana beberapa pembayaran dilakukan secara bersamaan. Artinya, pengguna tidak perlu membuat transaksi terpisah.
Gregory Maxwell pertama kali mengusulkan gagasan ini pada 2013 di forum BitcoinTalk yang populer. Sejak itu, banyak modifikasi dari metode ini telah diusulkan dan dikembangkan. Masing-masing meningkatkan sifat pembayaran tertentu. Mari kita bicara tentang cara CoinJoin bekerja dalam bentuknya yang murni, dan setelah itu kita akan melihat beberapa modifikasi yang paling menarik.
Bagaimana CoinJoin Bekerja
Bayangkan sekelompok tiga pengguna di mana setiap orang ingin membeli barang di toko online (pada saat yang sama, masing-masing memiliki toko sendiri).

Mereka membuat satu transaksi untuk tiga input, satu dari setiap pengguna, tiga output, satu untuk setiap toko online. Selain itu, ada tiga pintu keluar lagi untuk perubahan. Selanjutnya, semua output dicampur secara acak di antara mereka sendiri. Setiap pengguna memeriksa ulang transaksi yang diterima dan menandatangani entri yang sesuai. Jika berhasil, transaksi dianggap benar, menyebar ke jaringan dan menerima konfirmasi.
Perbedaan antara CoinJoin dan Transaksi Reguler
Diagram di bawah ini menunjukkan perbedaan antara grafik transaksi reguler dan transaksi CoinJoin.

Di atas adalah grafik di mana setiap transaksi memiliki satu atau dua pintu keluar, dan di bawah transaksi sudah ada tiga pintu keluar. Grafik bawah lebih rumit dan lebih sulit untuk dianalisis. Ketika CoinJoin dipraktikkan dalam dompet Bitcoin, sekelompok besar pengguna terbentuk. Maka transaksi dapat memiliki puluhan input dan output (kadang-kadang lebih). Digambarkan di pesawat, grafik transaksi tersebut akan sangat membingungkan. Sebuah koin yang telah melalui rantai transaksi semacam itu memiliki ribuan kemungkinan asal. Sulit menemukan yang asli di antara semua opsi.
Chaumian CoinJoin
Kami datang ke modifikasi CoinJoin yang disebut Chaumian CoinJoin. Dan Gregory Maxwell yang sama menyarankannya. Ini menggunakan operator terpusat dan menggunakan tanda tangan buta. Operator diperlukan untuk melakukan pencampuran input dan output, dan kemudian melakukan transaksi akhir. Tetapi operator tidak dapat mencuri koin atau melanggar kerahasiaan pencampuran karena tanda tangan yang tidak jelas.
Pengguna pre-blinds data sebelum mengirimnya ke operator. Ketika operator menandatangani data ini, ia tidak melihat konten yang sebenarnya. Data yang ditandatangani dikembalikan kepada pengguna, setelah itu ia menghilangkan silau dan semuanya tampak seperti tanda tangan elektronik normal.
Bagaimana interaksi antara pengguna dan operator dalam pembentukan transaksi keseluruhan? Setiap pengguna menyiapkan entri terlebih dahulu, tempat koin miliknya dihabiskan, alamat untuk menerima perubahan, serta alamat yang dibutakan untuk mengirim pembayaran, setelah itu ia menggabungkan data ini ke dalam satu urutan dan mentransfernya ke operator.
Operator memeriksa jumlah input dan pembayaran, menandatangani alamat output dan mengembalikan tanda tangan kepada pengguna. Namun, operator tidak melihat alamat yang diinginkan pengguna untuk mengirim pembayaran, karena ia dibutakan. Lebih lanjut, pengguna menghilangkan buta dari alamat keluaran, secara anonim menghubungkan kembali ke operator dan mengirimkan kepadanya alamat keluaran yang ditandatangani. Operator, pada gilirannya, memeriksa apakah ia benar-benar menandatangani alamat ini dengan kuncinya dan bahwa ia sudah memiliki input yang sesuai, tetapi ia tidak dapat mengetahui input mana yang sesuai dengan output mana. Setelah semua pengguna menyelesaikan tindakan seperti itu, mereka kembali terhubung secara anonim ke operator dan memberikan tanda tangan yang mengkonfirmasi kepemilikan koin pada input transaksi umum. Transaksi yang selesai dapat didistribusikan ke jaringan untuk konfirmasi.
Dalam hal ini, baik pengguna maupun operator tidak dapat melakukan deanonimisasi koin di alamat keluaran. Dan pembentukan transaksi dalam kondisi normal tidak lebih dari satu menit. Interaksi pengguna harus dilakukan melalui jaringan data anonim, yang dapat digunakan sebagai TOR, I2P atau Bitmessage.
Di antara pengguna mungkin ada peserta tidak bermoral yang tujuannya adalah untuk mengganggu proses menciptakan transaksi umum dengan cara apa pun. Ada seluruh daftar skenario perilaku pengguna yang mungkin, termasuk penipuan. Sejumlah mekanisme perlindungan telah dikembangkan untuk mengatasi skenario yang merugikan, yang memungkinkan pengguna yang jujur ββuntuk menjamin pembentukan transaksi akhir. Mekanisme perlindungan menggunakan batas waktu, pelacakan output yang tidak digunakan, dll. Untuk detail lebih lanjut tentang semua skenario dan mekanisme perlindungan, Anda dapat membiasakan diri secara terpisah. Sekarang perhatikan modifikasi CoinJoin selanjutnya, yang disebut CoinShuffle.
Perombakan koin
Modifikasi CoinShuffle diusulkan pada tahun 2014. Tidak ada lagi operator pusat dan ini telah menjadi keuntungan. Pengguna secara mandiri membentuk transaksi umum, berkomunikasi satu sama lain. Namun, mereka tetap tidak bisa melanggar kerahasiaan pencampuran alamat keluaran. Keuntungan lain dari teknik ini adalah bahwa pengguna tidak harus menggunakan jaringan tambahan untuk menganonimkan lalu lintas, karena semua properti yang diperlukan akan dicapai dengan menggunakan satu protokol interaksi P2P antara peserta.
Di sini, enkripsi terarah digunakan, di mana sepasang kunci (publik dan pribadi) digunakan. Pesan dienkripsi menggunakan kunci publik, dan hanya pemilik kunci pribadi yang dapat mendekripsi itu. Untuk komunikasi antara peserta, protokol DiceMix digunakan, dan oposisi terhadap pelanggar juga disediakan.
Memperkenalkan CoinShuffle
Mari kita lihat bagaimana CoinShuffle bekerja.

Bayangkan sekelompok kecil pengguna: Alice yang licik, Bob yang bijak, Charlie yang berjanggut, dan Dave yang berwarna oranye. Masing-masing dari mereka memiliki satu koin yang tidak terpakai dalam blockchain Bitcoin di masing-masing alamat A, B, C dan D. Semua orang ingin menghabiskan koin dan menyembunyikan sejarah asalnya. Untuk tujuan ini, masing-masing anggota kelompok menemukan alamat masing-masing koin A, B, C atau D, tetapi tidak mengungkapkan alamat ini kepada anggota lainnya.
Selanjutnya, masing-masing menghasilkan pasangan kunci baru untuk enkripsi terarah, setelah itu anggota grup bertukar kunci terbuka untuk enkripsi satu sama lain, dan kunci publik baru ditandatangani dengan kunci pribadi yang sesuai dengan alamat dengan koin yang tidak dihabiskan. Dengan cara yang sama, semua pesan peserta akan ditandatangani selama interaksi selanjutnya. Ini adalah tahap pertama.

Peserta mengocok dan membentuk antrian. Alice akan menjadi yang pertama karena dia licik, Bob yang kedua karena dia bijak, dll. Sekarang Alice mengambil A 'dan mengenkripsi diarahkan ke Dave, menggunakan kunci publik Dave, masing-masing. Ciphertext yang dihasilkan Alice kembali mengenkripsi, dan membidik Charlie. Ciphertext ini dienkripsi lagi, tetapi sudah diarahkan pada Bob. Alice meneruskan hasil enkripsi ke Bob. Bob mendekripsi pesan itu dengan kunci pribadinya. Lalu ia mengambil B 'dan mengenkripsi diarahkan ke Dave, lalu ke Charlie dan menambah daftar. Dia secara acak mengocok daftar ini dan memberikannya kepada Charlie. Charlie, pada gilirannya, mendekripsi item daftar dengan kunci pribadinya, menambahkan C ', dienkripsi diarahkan ke Dave, ke dalam daftar dan secara acak mencampur semua item daftar. Daftar ditransfer ke Dave, yang mendekripsi, menerima data alamat terbuka untuk mengirim koin, menambahkan alamat D ', mencampurnya secara acak dan, berdasarkan alamat ini, input dan jumlah transaksi yang diketahui, membentuk transaksi umum.

Dave membagikan transaksi kosong kepada anggota grup lainnya. Selanjutnya, masing-masing dengan hati-hati memeriksa apakah output dari transaksi memiliki alamat yang dibutuhkan dan apakah jumlahnya cocok. Jika semuanya baik-baik saja, maka peserta menandatangani transaksi, mengkonfirmasikan kepemilikan koin dari pintu masuknya. Peserta bertukar tanda tangan dan jika transaksi mengumpulkan semua tanda tangan yang diperlukan, itu dapat didistribusikan ke jaringan untuk konfirmasi.
Jika salah satu peserta mulai menyimpang dari skenario interaksi utama, maka yang lain dapat bersama-sama menganalisis sejarah interaksi dan menghapus pelanggar dari kelompok untuk mengulang semuanya tanpa mereka. Ini adalah fitur penting.
Perhatikan bahwa implementasi CoinShuffle yang sudah jadi sudah ada. Dan dalam praktiknya, mereka bekerja secara efektif bahkan pada kelompok beberapa lusin pengguna. Saat ini, integrasi protokol ini diharapkan dalam beberapa dompet bitcoin, termasuk yang seluler.
Apa kerugian dari metode CoinJoin?
Jelas, ada banyak kesulitan dalam interaksi off-chain untuk pembentukan transaksi, yaitu, perlu untuk mengatur pembentukan kelompok dan interaksi peserta di antara mereka sendiri. Tetapi kelemahan yang lebih signifikan adalah bahwa CoinJoin dalam bentuk murni tidak menyembunyikan jumlah transfer. Akibatnya, rentan terhadap analisis CoinJoin Sudoku, yang didasarkan pada perbandingan jumlah hasil transaksi dan memungkinkan Anda untuk mengungkap sejarah asal-usul koin setelah kebingungan berulang-ulang. Ya, masalah ini dapat diperjuangkan, misalnya, hanya menggunakan jumlah tertentu untuk nilai output transaksi (0,1 VTS, 1 VTS, 10 VTS, dll.), Tetapi ini menciptakan kesulitan dan batasan tambahan. Oleh karena itu, pertimbangkan metode yang sama sekali berbeda yang menyelesaikan masalah jumlah transfer terbuka - Transaksi Rahasia.
Transaksi rahasia
Fitur dari metode Transaksi Rahasia (CT) adalah bahwa ia sepenuhnya menyembunyikan jumlah aktual pada input dan output transaksi dari pihak ketiga. Semua orang dapat memverifikasi bahwa jumlah semua output tidak melebihi jumlah semua input, yang sudah cukup untuk memvalidasi transaksi ini.
Ini dimungkinkan melalui penggunaan bukti nol-pengetahuan - ini adalah bukti kriptografi dari pengetahuan rahasia, tetapi tanpa mengungkapkan yang terakhir. Untuk membuktikan bahwa jumlah output tidak melebihi jumlah input, Komitmen Petersen digunakan, yang didasarkan pada transformasi dalam sekelompok titik pada kurva eliptik. Untuk mengatasi masalah koin yang tidak terkendali dalam skema ini, bukti penggunaan jumlah yang diperbolehkan pada saat keluar dari transaksi harus diterapkan. Untuk memverifikasi bahwa jumlah non-negatif telah digunakan yang tidak melebihi urutan titik dasar, apa yang disebut Bukti Rentang digunakan.
Dan semuanya akan baik-baik saja, tetapi pembuatan Range Proofs yang sama ini sangat mahal dalam hal sumber daya komputasi. Selain itu, mereka memiliki volume yang sangat besar. Secara teori, dimungkinkan untuk mengintegrasikan Transaksi Rahasia ke dalam protokol Bitcoin, tetapi tidak ada yang terburu-buru untuk melakukan ini karena volume yang besar. Namun demikian, sudah ada sistem akuntansi yang berfungsi di mana Transaksi Rahasia berhasil diterapkan.
Telepon transaksi rahasia
Metodologi berikut disebut Transaksi Rahasia Ring. Untuk membingungkan sejarah asal-usul koin, tanda tangan cincin digunakan di sini. Pengirim dalam input transaksinya tidak merujuk pada satu output spesifik (UTXO), tetapi ke beberapa sekaligus. Selanjutnya, dengan bantuan tanda tangan cincin, ia membuktikan bahwa ia memiliki koin dari salah satu dari beberapa pintu keluar, tetapi tidak diungkapkan yang mana. Oleh karena itu tidak mungkin untuk melacak sejarah asal mula koin.
Penggunaan tanda tangan cincin dengan cara ini pertama kali diusulkan dalam protokol CryptoNote, atas dasar beberapa cryptocurrency bekerja. Transaksi Rahasia Ring menggunakan CT. Mereka memungkinkan Anda untuk membuat transaksi dengan banyak input dan output, di mana tidak mungkin untuk melacak asal usul setiap input, jumlah transfer disembunyikan, dan interaksi dengan pengguna lain untuk membuat transaksi tidak diperlukan.
Alamat siluman
Pendekatan ini adalah teknik untuk menghitung alamat secara rahasia ke mana koin akan dikirim. Gagasan ini pertama kali dijelaskan oleh Peter Todd. Kunci publik digunakan sebagai pengidentifikasi pengguna: jika Anda ingin menerima pembayaran, maka Anda perlu mengumumkan kunci publik Anda.
Pengirim menggunakan pasangan kuncinya dan kunci publik Anda untuk menghitung kunci publik satu kali yang baru, yang sudah akan ditunjukkan dalam transaksi sebagai alamat. Ternyata hanya pengirim dan penerima yang dapat mengetahui alamat koin yang dikirim. Untuk pengamat pihak ketiga, koneksi antara ID pengguna dan alamat pada output transaksi tidak dapat dibuat.
Aplikasi praktis
Di mana metode ini diterapkan dalam praktik?

Tim Bitshares adalah salah satu yang pertama untuk mengimplementasikan CT bersama dengan Stealth Addresses, tidak hanya untuk mata uang dasar, tetapi juga untuk token yang dapat dikeluarkan pada platform. Cryptocurrency Monero mendukung tanda tangan dering dan Alamat Stealth untuk memastikan tingkat privasi yang tinggi. Pada Januari 2017, tim menerapkan RingCT, dan dengan pembaruan pada September 2017, penggunaan RingCT menjadi sangat wajib. Perlu dicatat protokol Mimblewimble, yang menggunakan versi modifikasi dari CT, yang saat ini sedang dalam pengembangan aktif, tetapi kita akan membicarakannya nanti.
Ada proyek ZeroLink, yang merupakan kerangka kerja untuk membuat dompet rahasia berdasarkan teknik Chaumian CoinJoin. Perlu dicatat bahwa ini dapat bekerja dalam Bitcoin, tanpa memerlukan perubahan apa pun pada protokol itu sendiri.
Mari kita beralih ke pertanyaan yang sering diajukan.
- Apakah mungkin menggunakan Alamat Stealth dalam bitcoin?Ya, Anda dapat menggunakannya sekarang, pembaruan protokol tidak diperlukan untuk ini. Tetapi untuk adaptasi yang lebih luas dari fungsi ini, perlu untuk secara spesifik menentukan urutan kalkulasi dan format data sehingga semua dompet dapat saling bekerja dan, karenanya, menambahkan fungsi ini ke dompet itu sendiri. Peter Todd telah membuat BIP terpisah untuk memperkenalkan spesifikasi ini, tetapi masih dalam pertimbangan.
- Apakah efektif menggunakan CoinJoin dalam bentuk paling murni untuk bitcoin?Tidak, dalam bentuk murni, itu tidak efektif, karena transaksi semacam itu memungkinkan mereka untuk melakukan analisis sederhana dengan jumlah transfer.
Atau, Anda dapat menggunakan jumlah yang sama untuk semua peserta, sambil menghindari mixer tepercaya yang dapat mencuri koin atau melanggar kerahasiaan.- Dapatkah metode yang dibahas di atas diterapkan untuk memastikan kerahasiaan dalam mata uang digital seperti Ethereum, Ripple dan Stellar?Tidak, tidak. Ethereum, Ripple dan Stellar menggunakan model transaksi yang sama sekali berbeda dan cara akuntansi untuk koin yang berbeda, yang tidak dapat diterapkan metode untuk mencapai kerahasiaan. Tentu saja, Anda dapat mencoba mengintegrasikan Alamat Stealth atau Transaksi Rahasia secara artifisial, tetapi ini akan sangat tidak efektif dalam hal kinerja mata uang. Alasannya adalah bahwa dalam Bitcoin, akuntansi didasarkan pada output yang tidak digunakan (mis. UTXO), dan mata uang ini menggunakan saldo dan akun.Topik ini dibahas dalam salah satu kuliah kursus privasi cryptocurrency online Blockchain .