详解 MimbleWimble 协议

“Mimblewimble 能够阻止你的对手准确地施展下一个法术。”

Gilderoy Lockhart [src]

在密码学研究领域中,MimbleWimble 受到的关注可谓世所罕见。它的名字来源于“哈利波特”结舌咒中的一种能够阻止被施咒者谈论某一话题的咒语。MimbleWimble 是一种能够提高用户隐私以及可扩展性的新型协议。

2016 年 8 月 1 日,化名作者 Tom Elvis Jedusor(法国版《哈利·波特》中伏地魔的真名)首次在 #bitcoin-wizards 聊天室频道中提出 MimbleWimble 协议。最初的提案很简洁。MimbleWimble 采用了比特币的主要架构、移除了比特币的 script、增加了保密交易和交易合并机制(cut-through),是一个高度可压缩和不透明的区块链。

自最初的提案发布以来,许多工程师和研究人员都参与了完善 MimbleWimble 协议及系统。值得强调的是,来自 Blockstream 的天才研究员兼开发者 Andrew Poelstra 深入研究和消化了这些想法,并于 2016 年 10 月撰写了这篇意见书,巩固了最初的想法,证明了 MimbleWimble 系统的安全性。

研究现状

MimbleWimble 是为了提高比特币的可扩展性和隐私性而创建的。由于涉及较大程度的修改和属性权衡,从当前的政治及技术层面来看,MimbleWimble 不能集成到现有比特币系统中。但是,将来 MimbleWimble 可以成为比特币的一条侧链。侧链是一条单独的区块链,它使用自己的共识算法(可能通过合并挖矿(即与主链使用同一共识算法同时出块)),但没有自己的代币。相反,它通过双向锚定的方式使用比特币作为其系统代币。

由于 MimbleWimble 短期内不太可能被合并到比特币中,两个团队已经开始努力推出独立实现的 MimbleWimble 系统。另一个化名为 Ignotus Peverell (译者注:《哈利·波特》中伊格诺图斯·佩弗利尔(Ignotus Peverell)是《诗翁彼豆故事集》中《三兄弟的传说》里提到的三个兄弟之一,是三兄弟中最小的一个,也是三个人里面最谦虚是最聪明的一个。也正因为这些特质,他最终从死神狡猾的计划中活了下来。他得到的第三件死亡圣器——一件隐形衣——在他的后代中代代相传,成为波特家族的传家宝,并最终传到哈利·波特的手中)的开发者正在领导 Grin 的开发工作,Grin 采用与比特币类似的开发方式。另一个项目,Beam 采用与 Zcash 类似的方式,成立一个正式的公司,设立创始人奖励用于资助开发和奖励创建者。Beam 项目由 Alexander Zaidelson 领导,他是来自以色列的企业家。

稍后我将介绍这两个实现中所做的一些决策和权衡。首先,让我们来了解一下 MimbleWimble 概念本身。

MimbleWimble 的组件

密码学,虽然得到了普遍的信任,通常也只是经验上的正确。大多数密码学算法都没有被证明是正确的。人们逐渐积累起对某个密码学算法的信任,是因为这个算法长时间都没有被安全研究人员破解。密码学算法基于这样一个假设,即某些计算非常困难,以至于是不可能实现的。比特币基于离散对数问题以及密码哈希函数。比特币之美就在于,它只涉及经过数十年研究的相对简单的密码学假设(原语)。这些原语就是离散对数问题以及密码哈希函数。

与 Zcash 相比,MimbleWimble 或 Monero 的优势之一是它们依赖于与比特币相同的简单密码学原语。如果离散对数问题和哈希假设成立,那么比特币和 MimbleWimble 就是安全的。MimbleWimble 将这些相对简单的密码学原语以非常复杂的方式组合在一起,组成一个相当复杂的系统,但其核心观念仍旧非常优雅。为了完全明白 MimbleWimble 中的一切,需要对密码学有相当深入的理解。尽管如此,我还是会尽量深入地讲一讲。

离散对数问题

密码学建立的基本思想是:某些操作在一个方向上很容易计算,而反向求解却几乎不可能。离散对数问题就是一个重要的例子,也是 MimbleWimble 最基本的假设之一。依据这一原理,我们发明出了公钥加密、签名这样的密码学技术,并提高了加密技术的效率。

离散对数问题来源于离散数学(一门处理有限域的数学分支)。(离散对数问题)使得函数值限制于一组准确定义且不连续的数字或点(非实数)集合中。布尔代数就是一个例子,其可能值只有 0 和 1 。非负整数和整数集合上的数学也是离散数学的例子。

