您好!刚知道Zcash吗?
The Zcash network is young, but evolving quickly! Sign up and we'll be in touch with monthly highlights on ecosystem growth, network development and how to get started with Zcash!

语言

BOLT: 隐私支付通道

Ian Miers | Aug 01, 2016

Matthew Green 和我写了一篇文章来介绍 BOLT (盲链下轻型交易),它提供了一个快捷的,隐私支付通道协议,它的灵感来自于闪电网络。我们相信,它能够使 Zcash 更加易于扩展也更使用,它同时维持了很强的隐私保护功能。

TL;DR: 通过使用 BOLT,在同一通道下的多重支付不能被链接在一起,即便密谋的个体之间也不能做到。支付发生在毫秒级,并不需要区块确认。对于商家,他仅需要知道有人在他所提供的支付通道中付了钱。支付也可以被安排进第三方,这避免了消费者和销售商开办支付渠道的复杂性,同时隐私保护技术使得第三方不能从中作恶(即便第三方串通在一起也不能实现),同时交易的资金量也是保密的。以上这些都需要这个通道的资金使保密资金,否则恶意的人回侵害你的隐私,并强制关闭你的通道。一份预印的文章能够在以下的地址中被找到http://eprint.iacr.org/2016/701 。

问题

基于区块链的密码学货币使用公开的区块链来记录每一笔交易。这样做有ing却的好处是它不需要第三方信任机构。但是,它也有严重的隐私、可扩容性和延迟问题,这是由于*你把每一笔交易都记录在区块链上*。你需要大量的空间来记录区块链上的每一笔交易(可以查看比特币区块尺寸的争论),在一个区块上记录交易需要花费几分钟的时间,并且记录是公开的,所以其他人也会知道你在做什么。

支付通道

支付通道协议,比如闪电网络,通过仅使用区块链来代管资金和解决争端的方式将扩容和延迟问题解决。除此之外,用户们交易仅是由区块链保证的 IOU,这些交易将不被计入区块链,除非争端发生。

它是如何工作的?假设,Alice 和 Bob 都认可一个他们投入同一渠道资金的 IOU(比如,他们都分别投入 $50, 那么 IOU 便成为 Alice: $50, Bob: $50). 这些钱被第三方保存在区块链中,当只有 Alice 和 Bob 共同对 IOU 进行签名后这笔资金才会被释放。如果 Alice 向 Bob 支付 $5,她将验证摧毁她之前的 IOU,并将和 Bob 签署一份新的 IOU“Alice: $45, Bob: $55.” 他们可以重复的进行,知道其中一个人将自己的资金花完。在这种情况下,Alice 或是 Bob 能在区块链上发布最新的 IOU (或者他们能够同时发布,在一个争论事件中)。因此,通道的开放和关闭都被区块链记录了。

通道并不是私密的

通道的开通和关闭记录了用户、商户和资金的发布和拆分过程。这些确实是需要被保密的一些信息。

假设使用 Tor (或其他匿名服务) 来进行小微支付在支付带宽费用。那么,Alice 通过 Tor 浏览的每个网页都需要在支付频道中进行小微支付,假设浏览每个页面需要支付十分之一个美分的费用。如果我们能看到 Alice 每个月都向 Tor 支付 1.00 美元的费用,则我们就能知道 Alice 对于 Tor 的使用频率。假设 Alice 是一位活跃的记者,则当局可能会怀疑她“隐藏了某些信息”,而事实上 Alice 可能只是用 Tor 购买她喜欢喝的咖啡。倘若 Alice 住在土耳其,这种影响将是非常糟糕的。

幸运的是,这正是 Zcash 所致力于解决的问题。通过使用 Zcash 而不是如比特币和以太坊一样透明的账本,区块链将不含有有关 Alice 所使用的通道的支付信息。但是 Zcash 仅仅是解决链上支付的隐私性问题,它不去解决 IOU 的相关问题。

现在的问题是,Alice 所使用的 IOU 是独一无二的,它类似于 cookie,可以被追踪。任何人都可以查阅这些踪迹(比如:Tor 的退出节点),虽然他们不能*事先*得知这些踪迹属于谁 — 她的真实身份仍在被匿名性服务所保护 —,但是这些人可以查看访问量和样式,因为在一个通道中的多重支付是有内在联系的。这也许足够辨识出 Alice (比如,如果她查看关于她新闻报道相关的文件),或者这样做会揭露其它的信息 — 比如她写作的主题是什么。因此,Zcash 是这类问题的*部分*解决办法,但 Zcash 自身并不设立隐私支付通道。

BOLT: 隐私支付通道

进入 BOLT,Matt 和我已经为这个项目工作了几个月的时间。BOLT 消除了同一通道内支付的关联性。这一功能保证了 Alice 所有针对该收款人的付款可以被隐藏。

我们设计了两套协议,其中一个是非交互式的,它仅支持 Alice 以固定的价值发送给 Bob 的付款。另一个协议支持双向任意价值的付款,但它需要进行双方交互。我们将在这里主要介绍双向协议。

这项协议的基本观点式建立私密的 IOU。我们为了实现这个功能使用了两种技术:盲签名和承诺。承诺允许 Alice 来掩盖 IOU 的金额(而承诺可以辨别其中的金额)。盲签名用于说服 Bob 这个 IOU 的真实性 -— 因为他必须签署它 — 但又必须确保 Bob 并没有察觉这个签名或是这个 IOU 被设计为不像是 Bob 签署的。

