干货 | Mimblewimble如何保证交易的安全性?它又有何缺点
本文从技术的角度,详细介绍了MW的方方面面,干货满满,给你好看~
概要:本文从Mimblewimble的起源、技术运用、优缺点,多角度详细介绍了Mimblewimble的实现方式,热爱技术的你一定不能错过!
2017年和2018年是专注于扩容的两年,分叉币和分叉项目由于“分叉”一词成为热点话题,这场争论给我们带来了解决方案,并告诉我们,我们现在所处的位置满足了当前的需要,同时也为未来制定了计划。接下来几年的关注点将是大规模地应用匿名性和可互换性。
在一个快速发展的互联网世界,隐私成为一个重要探讨话题。目前,我们相信中心化公司会保护我们的隐私,我们的密码非常牢固,黑客难以攻破。随着迈入新互联网时代,万物联系紧密,去信任和隐私加密必定要成为联系的基础。未来,我们面临的不仅仅是照片和信用卡号码暴露的风险,而且是与你相关的所有数据暴露的风险。
要在去中心化和去信任的网络环境中实现隐私保护,则面临一系列挑战,比如找到具有具有广泛适用性的方案,满足生态系统的多样性和扩容需求。目前物联网领域已开始研究在网络中实现不同的隐私协议,满足物联网匿名交易和匿名智能合约扩容的需要。
Mimblewimble
匿名协议Mimblewimble,这是一种类似椭圆曲线密码学的新实现方式,它是大多数加密技术的基础。

2016年8月,一位匿名用户在bitcoin-wizards IRC频道发布了一条白皮书链接,声称“增强比特币的匿名性”。接着发布一篇区块链提案,提案中使用的交易架构与世界上所有的交易架构截然不同,它极其优雅地应用了椭圆曲线密码学。
虽然提案中提出的观点和理论成立,但缺乏详细的数学理论和安全性分析。数学专家兼Blockstream研究总监Andrew Poelstra在看到提案后,立即着手分析该协议的优点,并在两个月后,创建了一份详细的白皮书[poel16],概述了创建独立区块链所需要的密码学,基本定理和协议。
Andrew Poelstra提出的协议,隐藏了交易值,消除了地址,同时还解决了扩容问题。
机密交易
假设你想要隐藏发送的金额,一个既为人所知又快速的方法是:用哈希加密。无论输入大小如何,你都可以用哈希生成一串长度相同随机字符,而且无法用输出推算出输入。于是我们可以把交易的金额进行哈希,并将哈希后的值放进交易。
X = SHA256(amount)
或 4A44DC15364204A80FE80E9039455CC1608281820FE2B24F1E5233ADE6AF1DD5 = SHA256(10)
但由于哈希是确定的,需要先算出所有金额的哈希值,才能得出正确的哈希。现在,我们去掉这种做法。在哈希金额前,我们先将金额乘以全盲因子。如果不公布全盲因子的话,是无法得知其内部的哈希值。
X = SHA256(blinding factor * amount)
乘以全盲因子后得出的值为commitment(承诺),提交一个值,但不揭示出来,如果不改变承诺,金额不会改变。
但节点如何用这个承诺值来验证交易呢?至少要证明满足两个条件:一有足额货币,二在验证的过程中你没有创建货币。绝大多数协议验证交易的方式是:计算交易输入(或多个交易输入),然后创建一个不超出输入总值的输出。如果输入与输出不相等,就相当凭空创造了货币。
input(commit(bf,10), Alice) -> output(commit(bf,9), BOB), outputchange(commit(bf,5), Alice)Orinput(4A44DC15364204A80FE80E9039455CC1608281820FE2B24F1E5233ADE6AF1DD5, Alice) ->output(19581E27DE7CED00FF1CE50B2047E7A567C76B1CBAEBABE5EF03F7C3017BB5B7, Bob)output(EF2D127DE37B942BAAD06145E54B0C619A1F22327B2EBBCFBEC78F5564AFE39D, Alice)
如上图所示,最后的有效哈希值表明爱丽丝创建了4个币,她进行了一笔交易获得了这4个币。在任何交易中,输入总额必须等于输出总额。我们要用一些数学方法对哈希值进行验证:
commit(bf1,x) = commit(bf2,y1) + commit(bf3,y2)
如果交易有效,将是:
commit(bf1,x) - commit(bf2+bf3,y1+y2) = commit(bf1-(bf2+bf3),0)
或只剩下提交的全盲因子。
借助哈希算法来证明,是不可能的。要进行证明就必须公布所有全盲因子和金额。如果这样,就不是匿名了。我们如何公开一个private value(匿名值),又无法对这个值进行逆运算,并仍能验证这个值是否符合条件?听起来有点像公钥和私钥密码学。
Grin用椭圆密码学来定义数字空间(number space),取椭圆曲线的一点G,乘以任意数值x,得出的都是一个有效值P(同样是椭圆曲线上的一点)。计算结果很快,但即使得知P和G,我们仍无法得出乘数x。我们可以将P作为公钥,x作为私钥,有趣的是,这两个数也具有加法和communitcative属性。
如果取点px•G,加上点qy•G,得到的点W = P+ Q,等于用x+y的组合来创建一个新的点。所以:

