一文读懂Mimblewimble协议UTXO

介 绍

在Mimblewimble中,应用于未使用事务输出(UTXO)的比特币类型多重签名(multisig)的概念实际上并不存在。

在比特币中,多签名支付通常与“Pay to Script Hash”(P2SH)功能结合在一起,作为一种将资金发送到P2SH付款地址,然后从那里管理支出的方法。赎回脚本本身设置了要链接到要使用的P2SH付款地址的UTXO必须满足的条件。

与比特币不同,Mimblewimble交易不涉及付款地址,因为所有交易都是加密的。使用Mimblewimble UTXO的唯一要求是能够解密(或解锁)包含令牌的Pedersen承诺;它不需要“owner”的签名。典型的Mimblewimble UTXO看起来像这样:

08c15e94ddea81e6a0a31ed558ef5e0574e5369c4fcba92808fe992fbff68884cc

另一个根本区别是,对于任何Mimblewimble交易,所有各方,即所有发送方和所有接收方,都必须进行交互以完成交易。

背景知识

比特币m-of-n Multisig

存在m-of-n个multisig应用程序的多个用例,例如一个1-of-2的零用现金帐户,一个2-of-2 的两要素认证钱包和一个2-of-3的董事会帐户。

```markdown

redeemScript = <OP_2> <A pubkey> <B pubkey> <C pubkey> <OP_3> OP_CHECKMULTISIG

```

P2SH支付地址是赎回脚本的结果,该脚本使用SHA-256和RIPEMD-160进行了两次哈希处理,然后对Base58Check进行了前缀0x05编码:

redeemScriptHash=RIPEMD160(SHA256(redeemScript))P2SHAddress=base58check.Encode("05",redeemScriptHash)

现在可以将多个付款发送到P2SH付款地址。无论赎回脚本的内容如何,P2SH支付地址的一般融资交易的输出脚本都具有以下格式:

scriptPubKey=OP_HASH160<redeemScriptHash>OP_EQUAL

OP_HASH160是SHA-256和RIPEMD-160的组合。2-of-3的multisig赎回交易的输入脚本具有以下形式:

scriptSig=OP_0<Asig><Csig><redeemScript>

并且将支出和资金交易组合脚本(验证脚本)为

validationScript=OP_0<Asig><Csig><redeemScript>OP_HASH160<redeemScriptHash>OP_EQUAL

什么是签名?

部分签名的创建顺序与在redeemScript中定义公钥的顺序相同。对事务的简化的序列化十六进制版本进行签名-由输入的事务ID和UTXO索引,要支付的金额,scriptPubKey和事务锁定时间组成。每个连续的部分签名都包含先前的部分签名与要签名的简化事务数据的序列化,从而在签名的数据中创建了多个交叉引用。结合公钥,证明交易是由相关比特币的真正所有者创建的。

如何将更改重定向到multisig P2SH?

比特币交易可以有多个接收者,来自P2SH multisig交易的资金接收者之一可以是原始P2SHAddress,从而将更改发送回自身。允许向同一地址进行循环付款,但这些地址将缺乏保密性。另一种方法是,每次完成P2SH multisig事务以收集更改时,使用一组新的公钥创建一个新的redempscript,但管理起来会更复杂。

Mimblewimble区块链的安全性?

Mimblewimble区块链依赖于两个互补的方面来提供安全性:Pedersen承诺和范围证明(以防弹范围证明的形式)。Pedersen承诺,例如C(v,k)=(vH+k g),提供完全隐藏和计算约束的承诺。

在Mimblewimble中,这意味着具有无限计算能力的对手可以确定备用对v',k',以使C(v,k)= C(v',k')在合理的时间内对... 挑战时的另一个值(计算绑定)。但是,将不可能确定用于创建承诺的特定对v,k,因为有多个对可以产生相同的C(完全隐藏)。

