Tentang anonimitas dalam blockchain berbasis akun

Kami telah lama tertarik dengan topik anonimitas dalam cryptocurrency dan mencoba mengikuti perkembangan teknologi di bidang ini. Dalam artikel kami, kami telah membahas secara rinci prinsip-prinsip operasi transaksi rahasia di Monero, dan juga dilakukan ulasan komparatif teknologi yang ada di bidang ini. Namun, semua cryptocurrency anonim saat ini dibangun berdasarkan model data yang diusulkan oleh Bitcoin - Output Transaksi Tak Terpakai (selanjutnya disebut UTXO). Untuk blockchain berbasis akun seperti Ethereum, solusi yang ada untuk menerapkan anonimitas dan kerahasiaan (misalnya, Mobius или Aztec) mencoba mereplikasi model UTXO dalam kontrak pintar.

Pada bulan Februari 2019, sekelompok peneliti dari Stanford University dan Visa Research dilepaskan pracetak "Zether: Menuju privasi di dunia kontrak pintar." Penulis adalah orang pertama yang mengusulkan pendekatan untuk memastikan anonimitas dalam blockchain berbasis akun dan menyajikan dua versi kontrak pintar: untuk transaksi rahasia (menyembunyikan saldo dan jumlah transfer) dan anonim (menyembunyikan penerima dan pengirim). Kami menganggap teknologi yang diusulkan ini menarik dan ingin berbagi desainnya, serta membicarakan mengapa masalah anonimitas dalam blockchain berbasis akun dianggap sangat sulit dan apakah penulis berhasil menyelesaikannya sepenuhnya.

Tentang struktur model data ini

Dalam model UTXO, suatu transaksi terdiri dari “input” dan “output”. Analog langsung dari “output” adalah uang kertas di dompet Anda: setiap “output” memiliki denominasi tertentu. Saat Anda membayar seseorang (melakukan transaksi), Anda membelanjakan satu atau lebih “output”, dalam hal ini mereka menjadi “input” transaksi, dan blockchain menandainya sebagai telah dibelanjakan. Dalam hal ini, penerima pembayaran Anda (atau Anda sendiri, jika Anda memerlukan uang kembalian) menerima “keluaran” yang baru dihasilkan. Secara skematis dapat direpresentasikan seperti ini:

Tentang anonimitas dalam blockchain berbasis akun

Blockchain berbasis akun memiliki struktur yang mirip dengan rekening bank Anda. Mereka hanya menangani jumlah di akun Anda dan jumlah transfer. Saat Anda mentransfer sejumlah uang dari akun Anda, Anda tidak membakar “output” apa pun, jaringan tidak perlu mengingat koin mana yang telah dibelanjakan dan mana yang belum. Dalam kasus paling sederhana, verifikasi transaksi dilakukan dengan memeriksa tanda tangan pengirim dan jumlah saldonya:

Tentang anonimitas dalam blockchain berbasis akun

Analisis teknologi

Selanjutnya, kita akan membahas bagaimana Zether menyembunyikan jumlah transaksi, penerima, dan pengirim. Saat kami menjelaskan prinsip pengoperasiannya, kami akan memperhatikan perbedaan antara versi rahasia dan anonim. Karena lebih mudah untuk memastikan kerahasiaan dalam blockchain berbasis akun, beberapa pembatasan yang diberlakukan oleh anonimisasi tidak akan relevan untuk versi rahasia teknologi tersebut.

Menyembunyikan saldo dan jumlah transfer

Skema enkripsi digunakan untuk mengenkripsi saldo dan mentransfer jumlah di Zether El Gamal. Ini berfungsi sebagai berikut. Ketika Alice ingin mengirim Bob b koin berdasarkan alamat (kunci publiknya) Y, dia memilih nomor acak r dan mengenkripsi jumlahnya:

Tentang anonimitas dalam blockchain berbasis akun
dimana C - jumlah terenkripsi, D - nilai tambahan yang diperlukan untuk menguraikan jumlah ini, G - titik tetap pada kurva elips, bila dikalikan dengan kunci rahasia, diperoleh kunci publik.

Ketika Bob menerima nilai-nilai ini, dia hanya menambahkannya ke saldo terenkripsi dengan cara yang sama, itulah sebabnya skema ini nyaman.

Demikian pula, Alice mengurangi nilai yang sama dari saldonya, hanya sebagai Y menggunakan kunci publik Anda.

Menyembunyikan penerima dan pengirim

