Tanda Tangan Jaringan Monero

Kami membuka serangkaian publikasi tentang perangkat berbagai blockchains dan memulai penelitian dengan Monero. Ini adalah cryptocurrency yang cukup terkenal, ini mengimplementasikan sejumlah solusi algoritmik dan kriptografi yang menarik. Beberapa bulan yang lalu, dukungan untuk multi-signature ditambahkan ke Monero Core, dan dalam artikel hari ini kita akan melihat lebih dekat pada teknologi ini.

gambar

Multi-tanda tangan adalah mekanisme untuk membuat dan menggunakan dompet bersama. Konsep itu sendiri bukan hal baru, sudah diterapkan di beberapa cryptocurrency, seperti Bitcoin, Ethereum dan lainnya. Esensinya terletak pada kepemilikan bersama dan pembuangan dana dompet. Beberapa batasan diberlakukan pada pembuangan dana: untuk melakukan transaksi, perlu untuk mengumpulkan sejumlah suara, yang ditetapkan saat membuat dompet dan tergantung pada jumlah pemiliknya.

Parameter ini mencirikan apa yang disebut "skema" dompet, misalnya, 3/3 - dompet untuk tiga pemilik dengan tiga tanda tangan yang diperlukan untuk mengirim transaksi, atau 2/3 - dompet untuk tiga pemilik dengan dua tanda tangan yang diperlukan dari pemiliknya. Perlu dicatat bahwa dalam dompet multisignature tidak ada konsep "bagian Anda" dan "bagian saya", semua dana milik semua peserta pada saat yang sama.

Kriptografi dalam Monero


Kriptografi dalam Monero (seperti dalam kebanyakan cryptocurrency lainnya) dibangun di atas kurva eliptik. Anda dapat membacanya di Wikipedia . Singkatnya, keuntungan dari sistem enkripsi ini adalah kekuatan kriptografi yang lebih tinggi dibandingkan dengan sistem kriptografi klasik, ukuran kunci yang kecil dan kecepatan operasi kriptografi yang lebih tinggi.

Setiap dompet dalam jaringan Monero memiliki dua pasang kunci (pribadi dan publik) - lihat dan belanjakan. Tampilan dan pengeluaran pasangan kunci publik disebut alamat dompet. Anda dapat menggunakannya sebagai alamat untuk menerima dana. Jika Anda ingin memberikan informasi tentang jumlah dan ukuran tanda terima ke dompet Anda dengan pihak ketiga, Anda dapat, selain alamat, memberikan kunci tampilan pribadi. Sepasang kunci tampilan pribadi dan pengeluaran publik disebut kunci pelacakan. Dengan itu, Anda dapat melihat tanda terima dana di dompet (tetapi bukan biaya) dan benar-benar aman - memiliki sepasang kunci seperti itu tidak akan dapat menghabiskan uang Anda.
Mungkin kunci paling rahasia adalah pengeluaran pribadi - Anda tidak boleh membaginya dengan siapa pun, karena memilikinya dan kunci tampilan pribadi, Anda dapat mengelola dompet.

Lebih lanjut dalam artikel ini, kami akan menunjukkan kunci publik dalam huruf kapital (misalnya, B - kunci pengeluaran publik), dan huruf kecil - pribadi (kunci b - pribadi). Untuk memahami beberapa perhitungan di bawah ini, dalam artikel kami menunjukkan bagaimana kunci publik diwarisi dari kunci pribadi:

Formula: Warisan kunci publik. B = bg

, di mana G adalah titik tetap, mengalikan kunci privat (skalar) dengan itu memberikan kunci publik, yang juga merupakan titik pada kurva elips.

Tanda Tangan Jaringan Monero


Gagasan yang mendasari teknologinya sederhana: setiap peserta dompet hanya menyimpan bagian dari kunci pengeluaran pribadi, dan ketika membuat dan menandatangani transaksi, semua bagian ini diringkas untuk membentuk satu kunci.

Tentu saja, tanpa titik waktu, tidak ada peserta yang dapat mengumpulkan seluruh kunci. Kunci belanja publik disimpan sepenuhnya oleh setiap peserta. Setiap peserta juga menyimpan versi lengkap kunci tampilan pribadi dan publik, yang, bersama dengan pengeluaran publik, memungkinkan Anda untuk melihat tanda terima yang masuk ke alamat bersama.

Membuat dompet multisig di Monero


