
系列: Zcash from First Principles . 文章 0 . 锚点 读者对象: 完全的新手。不默认你有密码学、区块链或数学背景。 你将获得: 一个正确的心智模型,理解 Zcash 如何隐藏谁向谁付款,以及金额是多少,同时仍然让全世界验证没有凭空造币或双重支付。
本系列后续的每一篇文章,都会放大你即将认识的这台机器中的某一个部件。所以如果这里某个词看起来有些模糊,那很好。这意味着我们之后会回来,把它真正讲清楚。
想象一下,你的银行流水被钉在镇中心广场的一面墙上。永远如此。任何人(你的房东、雇主、陌生人、未来雇主、政府)都能看到每一笔房租、每一张医疗账单、每一次捐款、每一杯咖啡,并准确追踪你把钱转给了谁、谁又把钱转给了你。
这不是反乌托邦式的假设。这大致就是 Bitcoin 的运作方式。
Bitcoin 常被称作“匿名”,但事实并非如此。它只是化名制:账本上没有你的真实姓名,但每一笔交易、每个金额以及地址之间的每条关联,都是公开且永久可见的。整个“链上分析”领域的存在,就是为了揭开这层薄薄的化名外衣,把地址与真实的人对应起来。一旦你的某个地址与你本人建立联系,你的财务历史就会被顺藤摸瓜地全部展开。
Zcash 的诞生,是为了回答一个看似简单、实则极难的问题:
我们能否拥有一种完全私密的货币,隐藏发送者、接收者和金额,同时仍然让任何人都能验证规则被遵守了?
这两个目标彼此冲突。公开账本之所以可验证,正是因为每个人都看得见。隐私则意味着没人能看见。那么,公众怎么去验证一个自己根本不被允许查看的东西?
解决这个悖论,就是本系列的全部主题。现在开始吧。
在进入正题之前,先澄清一个常见误解:Zcash 不是“那种私密币”。它是一种把隐私作为可选项提供的币。 它最初其实是 Bitcoin 的一个分叉,并在同一条区块链上同时承载两套并行系统。
| 透明世界 | Shielded 世界 | |
|---|---|---|
| 隐私性 | 公开,和 Bitcoin 一样 | 私密 |
| 地址前缀 | t... | z... 或 u... |
| 发送者 / 接收者 / 金额 | 对所有人可见 | 对所有人隐藏 |
| 底层技术 | Bitcoin 风格的公开账本 | 密码学承诺 + 零知识证明 |
资金甚至可以跨越这两个世界的边界:把资金移入 Shielded 世界叫做 shielding,把它移回透明世界叫做 deshielding。
透明世界就是“你大概已经理解的 Bitcoin”。而本系列真正关心的,只有那个包含所有精妙密码学设计的 Shielded 世界。

