Lição 3

Bagaimana Menggabungkan Proof of Reserves dengan Teknologi zk-SNARK?

Pelajaran ini menjelaskan apa itu teknologi zk-SNARK dan bagaimana Proof of Reserves dioptimalkan menggunakan teknologi zk-SNARK

Latar Belakang

Bukti Pengetahuan Nol (ZKP) adalah teknik kriptografi yang pertama kali diusulkan oleh S. Goldwasser, S. Micali, dan C. Rackoff pada awal tahun 1980-an dalam sebuah makalah berjudulKompleksitas Pengetahuan dari Sistem Bukti InteraktifDalam makalah tersebut, konsep ini dikonseptualisasikan sebagai model teoritis untuk memecahkan masalah memverifikasi pernyataan matematika tanpa mengungkapkan bukti. Konsep ini telah menarik perhatian luas di kalangan akademisi karena menantang batas-batas teknik kriptografi tradisional dan memberikan metode baru untuk memproses informasi sensitif.

Seiring waktu, ZKP telah berkembang dari konsep teoritis abstrak menjadi protokol konkret yang dapat diintegrasikan ke dalam berbagai aplikasi. Pada tahun 2010, Groth mempublikasikan sebuah makalah berjudul “Bukti Nol Interaktif Berbasis Pasangan yang Pendek", yang menjadi tonggak teoritis untuk zk-SNARK (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge), solusi penting dalam ZKP. Kemajuan paling penting dalam penerapan bukti pengetahuan nol adalah sistem bukti pengetahuan nol yang digunakan oleh Z-cash pada tahun 2015, yang memberikan perlindungan privasi untuk transaksi dan jumlah. Selanjutnya, zk-SNARK dikombinasikan dengan kontrak pintar, memperluas aplikasinya ke berbagai skenario aplikasi yang lebih luas.

Prinsip Dasar zk-SNARK

ZKP tradisional mematuhi tiga prinsip:

  • Kelengkapan: Jika pernyataan itu benar, seorang pembuktian yang jujur selalu bisa meyakinkan pemeriksa.
  • Ketepatan: Jika pernyataan tersebut salah, maka setiap pemeriksa yang curang hanya dapat menyesatkan pemeriksa dengan kemungkinan kecil.
  • Zero-knowledge: Jika pernyataan tersebut benar, pemeriksa tidak akan dapat memperoleh apa pun selain fakta bahwa pernyataan tersebut benar. Dengan kata lain, proses verifikasi tidak akan mengungkapkan informasi apa pun yang dapat digunakan untuk membuat bukti.

Prinsip ZKP dapat dipahami melalui contoh sederhana: Jika saya perlu membuktikan kepada A bahwa saya memiliki nomor telepon B, saya tidak perlu langsung mengungkapkan nomor telepon B. Sebaliknya, saya bisa langsung menelepon nomor telepon B dan membuktikan bahwa saya memang memiliki nomor telepon B setelah berhasil terhubung. Proses ini tidak akan bocor nomor telepon B.
zk-SNARK lebih meningkatkan prinsip-prinsip ini dengan karakteristik berikut:

  • Zero pengetahuan: Verifier tidak mendapatkan informasi yang berguna dari bukti tersebut.
  • Singkat: Ukuran buktinya kecil (biasanya hanya beberapa puluhan byte) dan waktu verifikasinya singkat (biasanya hanya beberapa milidetik);
  • Non-interaktif: Sang pembuktikan hanya perlu mengirimkan bukti ke pemeriksa sekali, tanpa komunikasi lebih lanjut yang diperlukan.
  • Parameter-parameter terpercaya: Baik si pembuktikan maupun pemeriksa perlu menggunakan String Referensi Umum (CRS) yang dihasilkan oleh pihak ketiga yang terpercaya, yang mungkin berisi informasi sensitif yang jika bocor atau dimanipulasi, dapat mengancam keamanan sistem.