Versi rilis Monero saat ini hanya mendukung skema N / N dan N - 1 / N.

Proses pembuatan berlangsung dalam 1 atau 2 tahap untuk masing-masing sirkuit N / N dan N - 1 / N. Pada tahap pertama, para peserta dalam proses bertukar pandangan pribadi dan kunci pengeluaran publik satu sama lain dan menghitung jumlah kunci ini - semua tampilan dan semua pengeluaran. Dengan demikian, kunci tampilan pribadi dompet menjadi jumlah kunci tampilan untuk semua skema, dan kunci belanja publik untuk skema N / N adalah jumlah kunci belanja publik semua peserta. Ini mengakhiri pembuatan dompet N / N.

Untuk dompet N - 1 / N, set kunci lain muncul. Set ini adalah array kunci pribadi, dihitung sebagai produk dari kunci pengeluaran pribadi saat ini oleh masing-masing kunci belanja publik dari peserta lain, yaitu (tidak termasuk fungsi hash untuk kesederhanaan):

Rumus: Menghitung kunci multisig

Dan juga untuk masing-masing peserta.

Kunci belanja pribadi dari masing-masing peserta akan menjadi jumlah kunci multisignya, yaitu:

gambar

Setiap peserta melakukan operasi ini. Salah satu properti penting dari karya-karya tersebut harus diperhatikan, misalnya:

gambar

Dari persamaan ini dapat disimpulkan bahwa setiap dompet memiliki satu (dalam contoh kami dengan skema 2/3) kunci multisig, yang dimiliki oleh peserta lain.

Setelah generasi, peserta bertukar kunci multisig publik:

Rumus: Menghitung kunci multisig publik

Di final, kunci dompet pengeluaran publik dihitung dengan menjumlahkan nilai unik dari kunci multisig publik, yaitu, untuk contoh kita, ini akan menjadi:

Rumus: Hitung kunci pengeluaran publik

Seperti yang dapat kita lihat, untuk menghitung kunci pengeluaran (baik privat maupun publik) dalam kasus 2/3, kita membutuhkan informasi yang cukup dari dua peserta.

Ini melengkapi pembuatan dompet, dan dapat digunakan sesuai dengan skema yang dipilih.

Transaksi dalam Monero


Untuk menjelaskan bagaimana transaksi multisig dibuat, mari kita tinjau secara singkat bagaimana suatu transaksi diatur dalam Monero. Sederhana (tanpa tanda tangan dan RingCT) dapat dibayangkan sebagai berikut:

Representasi Transaksi Sederhana

Gambar 1. Tampilan transaksi yang disederhanakan

Di sini, di sebelah kanan, output dari transaksi ditampilkan - uang yang dihasilkannya (analogi langsung: uang kertas dalam dompet), dan input di sebelah kiri adalah uang yang dibakar.

Jadi, ketika Alice ingin mengirim 1 XMR ke Bob, dia mengumpulkan 1 XMR plus komisi di antara output yang tidak digunakan, menempatkannya di tempat input transaksi, menghitung gambar kunci untuk masing-masing, menghasilkan output untuk jumlah 1 XMR dan menghitung untuk masing-masing mereka kunci output.

Setelah menerima transaksi, Bob memulihkan kunci output untuk setiap output menggunakan tampilan pribadi dan kunci pengeluaran publik, dan jika kunci pulih dan diterima dalam kecocokan transaksi, ia menganggap output ini dimaksudkan untuknya.

Terlepas dari kenyataan bahwa transaksi multisig dari sudut pandang jaringan tidak berbeda dari transaksi lainnya, pembuatannya sedikit lebih rumit dan dalam beberapa tahap:

  • Peserta bertukar gambar kunci parsial untuk keluaran yang diketahui (atau sekadar bertukar keluaran)
  • Peserta menyinkronkan kembali dompet mereka untuk mendapatkan keseimbangan yang akurat, dengan mempertimbangkan gambar kunci yang sudah lengkap
  • Pengirim menyiapkan transaksi, menandatanganinya, dan mengirimkannya ke peserta berikutnya
  • Setiap peserta berikutnya menambahkan bagian dari tanda tangan RingCT mereka.
  • Penanda Terakhir Menyelesaikan RingCT

Dan sekarang transaksi siap dikirim ke jaringan.

Pembuatan gambar utama dan pembagian hasil


