Schnorr Signature adalah cara digital untuk menyetujui pesan tertentu tanpa mengungkap kunci privat. Dompet membuat tanda tangan dengan kunci rahasia itu; orang lain cukup memakai kunci publik yang sesuai untuk memeriksanya. Dalam Bitcoin, tanda tangan membantu membuktikan izin membelanjakan koin, tetapi tidak menggantikan pemeriksaan transaksi lainnya. BIP340 menetapkan varian Bitcoin yang digunakan bersama Taproot.
Alice ingin mengirim bitcoin kepada Bob. Dompet adalah aplikasi atau perangkat untuk menerima dan mengirim bitcoin. Dompet menyusun transaksi dan menggunakan kunci privat untuk menandatangani data yang diwajibkan oleh mode tanda tangan yang dipilih. Node kemudian memeriksa tanda tangan beserta semua syarat pembelanjaan lainnya. Node adalah perangkat lunak yang memeriksa transaksi dan blok serta berkomunikasi dengan peserta jaringan lainnya. Tanda tangan yang sah tidak dengan sendirinya membuktikan identitas resmi Alice, ketepatan penerima, atau kecukupan dana yang belum dibelanjakan; semuanya merupakan pertanyaan terpisah. Pembayaran yang sudah ditandatangani pun masih bisa merupakan kesalahan yang tidak disengaja. [5] [3] [10] [11]
BIP340 karya Pieter Wuille, Jonas Nick, dan Tim Ruffing mendefinisikan tanda tangan Schnorr Bitcoin secara tepat. BIP341 memasukkannya ke aturan pembelanjaan Taproot, yang aktif di jaringan utama Bitcoin (Mainnet) pada blok 709632 pada tahun 2021. Blok mengelompokkan transaksi dalam satu kumpulan yang ditambahkan ke riwayat bersama. Ada dua lapisan: algoritme tanda tangan dan syarat pembelanjaan. Output lama dan SegWit v0 tetap menggunakan ECDSA, algoritme tanda tangan yang lebih lama; pembaruan tersebut tidak mengganti tanda tangan lama secara retroaktif. [1] [2] [11]
Byte adalah satuan umum untuk ukuran data. Varian Bitcoin menggunakan kurva eliptik secp256k1, struktur matematika untuk bekerja dengan kunci dan tanda tangan. BIP340 menetapkan format tanda tangan tetap sepanjang 64 byte. Kunci publik ditulis sebagai 32 byte koordinat x; x-only bukan berarti melewatkan pemeriksaan keamanan. Aturannya juga menentukan dengan jelas varian titik kurva yang harus digunakan pemeriksa. Format yang lebih kecil dan terperinci memudahkan perangkat lunak, tetapi dua angka ini saja tidak menunjukkan ukuran seluruh transaksi. [1] [12]
Dompet tidak menandatangani pernyataan samar seperti “saya setuju”. Mode sighash menentukan data transaksi yang membentuk pesan bertanda tangan. SIGHASH_DEFAULT melindungi informasi tentang semua input dan output, serupa dengan SIGHASH_ALL: koin yang diterima sebelumnya mana yang dibelanjakan dan jumlah baru beserta syarat pembelanjaan apa yang dibuat. Mengubah data yang dicakup membatalkan tanda tangan. Ini bukan berarti setiap byte ditandatangani, misalnya tanda tangan lain. Mode lain yang diizinkan memiliki cakupan berbeda. Tanda tangan berukuran 64 byte; mode selain bawaan menambahkan satu byte jenis sehingga elemen itu menjadi 65 byte. Ini tetap bukan ukuran seluruh input atau transaksi. [2]
Saat menandatangani, dibuat nilai nonce rahasia. Menggunakannya kembali untuk pesan berbeda dengan kunci yang sama dapat membocorkan kunci privat. Karena itu, BIP340 merinci penurunan nonce dan menganjurkan data acak tambahan untuk melindungi implementasi. Pengguna tidak mengarang nonce atau mencatatnya dalam cadangan. Pustaka tanda tangan yang teruji mengelolanya; improvisasi di sini dapat merusak kriptografi yang sebetulnya benar. [1] [9]
Struktur matematika tanda tangan Schnorr memungkinkan protokol yang membuat beberapa orang menyepakati satu pesan dan menghasilkan tanda tangan bersama. MuSig2 dalam BIP327 adalah contohnya. Dalam bentuk dasar protokol ini, setiap anggota kelompok yang dipilih harus berkontribusi. Diperlukan koordinasi, penanganan kunci yang benar, serta prosedur nonce tersendiri yang aman. Menjumlahkan sembarang tanda tangan yang sudah jadi tidak cukup. Dukungan Schnorr Signature pada dompet juga belum tentu berarti dompet mendukung kerja sama seperti ini. [8]
Taproot menawarkan beberapa jalur pembelanjaan. Dalam key path, jaringan memeriksa tanda tangan terhadap kunci publik yang tercatat dalam output. Kunci itu dapat mewakili satu orang atau kelompok yang bekerja sama. Dalam script path, skrip yang dipilih diungkapkan: program berisi syarat yang harus dipenuhi pembayaran. Tapscript adalah versi bahasa skrip ini untuk Taproot. Instruksi OP_CHECKSIGADD memeriksa satu tanda tangan dan, jika sah, menambah satu pada penghitung. Dengan mengulanginya, beberapa tanda tangan terpisah dapat diperiksa terhadap jumlah yang disyaratkan. Multisig berbasis skrip ini berbeda dari satu tanda tangan agregat. Untuk setiap dompet, periksa siapa yang harus bekerja sama, apa yang menjadi publik, dan pemulihan apa yang masih tersedia jika kunci hilang. [7] [2]
Dalam jaringan tanpa wasit pusat, satu node tidak boleh menerima tanda tangan yang ditolak node lain hanya karena penafsiran byte berbeda. Karena itu, BIP340 merinci kunci yang sah, tanda tangan, dan prosedur verifikasi. BIP340 juga memungkinkan batch verification, yaitu memeriksa beberapa tanda tangan bersama untuk menghemat perhitungan. Ini tidak menulis ulang catatannya di blockchain atau menggabungkan tanda tangan dari input transaksi yang berbeda. [1]
Tanda tangan bersama melalui key-path dapat tampak seperti tanda tangan satu kunci. Karena itu, tanda tangan saja belum tentu menunjukkan berapa orang yang sepakat. Namun, jumlah, hubungan antara input dan output, serta waktu transaksi biasanya tetap dapat diamati. Schnorr Signature tidak mengenkripsi pembayaran. Hasil privasinya juga bergantung pada penggunaan Taproot, perilaku dompet, dan keadaan pembayaran. [2] [3]
Bagi pengguna biasa, yang penting adalah dompet yang menampilkan penerima, jumlah, dan biaya dengan benar serta mendukung pemulihan yang andal. Pengembang juga perlu memeriksa dukungan BIP340 secara tepat, vektor uji, pengelolaan nonce, dan perilaku saat terjadi kegagalan. Nama algoritme tidak menjamin keseluruhan produk. Pustaka yang baik, seperti libsecp256k1, menangani perhitungan kriptografi; pustaka tidak dapat memutuskan apakah seseorang seharusnya menyetujui pembayaran di layar. [4] [9] [6]
Untuk gambaran yang lebih utuh, baca entri ini bersama Taproot, MuSig2, Multisig, Bitcoin Script. Entri ini juga dirujuk dari SHA-256, Opcode, MuSig2, Nostr.