Bài viết
Chia sẻ kiến thức của bạn.
Đã đến lúc zk. Hãy trở nên kỳ lạ ^^
Chào
“Tôi biết điều gì đó, nhưng tôi sẽ không nói cho bạn biết điều gì và bạn vẫn sẽ tin tôi. ” ✨
Hãy tưởng tượng điều này:
Bạn chứng minh bạn làm việc tại một công ty nào đó. ✅ Không tiết lộ email của bạn. ✅ Không cần xóa danh tính Web2 của bạn. ✅ Hoàn toàn có thể xác minh trên chuỗi.
Đó là sức mạnh của chứng minh bằng không kiến thức (zk proof) và bạn không cần bằng tiến sĩ về mật mã để bắt đầu xây dựng với chúng nữa. Chào mừng bạn đến với thế giới của ZkApps: các ứng dụng được hỗ trợ bởi phép thuật mật mã, nhưng được chế tạo với các công cụ có cảm giác giống như viết mã thông thường.
ZkApp (ứng dụng không kiến thức) là gì?
ZkApp là một ứng dụng nơi người dùng có thể** chứng minh điều gì đó về dữ liệu riêng tư của mình**mà không tiết lộ dữ liệu. Hãy nghĩ về nó như việc uốn hóa đơn... mà không cần xuất trình ví của bạn.
Các ứng dụng này cho phép chức năng mà chúng ta thường chỉ mơ ước - như xác minh danh tính của ai đó mà không tiết lộ tên của họ hoặc cho phép người dùng bỏ phiếu trên chuỗi mà không tiết lộ phiếu bầu thực tế của họ.
Trong hệ sinh thái Sui, ZkApps có thêm một lớp tiềm năng. Họ kết nối bí mật ngoài chuỗi của bạn với logic trên chuỗi, sử dụng các công cụ nhưSP1 zKVMvàSoundness Layerđể làm cho việc tạo và xác minh bằng chứng trở nên thiết thực hơn bao giờ hết.
Theo truyền thống,** viết một mạch zk đòi hỏi phải có chuyên môn mật mã và hàng tuần hiệu quảrt. Nhưng ZKVM như SP1, Risc0 và Nexus đã lật ngược trò chơi. Những máy ảo này cho phép các nhà phát triển thể hiện logic của họ bằng các ngôn ngữ lập trình thông thường, tạo ramột chứng minh zk**cho kết quả và gửi nó để xác minh trên chuỗi.
Sự trừu tượng này không chỉ tăng tốc độ phát triển, nó còn mở rộng những người có thể xây dựng ZkApps. Nếu bạn có thể viết logic trong Rust, bạn có thể xây dựng ZkApp. Và nếu bạn sử dụngSoundness Layer, bạn có thể xác minh nó trên Sui.
#** ZKDomain: Chứng minh quyền sở hữu email mà không bị phơi lạc**
Hãy xem xét một kịch bản phổ biến là DAO muốn airdrop token cho nhân viên của một công ty cụ thể.
Nhưng thay vì thu thập email của người dùng và xác minh chúng theo cách thủ công, điều này làm lộ danh tính Web2 và gây nguy hiểm cho quyền riêng tư của người dùng, chúng tôi muốn người dùngkiểm trahọ sở hữu một email tại** @soundness .xyz**, mà không bao giờ tiết lộ địa chỉ đầy đủ.
Đây là nơi sự kỳ diệu trong thế giới thực của zk xuất hiện.
Nếu bạn có quyền truy cập vào email của công ty sử dụngGoogle Workspace, bạn có thể xác thực thông quaOpenID Connect (OIDC) và nhậnJWT (JSON Web Token) đã ký từ Google. Mã thông báo này chứa siêu dữ liệu, bao gồm cả email của bạn.
Bây giờ, thay vì gửi JWT đó đến DAO, bạn** tạo bằng chứng zk cho biết, “Tôi có một JWT hợp lệ do Google cấp dài**, vàemail của tôi kết thúc bằng @soundness .xyz.” Bằng chứng đó được xác minh trên chuỗi. Không ai bao giờ nhìn thấy email thực sự của bạn. DAO chỉ thấy rằng một bằng chứng đã được thông qua.
Quyền truy cập được cấp.
Tất cả phân tích cú pháp logic xác minh JWT, xác thực chữ ký, kiểm tra tên miền được chạy bên trong một chương trình zKVM được viết bằng Rust, được biên dịch bởi SP1.
Bạn có thể xem qua việc triển khai đầy đủ tại đây:
#![no_main]
sp1_zkvm::entrypoint!(main);
use lib::{split_email, split_jwt, pem_to_der};
use rsa::{pkcs8::DecodePublicKey, Pkcs1v15Sign, RsaPublicKey};
use sha2_v0_10_8::{Digest, Sha256};
pub fn main() {
// Read input values: JWT token, RSA public key, and the expected domain
let token = sp1_zkvm::io::read::<String>();
let rsa_public_key = sp1_zkvm::io::read::<String>();
let domain = sp1_zkvm::io::read::<String>();
// Commit the domain to the zk proof (so it’s publicly known)
sp1_zkvm::io::commit(&domain);
// Split the JWT into its components: header, payload, and signature
let (header, payload, signature) = split_jwt(&token)
.expect("Failed to decode JWT"); // Panic if JWT parsing fails
// Convert the PEM public key into DER format for RSA verification
let pk_der = pem_to_der(&rsa_public_key);
let public_key = RsaPublicKey::from_public_key_der(&pk_der).unwrap();
// Reconstruct the signing input (header + payload) as a string
let signing_input = format!(
"{}.{}",
token.split('.').collect::<Vec<&str>>()[0], // First part: header
token.split('.').collect::<Vec<&str>>()[1] // Second part: payload
);
// Hash the signing input using SHA256
let mut hasher = Sha256::new();
hasher.update(signing_input);
let hashed_msg = hasher.finalize();
// Verify the JWT signature using the provided RSA public key
let verification_result = match public_key.verify(Pkcs1v15Sign::new::<Sha256>(), &hashed_msg, &signature) {
Ok(_) => true, // Signature is valid
Err(_) => false, // Signature is invalid
};
// Commit the verification result (proof that the JWT is authentic)
sp1_zkvm::io::commit(&verification_result);
// Extract and split the email address from the JWT payload
let email_parts = split_email(payload.get("email").unwrap().to_string()).unwrap();
// Check if the email domain matches the expected domain
let verified = email_parts.domain == domain;
// Commit the verification result (proof that the email domain is correct)
sp1_zkvm::io::commit(&verified);
}
Chỉ tên miền và liệu JWT có hợp lệ hay không. Đó là nó. Email đầy đủ của người dùng, JWT gốc và bất kỳ thông tin nhận dạng cá nhân nào khác vẫn bị ẩn, được niêm phong bằng mật mã bên trong bằng chứng.
##** Xác minh Onchain: Từ zKVM đến Move**
Tất nhiên, tạo ra bằng chứng chỉ là một mặt của đồng xu. Tiện ích thực sự bắt đầu khi bạn có thể xác minh bằng chứng đó trên chuỗi và thực hiện hành động dựa trên nó.
Đây là nơi** Lớp âm thanh**trở thành một yếu tố thay đổi cuộc chơi. Được xây dựng cho Sui, nó hoạt động như một lớp xác minh zk có thể xử lý các bằng chứng do SP1 tạo ra — được chuyển đổi thành định dạng Groth16, mà Sui hỗ trợ nguyên bản. Bạn không cần phải lộn xộn với các nguyên thủy mật mã. Bạn chỉ cần viết một hợp đồng thông minh trong Move, chuyển bằng chứng và đầu vào công khai (như tên miền mong đợi) và để logic xác minh làm phần còn lại.
Điều này có nghĩa là hợp đồng thông minh DAO của bạn giờ đây có thể gửi airdrop dựa trên quyền sở hữu miền email mà không cần chạm vào dữ liệu nhạy cảm. Soundness Layer xử lý việc xác minh. Hợp đồng thông minh của bạn xử lý logic. Phần còn lại là ma thuật.
Tìm hiểu thêm về Soundness Layer tại đây:
🔗 soundness.xyz/blog/lớp âm thanh
Bạn có thể xây dựng luồng xác thực mà không cần mật khẩu. Bạn có thể thiết kế hệ thống bỏ phiếu đảm bảo ẩn danh. Bạn có thể truy cập vào DAO, sự kiện hoặc phần thưởng dựa trên các tiêu chí vẫn hoàn toàn riêng tư.
Và quan trọng nhất, bạn có thể thực hiện tất cả những điều này bằng cách sử dụngRust + Sui + SP1 + Lớp âm thanh— mà không cần viết một ràng buộc mật mã nào bằng tay.
Chúng ta không còn nói về zk lý thuyết nữa. Chúng ta đang nói về zk bạn có thể vận chuyển. Bởi vì quyền riêng tư không chỉ là một tính năng, nó là một nền tảng. Và với zk, cuối cùng nó cũng có thể điều chỉnh được.
- Sui
- SDKs and Developer Tools
- Security Protocols
Tôi thích rằng nguyên tắc zk đang bắt đầu chiếm lĩnh thế giới. Chẳng mấy chốc chúng ta sẽ không cần phải mở mắt để biết rằng thế giới tồn tại 😵💫
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Kiếm phần của bạn từ 1000 Sui
Tích lũy điểm danh tiếng và nhận phần thưởng khi giúp cộng đồng Sui phát triển.

- ... SUIBigSneh+1244
- ... SUI0xduckmove+1207
- ... SUIThorfin+1204
- ... SUISuiLover+1197
- ... SUIharry phan+849
- ... SUIOwen+689
- ... SUIMeaning.Sui+675
- Tại sao BCS yêu cầu thứ tự trường chính xác để khử chuỗi khi cấu trúc Move có các trường được đặt tên?53
- Nhiều lỗi xác minh nguồn” trong các ấn phẩm về mô-đun Sui Move - Giải quyết lỗi tự động43
- Giao dịch Sui thất bại: Đối tượng được dành riêng cho giao dịch khác25
- Làm thế nào để các ràng buộc về khả năng tương tác với các trường động trong các bộ sưu tập không đồng nhất?05