Tentang anonimitas di blokir berbasis akun

Kami telah lama tertarik dengan topik anonimitas dalam cryptocurrency dan mencoba mengikuti perkembangan teknologi di bidang ini. Dalam artikel kami, kami telah memeriksa secara rinci prinsip-prinsip operasi transaksi rahasia di Monero, dan juga melakukan tinjauan komparatif dari teknologi yang ada di bidang ini. Namun, semua cryptocurrency anonim hari ini dibangun di atas model data yang diusulkan oleh Bitcoin - Output Transaksi yang Tidak Terpakai (selanjutnya disebut UTXO). Untuk blockchains berbasis akun seperti Ethereum, solusi yang ada untuk implementasi anonimitas dan privasi (misalnya, Mobius atau Aztec ) mencoba mengulangi model UTXO dalam kontrak pintar.

Pada bulan Februari 2019, sekelompok peneliti dari Stanford University dan Visa Research merilis cetakan "Zether: Menuju Privasi di Dunia Kontrak Cerdas." Penulis pertama kali mengusulkan pendekatan untuk memastikan anonimitas dalam blockchain berbasis akun dan menyajikan dua opsi untuk kontrak pintar: untuk transaksi rahasia (menyembunyikan saldo dan jumlah transfer) dan anonim (menyembunyikan penerima dan pengirim) transaksi. Kami menemukan teknologi yang diusulkan menarik dan ingin membagikan perangkatnya, serta berbicara tentang mengapa masalah anonimitas dalam blockchains berbasis akun dianggap sangat rumit dan apakah penulis berhasil menyelesaikannya secara penuh.



Tentang perangkat model data ini


Dalam model UTXO, transaksi terdiri dari "input" dan "output". Analog langsung dengan "pintu keluar" adalah uang kertas di dompet Anda: setiap "outlet" memiliki denominasi tertentu. Ketika Anda membayar dengan seseorang (membentuk transaksi) Anda menghabiskan satu atau lebih "output", sementara mereka menjadi "input" dari transaksi, dan blockchain menandainya sebagai dibelanjakan. Pada saat yang sama, penerima pembayaran Anda (atau Anda sendiri, jika Anda perlu perubahan) menerima "output" yang baru dihasilkan. Secara skematis, ini dapat direpresentasikan sebagai berikut:

gambar

Blockchains berbasis akun disusun seperti rekening bank Anda. Mereka hanya beroperasi pada jumlah di akun Anda dan jumlah transfer. Saat Anda mentransfer jumlah tertentu dari akun Anda, Anda tidak membakar "pintu keluar" apa pun, jaringan tidak perlu mengingat koin mana yang dikeluarkan dan mana yang tidak. Dalam kasus yang paling sederhana, verifikasi transaksi dikurangi menjadi memeriksa tanda tangan pengirim dan jumlah pada neraca:

gambar

Teknologi parsing


Selanjutnya, kita akan berbicara tentang bagaimana Zether menyembunyikan jumlah transaksi, penerima dan pengirim. Dalam perjalanan deskripsi prinsip-prinsip karyanya, kami akan mencatat perbedaan dalam versi rahasia dan anonim. Karena memastikan privasi dalam blockchains berbasis akun jauh lebih sederhana, beberapa batasan yang diberlakukan oleh anonimisasi tidak akan relevan untuk versi teknologi rahasia.

Penyembunyian saldo dan jumlah transfer


Zether menggunakan skema enkripsi El Gamal untuk mengenkripsi saldo dan jumlah transfer. Ini berfungsi sebagai berikut. Ketika Alice ingin mengirim koin Bob b ke alamat (kunci publiknya) Y , ia memilih nomor acak r dan mengenkripsi jumlahnya:

gambar

di mana C adalah jumlah terenkripsi, D adalah nilai tambahan yang diperlukan untuk mendekripsi jumlah ini, G adalah titik tetap pada kurva eliptik, ketika kunci rahasia dikalikan dengan mana kunci publik diperoleh.

Ketika Bob menerima nilai-nilai ini, ia hanya menambahkannya ke saldo, dienkripsi dengan cara yang sama, yang sesuai untuk skema ini.

Demikian pula, Alice mengurangi nilai yang sama dari neraca, hanya menggunakan Y sebagai kunci publiknya.

Penyembunyian penerima dan pengirim