接下来这幅心智图景,是你读完整篇文章都要带着的。我们会反复回到它。
想象有一块巨大的公共公告板,地球上的每个人随时都能看见它。
收款,意味着有人把一个密封、不透明的信封钉到这块公告板上。信封里面装着它包含多少金额,以及只有收款人才能读取的秘密,因为这个信封是用收款人的个人密钥锁住的。全世界都能看到有一个信封出现了,但除了拥有者,没有人能看到里面是什么。
这块公告板只会不断增长。 信封永远不会被撕下或擦除。新的信封会一层层钉上去,永久保留。
花钱,意味着你走到一块帘幕后面,证明*“我拥有这块板上某个尚未花费的信封,而且我有权打开它”*,然后把一个唯一的作废令牌扔进一个公开的“已花费”箱子里,再为你要付款的人钉上新的信封。
这个小小的仪式(投下作废令牌,钉上新信封,而且一切都在帘幕后完成)就是一笔 Zcash 支付。其他一切都只是细节。
现在,我们给这些道具起上它们真正的名字。
这五个术语,就是 Shielded Zcash 的全部核心词汇。把它们当成一个故事来记,而不是术语表,它们就会牢牢留在脑子里。
| 故事里的东西 | Zcash 中的真实术语 | 它实际是什么 |
|---|---|---|
| 信封里的内容(金額 + 拥有者 + 一个秘密) | Note | 私密的“硬币”:属于某个人的一块价值 |
| 公告板上那个密封、不透明的信封 | Note commitment | 一种密码学封印,证明某个信封存在,同时隐藏其中内容 |
| 公告板本身 | Note commitment tree | 一个只追加的记录,保存着曾经创建过的每一个 note |
| “已花费”箱子里的作废令牌 | Nullifier | 一个唯一标记,表示“这个 note 已经被花费了” |
| “帘幕后”的魔法 | Zero-knowledge proof | 一种证明,能证明整笔支出有效,却不泄露任何内容 |
如果你读完这篇文章只记住一张表,那就记住这张。后面所有内容,本质上都只是在解释:为什么每个部件都必须长成现在这个样子。
这是大多数解释文章都会跳过的部分,但恰恰是它区分了“我背过几个词”和“我理解了这个设计”。这五个部件中的每一个,都是为了解决一个特定问题而存在的。
普通信封可以被蒸汽拆开,而密码学的 note commitment 不可以。你可以把它理解成一个魔法般密封、完全不透明的信封,并且带有两种超能力:
一个封印怎么能同时做到这两点?这是个真实且可以回答的问题。它正是**第 3 篇文章(commitments)**的主题。现在先把这个信封当作魔法道具,继续往下看。
当你花费一个 note 时,你会公开它的 nullifier,也就是“作废令牌”。这个令牌是由note 本身 以及 你的私钥 共同计算出来的。这个配方同时带来了三个性质,而且每一个都很关键:
第三个性质是 Zcash 隐私性的核心,它值得在后面专门展开讲。
所有事情都发生在帘幕后面,而你事后交给世界看的,是一个 zero-knowledge proof,一种无法伪造的证明证书。它会同时默默证明以下所有事情都成立:
神奇之处在于,这个证明一个事实都不会泄露。不会泄露金额,不会泄露地址,也不会泄露到底是哪个信封。它只会让你确信:上面每一句都是真的。这件事到底为什么可能,是**第 5 篇文章(zero-knowledge proofs)**的高潮部分。
一个 note 会诞生,会在公告板上存在,最终会死亡;而关键在于,对任何旁观者来说,它的出生和死亡看起来彼此毫无关联。

现在我们来看 Alice 向 Bob 付款,并给每一个公开步骤和私密步骤都打上标签。

请注意这种让隐私成立的不对称性:
Bob 到底怎么知道自己收到了款? 他的 note 是用他的密钥加密的。他会持续扫描公告板,只有属于他的那些信封会对他自动打开,就像只有他手里那把钥匙能打开特定的一组锁。其背后的机制叫做 viewing keys,这是后面的话题。
| 关于这笔支付的事实 | 公众可见吗? |
|---|---|
| 发生了一笔 Shielded 交易 | 是 |
| 它遵守了全部规则(没有伪造,没有双花) | 是(通过证明) |
| 谁发出了这笔钱 | 隐藏 |
| 谁收到了这笔钱 | 隐藏 |
| 金额是多少 | 隐藏 |
| 花费的是哪一个更早的 note | 隐藏 |
这就是第 1 节中那个悖论的解决方式。公众验证的是规则,而不是内容。验证与隐私不再互相冲突,因为 zero-knowledge proof 让你无需接触后者,就能检查前者。
如果你理解了这一个想法,你就理解了 Zcash 为什么是私密的。请慢慢读。
所以,外部观察者看到的是:不断有信封出现,也不断有作废令牌出现,但无法把它们一一对应起来。他们无法说“今天扔下的这个作废令牌,对应的是去年三月钉上的那个信封”。这个联系只存在于 note 拥有者的秘密知识里,而 zero-knowledge proof 会确认这个联系是有效的,却不会把它揭示出来。
这条被切断的联系,正是链上分析公司在 Bitcoin 中赖以生存的东西,也是 Zcash 有意斩断的东西。
测试一下你的直觉: 如果 nullifier 不是由 note 和私钥共同计算,而是只由 note 本身计算出来,那么第 5 节里的三个性质会坏掉哪一个,为什么这会悄悄摧毁隐私?(答案在文末。)
这是一种心智模型,不是规范文档。为了让新手更容易理解,我们悄悄简化了几个现实中的细节:Zcash 曾经历过多代 Shielded 设计(Sprout,然后 Sapling,现在是 Orchard);真实交易可以一次性花费和创建多个 note;“公告板”在技术上其实是一种特定的树,而不是真正的钉板;价值平衡的强制约束还依赖一些额外的密码学记账机制。但这些细节都不会改变你刚刚学到的故事;它们只是让它更精确。我们会在后续文章中一篇篇把这些精度加回来,并且每次都会明确标注。
好的教育内容,之所以值得信任,是因为它会明确说出自己省略了什么。本节就是这个承诺。
上面每一句“之后我们会回来讲”的话,都是一条线索。下面就是每条线索最终会在哪里收束:

