最近看Citadel 2时卡住一个问题:既然零知识证明已经能证明“我有一张有效凭证”,为什么服务方还要再判断一次,不能验证通过就直接放行?把官方流程顺下来,我发现这两层其实管的是完全不同的事。

我会把它想成毕业证验真系统。验真平台可以确认这张证书确实由某所学校签发,而且没有被撤销,但公司招人时仍要自己决定:接受哪些学校、要求什么专业、证书是否过期、这次证明能不能重复使用。Citadel 2里的License Provider像发证方,用户用零知识证明证明自己持有已登记且签名有效的license;合约验证后会形成公开session,但最终是否提供服务,仍由Service Provider按自己的政策决定。

这个类比的边界也很明显:Citadel并不是把毕业证内容公开给招聘方。官方设计里,链上session不会直接暴露用户的钱包密钥、具体使用哪张license、签名属性等信息;服务确实需要某项条件时,用户只披露或证明政策要求的部分。BTC里一次有效签名通常围绕资产支配权展开,不需要额外回答“你是否符合某项身份资格”。

到了ETH常见的token-gating,很多门槛直接依赖公开地址持有什么资产,规则容易看懂,但隐私也更薄。Citadel把“凭证是真是假”和“这个服务收不收你”拆开,我反而觉得更符合现实:密码学负责证明,业务方负责政策,谁也不能替另一层做决定。

对@Dusk_Foundation 来说,我最在意的体验不是证明页面有多炫,而是当验证成功却仍被拒绝时,界面能否说明是哪个服务规则没满足,而不是让用户以为零知识证明失效了。当前文档还写着完整JavaScript SDK将后续提供,所以我不会把接入体验说成已经成熟。等$DUSK 生态出现更多需要资格验证的应用后,我会重点看“证明通过”和“业务获准”能不能被普通人一眼区分。
#dusk