MuSig2 memungkinkan beberapa orang bersama-sama membuat satu tanda tangan Schnorr, bukti persetujuan atas pesan tertentu tanpa mengungkap kunci privat mereka. Prosedur BIP327 memakai dua putaran komunikasi. Kunci publik digabungkan menjadi kunci agregat dan kontribusi penandatanganan menjadi tanda tangan yang kompatibel dengan BIP340. Model dasarnya n-of-n: semua peserta penandatangan harus berkontribusi.
Bayangkan kas bersama yang setiap pembayarannya harus disetujui Alice dan Bob. Tanda tangan digital membuktikan otorisasi pembayaran menggunakan kunci privat, sebuah nilai angka rahasia, tanpa mengungkap kunci itu. Multisig berbasis skrip konvensional dapat mengungkap beberapa kunci dan tanda tangan dalam transaksi. Dengan MuSig2, masing-masing menyimpan kunci privat dan berkontribusi pada tanda tangan bersama. Jaringan memverifikasi satu hasil. Penghematan terjadi pada pencatatan dan verifikasi di blockchain; kebutuhan koordinasi antarpeserta tetap ada. Jonas Nick, Tim Ruffing, dan Yannick Seurin memperkenalkan protokol ini dalam makalah yang diterbitkan pada Oktober 2020. [3] [2] [10]
MuSig2 sendiri bukan skema 2-of-3 yang memungkinkan dua orang mana pun menggantikan peserta ketiga yang tidak hadir. Dalam n-of-n, setiap anggota kelompok harus berkontribusi. Peserta yang tidak tersedia atau menolak dapat menghentikan kerja sama. Dompet adalah aplikasi atau perangkat untuk menerima dan mengirim bitcoin. Jika dompet harus tetap dapat digunakan dalam keadaan itu, perlu jalur pembelanjaan atau mekanisme tanda tangan lain yang dirancang sebelumnya; nama MuSig2 tidak otomatis menyediakannya. [1] [8]
Sebelum menandatangani, peserta menyusun kunci publik agregat. Kunci publik digunakan untuk memeriksa tanda tangan dan tidak perlu dirahasiakan. Pada putaran pertama mereka bertukar nonce publik, kontribusi sekali pakai untuk menyiapkan tanda tangan. Pada putaran kedua mereka membuat dan mengirim tanda tangan parsial untuk pesan dan konteks yang sama, lalu menggabungkannya. Sesuai ketentuan protokol, putaran pertama dapat disiapkan sebelum pembayaran diketahui. Namun, sebelum membuat tanda tangan parsial, setiap peserta harus memeriksa transaksi sebenarnya, terutama penerima, jumlah, dan biaya. Persiapan bukan persetujuan atas pembayaran yang belum diketahui; memeriksa setelah menandatangani sudah terlambat. [1] [3]
Dengan penjumlahan sederhana, penyerang dapat memilih kunci publiknya untuk mengeksploitasi kunci peserta lain. Karena itu, MuSig2 memakai bobot angka yang disebut koefisien, yang diturunkan dari daftar kunci. KeyAgg juga memperhitungkan urutan; aplikasi dapat memakai KeySort untuk menyeragamkannya. Semua peserta harus memakai daftar dan aturan yang sama, atau kunci agregat hasil perhitungannya akan berbeda. [1] [5]
Nonce di sini bukan penghitung penambangan, melainkan bahan penandatanganan sekali pakai: pubnonce dibagikan, sedangkan secnonce tetap di tangan penanda tangan. Nonce rahasia tidak boleh digunakan kembali untuk pemanggilan Sign berikutnya. Dua tanda tangan parsial akibat penggunaan ulang dapat membocorkan kunci privat. Mengubah pesan atau mengulangi pembayaran yang tampak sama bukan pengecualian yang aman. [1] [7]
Perhitungan kriptografi yang benar belum cukup jika setelah dimulai ulang aplikasi memulihkan secnonce terpakai dari cadangan atau memberikannya kepada dua tugas bersamaan. Libsecp256k1 menonaktifkan nonce rahasia dengan menimpanya saat penandatanganan, tetapi salinan di luar kendalinya dapat melewati perlindungan itu. Pengelolaan status harus mencegah pemakaian ulang saat terjadi kesalahan, pemulihan, dan proses bersamaan. Kunci privat untuk menandatangani boleh digunakan berulang; yang sekali pakai adalah nonce. [7]
Koordinator dapat mengumpulkan nonce publik serta tanda tangan parsial dan memfasilitasi pertukaran. Jika protokol digunakan dengan benar, hal itu tidak membuatnya bisa menandatangani menggantikan peserta jujur, meskipun ia bisa menggagalkan proses. Setiap peserta harus memeriksa apa yang ditandatangani. Verifikasi tanda tangan parsial membantu menemukan masalah, tetapi membutuhkan kontribusi publik asli dan konteks yang benar; nonce agregat saja tidak dapat menunjukkan pelakunya. [1] [7]
Hasilnya adalah tanda tangan BIP340 berukuran 64 byte. Taproot key path adalah cara membelanjakan koin dengan memverifikasi tanda tangan untuk kunci yang tercatat dalam output, tanpa mengungkap skrip cadangan. Jika mode bawaan tidak dipakai, sebuah byte jenis sighash mengikuti tanda tangan. Byte ini menentukan bagian transaksi yang terikat oleh tanda tangan; perubahan pada bagian tersebut akan membuatnya tidak sah. Tanda tangan saja tidak mengungkap jumlah peserta atau kunci masing-masing. Namun, MuSig2 tidak menyembunyikan jumlah pembayaran, semua keterkaitannya, atau komunikasi antarpihak. Tanda tangan untuk input berbeda juga tidak otomatis digabungkan; input merujuk pada output yang diterima sebelumnya dan dibelanjakan oleh transaksi ini. [5] [6]
Selain key path bersama, Taproot dapat memuat syarat skrip seperti kombinasi kunci lain atau penguncian waktu. Penguncian waktu membuat suatu jalur tersedia setelah waktu atau ketinggian blok tertentu; tanda tangan yang diperlukan tetap wajib. Blok mengelompokkan transaksi dalam satu kumpulan yang ditambahkan ke riwayat bersama. Ketinggian blok menunjukkan posisinya dalam rantai. Syarat harus diikat secara kriptografis saat output, sejumlah nilai dengan aturan pembelanjaan, dibuat. Syarat tidak bisa ditambahkan setelah salah satu penanda tangan tidak lagi tersedia. Script path adalah pembelanjaan melalui skrip tersebut: syarat terkait terungkap dan biayanya bisa lebih tinggi. Karena itu, pemulihan membutuhkan rincian pengaturan yang dipilih, bukan hanya kunci rahasia masing-masing. [6] [1] [9]
BIP327 menjelaskan protokol, sedangkan pustaka dan dompet menentukan antarmuka, cadangan, serta prosedur yang benar-benar didukung. Periksa versi, vektor uji, pengelolaan nonce, dan pemeriksaan transaksi yang ditandatangani. Dukungan Schnorr tidak otomatis berarti dukungan MuSig2 lengkap di setiap dompet. Tanda tangan bersama memakai aturan BIP340 dan Taproot yang sudah ada; penggunaan MuSig2 sendiri tidak memerlukan opcode konsensus baru. [4] [7] [2]
Untuk gambaran yang lebih utuh, baca entri ini bersama Schnorr Signature, Taproot, Multisig, PSBT. Entri ini juga dirujuk dari Schnorr Signature, Submarine Swap, FROST, PTLC.