和比特币一样,MimbleWimble 也依赖于椭圆曲线密码学(Elliptic Curve Cryptography, ECC)。在椭圆曲线密码学中,数学运算是在满足特定椭圆曲线的点集范围内定义的。椭圆曲线如下图所示。

-来源: Sullivan-

这属于数学中的群论,它是抽象代数的一种形式。它使用我们熟悉的数学运算,例如加法和减法。点(也称作“标量”)可以与整数相乘或相除。然而,这些操作是由椭圆曲线定义的,而不是我们所熟悉的算术。使用标准计算机可以很容易地进行加、减、乘运算。然而,除法运算是非常困难的,暴力求解是目前已知的唯一方法(插播:对于量子计算机而言除法可能很简单,但那可能是几年以后的事了)。“乘法容易、除法困难”,这是我们构建强大加密系统所需的特性。

在比特币和 MimbleWimble 中,公钥由私钥产生。协议选择椭圆曲线上的一个点,通常标记为 H 或 G,称之为生成点。私钥实际上是一个从非常大的集合(大于等于2¹²⁸)中随机选取的整数(标量)。生成点与私钥相乘得出公钥。由于这种乘法极难进行逆运算,使得这些系统得以正常运行。乘法的逆运算也称为取对数。因此,这个问题也称为离散对数问题。

要更多地了解椭圆曲线密码学以及相关离散对数问题,Cloudflare 的密码学负责人 Nick Sullivan 就此主题写了一篇非常精彩的文章。

密码哈希函数(Cryptographic Hashing)

密码哈希函数可以接收任意长度的数据(输入),并将其“消化”为一个固定长度的字符串(哈希值)。因为这个原因,哈希值有时也被称为摘要。哈希函数要成为 Cryptographic Hash Function,输出必须完全不可预测,并且与输入无关。输入的一个非常细微的变化都将得出完全不同的哈希值。正是这种不可预测的特点保证这些函数是安全的。最重要的是,攻击者不可能找到两个能够得到相同哈希值的不同输入。这种特性称为“抗碰撞”。

比特币使用 RIPEMD-160 函数从公钥产生比特币地址,SHA-256 函数用于工作量证明函数。在 MimbleWimble 中,哈希函数用于创建加密承诺(cryptographic conmitments)的输出(参见下面的保密交易)。这些承诺不会在链上显示目标地址,只有当用户持有目标地址私钥的时候才可以使用承诺的输出。

MimbleWimble 协议的两种实现都使用哈希函数用于工作量证明共识机制。如果哈希函数被攻破,攻击者可能能够预测生成小哈希值(译者注:比特币 PoW 共识算法中,挖矿主要的目的是变换区块头中的 Nonce 值,使得区块头做双重 SHA256 哈希运算的结果满足给定数量前导 0 的哈希值-挖矿难度/目标值,只要出块者可以找到符合标准的小哈希值,即可扩充区块链),使得他们能够使用容易找到的区块扩充区块链,从而填充满整个网络,达到攻击区块链系统的目的。

同态加密

同态加密是一种非常酷的技术,它能够对经过加密的数字进行数学运算(译者注:即对密文运行特定运算可以得到某一结果,该结果恰好等于原文运行相应计算所得结果的加密值)。如果你觉得这听起来很疯狂,那就对了,它确实很疯狂……事实证明,在同态加密方案中,乘法运算是相当困难的。因此,全同态加密系统的开销非常大,并且速度非常慢。然而,对于仅仅是加法同态的系统,我们也可以得到相当有趣的结果。加法同态意味着可以在加密数据上进行加法和减法。

事实表明,能够证明两个单独求和的结果是相等的能力是非常强大的。正如我们所看到的,MimbleWimble 非常依赖加同态的性质,利用该性质,在无需知道具体输入输出数值的情况下,能不断验证输入与输出的和相等。

保密交易

保密交易(CT)最初是由 Greg Maxwell 提出的,他是 Blockstream 的前 CTO,一位非常高产的密码学家。提出 CT 的目的是为了保护比特币隐私。它利用一种叫做“Pedersen 承诺”的方案,该方案将明文表示的未花费交易输出(UTXO)数值替换为加密承诺。UTXOs 表示比特币用户在比特币区块链上未花费的资金,即一种表示账户余额的方式。加密承诺与某个用户(私钥)绑定,表示用户持有加密承诺内包含的余额,而不必显示表示余额数值为多少。这意味着,当用户需要显示加密承诺中余额数值时,他们并不能人为修改,因为只有加密承诺构造时的原始数值才能够满足所涉及到的数学运算。

