Sui.

帖子

分享您的知识。

article banner.
harry phan.
Apr 30, 2025
文章

现在是 zk 时代. 让我们变得奇怪吧 ^^

“我知道一件事,但我不会告诉你什么,但你仍然会相信我. ” ✨

想象一下:

你证明你在某家公司工作. ✅ 无需透露您的电子邮件. ✅ 无需破坏您的 Web2 身份. ✅ 完全可在链上验证.

这就是零知识证明(zk 证明)的力量,你不需要密码学博士学位就可以开始使用它们进行构建了. 欢迎来到 zkApps 的世界:应用程序由加密魔法提供支持,但使用与编写常规代码一样的工具精心打造.

什么是 zkApp(零知识应用程序)?

zkApp 是一款应用程序,用户可以在不透露数据本身的情况下证明自己的私人数据. 可以把它想象成在不出示钱包的情况下张开收据.

这些应用程序提供了我们通常梦寐以求的功能,例如在不透露姓名的情况下验证某人的身份,或者允许用户在不透露实际投票的情况下进行链上投票.

在Sui生态系统中,zkApps具有额外的潜力. 他们使用SP1 zkVMSoundness Layer等工具,将您的链下秘密与链上逻辑联系起来,使证明生成和验证比以往任何时候都更加实用.

传统上,编写 zk 电路需要密码学专业知识和数周的精力. 但是像 SP1、Risc0 和 Nexus 这样的 zkVM 已经颠覆了游戏规则. 这些虚拟机允许开发人员用普通编程语言表达他们的逻辑,为结果生成一个 zk 证明**,然后将其提交以进行链上验证.

这种抽象不仅可以加快开发速度,还可以扩展谁可以构建 zkApps. 如果你能用 Rust 编写逻辑,你就可以构建 zkApp. 而且,如果你使用声音层,你可以在 Sui 上对其进行验证.

#zkDomain:在不泄露的情况下证明电子邮件所有权

让我们考虑一个常见的场景,那就是 DAO 想要向特定公司的员工空投代币.

但是,我们希望用户在不透露完整地址的情况下证明证明他们拥有一封位于@soundness .xyz**的电子邮件,而不是收集用户电子邮件并手动进行验证,这会暴露Web2身份并危及用户隐私.

这就是 zk 在现实世界中的魔力的用武之地.

如果您有权访问使用谷歌工作空间的公司电子邮件,则可以通过OpenID Connect (OIDC)进行身份验证,并从谷歌接收签名的 JWT(JSON 网络令牌). 此令牌包含元数据,包括您的电子邮件.

现在,与其将那个 JWT 发送给 DAO,不如生成一个 zk 证明,上面写着:“我有谷歌发行的有效 JWT**,而且我的电子邮件以 @soundness .xyz结尾. ”该证据已在链上得到验证. 没有人看到你的真实电子邮件. DAO 只看到证据已经通过.

已授予访问权限.

所有验证逻辑 JWT 解析、签名验证、域名检查都在用 Rust 编写、由 SP1 编译的 zkVM 程序中运行.

你可以在这里查看完整的实现情况:

👉 SP1 zkDomain 示例

#![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);
}

只有域名,以及 JWT 是否有效. 仅此而已. 用户的完整电子邮件、原始 JWT 和任何其他个人身份信息都处于隐藏状态,以加密方式密封在证明中.

##链上验证:从 zkVM 到 Move

当然,生成证明只是硬币的一面. 当你能够在链上验证该证据并据此采取行动时,真正的效用就开始了.

这就是Soundness Layer改变游戏规则的地方. 它专为 Sui 构建,充当一个 zk 验证层,可以处理 SP1 生成的证明——转换成 Sui 原生支持的 Groth16 格式. 你不必搞乱加密原语. 你只需在Move中编写一个智能合约,传递证明和公共输入(例如预期的域),剩下的就交给验证器逻辑了.

这意味着您的DAO智能合约现在可以根据电子邮件域所有权对空投进行门禁,而无需触及敏感数据. Soundness Layer 负责验证. 您的智能合约处理逻辑. 剩下的就是魔法.

在此处了解有关 Soundness Layer 的更多信息:

🔗 soundness.xyz/blog/soundness-layer

您无需密码即可构建身份验证流程. 您可以设计保证匿名的投票系统. 您可以根据完全保密的标准对 DAO、活动或奖励的访问权限进行限制.

至关重要的是,你可以使用Rust + Sui + SP1 + Soundness Layer来完成所有这些操作,而无需手动编写任何加密约束.

我们不再谈论理论上的 zk 了. 我们说的是你可以发货的 zk. 因为隐私不仅仅是一项功能,它是一个基础. 有了 zk,它终于可以组合了.

  • Sui
  • SDKs and Developer Tools
  • Security Protocols
4
分享
评论
.
HaGiang.
Apr 30 2025, 14:20

我喜欢 zk 原理开始席卷世界. 很快我们就不需要睁开眼睛就能知道世界的存在 😵‍💫

Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.

609帖子1270答案
Sui.X.Peera.

赚取你的 1000 Sui 份额

获取声誉积分,并因帮助 Sui 社区成长而获得奖励。

奖励活动七月