Pencampuran "keluar" di UTXO muncul pada awal cryptocurrency dan membantu menyembunyikan pengirim. Untuk melakukan ini, pengirim, ketika melakukan transfer, mengumpulkan "keluar" secara acak di blockchain dan memijat mereka dengan miliknya. Kemudian dia menandatangani "pintu keluar" dengan tanda tangan cincin - mekanisme kriptografi yang memungkinkan dia untuk meyakinkan verifier bahwa di antara "pintu keluar" yang terlibat ada koin pengirim. Koin yang terlibat sendiri, tentu saja, tidak disia-siakan.

Namun, untuk menyembunyikan penerima, kami tidak akan dapat menghasilkan "output" palsu. Oleh karena itu, dalam UTXO, setiap "pintu keluar" memiliki alamat uniknya sendiri, dan secara kriptografis dikaitkan dengan alamat penerima koin-koin ini. Saat ini, tidak ada cara untuk mengidentifikasi hubungan antara alamat "keluar" yang unik dan alamat penerima tanpa mengetahui kunci rahasianya.

Dalam model berbasis akun, kami tidak dapat menggunakan alamat satu kali (jika tidak maka akan menjadi model "keluar"). Oleh karena itu, penerima dan pengirim harus diremas di antara akun lain di blockchain. Pada saat yang sama, 0 koin terenkripsi didebit dari akun yang diulut (atau 0 ditambahkan - dalam kasus pengocok penerima), tanpa benar-benar mengubah keseimbangan nyata mereka.

Karena pengirim dan penerima selalu memiliki alamat permanen, di sini menjadi perlu untuk menggunakan grup yang sama untuk menggabungkan ke alamat yang sama. Lebih mudah untuk mempertimbangkan ini dengan sebuah contoh.

Misalkan Alice memutuskan untuk berkontribusi pada amal Bob, tetapi lebih suka bahwa transfer tetap anonim bagi pengamat luar. Kemudian, untuk menyamarkan dirinya di bidang pengirim, ia juga memasuki akun Adam dan Adele. Dan untuk menyembunyikan Bob - di bidang penerima juga akun Ben dan Bill. Membuat cicilan berikutnya, Alice memutuskan untuk memasukkan Alex dan Amanda di sebelahnya, dan Bruce dan Bengen di sebelah Bob. Dalam hal ini, ketika menganalisis blockchain dalam dua transaksi ini, hanya ada satu pasangan peserta yang bersilangan - Alice dan Bob, yang melakukan deanonimisasi transaksi ini.

gambar

Balapan Transaksi


Seperti yang telah kami sebutkan, untuk menyembunyikan saldo di sistem berbasis akun, pengguna mengenkripsi saldo dan jumlah transfernya. Selain itu, ia harus membuktikan bahwa saldo dalam akunnya tetap tidak negatif. Masalahnya adalah ketika membentuk transaksi, pengguna membuat bukti tentang status akunnya saat ini. Dan apa yang terjadi jika Bob mengirim transaksi ke Alice, dan itu akan diterima lebih awal daripada yang dikirim oleh Alice? Maka transaksi Alice akan dianggap tidak valid, karena bukti saldo dibangun sebelum adopsi transaksi Bob.

gambar

Solusi pertama yang datang dalam situasi seperti ini adalah membekukan akun Anda sebelum transaksi. Tetapi pendekatan ini tidak cocok, karena selain kompleksitas 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 uang memiliki efek langsung pada neraca, dan pendapatan ditangguhkan. Untuk ini, konsep "era" diperkenalkan - sekelompok blok ukuran tetap. "Era" saat ini ditentukan dengan membagi tinggi blok dengan ukuran grup. Memproses transaksi, jaringan segera memperbarui saldo pengirim, dan menambahkan dana penerima ke drive. Akumulasi dana hanya tersedia bagi penerima pembayaran ketika "era" baru masuk.

Akibatnya, pengguna dapat mengirim transaksi terlepas dari seberapa sering mereka menerima dana (tentu saja, sejauh saldo memungkinkan). Ukuran zaman ditentukan berdasarkan seberapa cepat blok menyebar di seluruh jaringan dan seberapa cepat transaksi jatuh ke dalam blok.

Solusi ini berfungsi dengan baik dalam hal transfer rahasia, tetapi dengan transaksi anonim, seperti yang akan kita lihat nanti, ini menciptakan masalah serius.

Putar ulang perlindungan serangan