Mengacak “output” di UTXO sudah ada sejak masa awal mata uang kripto dan membantu menyembunyikan pengirimnya. Untuk melakukan ini, pengirim sendiri, ketika melakukan transfer, mengumpulkan “output” acak di blockchain dan mencampurkannya dengan miliknya. Selanjutnya, dia menandatangani “keluaran” dengan tanda tangan cincin—mekanisme kriptografi yang memungkinkan dia meyakinkan pemverifikasi bahwa koin pengirim ada di antara “keluaran” yang terlibat. Koin campuran itu sendiri, tentu saja, tidak dibelanjakan.

Namun, kami tidak akan dapat menghasilkan keluaran palsu untuk menyembunyikan penerimanya. Oleh karena itu, di UTXO, setiap “output” memiliki alamat uniknya sendiri, dan secara kriptografis ditautkan ke alamat penerima koin tersebut. Saat ini, tidak ada cara untuk mengidentifikasi hubungan antara alamat keluaran unik dan alamat penerima tanpa mengetahui kunci rahasianya.

Dalam model berbasis akun, kita tidak dapat menggunakan alamat satu kali (jika tidak, maka ini sudah menjadi model “keluar”). Oleh karena itu, penerima dan pengirim harus digabungkan dengan akun lain di blockchain. Dalam hal ini, 0 koin terenkripsi didebit dari akun campuran (atau 0 ditambahkan jika penerimanya beragam), tanpa benar-benar mengubah saldo sebenarnya.

Karena pengirim dan penerima selalu memiliki alamat permanen, maka perlu menggunakan grup yang sama untuk pencampuran saat mentransfer ke alamat yang sama. Lebih mudah untuk melihat ini dengan sebuah contoh.

Katakanlah Alice memutuskan untuk memberikan kontribusi pada badan amal Bob, namun lebih memilih agar transfer tersebut tetap anonim bagi pengamat luar. Lalu, demi menyamar di kolom pengirim, ia pun masuk ke akun Adam dan Adele. Dan untuk menyembunyikan Bob, tambahkan akun Ben dan Bill di kolom penerima. Memberikan kontribusi berikutnya, Alice memutuskan untuk menulis Alex dan Amanda di sebelahnya, dan Bruce serta Benjen di samping Bob. Dalam hal ini, ketika menganalisis blockchain, dalam dua transaksi ini hanya ada satu pasangan peserta yang berpotongan - Alice dan Bob, yang membuat transaksi ini tidak dianonimkan.

Tentang anonimitas dalam blockchain berbasis akun

Perlombaan transaksi

Seperti yang telah kami sebutkan, untuk menyembunyikan saldo Anda dalam sistem berbasis akun, pengguna mengenkripsi saldo dan jumlah transfernya. Pada saat yang sama, ia harus membuktikan bahwa saldo rekeningnya tetap non-negatif. Masalahnya adalah saat membuat transaksi, pengguna membuat bukti mengenai status akunnya saat ini. Apa yang terjadi jika Bob mengirimkan transaksi ke Alice, dan transaksi tersebut diterima sebelum transaksi dikirim oleh Alice? Maka transaksi Alice akan dianggap tidak sah, karena bukti saldo telah dibuat sebelum transaksi Bob diterima.

Tentang anonimitas dalam blockchain berbasis akun

Keputusan pertama yang diambil dalam situasi seperti ini adalah membekukan akun hingga transaksi dilakukan. Namun pendekatan ini tidak cocok, karena selain rumitnya penyelesaian masalah seperti itu dalam sistem terdistribusi, dalam skema anonim tidak akan jelas akun siapa yang akan diblokir.

Untuk mengatasi masalah ini, teknologi memisahkan transaksi masuk dan keluar: pengeluaran mempunyai dampak langsung pada neraca, sedangkan penerimaan mempunyai efek tertunda. Untuk melakukan ini, konsep "zaman" diperkenalkan - sekelompok balok dengan ukuran tetap. "Epos" saat ini ditentukan dengan membagi tinggi blok dengan ukuran grup. Saat memproses transaksi, jaringan segera memperbarui saldo pengirim dan menyimpan dana penerima di tangki penyimpanan. Akumulasi dana tersedia bagi penerima pembayaran hanya ketika “era” baru dimulai.

Hasilnya, pengguna dapat mengirim transaksi terlepas dari seberapa sering dana diterima (tentu saja, sejauh saldonya memungkinkan). Ukuran epoch ditentukan berdasarkan seberapa cepat blok menyebar melalui jaringan dan seberapa cepat transaksi memasuki blok.

Solusi ini bekerja dengan baik untuk transfer rahasia, tetapi dengan transaksi anonim, seperti yang akan kita lihat nanti, solusi ini menimbulkan masalah serius.

Perlindungan terhadap serangan ulangan