Dalam makalah Groth, dia mengusulkan metode bukti pengetahuan nol-interaktif berbasis pasangan untuk mengubah masalah komputasi menjadi Program Aritmetika Kuadrat (QAP). Metode ini menggunakan kriptografi kurva eliptik dan fungsi hash untuk membuat bukti yang efektif. Desain zk-SNARK berikutnya umumnya melibatkan empat langkah.

  • Penyiapan Sistem: Dilakukan oleh pihak ketiga yang tepercaya. Ini melibatkan pembuatan CRS, termasuk kunci bukti (pk) dan kunci verifikasi (vk). Proses ini hanya perlu dilakukan sekali, dan CRS dapat digunakan kembali beberapa kali.
  • Pengkodean Masalah: Mengubah masalah komputasi f (x) = y menjadi bentuk QAP A (x) · B (x) = C (x) · Z (x), di mana A (x), B (x), C (x) adalah polinomial yang ditentukan oleh struktur sirkuit f, Z (x) adalah polinomial tetap, x adalah titik yang dipilih secara acak, dan y adalah output dari f. Proses ini dapat dilakukan oleh prover atau verifier, atau oleh pihak ketiga terlebih dahulu.
  • Generasi Bukti: Dilakukan oleh pemberi bukti. Ini melibatkan penggunaan input w dari pk, x, dan f untuk menghasilkan sebuah bukti \pi, membuktikan bahwa dia mengetahui sebuah w yang memenuhi f (w) = y tanpa mengungkapkan nilai spesifik dari w. Proses ini melibatkan perhitungan polinomial, operasi kurva elips, dan operasi fungsi hash, yang akhirnya menghasilkan sebuah \pi yang terdiri dari beberapa titik kurva elips dan sebuah nilai hash.
  • Verifikasi Bukti: Dilakukan oleh verifier. Melibatkan penggunaan vk, x, y, dan \pi untuk verifikasi, menentukan apakah pembuktian mengetahui w yang memenuhi f (w) = y. Proses ini juga melibatkan perhitungan polinomial, operasi kurva eliptis, dan operasi fungsi hash. Akhirnya, diperoleh nilai boolean yang menunjukkan apakah bukti tersebut valid.

Untuk menjelaskan dengan contoh sederhana, misalkan Anda memiliki peta harta karun yang dapat membimbing Anda ke lokasi tepat harta karun yang terkubur. Anda ingin membuktikan kepada seseorang bahwa Anda tahu lokasi harta karun, tetapi Anda tidak ingin mengungkapkan isi peta harta karun atau lokasi sebenarnya dari harta karun. Jika Anda menggunakan teknologi zk-SNARK, Anda perlu membuat teka-teki yang kompleks dari peta harta karun. Anda memilih potongan kecil dari teka-teki penting (bukti) dan menunjukkannya kepada orang lain, meyakinkan mereka bahwa Anda tahu bagaimana seluruh teka-teki, yaitu lokasi harta karun, cocok bersama tanpa mengungkapkan seluruh teka-teki. Namun, untuk melakukan ini, Anda perlu mendapatkan beberapa tanda khusus dari percetakan terpercaya, yang digunakan untuk membuktikan keaslian potongan teka-teki Anda.

Kombinasi Cadangan Pertukaran dengan zk-SNARK

Diskusi sebelumnya menyebutkan bahwa zk-SNARK memungkinkan pengaturan string referensi umum, yang berarti kendala dapat ditetapkan pada sirkuit yang berjalan. Mengambil cadangan Gate.io sebagai contoh, ia menetapkan lima kendala inti dalam sirkuit, seperti yang ditunjukkan di bawah ini:

(1) Sebelum memasukkan aset bersih pengguna ke pohon Merkle, node yang sesuai dengan ID pengguna kosong.
② Hitung total aset/kewajiban pengguna berdasarkan daftar aset pengguna dan harga masing-masing aset. Total aset harus lebih besar dari total kewajiban.
③ Tambahkan aset/kewajiban pengguna ke aset/kewajiban pertukaran.
④ Hitung hash status pengguna menggunakan ID pengguna, total aset/liabilitas, dan daftar aset. Sisipkan status pengguna ke dalam pohon Merkle untuk mendapatkan Merkle Root baru.
(5) Nilai hash dari simpul akar pohon sebelum pengguna sebelumnya membuat operasi pengguna harus sama dengan nilai hash setelah pengguna berikutnya membuat operasi pengguna.
(Operasi ① dapat menghindari data node menjadi palsu, operasi ② dapat menghindari akun saldo negatif, dan operasi ⑤ dapat memastikan bahwa data pengguna tidak berubah sebelum dan sesudah operasi.)
Ini memastikan penyelesaian masalah saldo negatif. Data pertukaran hanya perlu melewati sirkuit untuk secara otomatis melakukan pemeriksaan kendala dan mendapatkan jumlah aset. Namun, solusi ini memerlukan daya komputasi dan kondisi perangkat keras tertentu. Dibutuhkan 15 hari untuk menghitung bukti aset dari 10 juta pengguna pada mesin 32-core dengan RAM 128GB. Perhitungan Proof of Reserves dapat diparalelkan. Jika ada 10 mesin, hanya dibutuhkan 1,5 hari.

Kesimpulan

Dengan menetapkan kendala yang relevan, zk-SNARK dapat menghindari terjadinya masalah nilai negatif dan lebih baik melindungi privasi dan keamanan pengguna. Proof of Reserves Gate.io sekarang dapat membuktikan rasio cadangan untuk 100+ koin, dan pengguna dapat melihatnya dengan hanya mengklik tombol.taut. Dalam pelajaran berikutnya, kami akan membawa Anda untuk memverifikasi keamanan aset Anda dalam waktu 3 menit.

Exclusão de responsabilidade
* O investimento em criptomoedas envolve riscos significativos. Prossiga com cuidado. O curso não pretende ser um conselho de investimento.
* O curso é criado pelo autor que se juntou ao Gate Learn. Qualquer opinião partilhada pelo autor não representa o Gate Learn.
Catálogo
Lição 3

Bagaimana Menggabungkan Proof of Reserves dengan Teknologi zk-SNARK?

Pelajaran ini menjelaskan apa itu teknologi zk-SNARK dan bagaimana Proof of Reserves dioptimalkan menggunakan teknologi zk-SNARK

Latar Belakang

Bukti Pengetahuan Nol (ZKP) adalah teknik kriptografi yang pertama kali diusulkan oleh S. Goldwasser, S. Micali, dan C. Rackoff pada awal tahun 1980-an dalam sebuah makalah berjudulKompleksitas Pengetahuan dari Sistem Bukti InteraktifDalam makalah tersebut, konsep ini dikonseptualisasikan sebagai model teoritis untuk memecahkan masalah memverifikasi pernyataan matematika tanpa mengungkapkan bukti. Konsep ini telah menarik perhatian luas di kalangan akademisi karena menantang batas-batas teknik kriptografi tradisional dan memberikan metode baru untuk memproses informasi sensitif.

Seiring waktu, ZKP telah berkembang dari konsep teoritis abstrak menjadi protokol konkret yang dapat diintegrasikan ke dalam berbagai aplikasi. Pada tahun 2010, Groth mempublikasikan sebuah makalah berjudul “Bukti Nol Interaktif Berbasis Pasangan yang Pendek", yang menjadi tonggak teoritis untuk zk-SNARK (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge), solusi penting dalam ZKP. Kemajuan paling penting dalam penerapan bukti pengetahuan nol adalah sistem bukti pengetahuan nol yang digunakan oleh Z-cash pada tahun 2015, yang memberikan perlindungan privasi untuk transaksi dan jumlah. Selanjutnya, zk-SNARK dikombinasikan dengan kontrak pintar, memperluas aplikasinya ke berbagai skenario aplikasi yang lebih luas.

Prinsip Dasar zk-SNARK