所以乘积也是不变的。

这种同态(homomorphism)属性,帮助我们用未知数字进行运算。
所以比起用原金额*全盲因子=承诺,我们可以将金额和全盲因子分别乘以一个椭圆曲线上一个已知点,于是承诺变为:

变化后承诺被称为Pedersen Commitment,是所有机密交易的核心数值。
假设全盲因子r,金额v,取椭圆曲线上的H,G为生成点(此处不深入Schnorr signatures[施诺尔签名]了)。将这几个数值带入承诺中:

使用communicative属性:

如果交易有效,则等于:

用ri,vi作为输入值,ro,vo作为输出值,Rco,Vco作为更改后的输出。
上述公式得出的差便是超出的全盲因子,也叫作commitment-to-zero(趋向0的承诺):

你可以观察到,在选择任意全盲因子的情况下,commit-to-zero都是非零数,事实上,它仍是椭圆曲线上一个有效点(公钥),

私钥等于全盲因子之差。
因此,如果输入总值减去输出总值后的值,能在椭圆曲线上生成一个有效的公钥,则代表余差为0,没有创建新币,如果差值不等于0:

对于一些超额的全盲因子,它们不是椭圆曲线上一个有效的公钥,因此这不是一笔等额交易。要证明这一点,用这个无效公钥签署交易,证明交易等额,所有全盲因子已知,在验证的过程中,没有揭示任何与交易相关的数据(签署交易的详细流程请参阅 [Arvan19])。
所有上述公式都假设数字为正数,也可以用负数创建有效交易,用户可以在每笔交易中创建新币,这种方法被称为Range Proof,每笔交易必须有零知识证明,证明匿名提交的值符合预订范围内的值。Mimblewimble,Monero都使用了BulletProof,这是一种新型计算Range Proof的方式,将交易缩小80%—90%左右。

*当前网络中的平均交易大小,MW的平均交易大小为输入2kb输出2.5kb。
当前Mimblewimble和Monero之间的协议几乎相同,不同的是交易的签署方式。
在Monero中,有两组钥匙/地址,花费钥匙和查看钥匙(spend key,view key)。花费钥匙用于生成和签署交易,查看钥匙用于“接收”交易,由花费的输出衍生环形签名,来签署交易,验证花费钥匙属于钥匙组中一员。要验证,就要用私钥和前面交易公钥的一组混合签名诱饵,合并创建一个施诺尔签名(Schnorr signature)。所有签名诱饵在数学上都是可行的,无法确定出真签名。Monero使用了Pedersen Commitment,隐藏地址,但仅用于认领交易、签署交易和生成全盲因子。
Mimblewimble没有使用任何形式的地址。就是该协议的闪光点。Jedusor证明全盲因子与Pedersen Commit以及commit-to-zero可生成一次性公钥/私钥对来创建和签署交易。
用椭圆曲线密码学生成公钥和私钥对的所有地址,其方法是一致的。将椭圆曲线上的G点乘以一个大额随机数(k_priv) ,得出的(K_pub) 也是该曲线上的另一个有效点。

这是所有地址生成的关键,是不是很熟悉?
前面我们提到的承诺:

每个全盲因子乘以G(红色数字)就等于地址了!r*G是公钥,r是私钥,因此无需地址,我们可以用这些全盲因子来证明输入和输出,并用它们来签署交易。
这似乎更改了地址的链接性,也不需要脚本签名(scriptsig)来验证签名有效性,且极大地简化了机密交易的架构和缩小交易大小。同时,也意味着在交易过程中,双方需要交互来生成签名。
CoinJoin
即使现在隐藏了所有地址和金额,仍然可以得出一些交易信息。在上述交易公式中,很清楚地列明了应用了哪些输出,以及哪些输出是交易外的。“交易图”解释了全盲因子的所有者信息以及交易活动。为了进一步隐藏和压缩信息,Mimblewimble实现了Greg Maxwell的CoinJoin创意,最初该创意是为比特币而研发的。Coinjoin以一种去信任化的方式将多个交易的输入和输出,合并为一个交易。掩盖发送方和接收方。要在比特币上实现,用户或钱包必须进行交互,才能加入相同金额的交易,因此无法区分交易来自那一方。如果能在不共享私钥的情况下合并签名,则可以合并多个交易签名(比如环形签名),则不再受相同金额的限制。

