Mengenai kerahasiaan dalam blockchain berasaskan akaun

Kami telah lama berminat dengan topik tanpa nama dalam mata wang kripto dan cuba mengikuti perkembangan teknologi dalam bidang ini. Dalam artikel kami, kami telah membincangkan secara terperinci prinsip operasi transaksi sulit di Monero, dan juga dijalankan ulasan perbandingan teknologi yang ada dalam bidang ini. Walau bagaimanapun, semua mata wang kripto tanpa nama hari ini dibina berdasarkan model data yang dicadangkan oleh Bitcoin - Unspent Transaction Output (selepas ini UTXO). Untuk blockchain berasaskan akaun seperti Ethereum, penyelesaian sedia ada untuk melaksanakan kerahsiaan dan kerahsiaan (contohnya, Mobius atau Aztec) cuba meniru model UTXO dalam kontrak pintar.

Pada Februari 2019, sekumpulan penyelidik dari Universiti Stanford dan Penyelidikan Visa dilepaskan pracetak "Zether: Ke arah privasi dalam dunia kontrak pintar." Penulis adalah orang pertama yang mencadangkan pendekatan untuk memastikan kerahsiaan dalam rantaian berasaskan akaun dan membentangkan dua versi kontrak pintar: untuk urus niaga sulit (menyembunyikan baki dan jumlah pemindahan) dan tanpa nama (menyembunyikan penerima dan pengirim). Kami mendapati teknologi yang dicadangkan itu menarik dan ingin berkongsi reka bentuknya, serta bercakap tentang mengapa masalah ketaknamaan dalam rantaian blok berasaskan akaun dianggap sangat sukar dan sama ada pengarang berjaya menyelesaikannya sepenuhnya.

Mengenai struktur model data ini

Dalam model UTXO, transaksi terdiri daripada "input" dan "output". Analog langsung "output" ialah bil dalam dompet anda: setiap "output" mempunyai beberapa denominasi. Apabila anda membayar seseorang (membentuk urus niaga) anda membelanjakan satu atau lebih "output", dalam hal ini ia menjadi "input" urus niaga, dan blockchain menandakan mereka sebagai dibelanjakan. Dalam kes ini, penerima pembayaran anda (atau anda sendiri, jika anda memerlukan perubahan) menerima "output" yang baru dijana. Ini boleh diwakili secara skematik seperti ini:

Mengenai kerahasiaan dalam blockchain berasaskan akaun

Blockchain berasaskan akaun distrukturkan sama seperti akaun bank anda. Mereka hanya berurusan dengan jumlah dalam akaun anda dan jumlah pemindahan. Apabila anda memindahkan beberapa amaun daripada akaun anda, anda tidak membakar sebarang "output", rangkaian tidak perlu mengingati syiling mana yang telah dibelanjakan dan mana yang tidak. Dalam kes paling mudah, pengesahan urus niaga datang untuk menyemak tandatangan pengirim dan amaun pada bakinya:

Mengenai kerahasiaan dalam blockchain berasaskan akaun

Analisis teknologi

Seterusnya, kita akan bercakap tentang cara Zether menyembunyikan jumlah transaksi, penerima dan pengirim. Semasa kami menerangkan prinsip operasinya, kami akan melihat perbezaan dalam versi sulit dan tanpa nama. Memandangkan lebih mudah untuk memastikan kerahsiaan dalam rantaian blok berasaskan akaun, beberapa sekatan yang dikenakan oleh penyahnamaan tidak akan relevan untuk versi sulit teknologi.

Menyembunyikan baki dan amaun pindahan

Skim penyulitan digunakan untuk menyulitkan baki dan memindahkan jumlah dalam Zether El Gamal. Ia berfungsi seperti berikut. Apabila Alice mahu menghantar Bob b syiling mengikut alamat (kunci awamnya) Y, dia memilih nombor rawak r dan menyulitkan jumlah:

Mengenai kerahasiaan dalam blockchain berasaskan akaun
mana C - jumlah yang disulitkan, D - nilai tambahan yang diperlukan untuk menguraikan jumlah ini, G - titik tetap pada lengkung eliptik, apabila didarab dengan kunci rahsia, kunci awam diperolehi.

Apabila Bob menerima nilai ini, dia hanya menambahkannya pada baki yang disulitkan dengan cara yang sama, itulah sebabnya skim ini mudah.

Begitu juga, Alice menolak nilai yang sama daripada bakinya, hanya sebagai Y menggunakan kunci awam anda.

Menyembunyikan penerima dan pengirim

Kocok "output" dalam UTXO bermula sejak zaman awal mata wang kripto dan membantu menyembunyikan pengirim. Untuk melakukan ini, penghantar itu sendiri, apabila membuat pemindahan, mengumpul "output" rawak dalam blockchain dan mencampurkannya dengan miliknya sendiri. Seterusnya, dia menandatangani "output" dengan tandatangan cincinβ€”mekanisme kriptografi yang membolehkannya meyakinkan pengesah bahawa syiling penghantar terdapat di antara "output" yang terlibat. Syiling campuran itu sendiri, sudah tentu, tidak dibelanjakan.