ZKP tradisional mematuhi tiga prinsip:

  • Kelengkapan: Jika pernyataan itu benar, seorang pembuktian yang jujur selalu bisa meyakinkan pemeriksa.
  • Ketepatan: Jika pernyataan tersebut salah, maka setiap pemeriksa yang curang hanya dapat menyesatkan pemeriksa dengan kemungkinan kecil.
  • Zero-knowledge: Jika pernyataan tersebut benar, pemeriksa tidak akan dapat memperoleh apa pun selain fakta bahwa pernyataan tersebut benar. Dengan kata lain, proses verifikasi tidak akan mengungkapkan informasi apa pun yang dapat digunakan untuk membuat bukti.

Prinsip ZKP dapat dipahami melalui contoh sederhana: Jika saya perlu membuktikan kepada A bahwa saya memiliki nomor telepon B, saya tidak perlu langsung mengungkapkan nomor telepon B. Sebaliknya, saya bisa langsung menelepon nomor telepon B dan membuktikan bahwa saya memang memiliki nomor telepon B setelah berhasil terhubung. Proses ini tidak akan bocor nomor telepon B.
zk-SNARK lebih meningkatkan prinsip-prinsip ini dengan karakteristik berikut:

  • Zero pengetahuan: Verifier tidak mendapatkan informasi yang berguna dari bukti tersebut.
  • Singkat: Ukuran buktinya kecil (biasanya hanya beberapa puluhan byte) dan waktu verifikasinya singkat (biasanya hanya beberapa milidetik);
  • Non-interaktif: Sang pembuktikan hanya perlu mengirimkan bukti ke pemeriksa sekali, tanpa komunikasi lebih lanjut yang diperlukan.
  • Parameter-parameter terpercaya: Baik si pembuktikan maupun pemeriksa perlu menggunakan String Referensi Umum (CRS) yang dihasilkan oleh pihak ketiga yang terpercaya, yang mungkin berisi informasi sensitif yang jika bocor atau dimanipulasi, dapat mengancam keamanan sistem.

Dalam makalah Groth, dia mengusulkan metode bukti pengetahuan nol-interaktif berbasis pasangan untuk mengubah masalah komputasi menjadi Program Aritmetika Kuadrat (QAP). Metode ini menggunakan kriptografi kurva eliptik dan fungsi hash untuk membuat bukti yang efektif. Desain zk-SNARK berikutnya umumnya melibatkan empat langkah.

  • Penyiapan Sistem: Dilakukan oleh pihak ketiga yang tepercaya. Ini melibatkan pembuatan CRS, termasuk kunci bukti (pk) dan kunci verifikasi (vk). Proses ini hanya perlu dilakukan sekali, dan CRS dapat digunakan kembali beberapa kali.
  • Pengkodean Masalah: Mengubah masalah komputasi f (x) = y menjadi bentuk QAP A (x) · B (x) = C (x) · Z (x), di mana A (x), B (x), C (x) adalah polinomial yang ditentukan oleh struktur sirkuit f, Z (x) adalah polinomial tetap, x adalah titik yang dipilih secara acak, dan y adalah output dari f. Proses ini dapat dilakukan oleh prover atau verifier, atau oleh pihak ketiga terlebih dahulu.
  • Generasi Bukti: Dilakukan oleh pemberi bukti. Ini melibatkan penggunaan input w dari pk, x, dan f untuk menghasilkan sebuah bukti \pi, membuktikan bahwa dia mengetahui sebuah w yang memenuhi f (w) = y tanpa mengungkapkan nilai spesifik dari w. Proses ini melibatkan perhitungan polinomial, operasi kurva elips, dan operasi fungsi hash, yang akhirnya menghasilkan sebuah \pi yang terdiri dari beberapa titik kurva elips dan sebuah nilai hash.
  • Verifikasi Bukti: Dilakukan oleh verifier. Melibatkan penggunaan vk, x, y, dan \pi untuk verifikasi, menentukan apakah pembuktian mengetahui w yang memenuhi f (w) = y. Proses ini juga melibatkan perhitungan polinomial, operasi kurva eliptis, dan operasi fungsi hash. Akhirnya, diperoleh nilai boolean yang menunjukkan apakah bukti tersebut valid.