Selama pemindaian blockchain (sinkronisasi), dompet tidak dapat menentukan input spesifik apa yang mengeluarkan outputnya, karena dompet tidak memiliki kemampuan untuk menghitung gambar utama untuk mereka. Karena itu, ia hanya melihat transaksi masuk (bagi mereka, hanya melacak pasangan kunci yang cukup).

Untuk membentuk transaksi yang benar, Anda perlu mengembalikan gambar kunci untuk setiap output, memindai blockchain dan menentukan mana yang dihabiskan, dan baru kemudian melanjutkan untuk menghasilkannya.

Pertimbangkan proses pembentukan gambar kunci. Itu dihitung dengan rumus:

Rumus: Gambar kunci formasi

, di mana Hp adalah fungsi hash tertentu yang telah ditentukan, P adalah kunci keluar publik (lihat Gambar 1), x adalah kunci keluar pribadi yang akan kami pulihkan untuk penerima output ini, dihitung sebagai berikut:

Formula: Kembalikan Kunci Keluar Pribadi

, di mana Hs adalah fungsi hash kriptografi tertentu yang terkenal, a adalah kunci tampilan pribadi, R adalah kunci transaksi publik (Tx kunci pub, lihat Gambar 1), dan b adalah kunci pengeluaran pribadi. Mengganti satu ekspresi menjadi ekspresi lain dan membuka tanda kurung, kita dapat:

Formula: Gambar kunci perhitungan

Tetapi karena kita tidak memiliki kunci pengeluaran lengkap, kita perlu mengembalikannya. Dalam kasus N / N, semuanya sederhana (ambil contoh 3/3):

Formula: Pemulihan gambar utama untuk N / N

Di sini Hp (P) b i adalah gambar kunci parsial yang diterima dari peserta ke-i.

Untuk skema N - 1 / N (2/3 atas nama peserta pertama tanpa partisipasi yang ketiga):

Formula: Pemulihan gambar utama untuk N - 1 / N

dalam hal ini, Hp (P) b i B j adalah gambar kunci parsial.

Inti dari proses pertukaran pintu keluar adalah bahwa jumlah penandatangan yang diperlukan untuk transaksi mengirimkan gambar kunci parsial mereka untuk setiap pintu keluar ke peserta lain dalam dompet. Pada saat yang sama, peserta tidak mengungkapkan kunci privat mereka, sehingga pengamat luar atau peserta yang tidak bertanggung jawab tidak memiliki kesempatan untuk memulihkan kunci pengeluaran penuh dan mengambil kepemilikan dompet sendiri.

Memiliki data ini, pemrakarsa transaksi dapat membentuknya dan menyiapkannya untuk ditandatangani. Transaksi yang dihasilkan dikirim ke semua yang setuju untuk menandatanganinya untuk menghasilkan tanda tangan CT Ring, semua tanda tangan yang diperlukan dibuat dan transaksi dikirim ke jaringan.

Otomasi pertukaran data


Prosedur di atas dijelaskan untuk bertukar bagian kunci dan gambar kunci yang perlu dilakukan baik sekali atau setelah setiap transaksi dikirim. Dalam implementasi Monero Core Wallet saat ini, diusulkan untuk melakukan tindakan ini secara manual dengan bertukar data yang diperlukan secara manual melalui saluran komunikasi aman dengan korespondennya (dengan mengekspor data yang diperlukan dari dompet dan mengirimkannya melalui pengirim pesan instan atau dengan cara lain).

