zkVM là gì? Công nghệ zk áp dụng vào việc phát triển Virtual Machine (VM)
zkVM là gì?
zkVM (Zero-Knowledge Virtual Machine) là một máy ảo (Virtual Machine - VM) đặc biệt sử dụng công nghệ Zero-Knowledge Proofs (ZKPs) để đảm bảo tính toàn vẹn và bảo mật của các tính toán, trong đó:
- VM (Virtual Machine) - môi trường biệt lập, mô phỏng máy tính vật lý cho phép thực thi các chương trình và chuyển đổi trạng thái một cách nhất quán, an toàn trong mạng.
- Zero-Knowledge Proofs (ZKPs) - công nghệ mật mã cho phép chứng minh tính đúng đắn của một tính toán mà không cần tiết lộ dữ liệu đầu vào.
Yếu tố kỹ thuật của zkVM
Các nhà phát triển thường xem xét một nhóm các tiêu chí cơ bản để đánh giá yếu tố tin cậy của hệ thống, bao gồm:
- Độ chính xác (Correctness): Đảm bảo rằng zkVM thực hiện các tính toán chính xác theo yêu cầu.
- Bảo mật (Security): Đánh giá mức độ an toàn và khả năng chống lại các cuộc tấn công nhằm vào hệ thống.
- Giả định tin cậy (Trust Assumptions): Xem xét các mức độ tin cậy giữa các bên liên quan, đặc biệt là những yêu cầu về quy trình thiết lập tin cậy (trust setup) như liệu hệ thống có cần một thiết lập tin cậy ban đầu hay không, và mức độ phụ thuộc vào giả định đó.
Nhìn chung, hầu hết các zkVM lớn hiện nay đều đáp ứng các tiêu chí cơ bản về độ tin cậy của hệ thống. Phần lớn sự cạnh tranh giữa các hệ thống zkVM ngày nay chủ yếu nằm ở khía cạnh hiệu suất, bao gồm:
- Tính hiệu quả (Efficiency): Đây là yếu tố đo lường thời gian cần thiết để người chứng minh (prover) tạo ra một bằng chứng. Tốc độ được đo bằng thời gian thực từ khi bắt đầu đến khi hoàn thành quá trình tính toán. Tốc độ rất quan trọng đối với các ứng dụng nhạy cảm về độ trễ, nơi yêu cầu bằng chứng nhanh chóng nhưng thường đi kèm với chi phí lớn hơn về tài nguyên và kích thước của bằng chứng.
- Tốc độ (Speed): Đây là tài nguyên mà hệ thống tiêu thụ để tạo ra bằng chứng, bao gồm thời gian sử dụng CPU và không gian bộ nhớ (RAM).
- Tính súc tích (Succinctness): Đây là yếu tố đo lường kích thước của bằng chứng và độ phức tạp trong việc xác minh chúng. Succinctness bao gồm ba yếu tố chính là Kích thước bằng chứng (Proof Size), thời gian xác minh bằng chứng (Proof Verification Time), lượng bộ nhớ được sử dụng khi xác minh bằng chứng (Proof Verification Space).
Cả ba khía cạnh này đều ảnh hưởng lẫn nhau, việc tối ưu hóa một yếu tố thường gây giảm hiệu suất của các yếu tố khác. Ví dụ, tạo ra bằng chứng nhanh hơn có thể dẫn đến bằng chứng lớn hơn và khó xác minh hơn. Ngược lại, nếu cố gắng tối ưu hóa tính súc tích, quá trình tạo bằng chứng có thể chậm hơn và tốn nhiều tài nguyên hơn.
Vì vậy, tùy thuộc vào yêu cầu cụ thể của từng nhóm ứng dụng, các nhà phát triển sẽ quyết định tối ưu yếu tố gì trong 3 yếu tố trên.
Quy trình hoạt động của zkVM
Các zkVM thường đi kèm với một ngôn ngữ lập trình cấp cao riêng. Các nhà phát triển sẽ tận dụng các ngôn ngữ lập trình đó để xây dựng logic ứng dụng. Sau đó, chúng được thực thi trong zkVM, tổng quan đầy đủ về quy trình hoạt động của zkVM như sau:
- VM Stage: Sau khi biên dịch, máy ảo thực thi mã máy và tạo ra một dấu vết thực thi (execution trace), ghi lại từng bước của chương trình. Dấu vết này được định dạng dựa trên phương pháp mật mã đã chọn, chẳng hạn như R1CS hoặc AIR.
- Prover Stage: Người chứng minh (prover) chuyển dấu vết thực thi thành các đa thức và cam kết chúng bằng hệ thống cam kết đa thức (Polynomial Commitment Scheme - PCS). Quá trình này giúp tạo ra bằng chứng về việc thực hiện tính toán mà không tiết lộ dữ liệu thực tế.
- Verifier Stage: Người xác minh (verifier) nhận bằng chứng và sử dụng các giao thức xác minh để kiểm tra tính hợp lệ của bằng chứng. Dựa trên kết quả kiểm tra, bằng chứng sẽ được chấp nhận hoặc từ chối.
Tóm lại, zkVM tạo ra một bằng chứng rằng một chương trình, với một tập hợp đầu vào nhất định, đã được thực thi và cho ra kết quả cụ thể, tất cả đều được thực hiện mà không cần tiết lộ chi tiết về các dữ liệu ban đầu.
Các dự án zkVM phổ biến trên thị trường
Hiện tại, ứng dụng chính của zkVM tập trung vào khả năng mở rộng (scaling), trong đó tính toán được thực hiện off-chain và bằng chứng được tạo để chứng minh tính đúng đắn. Mặc dù tập trung khai thác một trường hợp chính nhưng các zkVM có thể được tối ưu hóa theo các hướng khác nhau, tiêu biểu như:
- Hiệu suất: Cairo VM của Starknet.
- Tệp nhà phát triển rộng lớn hơn: Risc0, Sp1.
- Tính toán chung kết hợp quyền riêng tư: Aleo snarkVM, Aztec AVM.
- Tương thích EVM: Polygon zkEVM, zkSync Era, Scroll.
- Appspecific: Proof Market (zkLLVM từ Nil Foundation).
Tuy nhiên, những tối ưu này thường đi kèm với đánh đổi nhất định, bao gồm hiệu xuất, chi phí, trải nghiệm nhà phát triển, tính toán chung và riêng tư:
- CVM (Cairo VM) của Starknet hỗ trợ tính toán chung, chúng được tối ưu cho hiệu suất và chi phí tạo bằng chứng, bù lại, nó tạo ra một ngôn ngữ lập trình cấp cao mới là Cairo, các nhà phát triển muốn tiếp cận Starknet, họ phải học ngôn ngữ lập trình và các công cụ mới.
- Sp1 của Succinct Labs cho phép nhà phát triển có thể viết các chương trình có thể chứng minh được bằng Rust. Rust là một ngôn ngữ lập trình có cơ sở người dùng lớn hơn nhiều các ngôn ngữ lập trình tùy chỉnh trong Crypto. Tuy nhiên đánh đổi ở đây là chi phí và tốc độ tạo bằng chứng vẫn tương đối cao khi so sánh với CVM.
- Tương tự, các zkVM tối ưu cho việc tính toán chung kết hợp hợp với thuộc tính riêng tư, khả năng tương thích EVM đều phải đánh đổi bằng khía cạnh hiệu suất và trải nghiệm nhà phát triển.
Ngoài zkVM ở trên còn có nhiều zkVM đang được phát tích cực từ các tổ chức / đội ngữ nổi bật trong ngành như Jolt từ a16z Crypto, Valida từ lita.
Nhìn chung, số lượng, chất lượng và trường hợp sử dụng xung quanh zkVM đang được mở rộng, có thể sẽ mất từ 12 - 24 tháng để những zkVM trên ứng dụng trong thực tế.