除了范围证明可以确保所有值都是正数而且不能太大(严格在[0,264-1]范围内)之外,它还禁止第三方锁定自己的资金,如下一节所述。由于Mimblewimble的承诺是完全保密的,所有权无法得到证明,因此任何人都可以尝试花费或弄乱那些承诺中未使用的硬币。幸运的是,任何新的UTXO都需要范围证明,并且如果无法打开输入承诺,则不可能创建此证明。

范围证明的重要性

Bulletproof范围防护在确保区块链安全方面的作用如下所示。让Ca(v1,k1)成为Alice的“封闭”输入UTXO承诺,一个坏演员Bob正试图锁定它。Bob知道Mimblewimble区块链中的所有承诺都是同构的。这意味着他可以在理论上将Alice的承诺用作输入,并在交易中创建一个新的相反的输出,该交易的总和等于0的承诺,即(0)。对于此相反的输出,Bob将尝试以一种使验证交易的矿工不会抱怨的方式向承诺增加一个额外的盲目因子kx。

有效的Mimblewimble交易将采用以下形式:

UTXO

如果Alice未使用的隐藏盲承诺为(v1H+k1G),且(v2H+k2G)的价值等于支付给矿工的费用⋅H。新创建的承诺(v1H+(k1+kx)G)同样是Alice和Bob无法承受的,因为他们都不知道总的致盲因子k1+kx。幸运的是,为了按照事务验证规则的要求为新输出(v1H+(k1+kx)G)构造Bulletproof范围证明,必须知道v1和k1+kx的值,否则验证程序(即Bob)将无法使诚实的验证程序(即miner)相信v1是非负的(即在范围[0,2n-1]内)。

如果Bob能让Alice相信她必须创建一个基金,让他们两个都有签名权(2-of-2 multisig),那么理论上,如果他们一起创建关系(1),就有可能创建所需的Bulletproof范围证明。

安全共享协议

多个参与方共同创建一个涉及多个步骤的单一事务,需要以这样一种方式共享信息,即它们共享的内容不能对它们不利。每个步骤都需要一个证明,并且不应该在不同的上下文中重放单个步骤的证明。Merlin转录本是实现这一点的协议实现的一个很好的例子。为了本文的目的,提出了一个简单的信息共享协议,可以用Merlin转录本来实现。

Mimblewimble n-of-n多方Bulletproof UTXO

Mimblewimble事务不能使用P2SH形式的智能/兑换脚本,但是可以在用户的钱包中实现类似的功能。对于n-of-n多方Bulletproof UTXO,将使用Shamir的秘密共享方案(SSSS)使n-of-n各方完成交易。SSSS是n方携带一个shard(share)f(i)for i∈{1,…,n}秘密s的一种方法,使得任意m方都可以重构消息。SSSS的基本思想是可以通过m点绘制无穷多个m次多项式,而m+1点需要定义唯一的m次多项式。图1给出了一个简化的说明;SSSS使用有限域上的多项式,而有限域在二维平面上不可表示。

分片将根据Pedersen的可验证秘密共享(VSS)方案进行分配,该方案扩展了SSSS,在该方案中,deals致力于秘密s本身以及共享多项式f(x)的系数。这被广播给所有各方,每一方都接收对应于其秘密分片f(i)的致盲因子分片g(i)。这将使各方能够验证其分片是正确的。

秘密共享

我们的朋友Alice,Bob和Carol决定建立2-of-3 的方案,使他们中的任何两个人都可以授权花费其多方UTXO。他们还希望能够建立这样一个计划,他们可以执行三轮支出,最后一轮为结束轮。他们都在想的是如何以安全且可重构的方式彼此共享盲目因素。他们听说过Pedersen的VSS方案,并决定使用它。

多轮数据

各方将分别预先计算三个私有盲因子kn-i并根据Pedersen的VSS方案对其进行分片。该方案每轮需要三个分片元组(kn-party-i,bn-party-i)和三个承诺向量C2(kparty-1)。(附录C展示了一个私有盲目因素的Alice共享分片的示例。)每当共享每个盲目因素的一组信息时,双方都会按照Pedersen VVS协议中的验证步骤,立即验证他们收到的分片的正确性。他们会继续这样做,直到所有信息都已设置,准备好并存储在钱包中为止。