Anda dapat menunjukkan ini dengan contoh membuat dompet sesuai dengan skema 2/3 dan menandatangani transaksi. Setiap peserta mengeksekusi perintah berikut menggunakan utilitas monero-wallet-cli:

  [wallet 9uKCgo]: prep_multisig
 MultisigV1baCWviNomMXe271W8HW4imh8SsnNEWP2bCswQfoB9MGzNZ8FUG3e8UCNm5toKQzSQH2e8rUWUCGazaCcvej1ToCQYBMovJZYaYiYWQvzsvyWruXycZdVDSsyugjEzwQNK3FUEkug2LXiH91NmekGb7kp9gK9kuoxDDhGn1nLKXUpnXR5
 Kirim info multisig ini ke semua peserta lain, lalu gunakan make_multisig <threshold> <info1> [<info2> ...] dengan info multisig orang lain
 Ini termasuk kunci tampilan PRIVATE, jadi hanya perlu diungkapkan kepada peserta dompet multisig itu 

 [Dompet 9uKCgo]: make_multisig 2 MultisigV1XQugvU4JwcwTQbKdH5qGFnavxUX54wGxNis2iN6zoLD94DahnXbyNxH1NQBp2rYRFFJCT2uiJbssHLJYEAb8X1tS5UCqTXYu3FkgRNSZt5mRNgE58iXZHPj839Pbm3ozGcXmRT6GcRMMxMjRonfYKpnPq1UyZSMN7Qr9AYin1gYyoJSh MultisigV1HVqTW8P4UNWUE8QfBaEdwDWJuXBWEPnTrKqVJiUudGG14cHREk9TKmeR9xzSs4wf4jd22mV94C2ehSViApawnpp2SpRqp19eKXLHz2JmNp7eGR6TJMt4VsDTqANRwb1FtD9weef342f5KXDRZK7iQT1MTubyHhEcFyV5aLCjjQ8owMkH
 Langkah lain diperlukan
 MultisigxV1PQwytRuYGkB6UEVJ7v2S7q492cwNTdwySXyasToAuQQq73TvM1rBrog5bcYz5w2P6Z4jwKtzrHr7shRGo5mAShvLVbYtBdQNhQsizMb51K7iaWQB4te5mQaiB1cok84CbvA9WKnVpTJGyb7SbS7NwAgmpEhU812RTdzrdHp5sD41duYtRNW6qna5mTMYmtTjAEdKpKCvM6EwhV4ncWscpvoBfyYP
 Kirim info multisig ini ke semua peserta lain, lalu gunakan finalize_multisig <info1> [<info2> ...] dengan info multisig lainnya.

 [Dompet 9uKCgo]: finalize_multisig MultisigxV1PdeMJo5rxcWTXDJ7rbyuacBseugsn2djZKKEdwvFYVmz73TvM1rBrog5bcYz5w2P6Z4jwKtzrHr7shRGo5mAShvLUxykuq5gho7gGQBCEa3JmBaY7rNHqqUaCUs1WWQi9tojZTMmCJJ4evwJzcXEDqcAd7ShwxsJtJtXdiATs54BbBfyCbwXbnDRKAtagJF36z74KJA58NgEmnHv23ZQeePCoacM MultisigxV1RTwyE53FjKPQaAn4ZMWM5hc8C92eJndpyKby4L9HpF2TUxykuq5gho7gGQBCEa3JmBaY7rNHqqUaCUs1WWQi9tojVbYtBdQNhQsizMb51K7iaWQB4te5mQaiB1cok84CbvA928U2yJFK86jNxtMopxHkcnYjjeYfp8TAB53Y1CukBiHfL2M4EztDALXLReXjJxkMry65Jw6vVePJp2T5CW8T8QE5 

Sebelum mengirim transaksi, para pihak harus bertukar gambar kunci parsial:

  [wallet 9uKCgo]: export_multisig_info ki1
 Info multisig diekspor ke ki1
 [wallet 9uKCgo]: import_multisig_info ki2 ki3
 Tinggi 1103873, txid <f7e648915287fafca1dc67eb26267e09f92bba7ab7fd52a12600c3e6440db0eb>, 2.000000000000>, 2.000000000000, idx 0/0
 Tinggi 1103882, txid <2e3a5591c741c0943a47a2bcbd1ec26493158088c88308bcbfc97423ea95c491>, 0,009000000000>, 0,009000000000, idx 0/0
 Info multisig diimpor 

Selanjutnya, dompet disinkronkan kembali dengan memperhitungkan kunci lengkap dan, setelah menerima data pembayaran keluar, peserta dapat menyiapkan transaksi:

  [wallet 9uKCgo]: transfer 9vUnTucAioDHD4ZqrFHXAgfLqrsC3LkZ6JFr5axBLhDiFMaHuEk33aqXimoZEMtQh5ibdYxcNSBw2hBZLAsCnuw4B4rBeZX 1
 Tidak ada id pembayaran yang disertakan dengan transaksi ini.  Apakah ini oke?  (Y / Ya / T / Tidak): Y
 Saat ini terdapat 2 blok backlog pada tingkat biaya tersebut.  Apakah ini oke?  (Y / Ya / T / Tidak) Y

 Transaksi 1/1:
 Pengeluaran dari indeks alamat 0
 Mengirim 1,000000000000.  Biaya transaksi adalah 0,012000000000
 Apakah ini oke?  (Y / Ya / T / Tidak): Y
 Transaksi yang tidak ditandatangani berhasil ditulis ke file: multisig_monero_tx 

