1.为什么智能合约需要隐私?
普通智能合约能够让互不信任的人按公开规则交易。例如,拍卖合约可以自动判断谁获胜、收取付款、退回其他人的钱。
但执行规则往往需要读取输入,而链上的数据和执行过程是公开的。如果直接把出价交给链上合约,别人就能看到出价。
换一个钱包地址也没有解决这个问题:地址可能是假名,但地址对应的金额和交易记录仍然公开。
所以这里有两个不同要求:
- 正确性:不能改规则、偷钱、算错结果。
- 隐私性:不能让公众看到出价、交易金额等敏感信息。
Hawk 想把这两个要求结合起来,同时让程序员不必自己实现整套密码学协议。
2.用一场拍卖理解它
论文的主要例子是“密封的第二价格拍卖”:
每个人秘密提交出价,出价最高的人获胜,但只支付第二高的价格。
假设三个人分别出价:
| 参与者 | 出价并冻结的资金 | 最终分配 |
|---|---|---|
| Alice | 10 | 收回 3,获得拍卖品对应的获胜资格 |
| Bob | 7 | 收回 7 |
| Carol | 4 | 收回 4 |
| 卖家 | — | 收到 7 |
Alice 出价最高,但支付的是 Bob 的出价 7。
资金守恒:
这里需要保证三件事:
- 别人不能先偷看 Alice 的出价,再调整自己的出价。
- manager 不能把 Bob 改成获胜者,或把付款金额改掉。
- manager 中途退出时,资金不能一直被锁住。
Hawk 的整个协议,就是围绕这三类问题设计的。
3.谁负责什么?
Hawk 有三类角色:
| 角色 | 主要职责 | 能看到什么 |
|---|---|---|
| 参与者 | 提交输入、冻结资金、领取结算资金 | 自己的秘密,以及协议允许获知的结果 |
| manager | 读取私密输入、计算结果、生成证明 | 参与者的私密输入 |
| 区块链 | 验证证明、维护资金状态、执行超时规则 | 承诺、密文、证明及公开信息 |
论文把合约分成两部分:
- 私密部分 :读取私密数据和资金,计算钱怎么分。例如确定获胜者和支付价格。
- 公开部分 :处理公开规则。例如 manager 的公开保证金应该退还还是用于赔偿。
编译器把这些程序转成参与者、manager 和区块链分别执行的协议。
所以,Hawk 里的“合约”是一个完整的交互协议,范围比单独一段链上代码更大。
4.核心流程:freeze → compute → finalize
这三个词是你第一次阅读时最值得抓住的主线。
第一步:freeze——把输入和资金锁定
参与者先冻结自己的资金,并提交对金额和私密输入的承诺。
你可以把承诺理解为一个封好的信封:
- 外面的人看不到里面的出价;
- 提交者之后不能把里面的 10 换成 20。
密码学上,这分别叫隐藏性和绑定性。
同时,参与者提交零知识证明,证明自己确实拥有合法资金、冻结金额与承诺一致,而且没有重复花费。区块链验证这些条件,无需看到金额明文。
注意:这里锁住的是真实资金。仅仅提交一句“我承诺出价 10”,不能保证最后付得出钱。
第二步:compute——让 manager 获取已经锁定的输入
到了规定阶段,参与者把承诺对应的内容加密给 manager,并证明:
我现在提交的密文,装的是之前承诺的那份输入。
manager 解密后,就能计算拍卖结果。
这个顺序很重要:先固定出价,再向 manager 打开出价。 这样即使 manager 与某些参与者串通,他们也不能在看到诚实参与者的出价后,随意修改自己已经承诺的输入。
还有一个容易忽略的细节:论文让这些密文通过链上合约提交。虽然计算主要在链下完成,但链上需要留下可检查的记录,判断谁按时提交、谁退出了。
第三步:finalize——用证明完成结算
manager 计算完后,构造新的私密资金输出,并提交零知识证明。
证明需要把几件事联系起来:
- 用的是此前锁定的输入;
- 执行的是规定的私密合约;
- 输出资金按计算结果分配;
- 输入和输出满足资金守恒;
- 输出承诺、密文等构造正确。
区块链验证通过后,才接受结算。
因此,manager 虽然知道秘密,却不能随意改账。
5.零知识证明到底证明了什么?
初学时可以先记住:
零知识证明让你证明“某个条件成立”,而不公开满足这个条件所需的秘密。
在 Hawk 的拍卖中,manager 要证明的大意是:
存在一组与链上承诺一致的秘密出价;按照约定的拍卖程序计算,得到的就是我提交的结算结果。
链上看到承诺、公开输出和证明;秘密出价是证明使用的隐藏材料,常称为 witness(见证)。
Hawk 使用 zk-SNARK 来实现高效证明验证。对这篇论文而言,最重要的直觉是:
生成证明比较贵,但链上验证比较便宜,因此大量工作可以放到链下。
也别把“证明正确”理解成“合约规则一定合理”。如果程序员写错拍卖规则,证明仍可能证明它被忠实执行。证明保证的是执行与指定程序一致。
6.隐私究竟对谁成立?
这是阅读 Hawk 时必须分清的地方。
| 对象 | 隐私保证的边界 |
|---|---|
| 链上公众 | 私密输入和私密资金分配受到密码学保护,但公开输出及协议暴露的信息仍然可见 |
| 其他参与者 | 输入固定前,不能提前获知诚实参与者的秘密输入;结束后的隐私还依赖 manager 不泄露 |
| manager | 基本方案中能看到参与者的输入 |
例如,拍卖程序中的 out.winner 是公开输出,所以公众可以知道谁获胜。私密合约不意味着它的所有结果都隐藏。
论文称 manager 为“最小信任的 manager”,意思是把信任范围缩小:
- 对保密,仍需相信 manager 不泄露输入。
- 对结算正确性,依靠证明约束 manager。
- 对中途退出,依靠链上超时和保证金机制处理。
论文也讨论了用可信硬件或多方计算实现 manager 的可能性,但基本方案的隐私信任不能忽略。
7.为什么还需要区块链和保证金?
因为密码学证明不能强迫一个人继续参与。
manager 可以收到出价后关机,既不计算,也不提交证明。解决这个问题需要明确的截止时间和资金规则。
论文设置了三个时间点:
- :停止接受资金冻结和出价承诺。
- :参与者必须完成向 manager 打开输入;未完成的输入按协议规定处理,例如按零出价处理。
- :manager 必须完成结算;否则参与者可以取回被冻结的私密资金。
在拍卖例子中,manager 还预先缴纳公开保证金。如果它超时,保证金分给参与者作为赔偿。
这里的 financial fairness(金融公平性),主要是用退款、惩罚和赔偿处理退出行为。它不保证拍卖一定完成,也不保证赔偿覆盖每个人现实中的全部损失。 具体激励规则还要由合约设计。
8.这篇论文的贡献应该怎么记?
我建议记住三个层面:
- 系统架构:把私密计算、可编程资金分配和链上结算结合起来。
- 编译器:把高层合约转成密码学协议,同时加入承诺、加密和资金守恒等约束。
- 安全模型:形式化描述区块链上的公开状态、时间、消息排序和资金行为,再分析协议安全。
论文标题里的 “Blockchain Model of Cryptography” 对应第三点。它把区块链视为一个在假设下保证正确性和可用性、但不提供隐私的公共执行环境。
这些保证依赖底层区块链及密码学假设。原型还存在可信设置、参与人数上限、私密程序不支持动态长度循环等限制。第一次阅读先知道这些边界即可,不必立即钻进实现细节。