UTXO

工作原理

三方建立了最初的多方资金交易和Bulletproof范围证明,与3-of-3案例完全相同。为此,他们使用在第一轮中预先计算的私人盲目因素。现在当他们决定花费多方UTXO时,只需要其中两个即可。

Bob和Carol决定像以前一样花钱,为此他们需要在第一轮和第二轮中重建Alice的私人致盲因素。由于Alice没有赢得任何东西,因此她不需要在场就可以设立私人致盲 Carol需要做的输出UTXO的因素。Bob和Carol因此分享了Alice给他们的分片:

UTXO

他们现在能够重建致盲因素并验证对它的承诺。如果验证失败,他们会停止协议,安排与Alice会面与她交谈。三者合在一起,他们就能找出错误信息的来源。

UTXO

在此回合中,他们选择Bob在建立并完成交易时扮演Alice的角色。Bob能够做到这一点,因为他现在拥有Alice的私人致盲因子k1-1和k1-2。在代表Alice构建签名时,他选择了一个她不知道的私有随机数,因为它仅用于构建签名,以后再也不会使用。Bob和Carol完成了交易,让Alice知道了这一点并告知她从第2轮开始需要连续多次支出。

下次我们的两个朋友要花掉他们多方UTXO的其余部分或全部时,他们将重复这些步骤,从第2轮开始。唯一不同的是被提名扮演这个角色的人 缺席的一方;他们必须轮流这样做。

花费协议

Alice,Bob和Carol现在经验丰富,可以建立自己的2-of-3 计划,并花费UTXO直到所有资金用尽。他们已经就简单的支出协议达成协议,这有助于保持所有人的诚实:

所有各方都必须始终知道谁共享分片,以及谁在每个回合中扮演失踪党的角色。因此即使所有参与者都处于脱机状态,也必须始终将其包含在所有共享通信中。然后当它们再次变为可用时,他们可以接收这些消息。

如果任何验证步骤未成功完成,则支出将中止。为了重新开始,各方必须取消所有未使用的分片,为其余部分计算新的分片,然后重新开始。为此所有各方都必须出席。

任何一方不得连续两次扮演缺席方的角色。如果Alice不在,Bob和Carol必须轮流去。

结论,意见和建议

与比特币的比较

鉴于引言中提到的比特币和Mimblewimble之间的基本区别,以及此处介绍的多方支付方案,可以得出以下结论:

矿工验证

在比特币中,每当调用multisig付款时,矿工就会验证P2SH multisig赎回脚本。此外它们还验证事务中使用的公钥。

使用Mimblewimble多方交易时,矿工无法验证谁可能是多方交易的一部分,仅是交易本身符合Mimblewimble基本规则且所有Bulletproof 范围证明均有效。各方有责任执行基本的支出协议验证规则。

m-of-n

在比特币和Mimblewimble中,m-of-n交易都是可能的。区别在于验证规则的应用位置和方式。

安全

由于矿工执行验证规则,因此比特币多方交易更加安全。

复杂

与比特币相比,在Mimblewimble中实现m-of-n多方交易将涉及钱包来存储更多数据和实现更多功能。Pedersen的VSS方案。

建 议

Bulletproof范围证明

在使用Dalek的Bulletproofs MPC协议还是Grin的多方Bulletproof来构造多方范围证明之间进行选择非常重要。尽管使用Dalek的方法需要进行更多轮次的交流,但证明尺寸稍大,并且需要对硬币进行着色,但它具有一定的优势。虽然在执行Grin协议时可以轻松地增强后者,但在执行协议时,它的钱包可重构性和信息共享安全性都胜过对手。

实用性

提议的Mimblewimble多方Bulletproof UTXO实际上可以在n-of-n 和 m-of-n的情况下实现。

信息共享协议

这里建议的简单共享协议可能需要更多的工作才能使其达到最佳状态。

UTXO

*本文转载自网络转载,版权归原作者所有。本站只是转载分享,不代表赞同其中观点。请自行判断风险,本文不构成投资建议。*