TL;DR
Bukti tanpa pengetahuan memungkinkan satu pihak (verifikator) menentukan validitas pernyataan yang diberikan oleh pihak lain (pembukti) tanpa mengetahui isi pernyataan tersebut. Misalnya, Binance mungkin ingin membuktikan bahwa mereka telah mendukung dana penggunanya sepenuhnya dalam bentuk cadangan tanpa mengungkapkan semua saldo pengguna individu.
"Bukti Cadangan" dapat dibangun dengan pohon Merkle yang melindungi dari pemalsuan data internalnya, dalam hal ini, total saldo bersih pelanggannya, yang merupakan kewajiban bursa terhadap penggunanya. Ini kemudian dapat digabungkan dengan zk-SNARK (protokol bukti tanpa pengetahuan) yang memastikan pengguna dapat memeriksa saldo mereka sebagai bagian dari total saldo aset bersih pengguna tanpa mengetahui saldo masing-masing.
Perkenalan
Mengingat berbagai peristiwa pasar, keamanan aset kripto dalam penyimpanan telah menjadi topik yang penting. Pengguna blockchain sangat menghargai transparansi dan keterbukaan tetapi juga mendukung privasi dan kerahasiaan. Hal ini menimbulkan dilema ketika membuktikan cadangan dana yang dipegang oleh kustodian. Sering kali, terdapat pilihan yang tidak seimbang antara transparansi, kepercayaan, dan kerahasiaan data.
Namun, hal ini tidak harus terjadi. Dengan menggabungkan protokol zero-knowledge proof seperti zk-SNARKs dengan Merkle tree, kita dapat menemukan solusi yang efektif untuk semua pihak.
Apa itu Bukti Tanpa Pengetahuan?
Bukti tanpa pengetahuan memungkinkan satu pihak (verifikator) menentukan validitas pernyataan yang diberikan oleh pihak lain (pembukti) tanpa mengetahui isi pernyataan tersebut. Mari kita lihat contoh sederhana.
Anda memiliki brankas terkunci yang hanya Anda yang tahu solusinya. Brankas tersebut, demi contoh tersebut, tidak dapat dibuka, dibobol, atau dipaksa dengan cara apa pun selain dengan mengetahui kombinasinya. Fakta ini juga ditetapkan, diverifikasi, dan diketahui oleh teman Anda yang berpartisipasi dalam percobaan tersebut.
Anda menyatakan bahwa Anda mengetahui kombinasi tersebut kepada teman Anda, tetapi Anda tidak ingin memberikannya atau membuka kotak di hadapan mereka. Di bagian atas kotak tersebut terdapat lubang tempat teman Anda dapat memasukkan catatan. Untuk memastikan hal ini tidak memerlukan pengetahuan sama sekali, teman Anda tidak boleh memiliki informasi tambahan apa pun tentang proses tersebut selain pernyataan yang diberikan.
Anda dapat membuktikan kepada teman Anda bahwa Anda mengetahui kombinasinya dengan membuka kotak, memberi tahu mereka apa yang tertulis di catatan, dan menutupnya kembali. Namun, Anda tidak pernah mengungkapkan kombinasinya.
Untuk contoh yang lebih mendalam, lihat artikel kami Apa itu Zero-knowledge Proof dan Bagaimana Dampaknya pada Blockchain?
Mengapa Kami Menggunakan Bukti Pengetahuan Nol?
Bukti tanpa pengetahuan cocok untuk membuktikan sesuatu tanpa mengungkapkan informasi atau detail yang sensitif. Hal ini dapat terjadi jika Anda tidak ingin menyerahkan informasi keuangan atau pribadi Anda yang dapat digunakan secara tidak tepat.
Dalam kripto, Anda dapat membuktikan bahwa Anda memiliki kunci pribadi tanpa mengungkapkannya atau menandatangani sesuatu secara digital. Bursa mata uang kripto mungkin juga ingin membuktikan status cadangannya tanpa mengungkapkan informasi rahasia tentang penggunanya, termasuk saldo akun masing-masing pengguna.
Untuk contoh-contoh ini (dan banyak lainnya), pembuktian tanpa pengetahuan akan menggunakan algoritma yang mengambil masukan data dan mengembalikan “benar” atau “salah” sebagai keluaran.
Mendefinisikan Bukti Tanpa Pengetahuan dalam Istilah Teknis
Bukti tanpa pengetahuan, dalam istilah teknis, mengikuti struktur tertentu dengan kriteria tertentu. Kami telah membahas peran pembuktian dan verifikasi, tetapi ada juga tiga kriteria yang harus dicakup oleh bukti tanpa pengetahuan:
Kelengkapan. Jika pernyataan tersebut benar, seorang verifikator akan yakin dengan bukti yang diberikan, tanpa memerlukan informasi atau verifikasi lainnya.
Ketepatan. Jika pernyataan tersebut salah, pemeriksa tidak akan yakin akan kebenaran pernyataan tersebut melalui bukti yang diberikan.
Tanpa pengetahuan. Jika pernyataan tersebut benar, pemeriksa tidak mempelajari informasi apa pun selain pernyataan tersebut benar.
Apa itu zk-SNARK?
Zk-SNARK (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) adalah protokol pembuktian yang mengikuti prinsip zero-knowledge yang telah dijelaskan sebelumnya. Dengan zk-SNARK, Anda dapat membuktikan bahwa Anda mengetahui nilai hash asli (dibahas lebih lanjut di bawah) tanpa mengungkapkan apa itu. Anda juga dapat membuktikan validitas transaksi tanpa mengungkapkan informasi apa pun tentang jumlah, nilai, atau alamat tertentu yang terlibat.
zk-SNARK umumnya digunakan dan dibahas dalam dunia blockchain dan mata uang kripto. Namun, Anda mungkin bertanya-tanya mengapa seseorang mau repot-repot menggunakan zk-SNARK ketika mereka dapat menggunakan metode pasangan kunci publik dan privat yang sederhana untuk mengamankan informasi. Namun, kami tidak akan dapat menerapkan bukti matematis untuk memastikan tidak ada saldo negatif yang disertakan dan jumlah pohon Merkle.
Dalam kasus cadangan bursa, kami ingin membuktikan dukungan 1:1 atas saldo nasabah tanpa pengenal dan saldo setiap akun dipublikasikan. Selain itu, teknologi zk-SNARK membuat pemalsuan data menjadi semakin tidak mungkin.
Apa itu Pohon Merkle?
Menyajikan total dana akun pengguna Binance memerlukan penggunaan kumpulan data yang besar. Salah satu cara untuk menyajikan sejumlah besar data ini secara kriptografis adalah dengan menggunakan pohon Merkle. Sejumlah besar informasi dapat disimpan secara efisien di dalamnya, dan sifat kriptografisnya membuat integritasnya mudah diverifikasi.
Fungsi hash
Untuk mengodekan input secara ringkas, pohon Merkle bergantung pada penggunaan fungsi hash. Singkatnya, hashing adalah proses menghasilkan output berukuran tetap dari input berukuran variabel. Dengan kata lain, ketika input dengan panjang berapa pun di-hash melalui algoritma, ia akan menghasilkan output terenkripsi dengan panjang tetap.
Selama input tetap sama, output juga akan sama. Ini berarti kita dapat mengambil sejumlah besar data transaksional dan mengolahnya menjadi output yang dapat dikelola. Output akan sangat berbeda jika ada informasi yang diubah dalam input.
Misalnya, kita dapat mengambil isi dari 100 buku dan memasukkannya ke dalam fungsi hash SHA-256. Hasilnya akan seperti ini:
801a9be154c78caa032a37b4a4f0747f1e1addb397b64fa8581d749d704c12ea
Jika kita kemudian mengubah satu karakter input (100 buku tersebut), hashnya akan sangat berbeda, seperti ini:
abc5d230121d93a93a25bf7cf54ab71e8617114ccb57385a87ff12872bfda410
Itulah properti penting dari fungsi hash karena memungkinkan verifikasi akurasi data dengan mudah. Jika seseorang meniru proses hashing 100 buku yang sama menggunakan algoritma SHA-256, mereka akan mendapatkan hash yang sama persis dengan output. Jika outputnya berbeda, kita dapat memastikan dengan pasti bahwa input telah diubah. Ini berarti tidak perlu memeriksa perbedaan antara input secara individual atau manual, yang dapat memakan banyak tenaga.
Pohon Merkle di dunia mata uang kripto
Saat menyimpan data transaksi pada blockchain, setiap transaksi baru dikirimkan melalui fungsi hash, yang menghasilkan nilai hash yang unik. Bayangkan kita memiliki delapan transaksi (A hingga H) yang kita hash secara individual untuk mendapatkan output hash-nya. Inilah yang kita sebut simpul daun Merkle. Pada gambar di bawah, Anda dapat melihat nilai hash unik dari setiap huruf: hA untuk A, hB untuk B, hC untuk C, dst.
Kita kemudian dapat mengambil pasangan keluaran yang di-hash, menggabungkannya, dan menerima keluaran yang di-hash baru. Misalnya, hash dari hA dan hB yang di-hash bersama-sama akan memberi kita keluaran hash baru dari hAB yang dikenal sebagai cabang Merkle. Perhatikan bahwa setiap kali keluaran baru dihasilkan, keluaran tersebut memiliki panjang dan ukuran yang tetap, sesuai dengan fungsi hash yang digunakan.
Sekarang, kita memiliki data dari dua transaksi (misalnya, A dan B) yang digabungkan dalam satu hash (hAB). Perhatikan bahwa jika kita mengubah informasi apa pun dari A atau B dan mengulangi prosesnya, output hash kita akan sama sekali berbeda.
Proses ini berlanjut saat kita menggabungkan pasangan hash baru untuk melakukan hash lagi (lihat gambar di bawah). Kita melakukan hash hAB dengan hCD untuk mendapatkan hash unik hABCD dan melakukan hal yang sama dengan hEF dan hGH untuk mendapatkan hEFGH. Pada akhirnya, kita menerima satu hash yang mewakili output hash dari semua hash transaksi sebelumnya. Dengan kata lain, output hash hABCDEFGH mewakili semua informasi yang datang sebelumnya.
Grafik yang ditampilkan di atas disebut pohon Merkle, dan keluaran yang di-hash hABCDEFGH adalah akar Merkle. Kami menggunakan akar Merkle dalam tajuk blok, karena akar tersebut meringkas semua data transaksi dalam satu blok secara kriptografis dengan cara yang ringkas. Kami juga dapat dengan cepat memverifikasi apakah ada data yang telah dirusak atau diubah dalam blok tersebut.
Keterbatasan Pohon Merkle
Mari kita kembali ke contoh cadangan CEX kita. CEX ingin membuktikan dukungan 1:1 dari semua aset pelanggannya dan membangun pohon Merkle yang menggabungkan UID pelanggannya dengan kepemilikan aset bersih mereka (mengurangi aset dan liabilitas) pada tingkat token. Setelah dirilis (dan ditandatangani untuk membuktikan kepemilikan atas akar Merkle yang disediakan), pengguna individu tidak akan memiliki cara untuk memeriksa apakah pohon Merkle valid tanpa mengakses semua inputnya.
Pertukaran mungkin tidak menyertakan beberapa masukan. Pertukaran juga dapat membuat akun palsu dengan saldo negatif untuk mengubah total kewajiban. Misalnya, meskipun aset nasabah mungkin berjumlah $1.000.000, akun palsu dapat ditambahkan dengan saldo -$500.000. Ini akan menciptakan target cadangan hanya sebesar $500.000.
Kasus pembuktian cadangan berbeda dengan akar Merkle blok, karena pengguna dapat melihat semua transaksi yang terdapat dalam blok pada penjelajah blockchain. Namun, CEX tidak ingin mengungkapkan setiap saldo akun karena alasan keamanan dan privasi data. Pelanggan juga tidak akan senang jika saldo akun mereka dipublikasikan. Dalam kasus ini, CEX tidak dapat membuktikan bahwa saldo pengguna berjumlah total yang benar tanpa memperlihatkan saldo pengguna lain.
Salah satu solusi yang dapat dipertimbangkan oleh bursa adalah menggunakan auditor pihak ketiga yang tepercaya. Auditor dapat memeriksa akun dan cadangan individual sebelum akhirnya membuktikan keabsahan akar Merkle yang diberikan. Namun, bagi pengguna, metode ini memerlukan kepercayaan pada auditor dan data yang digunakan untuk audit. Anda tidak perlu bergantung pada pihak ketiga jika Anda dapat memercayai datanya.
Menggabungkan zk-SNARKs dengan Pohon Merkle
Masalah di atas adalah kasus yang tepat untuk menggunakan zk-SNARK. Kami ingin membuktikan bahwa cadangan sepenuhnya mencakup kewajiban pengguna dan tidak dipalsukan. Namun, untuk alasan privasi dan keamanan, kami tidak ingin menunjukkan kepada verifikator susunan saldo dan cadangan pengguna yang sebenarnya.
Dengan menggunakan zk-SNARK, bursa kripto dapat membuktikan bahwa semua set saldo simpul daun pohon Merkle (yaitu, saldo akun pengguna) berkontribusi pada total saldo aset pengguna yang diklaim bursa. Setiap pengguna dapat dengan mudah mengakses simpul daun mereka karena telah disertakan dalam proses tersebut. Zk-SNARK juga memastikan setiap pohon Merkle yang dihasilkan tidak berisi pengguna dengan total saldo aset bersih negatif (yang akan menyiratkan pemalsuan data, karena semua pinjaman dijaminkan secara berlebihan). Perhitungan status global Binance juga digunakan, yaitu, daftar total saldo bersih setiap aset yang dimiliki setiap pelanggan Binance.
Mari kita lihat bagaimana Binance menyikapi situasi ini. Untuk memulai, Binance mendefinisikan batasan komputasi yang ingin dibuktikan dan mendefinisikannya sebagai rangkaian yang dapat diprogram. Berikut ini adalah tiga batasan yang digunakan Binance dalam modelnya.
Untuk setiap set keseimbangan pengguna (simpul daun pohon Merkle), rangkaian kami memastikan bahwa:
Saldo aset pengguna dimasukkan dalam perhitungan jumlah total saldo bersih pengguna dengan Binance.
Total saldo bersih pengguna lebih besar atau sama dengan nol.
Perubahan akar pohon Merkle berlaku (yaitu, tidak menggunakan informasi yang dipalsukan) setelah memperbarui informasi pengguna ke hash simpul daun.
Binance kemudian dapat menghasilkan bukti zk-SNARK untuk konstruksi pohon Merkle menurut rangkaian tersebut. Hal ini memerlukan pertukaran yang menjalankan perhitungan berat untuk hashing ID dan saldo pengguna sambil memastikan bukti tersebut melewati batasan.
Verifikator akan memeriksa bukti (dan kode sumber terbuka yang dirilis ke publik) untuk memastikan bahwa komputasi dijalankan dengan semua batasan yang terpenuhi. Komputasi verifikasi membutuhkan waktu yang sangat singkat dibandingkan dengan waktu pembuktian.
Pada setiap rilis Bukti Cadangan, bursa akan menerbitkan:
1. Bukti Merkle untuk setiap pengguna.
2. Bukti zk-SNARK dan masukan publik (hash dari daftar total saldo bersih setiap aset dan akar Merkle) dari sirkuit untuk semua pengguna.
Pihak yang berminat dapat memverifikasi bukti Merkle, memastikan saldo masing-masing berkontribusi pada akar pohon Merkle. Mereka juga dapat memverifikasi bukti zk-SNARK untuk memastikan konstruksi pohon Merkle memenuhi batasan yang ditetapkan dalam rangkaian. Untuk penjelasan lebih rinci tentang solusi zk-SNARK dan kinerjanya, lihat blog kami tentang Bagaimana zk-SNARK Meningkatkan Sistem Proof-of-Reserves Binance.
Pemikiran Penutup
zk-SNARK menyediakan teknologi yang dibutuhkan untuk memastikan integritas dan privasi data secara bersamaan. Penerapannya untuk membuktikan cadangan dan meningkatkan transparansi CEX akan membantu membangun kepercayaan dalam industri blockchain. Bagi banyak orang, perkembangan seperti ini telah lama ditunggu dan datang pada saat yang penting bagi CEX.
Ini adalah versi pertama zk-SNARK kami dan kami berharap dapat menerima masukan dari komunitas sehingga kami dapat terus meningkatkan sistem ini.
Bacaan lebih lanjut
(Blog) Bagaimana zk-SNARKs Meningkatkan Sistem Proof-of-Reserves Binance
(Akademi) Bukti Cadangan (PoR)
(Akademi) Apa Itu Proof of Reserves dan Cara Kerjanya di Binance
(Pengumuman) Binance merilis sistem Bukti Cadangan