Walau bagaimanapun, kami tidak akan dapat menghasilkan output palsu untuk menyembunyikan penerima. Oleh itu, dalam UTXO, setiap "output" mempunyai alamat uniknya sendiri, dan ia dikaitkan secara kriptografi kepada alamat penerima syiling ini. Pada masa ini, tiada cara untuk mengenal pasti hubungan antara alamat output unik dan alamat penerima tanpa mengetahui kunci rahsianya.

Dalam model berasaskan akaun, kami tidak boleh menggunakan alamat sekali sahaja (jika tidak, ia sudah menjadi model "keluar"). Oleh itu, penerima dan penghantar perlu bercampur antara akaun lain dalam rantaian blok. Dalam kes ini, syiling 0 yang disulitkan didebitkan daripada akaun bercampur (atau 0 ditambah jika penerima bercampur), tanpa benar-benar mengubah baki sebenar mereka.

Memandangkan kedua-dua pengirim dan penerima sentiasa mempunyai alamat tetap, adalah perlu untuk menggunakan kumpulan yang sama untuk bercampur apabila memindahkan ke alamat yang sama. Lebih mudah untuk melihat ini dengan contoh.

Katakan Alice memutuskan untuk membuat sumbangan kepada badan amal Bob, tetapi lebih suka pemindahan itu kekal tanpa nama kepada pemerhati luar. Kemudian, untuk menyamar dalam medan penghantar, dia juga memasukkan akaun Adam dan Adele. Dan untuk menyembunyikan Bob, tambahkan akaun Ben dan Bill dalam medan penerima. Membuat sumbangan seterusnya, Alice memutuskan untuk menulis Alex dan Amanda di sebelahnya, dan Bruce dan Benjen di sebelah Bob. Dalam kes ini, apabila menganalisis rantaian blok, dalam kedua-dua transaksi ini hanya terdapat satu pasangan peserta yang bersilang - Alice dan Bob, yang menyahnamakan transaksi ini.

Mengenai kerahasiaan dalam blockchain berasaskan akaun

Perlumbaan transaksi

Seperti yang telah kami nyatakan, untuk menyembunyikan baki anda dalam sistem berasaskan akaun, pengguna menyulitkan bakinya dan jumlah pemindahan. Pada masa yang sama, dia mesti membuktikan bahawa baki pada akaunnya kekal bukan negatif. Masalahnya ialah apabila membuat transaksi, pengguna membina bukti mengenai status akaun semasanya. Apakah yang berlaku jika Bob menghantar transaksi kepada Alice, dan ia diterima sebelum transaksi dihantar oleh Alice? Kemudian transaksi Alice akan dianggap tidak sah, kerana bukti baki telah dibina sebelum transaksi Bob diterima.

Mengenai kerahasiaan dalam blockchain berasaskan akaun

Keputusan pertama yang datang dalam situasi sedemikian adalah untuk membekukan akaun sehingga transaksi dijalankan. Tetapi pendekatan ini tidak sesuai, kerana sebagai tambahan kepada kerumitan menyelesaikan masalah sedemikian dalam sistem yang diedarkan, dalam skim tanpa nama ia tidak akan jelas akaun siapa yang akan disekat.

Untuk menyelesaikan masalah ini, teknologi memisahkan transaksi masuk dan keluar: perbelanjaan mempunyai kesan serta-merta pada kunci kira-kira, manakala resit mempunyai kesan tertunda. Untuk melakukan ini, konsep "zaman" diperkenalkan - sekumpulan blok dengan saiz tetap. "Epok" semasa ditentukan dengan membahagikan ketinggian blok dengan saiz kumpulan. Apabila memproses urus niaga, rangkaian mengemas kini baki pengirim dengan serta-merta dan menyimpan dana penerima dalam tangki simpanan. Dana terkumpul disediakan kepada penerima hanya apabila "era" baharu bermula.

Akibatnya, pengguna boleh menghantar urus niaga tanpa mengira kekerapan dana diterima (setakat bakinya, sudah tentu). Saiz zaman ditentukan berdasarkan seberapa cepat sekatan merebak melalui rangkaian dan seberapa cepat transaksi memasuki blok.

Penyelesaian ini berfungsi dengan baik untuk pemindahan sulit, tetapi dengan transaksi tanpa nama, seperti yang akan kita lihat kemudian, ia menimbulkan masalah yang serius.

Perlindungan terhadap serangan ulang tayang