这种方案叫做“承诺机制”,共包含承诺和显示两个阶段。真正酷的是,只有保密交易的接受者需要知道交易金额的具体数值。Pedersen 承诺遵循加同态性质,因此我们能够验证交易内输入和与输出和相等。交易能在不知道交易金额的情况下得到验证——这是隐私保护的一大胜利。

现在还有一个问题必须要解决:负值。如果能够构造对负值的承诺,那么通过创建两个输出,例如 10BTC 和 -10BTC,然后忽略 -10BTC 输出,就等于是开动印钞机增发货币。保密交易使用一种称为范围证明(range proof)的技术来处理这一问题。范围证明是一种密码学证明,其涉及承诺满足具体范围。在保密交易中,使用范围证明证明承诺所提交的值为正值,而无需透露其他任何与该值相关的信息。范围证明实际上是保密交易输出最大一部分,但对于确保货币供应不发生严重通胀至关重要。

MimbleWimble 使用保密交易机制在其区块链上进行记账。在 MimbleWimble 区块链中没有任何明文表示的账户余额,链上只存储了加密承诺以及范围证明。加同态性质确保系统中货币供应总量可以在不可见的情况下不断检验。

CoinJoin

CoinJoin 是另一种 Greg Maxwell 发明的技术。CoinJoin 允许用户将他们的交易组合在一起,从而使得交易图谱变得更模糊。交易图谱能够指出谁是交易的参与者、显示不同用户之间的关系以及一个币的历史。比特币区块链有时假设如果需要花费多个输入,那么这些输入一定属于同一个用户钱包。如果足够多的用户使用 CoinJoin,这就打破了一笔交易的多个输入来自于同一个用户的假设,从而保护了用户隐私。CoinJoin 是一种很好的技术,但它有一个显著的缺点:需要参与者之间的合作或交互。为了验证一笔组合交易,每个输入所有者都必须对整个组合交易签名。因此,不能以线下或者匿名的方式组合交易。

关于非交互式 CoinJoin 已经有了大量的研究。有一种技术实现了叫做单向聚合签名(One Way Aggregate Signatures, OWAS)的方案,并且具有很好的发展前景。但是,该技术进行了更加复杂的加密假设(配对加密等)。以太坊创始人 Vitalik Buterin 曾经写过一篇解释配对加密的博客——主要介绍了需要在两条椭圆曲线上的点之间进行一对一映射的操作。Greg Maxwell 在 2016 年的这个 bitcointalk 帖子中讨论了非交互式 CoinJoin 的提议。

MimbleWimble 无需更复杂的安全假设,而是只依赖于已经在比特币中使用的椭圆曲线加密假设。它还允许非交互式组合交易。这也是 MimbleWimble 令人激动的原因之一!事实上,MimbleWimble 协议能够自动在区块层组合所有交易,实现隐私保护。

交易合并

-交易合并简单可视化-

正如刚刚提到的,MimbleWimble 将一个区块内的全部交易合并为一个区块范围的交易,移除了结构和交易的边界。如果一笔交易使用一个非常“新”(未确认)的输入,那么完全有可能删除中间输出,并且不影响链验证。

出于技术考虑,请注意,交易合并并不能消除所有中间交易记录。每笔交易都会永久保存交易内核(transaction kernel),以便能够正确验证区块链数据。交易内核证明了交易输入的实际所有权归属,并允许使用数学规则验证交易以及整个链。

结合起来

MimbleWimble 协议将上述内容组合成适用于简单支付的区块链规范。它使用改进版的保密交易,以便余额以加密承诺的形式存储,而不必公开实际交易数量。移除每个区块中的交易结构,并将每个区块视为一个整体进行验证。

更有趣的是,MimbleWimble 整个系统不需要地址,交易输出实际上都是承诺,只有知道用于创建承诺的特定参数的人才能使用这些输出。用于创建承诺的参数称为致盲因子,最初包含在纯粹为保护隐私创建的保密交易中。在一个巧妙的修改中,MimbleWimble 使用致盲因子作为私钥,用于授权花费交易输出。这些致盲因子现在是身份验证的基础,一定不能公开给别人。

MimbleWimble 的实效

MimbleWimble 是一种适用于简单支付场景的精简区块链协议。由于其移除地址,发送者和接受者必须在将一笔交易发送到网络中之前,通过安全且隐私的媒介来创建交易。这与基于地址的系统有很大不同,在后者中,接收资金无需交易双方在线、也不需要隐私信道来通信。

隐私性

交易金额模糊化,如果不结合额外的外部信息,第三方很难解析正在发生什么事情。交易合并有助于保护隐私,但仅在多笔交易发生在同一区块中时才有效。

