Setelah Segwit aktif, telah menjadi pintu pembuka untuk pengembangan jauh ke depan, baik dengan Lightning Network, Atomic Swap, Atomic Multipath Payment, dan salah satunya lagi adalah Schnorr Signature. Dan tentu saja ada sekian banyak hal lain lagi yang bisa dikembangkan setelahnya.
Lantas apa itu Schnorr Signature sebetulnya? Apa fungsi dan manfaat Schnorr Signature di dalam bitcoin? Bagaimana itu bisa dilakukan? Di dalam bitcoin, pada dasarnya wacana tentang implementasi Schnorr Signature telah lama sudah dibicarakan. Tepatnya, pada tahun 2016 lalu, Schnorr Signature telah banyak mulai menyita perhatian, bersamaan dengan potensi dan pengembangan Segwit Bitcoin yang saat itu masih dilakukan.
Fungsi Digital Signature
Tentu saja, jika ingin mengetahui lebih jauh tentang apa itu Schnorr Signature, kita perlu merujuk kembali dan memahami terlebih dahulu tentang Digital Signature. Dan ya, tentu saja, Bitcoin, menggunakan Digital Signature di dalamnya.
Secara harfiahnya, Digital Signature adalah skema matematis yang diperlukan sebagai bukti otentik tak terbantahkan bahwa sebuah pesan maupun dokumen adalah benar-benar berasal dari pemiliknya secara mutlak.
Di dalam Bitcoin, Digital Signature ini dibutuhkan sebagai syarat mutlak agar sejumlah bitcoin milik seseorang tersebut dapat dipergunakan atau dibelanjakan. Bitcoin, memang banyak menggunakan cabang ilmu kriptografi sebagai dasarnya, termasuk juga sepasang key di cabang ilmu kriptografi yang dikenal dengan Public Key dan Private Key.
Agar sejumlah bitcoin itu dapat dipergunakan, pemiliknya tersebut haruslah dapat memberikan bukti otentik bahwa dialah pemilik sejumlah bitcoin itu. Maka disitulah peranan Digital Signature yang berfungsi dalam memberikan bukti otentik tersebut, sebuah tanda tangan digital dari pemiliknya yang sah,
Antara Public Key dan Private Key, pada dasarnya saling terkait satu sama lain, cara kerjanya pun bekerja bersama-sama. Bedanya, untuk generate atau memproduksi Public Key dari Private Key cukup mudah dilakukan. Namun, tidak mungkin bisa memproduksi Private Key dari Public Key. Alasannya? Jelas, karena Private Key itu ibaratnya hanya bekerja satu arah saja.
Digital Signature, dipergunakan untuk bisa menjadi bukti kepemilikan (proof of ownership) atas Private Key yang berkorelasi pada Public Key. Artinya, bukti kepemilikan tersebut, dapat disajikan meski tanpa harus mengungkapkan Private Key milik seseorang itu. Ia hanya bisa melakukan itu dengan fungsi Digital Signature tersebut.
Tanda tangan digital atau Digital Signature ini, pada dasarnya terdiri dari tiga algoritma dalam cara kerjanya:
- Hashing Algorithm
- Signature generation Algoritm
- Signature Verifying Algorithm
Pada sebuah transaksi bitcoin, Digital Signature tersebut dapat dilakukan dengan kalkulasi (baca: hashing) data transaksi bersama dengan Private Key itu. Nah, di dalam Bitcoin, metode untuk kalkulasi yang dapat memproduksi Digital Signature tersebut dibuat dengan menggunakan Elliptic Curve Digital Signing Algorithm (ECDSA). Sehingga pemilik Private Key yang sah itu tidak perlu khawatir bahwa akses mutlaknya atas sejumlah bitcoin tersebut dapat dicuri oleh orang lain.
Apa itu Schnorr Signature?
Schnorr Signature ditemukan oleh seorang kriptograper dan matematikawan asal Jerman bermana Claus-Peter Schnorr. Nama Schnorr di dalam tanda tangan digital (Scnorr Signature) tersebut memang diambil dari nama penemunya itu.
Berbeda dengan ECDSA yang digunakan Bitcoin saat ini, Schnorr Signature adalah salah satu bentuk lain dari versi Digital Signature. Varian lain dari versi Digital Signature selain Schnorr yang telah ada misalnya ElGamal Digital Signature Scheme.
Kita tidak akan banyak membicarakan varian lain tersebut. Namun sejauh ini, Schnorr Signature menjadi banyak dibicarakan karena dianggap cukup cocok diimplementasikan di dalam Bitcoin. Meskipun, ada beberapa hal yang perlu dikritisi pada akhirnya. Yang paling utama, adalah karena implementasi Schnorr nantinya besar kemungkinan dapat dijalankan melalui hard fork.
Schnorr Signature dianggap cukup cocok untuk Bitcoin, karena bisa berfungsi sama seperti halnya ECDSA. Selain itu, Schnorr juga dapat membantu dalam hal skalabilitas Bitcoin. Hal tersebut tidak lain karena dengan Schnorr, algoritma untuk digital signature menjadi lebih efisien.
Schnorr, dapat berguna dalam meringkas digital signature untuk multisig transaction, digantikan dengan satu digital signature saja. Sehingga hal tersebut secara otomatis akan jauh lebih ringkas dan efisien, karena ukuran transaksi yang sebelumnya mungkin bisa terdapat banyak digital signature menjadi hanya ada satu digital signature saja.
Jika digital transaksi tersebut dapat lebih efektif hanya dengan satu digital signature saja, maka dengan Schnorr, ukuran transaksi bitcoin mampu lebih kecil hingga 25%. Pada akhirnya, hal tersebut akan cukup membantu menghemat ukuran bandwidth jaringan bitcoin. Tidak hanya memperkecil ukuran transaksi saja, Schnorr juga berpotensi untuk menambah privasi transaksi bitcoin.
Relasi Schnorr Signature dengan Segwit
Jika diawal tadi sempat diketahui bahwa implementasi Schnorr kemungkinan besarnya akan bisa berjalan hanya dengan Hard Fork, maka Segwit yang telah aktif telah membuka pintu pengembangan itu.
Salah satu fungsi Segwit (Segregated Witness), telah memindahkan digital signature dalam transaksi bitcoin menjadi bagian yang berfungsi sebagai witnesses. Digital Signature itu, tidak lagi disertakan di dalam transaksi yang menggunakan Segwit. Sehingga implementasi Schnorr pun menjadi terbuka lebar.
Manfaat Schnorr Signature
Beberapa hal tentang manfaat Schnorr Signature sudah disinggung diatas. Namun, untuk lebih rinci, berikut ini adalah manfaat secara lebih mendetail:
- Ukuran transaksi bitcoin yang dilakukan secara on-chain dapat lebih kecil. Transaksi bitcoin yang dilakukan secara on-chain itu mengingat saat ini Bitcoin sudah bisa menggunakan Lightning Network. Dan transaksi Lightning Network tersebut, pada dasarnya berjalan secara off-chain meski tetap membutuhkan transaksi on-chain saat membuka/menutup channel transaksi.
- Validasi transaksi menjadi lebih cepat dan efisien.
- Meningkatkan privasi pengguna saat menggunakan wallet multisig.
- Membantu menyelesaikan skalabilitas bitcoin, karena ukuran transaksi dapat ditekan.
- Membantu iklim pertambangan menjadi lebih ringan, dan penambang juga lebih hemat karena biaya komputasinya dapat lebih ditekan.
Cara Kerja Schnorr Signature
Dalam memahami cara kerja Schnorr Signature, perlu kita memahami lagi bagaimana pola scrypt transaksi bitcoin secara umum. Di atas tadi, kita telah mengetahui bahwa Bitcoin menggunakan ECDSA sebagai metode untuk menyajikan bukti kepemilikan bitcoin seseorang untuk menghasilkan digital signature. Sedangkan pada setiap digital signature dengan ECDSA ini, panjangnya mencapai 65 byte.
Nah, dalam model transaksinya, Bitcoin secara umum menggunakan Unspent Transaction Output atau yang biasa disingkat dengan UTXO. Seperti definisi dari nama UTXO tersebut, artinya bahwa UTXO adalah Output transaksi yang masih belum dibelanjakan (belum dipergunakan untuk transaksi lain berikutnya).
Sehingga apapun output transaksi di dalam bitcoin, baik yang sudah dibelanjakan ataupun tidak, pada akhirnya dapat berfungsi sebagai sebuah input di transaksi berikutnya. Lebih jelasnya kita dapat melihat dari gambar di bawah ini:
Dari gambar itu, kita dapat mengetahui bahwa digital signature dalam UTXO itu, bisa digunakan sebagai input transaksi, menggantikan scriptPubKey. Jika anda bingung dengan scriptPubKey, script itu pada dasarnya adalah penggabungan script input transaksi baru, dengan script output pada transaksi sebelumnya.
Pertanyaannya, mengapa pada “Transaksi 2” pada gambar diatas menggunakan scriptPubKey sebagai input transaksinya? Jelas, karena sejumlah bitcoin yang ditransaksikan pada transaksi 2 itu didapat dari transaksi sebelumnya (Transaksi 1). Maka pada Transaksi 2, ada beberapa gabungan input yang sebelumnya berasal dari output transaksi 1.
ScriptPubKey di dalam UTXO bitcoin, pada dasarnya menggunakan script untuk Locking transaksi, sampai setidaknya sejumlah bitcoin di transaksi itu, dipergunakan kembali di transaksi berikutnya. Jika sebuah transaksi UTXO bitcoin telah dipergunakan / dibelanjakan, maka artinya UTXO itu sudah lenyap/hilang, menjadi UTXO di transaksi kedua, begitupun seterusnya, yang tersisa hanyalah penggalan bukti transaksi yang pernah dilakukan saja.
Pola transaksi Bitcoin kedua, adalah ketika menggunakan Multisignature Address. Umumnya, skema multisig ini adalah menggunakan pola M-of-N. Artinya bahwa kombinasi apapun dari signature valid di dalam N, akan dapat membuka UTXO hanya dengan threshold jumlah signature valid M.
Jika pada input transaksi multisig tadi terdiri dari 3 korelasi output UTXO sebelumnya, maka artinya input transaksi tersebut 3x dari ECDSA signature dengan panjang ukuran 65 byte. Hal inilah yang menjadi peluang penggunaan Schnorr Signature menjadi cukup bermanfaat.
Pada Schnorr Signature, generate signature diperoleh dengan cara ini:
Signature creation:
(R, s) = (r*G, r + H(X, R, m) * x)Keterangan:
m = Message
x = Private key
G = Generator point
X = Public key (X = x*G, public key = private key * generator point)(R, s) = Signature (R is the x co-ordinate of a random value after multiplying by the generator point, s is the signature)H(x, y, z..) = Cryptographic Hashing functionR = random nonce * generator point (becomes a point on the Elliptic Curve)s = random nonce + Hash function(Users Public Key, Random point on Elliptic Curve, the message (transaction)) * Private Key
Sedangkan verifikasi signaturenya sebagai berikut:
Signature verification:
s*G = R + H(X,R,m) * X
Kalau kita melihat dari proses verifikasi diatas, pada dasarnya adalah persamaan linier. Kedua sisi dari persamaan itu haruslah sama agar signature itu menjadi bernilai valid.
Implementasi sederhana dari penggunaan Schnorr Signature yang telah ada agar bisa digunakan di Bitcoin, adalah sebagai berikut:
Signature creation:
X = the summation of each Public Key Point
* X = (Xi + (Xi+1) + (Xi+2)...)R = the summation of each participants random nonce
* R = (Ri + (Ri+1) + (Ri+2)...)s = the summation of each participants signature
* si = ri + H(X,R,m) * X
* s = (si + (si+1) + (si+2)...)(R, s) = is the signature with s being the summation of all signaturesSignature verification:
s*G = R + H(X,R,m) * X * X represents the summation of all participants Public Keys
Kelemahan dan potensi mengatasinya
Sayangnya, pada implementasi sederhana diatas, dipandang mempunyai potensi masalah keamanan, yang disebut dengan Rogue Key Attacks. Gambaran bagaimana pola serangan itu dapat dilakukan seperti berikut ini:
- Alice mempunyai dua output, yakni O1 dan O2.
- Sedangkan Bob punya Output yakni O3
- m1 adalah sebuah pesan yang memberikan otorisasi penggunaan O1, dan seterusnya…
- Alice ingin membelanjakan output dari O1 kepada Bob melalui multi party protocol, tapi tidak untuk O2
- Dalam hal ini, Bob punya peluang untuk dapat mengklaim bahwa dia punya key yang sama dengan milik Alice, dengan menggunakan pesan m2 (padahal pesan milik Bob semestinya adalah m3).
- Bob menggunakan pola ini:
s*G = R + H(L,X,A,m1|m2)*XA + H(L,XA,R,m1|m2)*XA
- Sehingga dengan pola itu, pada dasarnya Bob membuat duplikasi pada pesan di m2 untuk dapat mencuri O2 dari Alice.
Bellare-Neven Signatures Sebagai Salah Satu Solusi
Potensi kelemahan masalah keamanan pada Schnorr Signature, tentu saja menghadirkan solusi alternatif agar skema Schnorr tersebut dapat dikembangkan lebih jauh. Hal itu memang sejak pertama kali Schnorr muncul, masih belum ada standar kelayakan yang bisa dipergunakan.
Meski demikian, hal itu tetap masih mengundang banyak hal atas kemungkinan implementasi yang lebih bisa memungkinkan untuk dilakukan. Salah satunya adalah dengan Bellare-Neven Signature. Pada dasarnya, Bellare-Neven Signature ini secara spesifik untuk mengatasi masalah keamanan terkait dengan Rogue Key Attack.
Bellare-Neven, menjadi sebuah alternatif solusi yang cukup baik, dan pernah dipresentasikan oleh Peter Wuile pada tanggal 24-26 Januari 2018 lalu bertempat di Universitas Stanford pada event Blockchain Protocol Analysis and Security Engineering 2018 (BPASE18).
Dibandingkan dengan skema implementasi sederhana atas Schnorr, Bellare-Neven Signature menambahkan hash dari total jumlah semua public key yang ada di dalam input. Lebih detailnya berikut ini pola Bellare-Neven:
Signature creation:
L = H(Xi + (Xi+1)...)
* L is the hash of the summation of all Public KeysR = (ri * G) + ((ri+1) * G)...
* R is the summation of each participants Random Point
* They share their Random Nonce Points with other signerssi = ri + H(L, Xi, R, m) * xi
* si is the signature generated for each participant
* si = random nonce + Hash(Hash of all Public Keys, Participants Public Key, Sum of all Random Points, message (transaction)) * Participants Private Keys = (si) + (si+1) + (si+2)...
* s is the summation of each participants signature* (R, s) is the final signatureSignature verification:
s*G = R + H(L,X1,R,m) * X1 + H(L,X2,R,m) * X2 +...
Sehingga meskipun transaksi yang digunakan adalah menggunakan multisig, namun akan membutuhkan public key dari setiap partisipan di dalam input transaksi tersebut.