Di blockchains berbasis akun, setiap transaksi ditandatangani oleh kunci pribadi pengirim, yang meyakinkan verifier bahwa transaksi belum diubah dan dibuat oleh pemilik kunci ini. Tetapi bagaimana jika penyerang yang mendengarkan saluran transmisi memotong pesan ini dan mengirimkan detik yang sama persis? Verifier akan memverifikasi tanda tangan transaksi dan diyakinkan tentang kepengarangannya, dan jaringan akan mendebit jumlah yang sama dari saldo pengirim lagi.

Serangan ini disebut serangan replay. Dalam model UTXO, serangan seperti itu tidak relevan, karena penyerang akan mencoba menggunakan output yang dihabiskan, yang dengan sendirinya tidak valid dan ditolak oleh jaringan.

Untuk mencegah hal ini terjadi, bidang data acak dimasukkan ke dalam transaksi, yang disebut nonce atau hanya "garam". Saat mengirimkan kembali transaksi dengan garam, peninjau melihat untuk melihat apakah transaksi ini telah digunakan sebelumnya dan, jika tidak, menganggap transaksi ini sah. Agar tidak menyimpan seluruh riwayat pengguna nonce di blockchain, biasanya dianggap nol dalam transaksi pertama, dan kemudian bertambah satu. Jaringan hanya dapat memverifikasi bahwa transaksi yang baru berbeda dari masa lalu satu per satu.

Dalam skema terjemahan anonim, masalah memvalidasi transaksi nonce muncul. Kami tidak dapat mengikat secara tidak langsung ke alamat pengirim, karena, jelas, ini men-deanonimkan terjemahan. Kami juga tidak dapat menambahkan satu ke nonce dari semua akun yang berpartisipasi, karena ini dapat bertentangan dengan terjemahan lain yang sedang diproses.

Para penulis Zether mengusulkan untuk menghasilkan nonce secara kriptografis - tergantung pada "era". Sebagai contoh:

gambar

Di sini x adalah kunci rahasia pengirim, dan G zaman adalah generator tambahan untuk zaman ini, yang diperoleh dengan hashing string dari bentuk 'Zether +'. Sekarang masalahnya, tampaknya, sedang diselesaikan - kami tidak mengungkapkan kiriman pengirim dan tidak mengganggu kiriman peserta yang tidak terlibat. Tetapi pendekatan ini memberlakukan batasan serius: satu akun tidak dapat mengirim lebih dari satu transaksi di "era". Masalah ini, sayangnya, masih belum terselesaikan, dan saat ini membuat versi Zether anonim, menurut pendapat kami, hampir tidak cocok untuk digunakan.

Bukti Keyakinan Nol


Di UTXO, pengirim harus membuktikan kepada jaringan bahwa ia tidak membelanjakan jumlah negatif, jika tidak menjadi mungkin untuk menghasilkan koin baru dari udara (mengapa ini mungkin, kami menulis di salah satu artikel sebelumnya). Dan juga menandatangani "input" dengan tanda tangan cincin untuk membuktikan bahwa di antara koin pengocok ada dana miliknya.

Dalam versi anonim dari blockchain berbasis akun, ekspresi untuk bukti jauh lebih rumit. Pengirim membuktikan bahwa:

  1. Jumlah yang dikirim positif;
  2. Saldo tetap tidak negatif;
  3. Pengirim dengan benar mengenkripsi jumlah transfer (termasuk nol);
  4. Saldo saldo hanya diubah oleh pengirim dan penerima;
  5. Pengirim memiliki kunci rahasia dari akunnya dan dia benar-benar ada dalam daftar pengirim (di antara mereka yang terlibat);
  6. Angka yang digunakan dalam transaksi dibuat dengan benar.

Untuk bukti kompleks seperti itu, penulis menggunakan campuran Bulletproof (salah satu penulis, dengan cara, mengambil bagian dalam pembuatannya) dan protokol Sigma , yang disebut peluru-Sigma. Bukti formal dari pernyataan semacam itu adalah tugas yang agak sulit, dan itu sangat membatasi jumlah orang yang ingin mengambil implementasi teknologi.

Apa hasilnya?


Menurut pendapat kami, bagian Zether, yang menambahkan privasi ke blockchains berbasis akun, dapat digunakan sekarang. Tetapi pada saat ini, versi anonim dari teknologi memberlakukan pembatasan serius pada penggunaannya, dan kompleksitasnya pada implementasi. Namun, jangan lupa bahwa penulis merilisnya hanya beberapa bulan yang lalu, dan mungkin orang lain akan menemukan solusi untuk masalah hari ini. Memang, ini adalah bagaimana ilmu pengetahuan dilakukan.

Source: https://habr.com/ru/post/id452184/


All Articles