Teruskan Judul Asli 'Paradigma Pengetahuan Nol: Bagian 1 - Apa itu zk-VM?'
Apa itu zero knowledge proof (ZKP)?
Jika Anda tidak memiliki pengetahuan sebelumnya tentang zero knowledge proofs (ZKP), video dari Wired ini menjelaskan konsep pada lima tingkat kesulitan secara interaktif dengan contoh dan demonstrasi yang mudah dimengerti. Sangat dianjurkan.
Dalam istilah yang paling sederhana, ZKP memungkinkan satu pihak (prover) untuk membuktikan kepada pihak lain (verifikator) bahwa mereka mengetahui sesuatu tanpa mengungkapkan apa itu atau informasi tambahan apa pun. Lebih khusus lagi, ZKP membuktikan pengetahuan tentang sepotong data, atau pengetahuan tentang hasil perhitungan, tanpa mengungkapkan data atau input. Proses menciptakan bukti pengetahuan nol melibatkan serangkaian model matematika untuk mengubah hasil perhitungan menjadi sepotong informasi yang tidak berarti yang membuktikan keberhasilan eksekusi kode, yang nantinya dapat diverifikasi.
Dalam beberapa kasus, dibutuhkan lebih sedikit pekerjaan untuk memverifikasi bukti, yang dibangun setelah beberapa putaran konversi aljabar dan kriptografi, daripada yang diperlukan untuk menjalankan perhitungan. Kombinasi unik antara keamanan dan skalabilitas inilah yang membuat kriptografi tanpa pengetahuan menjadi alat yang hebat.
zkSNARKs: Nol Pengetahuan Ringkas Argumen Pengetahuan Non-Interaktif
zkSTARKs: Pengetahuan Nol Argumen Pengetahuan Transparan yang Dapat Diskalakan
(Catatan: Jembatan Succinct's menggunakan SNARKs tetapi SP1 adalah protokol berbasis STARK)
Perlu dicatat bahwa semua STARK adalah SNARK, tetapi tidak semua SNARK adalah STARK.
Untuk pemahaman umum yang lebih baik tentang SNARKs dan STARKs, kami sarankan untuk membaca seri artikel @krzhang/privacy-in-cryptocurrencies-zero-knowledge-and-zk-snarks-1-2-68ce1838fd9c">artikel yang ditulis oleh Yan Zhang dan Yi Sun dari Axiom, dan kumpulan artikel ini di github Ventali Tan.
Mesin virtual (VM) adalah program yang menjalankan program. Dalam konteksnya, zkVM adalah komputer virtual yang diimplementasikan sebagai sistem untuk menghasilkan bukti pengetahuan nol, atau sirkuit universal, atau alat, untuk menghasilkan ZKP untuk program atau perhitungan apa pun.
zkVM menghilangkan kebutuhan untuk mempelajari matematika dan kriptografi yang rumit untuk merancang dan mengkodekan ZK, dan memungkinkan pengembang mana pun untuk menjalankan program yang ditulis dalam bahasa pilihan mereka dan menghasilkan ZKP, membuatnya jauh lebih mudah untuk diintegrasikan dan berinteraksi tanpa pengetahuan. Secara garis besar, sebagian besar referensi ke zkVM secara implisit mencakup toolchains kompiler dan sistem bukti yang ditambahkan ke mesin virtual yang menjalankan program, dan bukan hanya mesin virtual itu sendiri. Di bawah ini, kami merangkum komponen utama zkVM dan fungsinya:
Komponen utama zkVM
Desain dan implementasi setiap komponen diatur oleh pilihan bukti (SNARKs atau STARKs) dan arsitektur set instruksi (ISA) dari zkVM. Secara tradisional, ISA menentukan apa yang CPU mampu (tipe data, register, memori dll) dan urutan tindakan yang dilakukan CPU ketika menjalankan program. Dalam konteks, ISA menentukan kode mesin yang dapat ditafsirkan dan dieksekusi oleh VM. Memilih ISA dapat menghasilkan perbedaan radikal dalam aksesibilitas dan kegunaan zkVM, serta kecepatan dan efisiensi proses pembangkitan bukti, dan mendukung pembangunan zkVM apa pun.
Di bawah ini adalah beberapa contoh zkVM dan komponennya untuk referensi Anda.
zkVM dan komponennya
Untuk saat ini, kami akan fokus pada interaksi antara masing-masing komponen pada tingkat tinggi untuk menyediakan kerangka kerja untuk memahami proses aljabar dan kriptografi serta pengorbanan desain zkVM di artikel selanjutnya.
Diagram berikut adalah diagram alur proses abstrak dan umum dari zkVM, dibagi dan dikategorikan antara format (input / output) suatu program saat bergerak melalui komponen zkVM. Kami akan memeriksa setiap proses secara mendalam di artikel berikutnya.
Alur umum untuk zkVM
Alur proses zkVM umumnya sebagai berikut:
Prover menerima jejak dan mewakilinya sebagai satu set polinomial yang terikat oleh serangkaian kendala, pada dasarnya menerjemahkan perhitungan ke dalam aljabar dengan memetakan fakta secara matematis.
Prover berkomitmen untuk polinomial ini menggunakan Polynomial Commitment Scheme (PCS). Skema komitmen adalah protokol yang memungkinkan prover untuk membuat sidik jari dari beberapa data X, yang disebut komitmen untuk X, dan kemudian membuktikan fakta tentang X tanpa mengungkapkan X, menggunakan komitmen untuk X. PCS adalah sidik jari; versi ringkas "pra-diproses" dari batasan pada perhitungan. Hal ini memungkinkan prover untuk membuktikan fakta tentang perhitungan, sekarang dinyatakan dalam persamaan polinomial, menggunakan nilai acak yang diusulkan oleh verifier dalam langkah-langkah berikut.
Prover menjalankan Polynomial Interactive Oracle Proof (PIOP) untuk menunjukkan bahwa polinomial yang berkomitmen mewakili jejak eksekusi yang memenuhi batasan yang diberikan. PIOP adalah protokol bukti interaktif yang terdiri dari serangkaian putaran di mana prover mengirimkan komitmen ke polinomial, verifier merespons dengan nilai bidang acak, dan prover memberikan evaluasi polinomial pada nilai acak ini, mirip dengan "menyelesaikan" persamaan polinomial menggunakan nilai acak untuk membujuk verifikator secara probabilistik.
Menerapkan heuristik Fiat-Shamir; prover menjalankan PIOP dalam mode non-interaktif, di mana perilaku verifikator terbatas pada pengiriman poin tantangan pseudo-random. Dalam kriptografi, heuristik Fiat-Shamir mengubah bukti pengetahuan interaktif menjadi tanda tangan digital untuk verifikasi. Langkah ini mengenkripsi bukti dan menjadikannya nol pengetahuan.
Prover harus meyakinkan verifikator bahwa evaluasi polinomial yang diklaim benar, sehubungan dengan komitmen polinomial yang dikirim ke verifikator. Untuk melakukan ini, prover menghasilkan bukti "evaluasi" atau "pembukaan", yang disediakan oleh skema komitmen polinomial (sidik jari).
Singkatnya, bukti zkVM membuktikan, untuk program tertentu, hasil yang diberikan, dan kondisi awal yang diberikan, bahwa ada beberapa input yang menyebabkan program menghasilkan hasil yang diberikan ketika dijalankan dari kondisi awal yang diberikan. Kita dapat menggabungkan pernyataan ini dengan alur proses untuk sampai pada deskripsi zkVM berikut.
Bukti zkVM membuktikan, untuk program VM tertentu dan output yang diberikan, bahwa ada beberapa input yang menyebabkan program yang diberikan menghasilkan output yang diberikan ketika dijalankan pada VM.
Apa kriteria yang dengannya kita harus mengevaluasi zkVMs? Dengan kata lain, kapan kita harus mengatakan bahwa satu zkVM lebih baik dari yang lain? Sejujurnya, jawabannya tergantung pada kasus penggunaan.
Riset pasar Lita menunjukkan bahwa untuk sebagian besar kasus penggunaan komersial, sifat yang paling penting, dari kecepatan, efisiensi, dan keringkasan, adalah kecepatan atau efisiensi waktu inti, tergantung pada aplikasinya. Beberapa aplikasi sensitif terhadap harga dan ingin mengoptimalkan konsumsi energi yang rendah dan penggunaan modal yang rendah dalam membuktikan; Untuk ini, efisiensi waktu inti mungkin merupakan metrik yang paling penting untuk dioptimalkan. Aplikasi lain, terutama aplikasi terkait keuangan atau perdagangan, sensitif terhadap latensi dan ingin mengoptimalkan kecepatan.
Sebagian besar perbandingan kinerja yang dipublikasikan berfokus secara eksklusif pada kecepatan, yang penting tetapi bukan pengukuran kinerja yang holistik. Ada juga beberapa properti penting yang mengukur keandalan zkVM; Sebagian besar tidak memenuhi standar siap produksi, bahkan untuk pemain lama yang memimpin pasar.
Dengan ini kami mengusulkan bahwa zkVM harus dievaluasi berdasarkan kriteria berikut, dipisahkan menjadi dua subset:
Kriteria utama untuk mengevaluasi zk-VM
Baseline: Mengukur keandalan zkVM
Performa: Mengukur kemampuan zkVM
4.1 Baseline: Asumsi Kebenaran, Keamanan, dan Kepercayaan
Saat mengevaluasi zkVM untuk aplikasi kritis misi, kebenaran dan keamanan harus dianggap sebagai garis dasar. Perlu ada alasan yang cukup untuk yakin tentang kebenaran, dan keamanan klaim yang cukup kuat. Juga, asumsi kepercayaan harus cukup lemah untuk aplikasi.
Tanpa properti ini, zkVM berpotensi lebih buruk daripada tidak berguna untuk aplikasi, karena mungkin gagal melakukan seperti yang ditentukan dan mengekspos pengguna untuk hacking dan eksploitasi.
i. Ketepatan
Ketepatan terdiri dari tiga sifat:
Anda dapat memiliki kelengkapan tanpa kesehatan; Jika sistem pembuktian membuktikan segalanya termasuk kepalsuan, jelas itu lengkap tetapi tidak terdengar. Sebaliknya, Anda dapat memiliki kesehatan tanpa kelengkapan; Jika sistem bukti membuktikan sebuah program ada tetapi tidak dapat membuktikan perhitungan, jelas itu adalah suara (setelah semua, itu tidak pernah membuktikan kepalsuan), tetapi tidak lengkap.
ii. Keamanan
Dalam praktiknya, ketiga sifat kebenaran memiliki toleransi bukan nol. Ini menyiratkan semua bukti adalah probabilitas statistik kebenaran, dan bukan kepastian mutlak. Toleransi mengacu pada probabilitas maksimum yang dapat ditoleransi bahwa satu properti akan gagal. Toleransi nol tentu saja ideal, tetapi zkVM tidak mencapai toleransi nol pada semua properti ini dalam praktiknya. Kesehatan dan kelengkapan yang sempurna tampaknya tidak sesuai dengan keringkasan, dan tidak ada metode yang diketahui untuk mencapai pengetahuan nol sempurna. Cara umum untuk mengukur keamanan adalah dalam bit keamanan, di mana toleransi 1 / (2 ^ n) disebut sebagai n bit keamanan. Lebih banyak bit keamanan lebih baik.
Jika zkVM sepenuhnya benar, itu tidak berarti bahwa itu dapat diandalkan. Kebenaran hanya menyiratkan bahwa zkVM memenuhi properti keamanannya hingga toleransi yang diklaim. Ini tidak menyiratkan bahwa toleransi yang diklaim cukup rendah untuk siap dipasarkan. Juga, jika zkVM cukup aman, itu tidak berarti bahwa itu benar; Keamanan mengacu pada toleransi yang diklaim, bukan toleransi yang benar-benar dicapai. Hanya ketika zkVM benar-benar benar dan cukup aman, dapat dikatakan bahwa zkVM dapat diandalkan hingga toleransi yang diklaim.
iii. Asumsi Kepercayaan
Ketika zkVM memiliki asumsi kepercayaan, ini biasanya mengambil bentuk proses penyiapan tepercaya. Proses penyiapan untuk sistem bukti ZK berjalan sekali, sebelum bukti pertama dihasilkan menggunakan sistem pembuktian, untuk menghasilkan beberapa informasi yang disebut "data pengaturan." Dalam proses penyiapan tepercaya, satu atau lebih individu menghasilkan beberapa keacakan yang dimasukkan ke dalam data penyiapan, dan perlu diasumsikan bahwa setidaknya satu dari individu tersebut menghapus keacakan yang mereka masukkan ke dalam data penyiapan.
Ada dua model asumsi kepercayaan umum dalam praktiknya.
Asumsi kepercayaan mayoritas yang jujur menyatakan bahwa dari beberapa set individu N, lebih dari N / 2 dari individu-individu tersebut menunjukkan integritas dalam beberapa interaksi tertentu dengan sistem, yang biasa digunakan oleh blockchain
Asumsi kepercayaan "1 dari N" menyatakan bahwa dari beberapa set individu N, setidaknya satu dari individu tersebut menunjukkan integritas dalam beberapa interaksi tertentu dengan sistem, yang umumnya digunakan oleh alat dan aplikasi berbasis MPC.
Secara umum disepakati bahwa semua hal lain dianggap sama, zkVM tanpa asumsi kepercayaan lebih aman daripada zkVM yang membutuhkan asumsi kepercayaan.
4.2 Trilema zkVM: Menyeimbangkan Kecepatan, Efisiensi, dan Keringkasan, dalam zkVMs
Trilema zkVM: kecepatan, efisiensi, dan keringkasan;
Kecepatan, efisiensi, dan keringkasan semuanya adalah sifat skala geser. Semua faktor ini berkontribusi pada biaya pengguna akhir zkVM. Bagaimana mereka harus ditimbang dalam evaluasi tergantung pada aplikasi. Seringkali, solusi tercepat bukanlah yang paling efisien atau paling ringkas; Solusi yang paling ringkas bukanlah yang tercepat atau paling efisien; dan seterusnya dan sebagainya. Pertama-tama mari kita definisikan setiap properti sebelum menjelaskan hubungannya
i. Kecepatan
Kecepatan harus didefinisikan dan diukur relatif terhadap program pengujian, input, dan sistem tertentu untuk memastikannya dapat dinilai secara kuantitatif. Metrik ini sangat penting untuk aplikasi sensitif latensi di mana ketersediaan bukti yang cepat sangat penting, tetapi dilengkapi dengan overhead yang lebih tinggi dan ukuran bukti yang lebih besar
ii. Efisiensi
Prover mengkonsumsi dua jenis sumber daya: waktu inti dan ruang. Oleh karena itu, efisiensi dapat dibagi lagi menjadi efisiensi waktu inti dan efisiensi ruang.
Efisiensi Core-Time: Jumlah rata-rata waktu prover beroperasi di semua core dikalikan dengan jumlah core yang menjalankan prover. Untuk prover single-core, konsumsi core-time dan kecepatannya adalah hal yang sama. Untuk prover berkemampuan multi-core yang berjalan dalam mode multi-core pada sistem multi-core, konsumsi dan kecepatan core-time bukanlah hal yang sama. Jika sebuah program sepenuhnya menggunakan 5 core atau thread selama 5 detik, itu akan menjadi 25 detik waktu pengguna dan 5 detik waktu jam dinding.
Efisiensi Ruang: Mengacu pada kapasitas penyimpanan yang digunakan, seperti RAM
Waktu pengguna menarik sebagai proxy untuk energi yang dikonsumsi dengan menjalankan perhitungan. Dalam situasi di mana semua core sepenuhnya digunakan hampir sepanjang waktu, konsumsi energi CPU harus tetap relatif konstan. Dalam situasi ini, waktu pengguna yang dihabiskan oleh eksekusi kode mode pengguna yang terikat CPU harus kira-kira berbanding lurus dengan jumlah watt-jam (yaitu, energi) yang dikonsumsi oleh eksekusi kode tersebut.
Penghematan konsumsi energi, atau penggunaan sumber daya komputasi, harus menarik dari sudut pandang setiap operasi pembuktian yang memiliki skala yang cukup sehingga tagihan energi mereka (atau tagihan komputasi awan mereka) untuk pembuktian adalah biaya operasional yang cukup besar. Untuk alasan ini, waktu pengguna adalah metrik yang menarik. Biaya pembuktian yang lebih rendah memungkinkan penyedia layanan untuk meneruskan harga pembuktian yang lebih rendah kepada pelanggan yang sensitif terhadap biaya.
Kedua jenis efisiensi terkait dengan konsumsi energi dari proses pembuktian dan jumlah modal yang digunakan oleh proses pembuktian, yang berkaitan dengan biaya keuangan pembuktian. Untuk mengoperasionalkan definisi efisiensi untuk pengukuran, definisi harus dibuat relatif terhadap satu atau lebih program pengujian, satu atau lebih input pengujian untuk masing-masing program tersebut, dan satu atau lebih sistem pengujian.
iii. Keringkasan
Keringkasan adalah gabungan dari tiga metrik berbeda, dengan kompleksitas verifikasi bukti dibagi lagi:
Verifikasi biasanya merupakan operasi inti tunggal, sehingga kecepatan dan efisiensi waktu inti umumnya setara dalam konteks ini. Seperti halnya kecepatan dan efisiensi, mengoperasionalkan definisi ringkas memerlukan penentuan set program pengujian, input pengujian, dan sistem pengujian.
Dengan setiap properti kinerja yang ditentukan, kami sekarang mengilustrasikan efek dimunitif dari mengoptimalkan satu properti di atas yang lain.
Secara umum, mengoptimalkan satu kualitas berarti tidak mengoptimalkan kualitas lain, dan oleh karena itu analisis multi-dimensi diperlukan untuk memilih solusi optimal berdasarkan kasus per kasus.
Cara yang baik untuk menimbang properti ini dalam evaluasi mungkin untuk menentukan tingkat yang dapat diterima untuk setiap properti dan kemudian menentukan properti mana yang paling penting. Properti yang paling penting harus dioptimalkan, tunduk pada mempertahankan tingkat yang cukup baik pada semua properti lainnya.
Di bawah ini kami merangkum setiap properti dan pertimbangan utamanya:
Properti evaluasi zkVMs
Dengan tabel di atas, dengan ini kami menyimpulkan artikel pertama dari seri kami. Pada artikel berikutnya, kita akan membangun diagram alir yang ditunjukkan di atas untuk menjelaskan proses aritmatika dan kriptografi umum di zkVMs.
Jika Anda merasa ini membantu, kunjungi situs web dan gitbook kami untuk mempelajari lebih lanjut tentang apa yang kami bangun di Lita.
Juga, ikuti kami di X dan Discord untuk tetap diperbarui sehingga Anda tidak ketinggalan sisa seri
Teruskan Judul Asli 'Paradigma Pengetahuan Nol: Bagian 1 - Apa itu zk-VM?'
Apa itu zero knowledge proof (ZKP)?
Jika Anda tidak memiliki pengetahuan sebelumnya tentang zero knowledge proofs (ZKP), video dari Wired ini menjelaskan konsep pada lima tingkat kesulitan secara interaktif dengan contoh dan demonstrasi yang mudah dimengerti. Sangat dianjurkan.
Dalam istilah yang paling sederhana, ZKP memungkinkan satu pihak (prover) untuk membuktikan kepada pihak lain (verifikator) bahwa mereka mengetahui sesuatu tanpa mengungkapkan apa itu atau informasi tambahan apa pun. Lebih khusus lagi, ZKP membuktikan pengetahuan tentang sepotong data, atau pengetahuan tentang hasil perhitungan, tanpa mengungkapkan data atau input. Proses menciptakan bukti pengetahuan nol melibatkan serangkaian model matematika untuk mengubah hasil perhitungan menjadi sepotong informasi yang tidak berarti yang membuktikan keberhasilan eksekusi kode, yang nantinya dapat diverifikasi.
Dalam beberapa kasus, dibutuhkan lebih sedikit pekerjaan untuk memverifikasi bukti, yang dibangun setelah beberapa putaran konversi aljabar dan kriptografi, daripada yang diperlukan untuk menjalankan perhitungan. Kombinasi unik antara keamanan dan skalabilitas inilah yang membuat kriptografi tanpa pengetahuan menjadi alat yang hebat.
zkSNARKs: Nol Pengetahuan Ringkas Argumen Pengetahuan Non-Interaktif
zkSTARKs: Pengetahuan Nol Argumen Pengetahuan Transparan yang Dapat Diskalakan
(Catatan: Jembatan Succinct's menggunakan SNARKs tetapi SP1 adalah protokol berbasis STARK)
Perlu dicatat bahwa semua STARK adalah SNARK, tetapi tidak semua SNARK adalah STARK.
Untuk pemahaman umum yang lebih baik tentang SNARKs dan STARKs, kami sarankan untuk membaca seri artikel @krzhang/privacy-in-cryptocurrencies-zero-knowledge-and-zk-snarks-1-2-68ce1838fd9c">artikel yang ditulis oleh Yan Zhang dan Yi Sun dari Axiom, dan kumpulan artikel ini di github Ventali Tan.
Mesin virtual (VM) adalah program yang menjalankan program. Dalam konteksnya, zkVM adalah komputer virtual yang diimplementasikan sebagai sistem untuk menghasilkan bukti pengetahuan nol, atau sirkuit universal, atau alat, untuk menghasilkan ZKP untuk program atau perhitungan apa pun.
zkVM menghilangkan kebutuhan untuk mempelajari matematika dan kriptografi yang rumit untuk merancang dan mengkodekan ZK, dan memungkinkan pengembang mana pun untuk menjalankan program yang ditulis dalam bahasa pilihan mereka dan menghasilkan ZKP, membuatnya jauh lebih mudah untuk diintegrasikan dan berinteraksi tanpa pengetahuan. Secara garis besar, sebagian besar referensi ke zkVM secara implisit mencakup toolchains kompiler dan sistem bukti yang ditambahkan ke mesin virtual yang menjalankan program, dan bukan hanya mesin virtual itu sendiri. Di bawah ini, kami merangkum komponen utama zkVM dan fungsinya:
Komponen utama zkVM
Desain dan implementasi setiap komponen diatur oleh pilihan bukti (SNARKs atau STARKs) dan arsitektur set instruksi (ISA) dari zkVM. Secara tradisional, ISA menentukan apa yang CPU mampu (tipe data, register, memori dll) dan urutan tindakan yang dilakukan CPU ketika menjalankan program. Dalam konteks, ISA menentukan kode mesin yang dapat ditafsirkan dan dieksekusi oleh VM. Memilih ISA dapat menghasilkan perbedaan radikal dalam aksesibilitas dan kegunaan zkVM, serta kecepatan dan efisiensi proses pembangkitan bukti, dan mendukung pembangunan zkVM apa pun.
Di bawah ini adalah beberapa contoh zkVM dan komponennya untuk referensi Anda.
zkVM dan komponennya
Untuk saat ini, kami akan fokus pada interaksi antara masing-masing komponen pada tingkat tinggi untuk menyediakan kerangka kerja untuk memahami proses aljabar dan kriptografi serta pengorbanan desain zkVM di artikel selanjutnya.
Diagram berikut adalah diagram alur proses abstrak dan umum dari zkVM, dibagi dan dikategorikan antara format (input / output) suatu program saat bergerak melalui komponen zkVM. Kami akan memeriksa setiap proses secara mendalam di artikel berikutnya.
Alur umum untuk zkVM
Alur proses zkVM umumnya sebagai berikut:
Prover menerima jejak dan mewakilinya sebagai satu set polinomial yang terikat oleh serangkaian kendala, pada dasarnya menerjemahkan perhitungan ke dalam aljabar dengan memetakan fakta secara matematis.
Prover berkomitmen untuk polinomial ini menggunakan Polynomial Commitment Scheme (PCS). Skema komitmen adalah protokol yang memungkinkan prover untuk membuat sidik jari dari beberapa data X, yang disebut komitmen untuk X, dan kemudian membuktikan fakta tentang X tanpa mengungkapkan X, menggunakan komitmen untuk X. PCS adalah sidik jari; versi ringkas "pra-diproses" dari batasan pada perhitungan. Hal ini memungkinkan prover untuk membuktikan fakta tentang perhitungan, sekarang dinyatakan dalam persamaan polinomial, menggunakan nilai acak yang diusulkan oleh verifier dalam langkah-langkah berikut.
Prover menjalankan Polynomial Interactive Oracle Proof (PIOP) untuk menunjukkan bahwa polinomial yang berkomitmen mewakili jejak eksekusi yang memenuhi batasan yang diberikan. PIOP adalah protokol bukti interaktif yang terdiri dari serangkaian putaran di mana prover mengirimkan komitmen ke polinomial, verifier merespons dengan nilai bidang acak, dan prover memberikan evaluasi polinomial pada nilai acak ini, mirip dengan "menyelesaikan" persamaan polinomial menggunakan nilai acak untuk membujuk verifikator secara probabilistik.
Menerapkan heuristik Fiat-Shamir; prover menjalankan PIOP dalam mode non-interaktif, di mana perilaku verifikator terbatas pada pengiriman poin tantangan pseudo-random. Dalam kriptografi, heuristik Fiat-Shamir mengubah bukti pengetahuan interaktif menjadi tanda tangan digital untuk verifikasi. Langkah ini mengenkripsi bukti dan menjadikannya nol pengetahuan.
Prover harus meyakinkan verifikator bahwa evaluasi polinomial yang diklaim benar, sehubungan dengan komitmen polinomial yang dikirim ke verifikator. Untuk melakukan ini, prover menghasilkan bukti "evaluasi" atau "pembukaan", yang disediakan oleh skema komitmen polinomial (sidik jari).
Singkatnya, bukti zkVM membuktikan, untuk program tertentu, hasil yang diberikan, dan kondisi awal yang diberikan, bahwa ada beberapa input yang menyebabkan program menghasilkan hasil yang diberikan ketika dijalankan dari kondisi awal yang diberikan. Kita dapat menggabungkan pernyataan ini dengan alur proses untuk sampai pada deskripsi zkVM berikut.
Bukti zkVM membuktikan, untuk program VM tertentu dan output yang diberikan, bahwa ada beberapa input yang menyebabkan program yang diberikan menghasilkan output yang diberikan ketika dijalankan pada VM.
Apa kriteria yang dengannya kita harus mengevaluasi zkVMs? Dengan kata lain, kapan kita harus mengatakan bahwa satu zkVM lebih baik dari yang lain? Sejujurnya, jawabannya tergantung pada kasus penggunaan.
Riset pasar Lita menunjukkan bahwa untuk sebagian besar kasus penggunaan komersial, sifat yang paling penting, dari kecepatan, efisiensi, dan keringkasan, adalah kecepatan atau efisiensi waktu inti, tergantung pada aplikasinya. Beberapa aplikasi sensitif terhadap harga dan ingin mengoptimalkan konsumsi energi yang rendah dan penggunaan modal yang rendah dalam membuktikan; Untuk ini, efisiensi waktu inti mungkin merupakan metrik yang paling penting untuk dioptimalkan. Aplikasi lain, terutama aplikasi terkait keuangan atau perdagangan, sensitif terhadap latensi dan ingin mengoptimalkan kecepatan.
Sebagian besar perbandingan kinerja yang dipublikasikan berfokus secara eksklusif pada kecepatan, yang penting tetapi bukan pengukuran kinerja yang holistik. Ada juga beberapa properti penting yang mengukur keandalan zkVM; Sebagian besar tidak memenuhi standar siap produksi, bahkan untuk pemain lama yang memimpin pasar.
Dengan ini kami mengusulkan bahwa zkVM harus dievaluasi berdasarkan kriteria berikut, dipisahkan menjadi dua subset:
Kriteria utama untuk mengevaluasi zk-VM
Baseline: Mengukur keandalan zkVM
Performa: Mengukur kemampuan zkVM
4.1 Baseline: Asumsi Kebenaran, Keamanan, dan Kepercayaan
Saat mengevaluasi zkVM untuk aplikasi kritis misi, kebenaran dan keamanan harus dianggap sebagai garis dasar. Perlu ada alasan yang cukup untuk yakin tentang kebenaran, dan keamanan klaim yang cukup kuat. Juga, asumsi kepercayaan harus cukup lemah untuk aplikasi.
Tanpa properti ini, zkVM berpotensi lebih buruk daripada tidak berguna untuk aplikasi, karena mungkin gagal melakukan seperti yang ditentukan dan mengekspos pengguna untuk hacking dan eksploitasi.
i. Ketepatan
Ketepatan terdiri dari tiga sifat:
Anda dapat memiliki kelengkapan tanpa kesehatan; Jika sistem pembuktian membuktikan segalanya termasuk kepalsuan, jelas itu lengkap tetapi tidak terdengar. Sebaliknya, Anda dapat memiliki kesehatan tanpa kelengkapan; Jika sistem bukti membuktikan sebuah program ada tetapi tidak dapat membuktikan perhitungan, jelas itu adalah suara (setelah semua, itu tidak pernah membuktikan kepalsuan), tetapi tidak lengkap.
ii. Keamanan
Dalam praktiknya, ketiga sifat kebenaran memiliki toleransi bukan nol. Ini menyiratkan semua bukti adalah probabilitas statistik kebenaran, dan bukan kepastian mutlak. Toleransi mengacu pada probabilitas maksimum yang dapat ditoleransi bahwa satu properti akan gagal. Toleransi nol tentu saja ideal, tetapi zkVM tidak mencapai toleransi nol pada semua properti ini dalam praktiknya. Kesehatan dan kelengkapan yang sempurna tampaknya tidak sesuai dengan keringkasan, dan tidak ada metode yang diketahui untuk mencapai pengetahuan nol sempurna. Cara umum untuk mengukur keamanan adalah dalam bit keamanan, di mana toleransi 1 / (2 ^ n) disebut sebagai n bit keamanan. Lebih banyak bit keamanan lebih baik.
Jika zkVM sepenuhnya benar, itu tidak berarti bahwa itu dapat diandalkan. Kebenaran hanya menyiratkan bahwa zkVM memenuhi properti keamanannya hingga toleransi yang diklaim. Ini tidak menyiratkan bahwa toleransi yang diklaim cukup rendah untuk siap dipasarkan. Juga, jika zkVM cukup aman, itu tidak berarti bahwa itu benar; Keamanan mengacu pada toleransi yang diklaim, bukan toleransi yang benar-benar dicapai. Hanya ketika zkVM benar-benar benar dan cukup aman, dapat dikatakan bahwa zkVM dapat diandalkan hingga toleransi yang diklaim.
iii. Asumsi Kepercayaan
Ketika zkVM memiliki asumsi kepercayaan, ini biasanya mengambil bentuk proses penyiapan tepercaya. Proses penyiapan untuk sistem bukti ZK berjalan sekali, sebelum bukti pertama dihasilkan menggunakan sistem pembuktian, untuk menghasilkan beberapa informasi yang disebut "data pengaturan." Dalam proses penyiapan tepercaya, satu atau lebih individu menghasilkan beberapa keacakan yang dimasukkan ke dalam data penyiapan, dan perlu diasumsikan bahwa setidaknya satu dari individu tersebut menghapus keacakan yang mereka masukkan ke dalam data penyiapan.
Ada dua model asumsi kepercayaan umum dalam praktiknya.
Asumsi kepercayaan mayoritas yang jujur menyatakan bahwa dari beberapa set individu N, lebih dari N / 2 dari individu-individu tersebut menunjukkan integritas dalam beberapa interaksi tertentu dengan sistem, yang biasa digunakan oleh blockchain
Asumsi kepercayaan "1 dari N" menyatakan bahwa dari beberapa set individu N, setidaknya satu dari individu tersebut menunjukkan integritas dalam beberapa interaksi tertentu dengan sistem, yang umumnya digunakan oleh alat dan aplikasi berbasis MPC.
Secara umum disepakati bahwa semua hal lain dianggap sama, zkVM tanpa asumsi kepercayaan lebih aman daripada zkVM yang membutuhkan asumsi kepercayaan.
4.2 Trilema zkVM: Menyeimbangkan Kecepatan, Efisiensi, dan Keringkasan, dalam zkVMs
Trilema zkVM: kecepatan, efisiensi, dan keringkasan;
Kecepatan, efisiensi, dan keringkasan semuanya adalah sifat skala geser. Semua faktor ini berkontribusi pada biaya pengguna akhir zkVM. Bagaimana mereka harus ditimbang dalam evaluasi tergantung pada aplikasi. Seringkali, solusi tercepat bukanlah yang paling efisien atau paling ringkas; Solusi yang paling ringkas bukanlah yang tercepat atau paling efisien; dan seterusnya dan sebagainya. Pertama-tama mari kita definisikan setiap properti sebelum menjelaskan hubungannya
i. Kecepatan
Kecepatan harus didefinisikan dan diukur relatif terhadap program pengujian, input, dan sistem tertentu untuk memastikannya dapat dinilai secara kuantitatif. Metrik ini sangat penting untuk aplikasi sensitif latensi di mana ketersediaan bukti yang cepat sangat penting, tetapi dilengkapi dengan overhead yang lebih tinggi dan ukuran bukti yang lebih besar
ii. Efisiensi
Prover mengkonsumsi dua jenis sumber daya: waktu inti dan ruang. Oleh karena itu, efisiensi dapat dibagi lagi menjadi efisiensi waktu inti dan efisiensi ruang.
Efisiensi Core-Time: Jumlah rata-rata waktu prover beroperasi di semua core dikalikan dengan jumlah core yang menjalankan prover. Untuk prover single-core, konsumsi core-time dan kecepatannya adalah hal yang sama. Untuk prover berkemampuan multi-core yang berjalan dalam mode multi-core pada sistem multi-core, konsumsi dan kecepatan core-time bukanlah hal yang sama. Jika sebuah program sepenuhnya menggunakan 5 core atau thread selama 5 detik, itu akan menjadi 25 detik waktu pengguna dan 5 detik waktu jam dinding.
Efisiensi Ruang: Mengacu pada kapasitas penyimpanan yang digunakan, seperti RAM
Waktu pengguna menarik sebagai proxy untuk energi yang dikonsumsi dengan menjalankan perhitungan. Dalam situasi di mana semua core sepenuhnya digunakan hampir sepanjang waktu, konsumsi energi CPU harus tetap relatif konstan. Dalam situasi ini, waktu pengguna yang dihabiskan oleh eksekusi kode mode pengguna yang terikat CPU harus kira-kira berbanding lurus dengan jumlah watt-jam (yaitu, energi) yang dikonsumsi oleh eksekusi kode tersebut.
Penghematan konsumsi energi, atau penggunaan sumber daya komputasi, harus menarik dari sudut pandang setiap operasi pembuktian yang memiliki skala yang cukup sehingga tagihan energi mereka (atau tagihan komputasi awan mereka) untuk pembuktian adalah biaya operasional yang cukup besar. Untuk alasan ini, waktu pengguna adalah metrik yang menarik. Biaya pembuktian yang lebih rendah memungkinkan penyedia layanan untuk meneruskan harga pembuktian yang lebih rendah kepada pelanggan yang sensitif terhadap biaya.
Kedua jenis efisiensi terkait dengan konsumsi energi dari proses pembuktian dan jumlah modal yang digunakan oleh proses pembuktian, yang berkaitan dengan biaya keuangan pembuktian. Untuk mengoperasionalkan definisi efisiensi untuk pengukuran, definisi harus dibuat relatif terhadap satu atau lebih program pengujian, satu atau lebih input pengujian untuk masing-masing program tersebut, dan satu atau lebih sistem pengujian.
iii. Keringkasan
Keringkasan adalah gabungan dari tiga metrik berbeda, dengan kompleksitas verifikasi bukti dibagi lagi:
Verifikasi biasanya merupakan operasi inti tunggal, sehingga kecepatan dan efisiensi waktu inti umumnya setara dalam konteks ini. Seperti halnya kecepatan dan efisiensi, mengoperasionalkan definisi ringkas memerlukan penentuan set program pengujian, input pengujian, dan sistem pengujian.
Dengan setiap properti kinerja yang ditentukan, kami sekarang mengilustrasikan efek dimunitif dari mengoptimalkan satu properti di atas yang lain.
Secara umum, mengoptimalkan satu kualitas berarti tidak mengoptimalkan kualitas lain, dan oleh karena itu analisis multi-dimensi diperlukan untuk memilih solusi optimal berdasarkan kasus per kasus.
Cara yang baik untuk menimbang properti ini dalam evaluasi mungkin untuk menentukan tingkat yang dapat diterima untuk setiap properti dan kemudian menentukan properti mana yang paling penting. Properti yang paling penting harus dioptimalkan, tunduk pada mempertahankan tingkat yang cukup baik pada semua properti lainnya.
Di bawah ini kami merangkum setiap properti dan pertimbangan utamanya:
Properti evaluasi zkVMs
Dengan tabel di atas, dengan ini kami menyimpulkan artikel pertama dari seri kami. Pada artikel berikutnya, kita akan membangun diagram alir yang ditunjukkan di atas untuk menjelaskan proses aritmatika dan kriptografi umum di zkVMs.
Jika Anda merasa ini membantu, kunjungi situs web dan gitbook kami untuk mempelajari lebih lanjut tentang apa yang kami bangun di Lita.
Juga, ikuti kami di X dan Discord untuk tetap diperbarui sehingga Anda tidak ketinggalan sisa seri