*声明:本文来源于Circle Research,由头等仓@Tracy 进行翻译。本文为报告上篇,主要讲述MW协议的背景原理和机制等问题,相关具体应用案例将在下篇文章中具体分析,敬请关注!
MimbleWimble
MimbleWimble是一种增强隐私和扩容的区块链协议。在不存储整个区块链历史记录的情况下,验证所有交易是否有效。它的名字来源于《哈利波特》中束缚舌头的咒语,这种咒语可以防止被施咒者泄露秘密。2016年,一个化名汤姆·埃尔维斯·杰多索的人在比特币奇才IRC聊天室分享了一个Tor链接,链接到一个概述MimbleWimble的文本文件,然后就消失了。
背景
Blockstream的数学家Andrew Poelstra对该协议很感兴趣,并于2016年10月发表了一篇关于MimbleWimble更详细、更强大的技术意见书。MimbleWimble是一个区块链协议,Grin和Beam是它的2个最初实现。在本篇报告中,我们将探索MimbleWimble、Grin和Beam。
加密社区的许多人一直在密切关注MimbleWimble协议,因为其旨在改进比特币和其他加密货币的关键问题,首次优化了隐私性和扩展性。
· 健全的隐私性:MimbleWimble将交易发送方、接收方和金额隐藏起来,让任何未参与交易的人无法查看。观察 者看到的交易由一些加密的输入和输出组成。他们可以验证已在链上的输入,并且等于输出货币的总和。这是对比特币等系统的改进,在比特币系统中,每个人都可以在比特币从一个地址转移到另一个地址时追踪其价值。
· 高效:MimbleWimble只允许验证者存储未使用的UTXO。所有其他加密货币强制矿工和外部验证者存储区块链的整个交易历史。这可以节省空间和更快的同步,因为随着区块链历史记录的增长,矿工可能被迫使用多个驱动器来存储整个历史记录。
验证者通过验证(1)输入的和等于输出的和,(2)交易不包含负数来检查MimbleWimble交易,以确保没有任何交易试图铸造新币。唯一可以铸币的交易是coinbase交易,这也是唯一可识别的交易。但是,验证者和观察者无法查看谁收到了区块奖励。
MimbleWimble的另一个重要特性是没有地址或公钥,只有输入和输出。每个UTXO都有一个密钥,接收方将UTXO密钥存储在他的钱包中。要发送UTXO,发送方必须在专用通道中与接收方联系,并执行多轮通信来构建交易。发送方使用自己的UTXO密钥对UTXO进行签名,而接收方通过通信获得了输出UTXO的新密钥。
问题
区块链是不可伪造的公共交易账簿。不可伪造意味着用户只能发送他们收到的资金——他们不能发送已使用资金或凭空创造资金。比特币和类似的区块链公开了发送方地址、接收方地址和交易金额,因此很容易验证发送的金额是否等于接收的金额,并且发送输入的是与这些输入对应的私钥。
比特币(以及其他加密资产)的公开性,可能会不被那些不想分享交易细节给所有人的人和企业的欢迎。此外,随着像Elliptic和Chainalysis这样的区块链分析公司崛起,研究人员可以将输出与非法交易联系起来,并将这些输出列入黑名单。币安的首席执行官曾在推特上表示,在社交媒体上报道了黑客向该交易所发送的资金后,他们能够冻结这些资金。然而,一些人认为这违反了非同质(fungibility)原则。非同质是指所有币都是一样,就像一张1美元的纸币与另一张1美元的纸币是一样的,不管这张纸币过去有什么活动。
比特币和所有其他区块链都要求矿工和其他验证者存储该链的整个交易历史,以验证所有交易都为有效。新参与者需要下载并验证整个区块链,以验证网络的当前状态。这对希望与网络同步的新参与者在空间、时间和计算上有很大要求。在2019年之前,比特币区块链的大小约为200GB。
MIMBLEWIMBLE解决方案
MimbleWimble以一种聪明的方式使用密码学来实现不可伪造性,同时优化了隐私和扩展性。与比特币验证每个输出的整个历史不同,MimbleWimble检查所有输入减去区块链上所有输出之和是否为零来验证链(这加强了货币的一个基本特性,即发送的金额等于接收的金额)。MimbleWimble使用了保密交易、CoinJoin、范围证明和核销(cut-through)组合。
与比特币类似,MimbleWimble依赖于椭圆曲线密码学和UTXO模型。然而,MimbleWimble是一个更精简的版本,由于脚本的隐私性问题,它牺牲了可编程性。因此,无法执行更复杂和丰富的功能,如时间锁定或支付渠道(如闪电网络)。
快速了解:UTXO
比特币和MimbleWimble使用未花费的交易输出(UTXO)模型来计算余额。可以将此模型使用币与钞票或信用卡与借记卡支付商品和服务进行对比。例如,Alice想买一件30美元的衬衫,但她有2张20美元的钞票。她不能只给商人一张半的钞票。相反,她把2张钞票都给了商人,并收到一张10美元的钞票作为找零。
UTXO模型的功能与此类似:Alice有2个交易输出,分别是先前交易的1个BTC和0.5个BTC。她需要向商家支付1.3 BTC。她的钱包创建了一个交易,该交易发送1.5 BTC(2个新输出)。商户收到1.3个比特币,Alice收到0.2个比特币作为找零(扣除交易费用)。比特币用户查看区块浏览器,可以发现他们比特币地址发送的比特币数量通常比指定的要多。
快速了解:椭圆曲线密码学
椭圆曲线有几个特性,对复杂的密码协议非常有帮助。椭圆曲线的一个性质是单向函数。在椭圆曲线上取一个随机点G,并将其乘以某个整数s,很容易得到另一个点P=sG。然而,给定(P,G),恢复s的值在计算上不可行。这使得我们可以使用(P,G)作为公钥,而s作为密钥。另一个性质是椭圆曲线上的点具有有用的代数性质:
1. 分配式:(a+b)G = aG+bG
2. 交换律:a(bG) = b(aG) = (ab)G
快速了解:佩德森承诺
佩德森承诺是结合了椭圆曲线的单向和代数特性的密码原语。对某些值(x,y)的承诺计算为P=xG+yH。虽然算出s=P/G在计算上不可行,但是从(P,G,H)计算出(x,y)也不可能,因为有无数的x和y的组合可以满足P=xG+yH关系。然而,知道单个(x,y)对满足这个等式的用户无法计算满足这个等式而不违反椭圆曲线单向特性的第二个 (x ',y ') 对。
保密交易
默认情况下,MimbleWimble依靠一种称为保密交易(CT)的加密概念来实现隐私。保密交易由Gregory Maxwell提出,他的灵感来自Adam Back对比特币的同态加密。保密交易使用佩德森承诺来隐藏UTXO的值。
在MimbleWimble中,交易输出或输入表示为佩德森承诺rG + vH。G和H是椭圆曲线上的随机点,是区块链的公共参数。V值为UTXO值,r为盲因子,是UTXO的密钥。rG值是对应的公钥。MimbleWimble使用佩德森承诺混淆敏感的交易信息,而不是显示明文的交易值。佩德森承诺允许使用基本算法来验证交易。
假设这样一个例子:我们有2个输入和1个输出。我们提供了样本值和盲因子,同时保留公共参数G和H作为变量。
交易内核
如上所述,保密交易的问题在于,它们要求输入和输出UTXO使用相同的盲因子,即接收方的密钥。如果发送方知道了接收方的盲因子值,她就可以窃取接收方的输出UTXO。MimbleWimble使用零知识证明克服了这个问题。
假设一个发送5个币的简单例子。发送方有一个未使用的UTXO,表示为承诺X=45G+5H,其中X=5,45是她的盲因子(r),或密钥。接收方选择一个随机盲因子7,并创建一个输出UTXO,表示为承诺Y=7G+5H。将输入与输出进行比较的验证者将看到超额的承诺:
X-Y = (45G+5H) - (7G+5H) = 38G
MimbleWimble将值38称为excess或内核,将值X-Y = 38G称为交易内核。在有效交易中,交易内核的形式总是X-Y = rG+0H,其中r是某个整数。即使使用多个输入和输出,如果输入值的和等于输出值的和,值乘以H等于零,等式成立。有效的交易内核总是公钥的形式,发送方和接收方都知道相应密钥的一部分。MimbleWimble有一个协议,该协议允许它们联合计算一个签名,使用它们的盲因子来签署交易。内核代表交易参与者的多重签名密钥。
范围证明
MimbleWimble协议要求交易金额为正,因此用户不能凭空创造币。正如我们所提到的,惟一能够铸造币的交易类型是coinbase交易。范围证明是一种密码技术,用于证明给定佩德森承诺X,证明者知道一对整数(r, min < v < max),使得X=rG+vH。MimbleWimble使用范围证明来证明v>0。MimbleWimble使用了最近介绍的防弹协议,一种范围证明方法,只需消耗~5000到~700字节。
无地址
如前所述,MimbleWimble不使用地址。删除地址背后的一个关键动机是增强隐私和扩大空间。在基于mimblewimb le的区块链中,用户必须在链下通信才能创建交易。发送方与接收方共享其控制一些币的证明,接收方接受对这些币的控制。由于没有公开分配币控制权的地址,因此没有发送交易的“标准”方式。因此,交易参与者需要设置一个聊天会话来共享控制证明并将控制传递给接收方。这与比特币(以及大多数其他区块链)很大不同,后者可以在没有接收方参与的情况下执行交易。
CoinJoin
解决交易公开性的一种方法是使用CoinJoin。CoinJoin是一种将输入组合成单个大交易的方法,这使得很难区分哪些输入在支付,哪些是输出。CoinJoin已在JoinMarket、ShufflePuff、DarkWallet、SharedCoin、Wasabi、Samourai中实现。基于钱包的CoinJoin的缺点是用户必须选择使用该服务。这降低了它的有效性,因为用户要么不知道这些服务,要么认为使用这些服务太麻烦,从而导致了一组小型CoinJoin交易(一个小型的“匿名集”)。这不能有效地隐藏原始地址和接收地址。此外,用户必须进行交互才能创建CoinJoin交易,因为每个输入所有者必须对整个组合交易签名才能对其进行身份验证。
在MimbleWimble中,默认情况下用户不需要选择CoinJoin。一个区块不会有单独交易,相反,它看起来像是一个大型交易。图1是下一个区块中包含的一组未改动交易的简化版本。在图2中,MimbleWimble以类似于CoinJoin的流程将交易连接在一起,这样就是一个单独交易,一个组合了所有输入和所有输出的列表。
核销(Cut-throuh)
保密交易比常规交易要大得多。CT比非CT小5倍。MimbleWimble使用一种称为核销的技术来解决这一挑战,以提高效率。
正如我们上面提到的,下载完整的比特币区块链占用了近200GB的空间,并且还在增加。如果比特币上的所有交易都是像MimbleWimble这样的保密交易,那么区块链的规模将会大上几个数量级。
MimbleWimble使用一个称为“核销”的流程来删除冗余输出,将这些输出再次用作同一区块内的输入,从而释放区块内的空间,减少需要存储在区块链上的数据量,同时保持相同的安全性。
在图3中,网络标识出绿色输出用作稍后的输入。网络从这个给定区块的输入/输出中删除这个冗余,以精简必须存储的数据。虽然MimbleWimble删除了输出,但它保留这些交易发生的授权,即内核。
微观层面上,MimbleWimble的区块没有使用该工具,而是在宏观层面上使用了核销,因此仅剩下区块头、UTXO和交易内核。节点可以使用这些关键数据片段来验证区块链。这意味着区块链可能会缩小,例如,如果有一个区块的输出花费的比创建的多。理论上,这可以减少证明分类账状态长期正确所需的数据量。
根据Grin的说法,假设1000万笔交易使用10万UTXO(相当于1个分类账),而不使用核销,则大约为130GB,其中包含128GB的交易数据、1GB的交易证明数据和250MB的区块头。通过核销,区块链的大小可以降低到1.8GB,输出数据为1GB, UTXO为520MB,区块头为250mb。Beam认为,当区块链达到同样规模时,其大小可能只是比特币的30%。
蒲公英协议
MimbleWimble隐私性面临的最大威胁是,节点可以在将交易广播到网络时记录这些交易,然后再将它们包含到一个区块中。在有核销之前,交易输出会在内存池(未经确认的交易池)中停留一些时间。这允许间谍节点构建交易图2,并可能发现发送方IP。
蒲公英协议不属于MimbleWimble,它是对Grin和Beam的补充。蒲公英试图降低间谍节点成功创建交易图的概率,方法是“在交易爆发之前先悄悄地在网络上转发,从而延迟交易在网络上出现”(Andreas Antonopoulos) 。
通常,当有人向区块链发送一个交易时,它会广播到网络上的所有节点。蒲公英将交易的广播分为2个阶段,从“stem”或“匿名”阶段开始,交易随机广播到一个节点,然后节点随机将交易发送到另一个节点,以此类推,直到达到系统将交易广播到整个网络的“fluff”阶段。这可以防止监视节点使用蒲公英将交易映射回原始地址。蒲公英++是对蒲公英的改进,使创建交易图更加困难。
在MimbleWimble中,还可以在stem阶段之前合并交易,使将输入链接到交易变得更加困难。Beam更进一步,在没有足够的输出进行合并的情况下,可以添加虚拟或诱饵输出。
蒲公英面临的一个关键挑战是,在stem阶段,如果将交易传递给随后离线的节点,交易将不会传播到网络。Grin和Beam解决了这一挑战——如果该交易没有在合理的时间内达到“fluff”阶段,交易自动广播到更广泛的网络。
无脚本脚本(Scriptless scripts)
MimbleWimble不支持交易脚本,而交易脚本是大多数区块链一个重要的特性。脚本是嵌入在交易中的代码,支持基本的智能合约功能。没有它,MimbleWimble就不能支持条件交易、使用时间锁、状态通道(例如闪电网络)、跨链原子交换等等。这是不可链接交易和核销付出的代价。验证者无法检查是否满足智能合约条件,因为相关UTXO及其条件可能已被删除。
当2016年8月发表第一篇MimbleWimble论文时,无条件交易对社区而言似乎还是一个限制。然而,Andrew Poelstra发现了一种用无脚本的脚本实现简单智能合约的方法。无脚本的脚本基于这样一种思想,即区块链验证者只需要检查签名是否存在并正确。它们不需要知道发生在链下的条件元素。Schnorr签名可用于支持无脚本的脚本。
具体地说,交易的参与者可以通过组合各自的签名密钥来创建Schnorr多重签名,从而交互式地生成签名,这个签名是唯一需要提交给节点并由节点验证的数据。
Aaron Van Wirdum解释,他举了一个网络用户想听艺术家歌曲的例子。艺术家和用户需要向区块链提交他们的组合Schnorr签名,以验证条件交易。艺术家拥有歌曲的版权,其对歌曲进行加密,密钥设为7000。
获得这个密钥就可以收听歌曲。这个艺术家掌握的一半的Schnorr签名是 8000。艺术家可以通过将她的签名(8000)减去歌曲的密钥(7000)来创建一个适配器签名1000。然后,艺术家把这个适配器签名发给用户。用户使用密码学技术验证确认 1000 是等于艺术家的Schnorr签名减去歌曲密钥的结果。然后用户也做Schnorr签名并向艺术家发送该签名,假设签名是 5000。艺术家将两部分施诺尔签名组合(8000 + 5000 = 13000)并提交到区块链上。这时用户获得组合后的签名 13000,并可以计算出艺术家的签名是 13000-5000=8000。最后用户通过计算 8000-1000=7000 获得了歌曲的加密密钥,从而可以收听歌曲。
这一切都在链下发生,除了艺术家和用户,没有人能发现单个值和步骤。验证者所看到的唯一内容是Schnorr组合签名13000。公众无法检测Schnorr签名。区块链上只记录了“交易结算”。可以通过添加支持Schnorr签名的新操作码来实现无脚本脚本。Grin和Beam正在实现无脚本脚本的过程中,并没有功能投入使用的确切时间。
无脚本的脚本可潜在支持保密资产、跨链原子交换和第二层扩容解决方案,比如在MimbleWimble区块链上使用闪电网络。无脚本脚本不一定要在MimbleWimble上实现,甚至可以扩展到其他区块链生态上。
结论
MimbleWimble基于经过验证的密码原语。其中一些区块构建已发表在同行评审的密码期刊上,以及写入公共白皮书和技术报告。首个MimbleWimble区块链Grin和Beam直到最近才推出。虽然MimbleWimble是一项新的实验性技术,但它有提供显著的隐私性和扩容优势的潜力,目前它还未解决用户体验和隐私方面的挑战。需要大量的测试和迭代,才能开源区块链上大规模地让隐私落实。目前,复杂的概念在实践中可能面临大量问题。
用户体验方面,没有地址,交易参与方需要交互并在线(虽然不一定同时在线)来签署和完成交易。与现有的加密资产相比较为复杂。
隐私方面,在CoinJoin和核销出现之前,矿工可以在mempool中看到交易。因此,监视网络的节点可以构建详细的交易图,从而损害隐私性,这违反了MimbleWimble的核心价值主张。虽然有蒲公英协议和虚拟UTXO等潜在的解决方案,但在实践中还有待完善。
想要获取更多区块链项目资讯,欢迎或者点击本文出处了解更多哦~