MarsBit日报 | 基于Nostr的社
Zk-SBT:基于 zk-SNARK 实现的灵魂绑定代币教程
SBT 可以更好的帮助用户验证某个属性,但极易泄漏隐私。使用零知识证明技术来保证用户数据的安全可能是一个重要的选择。
在这篇文章中,我们将讨论ZK如何可能成为增加SBT用户数据隐私的关键技术以及如何项目应用零知识灵魂绑定代币。
目录如下
1.什么是零知识证明
2.ZK 证明如何与 SBT 一起使用?
3.什么是zk-SNARK?
4.ZKSBT 工作原理的解释
4.1.1 生成随机 Lambda
4.1.2 生成证明密钥和验证密钥
4.1.3 证明和验证密钥的共享
4.1.4 证明的生成
4.1.5 用户属性验证
5.高级示例
5.1 链上与链下算法
6.zkSBT 的实现
6.1 电路创建
6.2 设置阶段
6.2.1 密钥生成
6.3 证明生成阶段
6.4 验证程序阶段
6.4.1 项目如何在其 SBT 中使用 Verifier.sol?
6.4.1.1 风险:防止重放攻击
6.5 实现架构
7.ZKSBT(zk-SNARK SBT)与Counter Party Soul的可组合性
7.1 单一方法:SBT 发行人承担责任
7.2 多重方法:每个项目都承担责任
8. 结论
1、什么是零知识证明
零知识证明允许一方(证明者)向另一方(验证者)证明一个陈述是真实的,而不会透露任何超出陈述本身有效性的信息。
证明者必须让验证者相信他拥有满足某种关系的秘密参数(称为证人)的知识,而不向验证者或其他任何人透露该证人。
- 证人是我们约束条件的有效解决方案。
- 约束是指我们将问题转换成的多项式方程。问题的每个解决方案都必须符合约束条件的要求。例如,证明用户的信用分数是3,可以简单地转换为约束条件x=3。
2、ZK证明如何与SBTs一起使用?
项目可以通过使用ZK证明来验证灵魂的属性(例如,它具有某些成员资格)。还可以通过允许用户验证任意的断言,而不需要给出除声明本身之外的任何进一步信息。
例如,在一个政府文件和其他证明可以加密证明的世界里,有人可以证明这样一个声明:"我是新加坡公民,年满18岁,拥有计算机科学的大学学位,还没有在这个系统中申请账户。"
还有其他 ZK 技术;然而,zk-SNARKs 是在 Dark Forest Eth、Tornado cash 和 ZK-Rollups 等应用中使用的最突出的 ZK 技术。
3、什么是zk-SNARK?
zk-SNARK 是 ZK-proof 技术的一种实现,它代表零知识简洁、非交互式知识论证。
首字母缩略词的各个部分具有以下含义:
- 零知识:在交互过程中,除了声明的有效性之外,验证者什么都不知道。
- 简洁:证明简短且快速验证。
- 非交互:没有或仅有少量的交互。对于zk-SNARKs,通常有一个设置阶段,在这之后,从证明者到验证者只有一个消息。此外,SNARKs通常具有所谓的 "公共验证者 "属性,即任何人都可以自己验证证明。
- 论证:验证者只针对计算能力有限的证明者进行保护。具有足够处理能力的证明者可以生成关于不正确语句的证明/论证。这被视为 "计算上的健全性",与 "完全健全性 "相对。
- 知识性:证明者不可能在不知道某个所谓的证人的情况下构建证明/论证。
简单地说,这基本上意味着证明是一个数据的集合,可以在没有证明者参与的情况下独立验证。
4、ZKSBT 工作原理的高级解释
举例来说,SBT 的用户是证明者,向用户发放 SBT 的项目方是验证者。
假设一个项目正在查看用户是否具有某个属性“secret_attribute”。用户必须证明他们有属性 `secret_attribute` 而不会泄露他们的秘密 `s`,它用于将属性 `secret_attribute` 散列到 `hash_attribute`。
通常情况下,用户会通过向项目提供秘密`s`来证明这一点,之后项目可以计算出哈希`hash_attribute`。然而,在zk-SNARK中,用户可以只提交他们拥有属性`secret_attribute`的证明,而不透露他们的秘密`s`。
我们可以用下面的程序C来描述用户的情况。
换句话说:该程序接受一个公共哈希值`hash_attribute`和一个秘密值`secret_attribute`,如果`secret_attribute`的SHA-256哈希值等于`hash_attribute`,则返回true。
使用函数`C(hash_attribute,secret_attribute)`,用户需要创建他们拥有`secret_attribute`的证明,而不需要透露`secret_attribute`。这就是zk-SNARKs解决的一般问题。
为了实现这个证明和验证系统,该项目首先要进行以下操作。
4.1.1 、生成随机 Lambda
生成 lambda 是证明的第一步。记下生成器的秘密参数 lambda。任何了解此参数的人都可以在不知道秘密“w”的情况下创建评估为真的假证明。
因此,运行生成器需要一种非常安全的方法,以确保没有人在任何地方发现和存储参数。这就是 Zcash 团队在确保参数 lambda 在此过程中被销毁的同时生成证明密钥和验证密钥的极其复杂的仪式的基本原理。