| 本文留下的问题 | 在哪里解决 |
|---|---|
| 一个密封信封怎么能既隐藏内容,又不可伪造? | 第 3 篇:commitments |
| 密钥和那些秘密配方从哪里来? | 第 1 和第 2 篇:有限域与曲线 |
| “公告板”到底具体是什么? | 第 4 篇:Merkle trees |
| 怎么可能在不泄露任何内容的情况下证明某件事? | 第 5 篇:zero-knowledge proofs |
| 这五个部件在真实的 Zcash 里是如何拼起来的? | 第 6 篇:Shielded 协议 |
现在,你已经拿到了地图。本系列剩下的内容,就是把这张地图一点点填满。
| 术语 | 通俗含义 |
|---|---|
| Note | 一个私密的价值单位,相当于 Zcash 里的硬币或纸钞 |
| Note commitment | 一种密码学封印,用来证明某个 note 存在而不泄露它 |
| Note commitment tree | 所有 note commitments 的只追加公开记录 |
| Nullifier | 当一个 note 被使用时公开的唯一“已花费”标记,用于防止双花 |
| Zero-knowledge proof | 一种证明:某个陈述为真,但除了“它是真的”之外不泄露任何信息 |
| Shielding / deshielding | 将资金移入 / 移出私密的 Shielded 世界 |
| Viewing Key | 让拥有者能够发现并读取发给自己的 notes 的密钥 |
Zcash 总是私密的吗?
不是。隐私只适用于 Shielded 世界(z.../u... 地址)。透明的(t...)交易和 Bitcoin 一样是公开的。
如果一切都被隐藏了,那怎么防止有人凭空印钱? 靠 zero-knowledge proof。它会在数学上强制每笔交易的输出都必须由真实且未花费的输入支撑,同时又把金额保密。
同一个 note 可以被花费两次吗? 不可以。花费一个 note 时会公开它的 nullifier;第二次尝试会再次公开同一个 nullifier,而它已经在“已花费”箱子里了,所以网络会拒绝它。
外部观察者能把发送者和接收者关联起来吗? 不能。commitment(note 的出生)和 nullifier(note 的死亡)之间,任何人在没有拥有者秘密知识的情况下都无法匹配。
如果 nullifier 的计算只依赖于 note,而不需要私钥,那么任何人都可以算出它,这会破坏性质 #1(只有拥有者才能花费)。更糟的是,这样一来 nullifier 就可能直接从 note 的公开信息中被导出,从而让观察者能够把 nullifier 反向关联到它的 commitment,破坏性质 #3,并悄悄瓦解整个系统的隐私性。私钥的作用,就是让这个作废令牌既只有你能生成,又无法被关联。
第 1 篇 . 有限域: 那个奇特而优美的数字系统,在那里算术会“绕回去”,而本系列中每一块密码学构件都生活在其中。我们仍然会像之前一样,从直觉开始,在你真正需要它们之前,不会先上公式。
本文属于 Zcash from First Principles 系列,发表于 ZecHub。采用 CC BY-SA 4.0 许可。