Dalam rantaian blok berasaskan akaun, setiap transaksi ditandatangani oleh kunci peribadi penghantar, yang meyakinkan pengesah bahawa transaksi itu tidak diubah suai dan telah dibuat oleh pemilik kunci ini. Tetapi bagaimana jika penyerang yang sedang mendengar saluran penghantaran memintas mesej ini dan menghantar mesej kedua yang sama? Pengesah akan mengesahkan tandatangan urus niaga dan akan yakin tentang kepengarangannya, dan rangkaian akan menghapuskan jumlah yang sama daripada baki pengirim sekali lagi.

Serangan ini dipanggil serangan ulangan. Dalam model UTXO, serangan sedemikian tidak relevan, kerana penyerang akan cuba menggunakan output yang dibelanjakan, yang dengan sendirinya tidak sah dan ditolak oleh rangkaian.

Untuk mengelakkan perkara ini daripada berlaku, medan dengan data rawak dibina ke dalam transaksi, yang dipanggil nonce atau hanya "garam". Apabila menyerahkan semula transaksi dengan garam, pengesah akan melihat sama ada nonce telah digunakan sebelum ini dan, jika tidak, menganggap transaksi itu sah. Untuk tidak menyimpan keseluruhan sejarah nonces pengguna dalam blockchain, biasanya dalam transaksi pertama ia ditetapkan sama dengan sifar, dan kemudian meningkat satu. Rangkaian hanya boleh menyemak bahawa nonce transaksi baharu berbeza daripada yang sebelumnya satu demi satu.

Dalam skim pemindahan tanpa nama, masalah mengesahkan nonces transaksi timbul. Kami tidak boleh mengikat nonce secara eksplisit ke alamat pengirim, kerana, jelas sekali, ini menyahnamakan pemindahan itu. Kami juga tidak boleh menambahkan satu pada nonces semua akaun yang mengambil bahagian, kerana ini mungkin bercanggah dengan pemindahan lain yang sedang diproses.

Pengarang Zether mencadangkan untuk menjana nonce secara kriptografi, bergantung pada "zaman". Sebagai contoh:

Mengenai kerahasiaan dalam blockchain berasaskan akaun
ia adalah x ialah kunci rahsia penghantar, dan Gepoch β€” penjana tambahan untuk zaman itu, diperoleh dengan mencincang rentetan bentuk 'Zether + '. Kini masalah itu nampaknya telah diselesaikan - kami tidak mendedahkan nonce pengirim dan tidak mengganggu nonce peserta yang tidak terlibat. Tetapi pendekatan ini mengenakan had yang serius: satu akaun boleh menghantar tidak lebih daripada satu transaksi setiap "zaman". Masalah ini, malangnya, masih tidak dapat diselesaikan, dan pada masa ini menjadikan versi tanpa nama Zether, pada pendapat kami, hampir tidak sesuai untuk digunakan.

Kerumitan Bukti Pengetahuan Sifar

Dalam UTXO, penghantar mesti membuktikan kepada rangkaian bahawa dia tidak membelanjakan jumlah negatif, jika tidak, ia menjadi mungkin untuk menjana syiling baru daripada udara tipis (mengapa ini mungkin, kami menulis dalam salah satu daripada yang sebelumnya Perkara). Dan juga menandatangani "input" dengan tandatangan cincin untuk membuktikan bahawa antara syiling yang dicampur ada dana kepunyaannya.

Dalam versi tanpa nama blockchain berasaskan akaun, ungkapan untuk pembuktian adalah lebih kompleks. Pengirim membuktikan bahawa:

  1. Jumlah yang dihantar adalah positif;
  2. Baki kekal bukan negatif;
  3. Pengirim menyulitkan jumlah pemindahan dengan betul (termasuk sifar);
  4. Baki pada baki berubah hanya untuk pengirim dan penerima;
  5. Pengirim memiliki kunci peribadi untuk akaunnya dan dia sebenarnya berada dalam senarai penghantar (antara mereka yang terlibat);
  6. Nonce yang digunakan dalam urus niaga dikarang dengan betul.

Untuk bukti yang begitu kompleks, pengarang menggunakan campuran Bulletproof (salah seorang pengarang, dengan cara itu, mengambil bahagian dalam penciptaannya) dan Protokol Sigma, yang dipanggil Sigma-bullets. Bukti rasmi kenyataan sedemikian adalah tugas yang agak sukar, dan ia sangat mengehadkan bilangan orang yang bersedia untuk melaksanakan teknologi tersebut.

Hasilnya?

Pada pendapat kami, bahagian Zether yang membawa privasi kepada blockchain berasaskan akaun boleh digunakan sekarang. Tetapi pada masa ini, versi tanpa nama teknologi mengenakan sekatan yang serius terhadap penggunaannya, dan kerumitannya pada pelaksanaannya. Walau bagaimanapun, ia tidak boleh diketepikan bahawa penulis mengeluarkannya hanya beberapa bulan yang lalu, dan mungkin orang lain akan mencari penyelesaian kepada masalah yang wujud hari ini. Lagipun, ini adalah bagaimana sains dilakukan.

Sumber: www.habr.com

Tambah komen