Untuk menjelaskan dengan contoh sederhana, misalkan Anda memiliki peta harta karun yang dapat membimbing Anda ke lokasi tepat harta karun yang terkubur. Anda ingin membuktikan kepada seseorang bahwa Anda tahu lokasi harta karun, tetapi Anda tidak ingin mengungkapkan isi peta harta karun atau lokasi sebenarnya dari harta karun. Jika Anda menggunakan teknologi zk-SNARK, Anda perlu membuat teka-teki yang kompleks dari peta harta karun. Anda memilih potongan kecil dari teka-teki penting (bukti) dan menunjukkannya kepada orang lain, meyakinkan mereka bahwa Anda tahu bagaimana seluruh teka-teki, yaitu lokasi harta karun, cocok bersama tanpa mengungkapkan seluruh teka-teki. Namun, untuk melakukan ini, Anda perlu mendapatkan beberapa tanda khusus dari percetakan terpercaya, yang digunakan untuk membuktikan keaslian potongan teka-teki Anda.

Kombinasi Cadangan Pertukaran dengan zk-SNARK

Diskusi sebelumnya menyebutkan bahwa zk-SNARK memungkinkan pengaturan string referensi umum, yang berarti kendala dapat ditetapkan pada sirkuit yang berjalan. Mengambil cadangan Gate.io sebagai contoh, ia menetapkan lima kendala inti dalam sirkuit, seperti yang ditunjukkan di bawah ini:

(1) Sebelum memasukkan aset bersih pengguna ke pohon Merkle, node yang sesuai dengan ID pengguna kosong.
② Hitung total aset/kewajiban pengguna berdasarkan daftar aset pengguna dan harga masing-masing aset. Total aset harus lebih besar dari total kewajiban.
③ Tambahkan aset/kewajiban pengguna ke aset/kewajiban pertukaran.
④ Hitung hash status pengguna menggunakan ID pengguna, total aset/liabilitas, dan daftar aset. Sisipkan status pengguna ke dalam pohon Merkle untuk mendapatkan Merkle Root baru.
(5) Nilai hash dari simpul akar pohon sebelum pengguna sebelumnya membuat operasi pengguna harus sama dengan nilai hash setelah pengguna berikutnya membuat operasi pengguna.
(Operasi ① dapat menghindari data node menjadi palsu, operasi ② dapat menghindari akun saldo negatif, dan operasi ⑤ dapat memastikan bahwa data pengguna tidak berubah sebelum dan sesudah operasi.)
Ini memastikan penyelesaian masalah saldo negatif. Data pertukaran hanya perlu melewati sirkuit untuk secara otomatis melakukan pemeriksaan kendala dan mendapatkan jumlah aset. Namun, solusi ini memerlukan daya komputasi dan kondisi perangkat keras tertentu. Dibutuhkan 15 hari untuk menghitung bukti aset dari 10 juta pengguna pada mesin 32-core dengan RAM 128GB. Perhitungan Proof of Reserves dapat diparalelkan. Jika ada 10 mesin, hanya dibutuhkan 1,5 hari.

Kesimpulan

Dengan menetapkan kendala yang relevan, zk-SNARK dapat menghindari terjadinya masalah nilai negatif dan lebih baik melindungi privasi dan keamanan pengguna. Proof of Reserves Gate.io sekarang dapat membuktikan rasio cadangan untuk 100+ koin, dan pengguna dapat melihatnya dengan hanya mengklik tombol.taut. Dalam pelajaran berikutnya, kami akan membawa Anda untuk memverifikasi keamanan aset Anda dalam waktu 3 menit.

Exclusão de responsabilidade
* O investimento em criptomoedas envolve riscos significativos. Prossiga com cuidado. O curso não pretende ser um conselho de investimento.
* O curso é criado pelo autor que se juntou ao Gate Learn. Qualquer opinião partilhada pelo autor não representa o Gate Learn.