在CoinJoin中,3个地址有4个输出,无法知道谁是真正输出。
在Mimblewimble中,计算一个或多个交易金额仍然会生成有效的commit-to-zero。我们要做的是合并交易,合并签名。Mimblewimble天生就适应用commit-to-zero和Shnorr合并签名。使用“单向聚合签名(简称OWAS)”,节点可以在创建区块时,将多个交易合并为一个交易。Mimblewimble将区块中的所有交易,高效地转化为一个大交易(包含所有输入和输出)。这同时混淆了交易图,去除了出块时消耗的中间交易计算,缩小了区块大小,进而缩小区块大小。
Cut-through
我们更进一步,验证这个完整“连接”的区块。节点将所有输出承诺相加,减去所有输入承诺,验证差值是否是有效的commit-to-zero?理论上我们可以合并两个区块,去除两个区块中的所有交易和花费,变成一个未花费承诺的有效交易。我们用这种方法回溯到创世区块,将整个区块缩减为一个未花费的承诺,这种方法被称为Cut-through。使用此方法时,我们无需保留任何花费输出的rang proof,这些rang proof已得到过证明,可以删掉。可以大幅地降低区块从0(交易数)到0(未花费的输出数)的增长数,。
为了解释Cut-through的优点,假设比特币一开始就应用了Mimblewimble,到了区块576,000,区块链达到了210GB,总共41367.5万笔交易,以及5540万笔未花费输出。Mimblewimble的交易输出大约为5kb(包括range proof~5kb和Pedersen commit~33字节),交易输入大约是32字节,交易证明大约是105字节(commit-to-zero和签名),区块头为250字节(默克尔证明和PoW),非机密交易可忽略不计。将上诉所有相加起来,同步区块链的所有信息一共是5.3TB,只有279GB是未花费交易输出。当使用cut-through,我们想保留所有交易记录,因此保留所有交易证明、未花费输出和区块头。将区块缩小至322GB,缩减了94%。其结果是保留未花费的共识状态,大大缩短新节点同步时间。
如果实现Bulletproof,range proof可从5kb缩减至1kb,将未花费输出从279GB缩小至57GB。

基于上述假设和计算
PoS链还有一个有趣的隐义,具有明确的终结性。一旦确认最终结果,或任意区块链深度,就无需再保留range proof。经过验证的交易,其共识状态已写入区块链,但这些交易仍占据区块链大量内存。如果说最终性是在100区块深度,假设未花费输出的10%已预先终结,会将区块链再一次减少250GB,完全同步只需73GB,缩减98.6%。设想这是一个73GB的区块链,包含了比特币10年以来的匿名交易,只有当前比特币区块链的1/3。
还有一点,cut-throught不会影响匿名性和安全性。所有节点都可选择在不执行cut-trought情况下,存储整条链,唯一增加的成本是购买磁盘存储空间。Cut-through纯粹是一种扩容功能,使基于Mimblwimble的比特币区块链缩小至1/3,将Monero缩小50倍(即使在它当前使用Bulletproof的情况下)。
Mimblewimble的不足之处
Mimblewimble的革命性同样也限制了它。几乎所有协议,如比特币、以太坊等,都使用基础脚本语言,在真实交易中调用函数,告知验证者验证哪个脚本。最简单的情景是,输入调用“脚本签名(scriptSig)”,得出交易签名和公钥。输出脚本用脚本签名、交易签名和公钥,检查验证者是否具有花费交易的权利。验证人用已知公钥进行哈希,检查哈希过后的值是否与输出的哈希值相同,如果相同,则检查交易签名与输入签名是否一致。

比特币网络可以增添Mimblewimble,如此一来,比特币协议可以验证多个签名、在规定的时间内锁定交易,以及完成一些复杂实现。比如将比特币锁定在一个账户中,直到被解开。
为了达到像以太坊这样被广泛应用的公用智能合约影响力,需要公开数据,或者创建屏蔽证明来证明您满足智能合约条件。
在Mimblewimble中,由于使用全盲因子作为密钥对,极大地简化了签名验证过程,因此基础协议无需编写正常脚本。区块链上记录的是:

· 使用的输入:旧提交中的计算
· 新输出:公布的新提交
· 交易内核:包含超出的全盲因子、交易费和锁定高度的交易签名。
三者互不关联,也无法用此数值计算出另一者数值。
通过无脚本脚本创造性地弥补了Mimblewimble的缺陷,通过施诺尔签名,实现多签名交易和更复杂的交易,比如跨链原子互换,甚至闪电网络式的状态通道。但这不能满足物联网智能合约的要求。
最重要的一点是,实现cut-through将会删除智能合约,或依赖于合约的交易。
如你所见,MImblewimble成功地隐藏数额和所有者,但仅限于一维数据点——数量(quantity)。而转移代币所有权范围外的事情,则超出了它的能力范围。
原著 | Grayblock
翻译 | 头等仓_Tracey
原文:https://medium.com/coinmonks/mimblewimble-in-iot-72cdec6bedec
来源链接:https://www.8btc.com/media/422903
转载请注明文章出处
- 免责声明
- 世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
- 风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
- 世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。

毕姥爷