BOLT 图表

Alice 通过向 Bob 证明它有相关 IOU 的方式来为 Bob 付款,也可以使这笔交易无效 (通过签署撤销密钥的方式),同时可以让 Bob 签署一个新的 IOU ,这个新的 IOU 笔之前的数量要少。相似的,当 Bob 向 Alice 付款时,他所使用的也是新的 IOU。真实的账户余额和签名对于 Bob 来说是不可见的,保证了他不能变比同一通道内的两笔交易。

实质的挑战在于使旧的 IOU 无限,而自动的签署新的 IOU。这是比较难的部分,完成这项任务而不泄露 Alice 使用的是哪个频道。如果 Alice 使老的 IOU 无效,并且 Bob 拒绝签署新的 IOU,则 Alice 不能关闭这个通道,她将因此失去他的钱。如果 Bob 在旧的 IOU 失效前签署新的 IOU,这时 Alice 可以欺骗 Bob: 她可以使用 Bob 签署的新 IOU,进行一系列支付,之后使用原有的 IOU 取回自己的钱。在普通的支付通道中,这种情况失不可能发生的,因为 Bob 会意识到 Alice 随后而来的欺诈支付。在私密的通道中这样做,是不可能的。

BOLT 图表

为了解决这一问题,我们在生成 IOU 的过程中,把关闭通道的部分和 IOU 用于未来转账使用的功能进行拆分。一份 IOU 就是一份承诺书,由账户余额和尽可使用一次的公钥“撤销秘钥”构成。我们设想 Alice 在生成支付通道的过程中生成一份 (盲) 签名的 IOU 。① Alice 首先建立一个新的 IOU,并证明她给 Bob 支付的 IOU 比 Bob 之前签署的 IOU 多付了 5 $。 ② 之后,Alice 揭露了老 IOU 的 撤销秘钥。③ Alice 让 Bob 签名并关闭了新的 IOU(在证明了新的 IOU 具有与老 IOU 相同的格式后)。④ 她使用撤销秘钥签署了一条作废老 IOU 的信息,并把信息和签名发送给了 Bob。这样做是安全的,因为现在无论发生什么,她都可以使用新的 IOU 来关闭通道。⑤ 在确保老 IOU 被撤销后,Bob 现在可以签署新的 IOU 用于以后的付款。这样做是安全的,因为老 IOU 是无效的,Bob 可以确定 ALice 永远不能把 IOU 追溯回之前的状态,也不能让她增加资金。Alice 现在可以使用新的 IOU 进行下一次 BOLT 付款。

从 Bob 的角度,他知道他在他的支付通道中收到了一笔付款 ( 比如 $5 )。(或者,他*将会*在支付通道关闭时收到 $5 付款),但他并不知道付款是从哪个支付通道支付过来:我们隐藏了真实的 IOU,它的账户余额和 Bob 的签名,这些是唯一支持他辨别支付通道的方式。

有趣的是,所有这些的实现过程是简单,快捷的,它使用的是成熟的密码学技术。一个模型将会在近期发布,但我们详细执行这个合约需要至少 50 ms 和 10 MB 的存储空间。

非直接支付通道

目前为止,我们已经能够让 Alice 和 Bob 使用同一支付通道。但如果他们不想使用同一通道呢?

就像闪电网络一样,BOLT 允许交易双方在没有直接通道的情况下完成支付,只要他们有共享的中间人(比如:Coinbase)。我们通过使 IOU 在检测到有其他交易发送来时,关闭通道,而实现这一功能。于闪电网络不同的时,单一的中间人即不知道交易的参与者都是谁,也不知道交易的数量。为了实现这个功能,通道被匿名的提供资金是非常有必要的,因为第三方可能会中止交易或查看是谁关闭了通道。如果通道是自匿名的,这些信息都将是无利用价值的。

我们有可能通过利用多重中间人使 BOLT 的非直接交易一般化,就像闪电网络,但目前 BOLT 并没有实现这个功能。

BOLT 能够脱离 Zcash 独立工作吗?

加入我们可以添加不定积分,我们将可以让 BOLT 为大部分密码学货币工作。我们也许可以在不做任何改变的情况下对比特币添加这些功能,付出的代价仅仅是使用以哈希为基础的委托和通用环路为基础的多重计算 (MPC) 来对 ECDSA 进行盲签名。但 BOLT 所提供的隐私使依赖于通道的搭建和将其匿名地关闭。

在比特币中,资金通道并不是私密的:记录中会留下是谁开通了这个通道,资金数量是多少和它为什么会被关闭。BOLT 本身并没有解决这些问题 — 它仅仅使得在同一通道内的支付之间不具备联系。更糟糕的使,如果一个商户或第三方能够强制中止 BOLT 协议,则他们就可以查看是谁在使用这个通道。他们仅能做这件事一次,因此在同一通道内的多重支付则不能被联系在一起,但如果你没有以匿名的方式开启一个通道,这时(中止的)交易将会链接到你。

为了避免这个问题,你需要使用匿名的资金来建立通道。的确,资金通道的隐私需求于普通的支付一样的高。因此,你对强隐私性的需求也于你对正常交易的需求一样高。而 Zcash 是保证资金强隐私性的最好的选择。

我想谢谢 Sean Bowe,他是 Zcash 开发者之一,他提议我把闪电网络和 Zerocash 的观点相结合。也感谢 Sean, Maureen, Matthew, Daira, Jack 和 匿名美洲狮对于这篇博文的反馈意见。