同一区块内交易合并也有助于保护隐私,特别是防止偶然监听。然而,如果一个监听节点独自收到了每一笔交易,它们可以编译一个与输入输出相关联的取证数据库,可能将这些信息与 IP 地址关联起来。这些信息之后也许能实名化部分链上身份。

MimbleWimble 的两种实现方式都使用了一种名叫 Dandelion 的网络路由提议,该提议最初是为比特币提出的,可以创建“合理否认(plausible deniability)”。在 MimbleWimble 中,节点通过几跳发送交易,(接收到交易)后将交易随机聚合,之后才发送给矿工,打包到区块中。这使得监听节点更难弄清楚交易发生的过程。

MimbleWimble 的隐私保护性能可能比 Monero 和 Zcash 都差一些。保密交易确实将交易金额模糊化,但只有用户能够找到同时进行的交易,才能隐藏交易图谱。Monero 和 Zcash 都在底层提供了更强的交易图谱隐藏技术,并且不需要有同时发生的相关交易。

可扩展性

与现有加密货币相比,MimbleWimble 并没有显著提升吞吐量(tx/s)。保密交易能够保护隐私,但也需要消耗大量资源。在区块层组合单笔交易,可以减少少量的带宽开销。

Mimblewimble 在可扩展性上的最大优势是鼓励新节点加入网络。回忆一下,验证 Mimblewimble 链的方式是不断检查等式的输入与输出边的总和是否相等。因此,剪除相匹配的输入与输出,仍可以检查区块链是否有效。这意味着,当新节点想要加入网络中时,它们可以只下载与历史输入输出相关子集的数据。现有节点也可以回收一点磁盘空间,但是其他密码学货币也可以相当容易地做到这一点。

启动时,使用更少的数据引导不是 MimbleWimble 独有的想法。虽然 MimbleWimble 对此有一个优雅的解决方案,但比特币可以采用 UTXO 承诺之类的东西,提供类似程度的剪枝,来限制磁盘需求。

对比 Grin 与 Beam

Grin Beam
区块间隔 1分钟 1分钟
通胀率 每个区块产生 60 grin 总量2.63亿
创始人奖励 前五年挖矿收益的20%
共识算法 PoW:Cuckoo Cycle PoW:Equihash
实现语言 Rust C++
测试网 第四次迭代 第二次迭代
主网 2019年1月15日 2018年12月?

(校对注:Beam 主网已于 2019 年 1 月 4 日上线,据传 Grin 主网也将于近日上线)。

Grin 和 Beam 是 MimbleWimble 协议的两个独立实现,计划在 2018 年第四季度末或 2019 年第一季度初发布。他们实现的方法非常不一样。Beam 是一家公司的产品,而 Grin 由开源社区开发。两个项目都选择了相似的区块时间。

两个项目另一个主要的区别是他们的货币政策。一些 Grin 的支持者认为,Grin 真正的目的是成为一个比特币测试网。没有减少通货膨胀的线性货币政策反映了,Grin 的代币不一定会成为一种稀缺的价值存储介质,而且可能更乐于看到流通更加频繁。Beam 有一个硬编码的供应上限,以及一个使用 Beam 代币激励的团队,因此他们采用了更适合价值增加的通货膨胀方案。

感谢 Arya Soltanieh、Dai Hovey、Linda Xie、以及 Cyrus Younessi 对于本文修订提供的帮助。

资料

MimbleWimble 协议内容非常庞杂。一篇博客很难讲述清楚。这里有一些其他的资料来帮助你更深入地了解。

#bitcoin-wizards 聊天记录

2016 年 8 月 2 日, Andrew Poelstra 第一次讨论 MimbleWimble。

2016 年 8 月 3 日,Andrew Poelstra 向 Andrew Miller 解释提案

博客

Grin team 撰写的 MimbleWimble 及 Grin 介绍。

演讲

Andrew Poelstra 在 SF Bitcoin Dev Meetup 介绍 MimbleWimble

视频

采访 Andrew Poelstra and Pieter Wuille

采访 Grin 开发者, Michael Cordner

浏览器

Grin 区块浏览器(2018年11月26日测试网)

声明:Jordan Clifford 是 Scalar Capital Management, LLC 的总经理,该公司是一家专注于密码学和区块链相关资产的投资管理公司。Scalar Capital 持有部分上述提到的加密资产。本文在发布时,Beam 和 Grin 项目还未正式上线。

原文链接: https://medium.com/@jcliff/behind-mimblewimble-cd9da78a00e9
作者: Jordan Clifford
翻译&校对: stormpang & 阿剑

你可能还会喜欢:

科普 | 白话 Mimblewimble:新型的隐私保护协议
干货 | 基于哈希函数的签名,Part-1
干货 | 零知识证明: 抛砖引玉

评论