Dalam blockchain berbasis akun, setiap transaksi ditandatangani oleh kunci pribadi pengirim, yang meyakinkan verifikasi bahwa transaksi tersebut belum diubah dan dibuat oleh pemilik kunci ini. Tetapi bagaimana jika penyerang yang mendengarkan saluran transmisi mencegat pesan ini dan mengirimkan pesan kedua yang sama persis? Verifikator akan memverifikasi tanda tangan transaksi dan memastikan kepengarangannya, dan jaringan akan menghapus jumlah yang sama lagi dari saldo pengirim.

Serangan ini disebut serangan ulangan. Dalam model UTXO, serangan seperti itu tidak relevan, karena penyerang akan mencoba menggunakan keluaran yang sudah habis, yang dengan sendirinya tidak valid dan ditolak oleh jaringan.

Untuk mencegah hal ini terjadi, sebuah bidang dengan data acak dimasukkan ke dalam transaksi, yang disebut nonce atau hanya “salt”. Saat mengirimkan ulang transaksi dengan garam, pemverifikasi memeriksa apakah nonce telah digunakan sebelumnya dan, jika belum, menganggap transaksi tersebut valid. Agar tidak menyimpan seluruh riwayat nonce pengguna di blockchain, biasanya pada transaksi pertama ditetapkan sama dengan nol, dan kemudian ditambah satu. Jaringan hanya dapat memeriksa bahwa nilai transaksi baru berbeda satu per satu dari transaksi sebelumnya.

Dalam skema transfer anonim, masalah validasi nonce transaksi muncul. Kami tidak dapat secara eksplisit mengikat nonce ke alamat pengirim, karena, jelas, ini membuat transfer tidak anonim. Kami juga tidak dapat menambahkan satu pun ke nonce semua akun yang berpartisipasi, karena hal ini mungkin bertentangan dengan transfer lain yang sedang diproses.

Penulis Zether mengusulkan untuk menghasilkan nonce secara kriptografis, bergantung pada “zaman”. Misalnya:

Tentang anonimitas dalam blockchain berbasis akun
Di sini x adalah kunci rahasia pengirim, dan Gepoch — generator tambahan untuk epoch, diperoleh dengan melakukan hashing pada string berbentuk 'Zether +'. Sekarang masalahnya tampaknya telah terpecahkan - kami tidak mengungkapkan nonce pengirim dan tidak mengganggu nonce peserta yang tidak terlibat. Namun pendekatan ini memberikan batasan yang serius: satu akun hanya dapat mengirim tidak lebih dari satu transaksi per “epoch”. Sayangnya masalah ini masih belum terselesaikan, dan saat ini membuat versi anonim Zether, menurut kami, hampir tidak cocok untuk digunakan.

Kompleksitas Bukti Pengetahuan Nol

Di UTXO, pengirim harus membuktikan kepada jaringan bahwa dia tidak membelanjakan jumlah negatif, jika tidak maka akan mungkin untuk menghasilkan koin baru secara tiba-tiba (mengapa hal ini mungkin, kami tulis di salah satu artikel sebelumnya artikel). Dan juga menandatangani “masukan” dengan tanda tangan cincin untuk membuktikan bahwa di antara uang logam yang dicampur tersebut terdapat dana miliknya.

Dalam versi anonim dari blockchain berbasis akun, ekspresi pembuktian jauh lebih kompleks. Pengirim membuktikan bahwa:

  1. Jumlah yang dikirim positif;
  2. Saldonya tetap non-negatif;
  3. Pengirim mengenkripsi jumlah transfer dengan benar (termasuk nol);
  4. Saldo pada saldo hanya berubah bagi pengirim dan penerima;
  5. Pengirim memiliki kunci pribadi ke akunnya dan dia sebenarnya ada dalam daftar pengirim (di antara mereka yang terlibat);
  6. Nonce yang digunakan dalam transaksi disusun dengan benar.

Untuk pembuktian yang sedemikian rumit, penulis menggunakan campuran Antipeluru (omong-omong, salah satu penulis mengambil bagian dalam pembuatannya) dan Protokol Sigma, yang disebut peluru Sigma. Pembuktian formal atas pernyataan semacam itu merupakan tugas yang agak sulit, dan sangat membatasi jumlah orang yang ingin menerapkan teknologi tersebut.

Hasilnya?

Menurut pendapat kami, bagian Zether yang menghadirkan privasi ke blockchain berbasis akun dapat digunakan saat ini. Namun saat ini, versi teknologi anonim memberlakukan pembatasan serius pada penggunaannya, dan kompleksitas penerapannya. Namun, tidak boleh diabaikan bahwa penulis baru merilisnya beberapa bulan yang lalu, dan mungkin orang lain akan menemukan solusi untuk permasalahan yang ada saat ini. Bagaimanapun, sains dilakukan dengan cara ini.

Sumber: www.habr.com

Tambah komentar