Diperlukan untuk mentransfer file yang dihasilkan ke peserta lain untuk menandatangani dan mengirim ke jaringan:

  [wallet 9twQxU]: sign_multisig multisig_monero_tx
 Loaded 1 transaksi, untuk 1,031762770000, biaya ,012000000000, mengirim 1,000000000000 untuk 9vUnTucAioDHD4ZqrFHXAgfLqrsC3LkZ6JFr5axBLhDiFMaHuEk33aqXimoZEMtQh5ibdYxcNSBw2hBZLAsCnuw4B4rBeZX, 0,019762770000 perubahan 9uKCgopHzXrQLnph1ZNFQgdxZZyGhKRLfaNv7EEgWc1f3LQPSZR7BP4ZZn4oH7kAbX3kCd4oDYHg6hE541rQTKtHB7ufnmk, dengan ukuran min cincin 7, tidak ada ID pembayaran.  Apakah ini oke?  (Y / Ya / T / Tidak): Y
 Transaksi berhasil masuk ke file multisig_monero_tx, txid 1d28af64bc78d05b625c4f7af7c321d4c8943c4c2692f57aa53e303387f40db6
 [wallet 9twQxU]: submit_multisig multisig_monero_tx
 Loaded 1 transaksi, untuk 1,031762770000, biaya ,012000000000, mengirim 1,000000000000 untuk 9vUnTucAioDHD4ZqrFHXAgfLqrsC3LkZ6JFr5axBLhDiFMaHuEk33aqXimoZEMtQh5ibdYxcNSBw2hBZLAsCnuw4B4rBeZX, 0,019762770000 perubahan 9uKCgopHzXrQLnph1ZNFQgdxZZyGhKRLfaNv7EEgWc1f3LQPSZR7BP4ZZn4oH7kAbX3kCd4oDYHg6hE541rQTKtHB7ufnmk, dengan ukuran min cincin 7, tidak ada ID pembayaran.  Apakah ini oke?  (Y / Ya / T / Tidak): Y
 Transaksi berhasil dikirimkan, transaksi <1d28af64bc78d05b625c4f7af7c321d4c8943c4c2692f57aa53e303387f40db6>
 Anda dapat memeriksa statusnya dengan menggunakan perintah `show_transfers`. 

Jelas, pendekatan ini, meskipun memungkinkan Anda untuk menggunakan dompet multi-fungsi jika Anda benar-benar menginginkannya, tidak dapat diterapkan oleh pengguna yang tidak berpengalaman atau, misalnya, pengguna dompet ponsel.

Oleh karena itu, kami mengembangkan solusi kami sendiri yang akan mengotomatiskan pertukaran data ini tanpa melanggar privasi para pihak dan keamanan transaksi untuk membuat teknologi multi-signature di Monero dapat diakses oleh lebih banyak orang. Solusi ini didasarkan pada aplikasi yang mendukung dompet standar dan multisig, dan bagian server terbuka yang menyediakan pertukaran data dan penerusan ke dompet yang sesuai.

Anda dapat mempelajari lebih lanjut tentang proyek ini di wallet.exan.tech , dan tentang sumber daya yang kami dukung untuk jaringan Monero , lihat exan.tech/en/projects/monero .

Kesimpulan


Kami memeriksa mekanisme untuk membuat dompet multi-tanda dan membentuk transaksi dengan banyak tanda tangan di Monero. Saat ini, hanya sejumlah skema tanda tangan terbatas yang didukung, tetapi akan diperluas ke rumus sewenang-wenang dari formulir 2/5, dll. Mekanisme yang ada untuk bertukar data yang diperlukan agar dompet berfungsi agak tidak nyaman, tetapi karena keterbukaan ekosistem Monero dengan bantuan solusi pihak ketiga, dapat dibawa ke kualitas biasa untuk pengguna biasa.

Dalam artikel berikut, kita akan berbicara tentang aspek lain dari perangkat Monero: RingCT dan tanda tangan cincin, arsitektur dompet dan perpustakaan libwallet, serta prospek pengembangan blockchain ini.

Ajukan pertanyaan Anda, sarankan topik untuk artikel baru tentang teknologi cryptocurrency, dan berlangganan grup kami di Facebook untuk mengikuti perkembangan acara dan publikasi kami.

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


All Articles