主页 > imtoken钱包官方版下载 > 区块链隐私技术 - Mimble-Wimble

区块链隐私技术 - Mimble-Wimble

imtoken钱包官方版下载 2023-08-12 05:10:05

区块链上的隐私问题

区块链是一种公开的分布式交易账本。 以比特币为例,链上数据是公开可见的,包括交易金额和交易双方的地址信息。 虽然使用比特币地址代替实名账户可以在一定程度上保证用户的隐私需求,但如果有人可以使用比特币地址链接到所有者的真实身份,那么所有者的比特币交易记录——无论是过去,现在,未来,都会暴露无遗。 可怕的是,将比特币地址与现实世界的身份联系起来并不难。 虽然一笔交易的发送方和接收方不能与现实生活中的买卖双方直接相关,但是可以通过分析交易频率和金额,分析出链上数据的地址簇和交易图,如下图所示、进出流量等进行分析,从而与一些真实的交易情况进行关联映射,得到一些地址和身份相关的信息。

在这里插入图片描述

随着时间的推移,对隐私的攻击变得更加有效。 历史记录表明,当越来越多的研究人员研究和开发新的去匿名化技术时,去匿名化算法也在不断改进,越来越多的辅助信息可以帮助攻击者识别这些地址簇。

对于比特币来说,它不是匿名系统,只能算是假名系统。 可见,数据的公开透明虽然保证了比特币账本的真实性和不可篡改性,但也阻止了很多需要隐私的场景在区块链上的使用。

在这种情况下,已经提出了各种区块链的隐私协议。 通过使用密码学等技术手段隐藏交易的发送方、接收方和交易金额,矿工(验证者)可以在不知道交易细节的情况下验证交易的合法性。

区块链前沿隐私技术

从早期的混币技术到现在的零知识证明技术,关于在区块链上实现强隐私的研究从未停止过。

目前的区块链隐私技术实现方式主要有两类:一类是基于UTXO模型的隐私技术,如Monero使用环签名,Beam和Grin使用Mimble-Wimble技术,还有使用零知识证明的zk-SNARK技术ZCash等。另一种是基于账户模型的隐私技术。 这类技术一般用于在使用账户模型的区块链上提供隐私交易(Confidential Transaction)或隐私资产(Confidential Assets),例如以太坊和量子链。 例如,使用安永发布的EYBlockchain,以太坊上的匿名支付协议Zether,结合同态证明和范围证明提供零知识证明的AZTEC,以及北京大学团队研发的PGC技术。

名称类型技术实现

大零币

未交易输出

零知识证明技术zk-SNARK

门罗币

未交易输出

环签名技术 Borromean

光束

未交易输出

Mimble-温布尔

安永区块链

帐户

基于合约的 zk-SNARK

阿兹台克

帐户

同态证明&&范围证明

泽瑟

帐户

Σ-Bullets ZK-proof 零知识证明

PGC

比特币平台关闭后比特币怎么办_比特币参考文献_比特币行情实时走势图比特币行情

帐户

防弹零知识证明

初步知识

本文详细介绍了基于Mimble-Wimble技术的隐私协议的实现细节。 请注意,所描述的技术细节不适用于当前市场上的产品(隐私货币)。 也就是说,本文提到的技术实现是一种利用Mimble-Wimble技术实现隐私的想法或策略。 现在已经发布的产品,比如Beam、Grin、Elements等,实现细节可能略有不同,但是实现Mimble-Wimble的思路是一样的。

施诺尔

关于Schnorr技术的详细介绍可以看我的另一篇文章

主要介绍了Schnorr技术的实现方法和签名的细节,包括使用Schnorr进行多重签名的原理,这是后来Mimble-Wimble生成交易的重要组成部分。

环签名技术

环签名技术详见我的另一篇文章

主要介绍了环签名的概念以及区块链中广泛使用的两种环签名方法:AOS和Borromean。 环签名是 Mimble-Wimble 实现隐私资产 Surjection Proof 的一项重要技术。

范围证明范围证明

去做…

Mimble-Wimble 与保密交易介绍

Mimble-Wimble 基于 UTXO,一种增强隐私性和可扩展性的区块链协议。 Mimbel-Wimble得名于小说《哈利波特》中的“吐舌咒”,用来防止泄密。 该协议于 2016 年由化名 Tom Elvis Jedusor(伏地魔的法语名称)的人在名为“比特币向导”的 IRC 网络聊天室的洋葱加密通信频道上提出。 分享了概述 Mimble-Wimble 的文本,然后消失了。

Mimble-Wimble 的优势

使用 Mimble-Wimble 协议有两个主要优势——高强度隐私和可扩展性

佩德森承诺

与比特币相比,每一次输入输出都是一个UTXO,UTXO中的数量和地址都是可见的。 Mimble-Wimble 将 UTXO 变成了 Pedersen Commitment 的形式,也称为承诺。即输入或输出的形式

承诺 = r * G + v * H

G和H是椭圆曲线上两个不同的点,v是交易的金额,r是Commitment的致盲因子,也可以理解为私钥。

通过这种构造,只知道G和H的第三方不可能计算出r和v,从而保证了Commitment的隐私性。 同时,也就是说,知道一个 Commitment 中的 r 和 v 的人,才有资格花费这笔钱。

一个交易

将 UTXO 改成 Commitment 后,最常见的交易就变成了这样,Alice 使用一个金额为 v1 的 Commitment 转了一笔金额为 v2 的钱给 Bob,并给自己找了金额为 v3 的零钱。

在这里插入图片描述

我们将此公式简化为 C1 -> C2 + C3。

关于生成交易的具体细节,后面会详细介绍。这里我们先提出一个交易的内容,一个交易包含以下数据

交易抵消(offset)交易内核(kernel)[fee, excess_value, signature, lock_height]

简单理解,输入输出承诺很容易理解,就是交易承诺。 值得一提的是,每个输出承诺都会携带一个范围证明,这个证明的必要性将在后面介绍。 交易抵消是后续混币操作需要的数据,后面会介绍。 事务的核心是一个非常重要的概念。 比较重要的数据结构是交易手续费fee,excess_value可以理解为交易的公钥,signature是交易的签名。

比特币平台关闭后比特币怎么办_比特币行情实时走势图比特币行情_比特币参考文献

如何验证交易的合法性

矿工在网络上收到一笔交易后,如何验证这笔交易是否合法,主要有以下三个方面

等量余额归零

矿工首先需要验证双方的交易金额是否正确,即

v1 == v2 + v3 + 费用

由于交易中的输入和输出是承诺,矿工无法从交易中读取输入和输出的数量。 为了验证一笔交易的金额是否相等,矿工进行如下操作:

可以看出,对于一笔合法的交易,将所有输出承诺减去所有输入承诺,再减去交易手续费倍数H,结果将是生成器G的倍数。但是,验证简单计算result是G的倍数,直接带入椭圆曲线方程即可验证。 (对于有限域上的椭圆曲线,任意两点必然有倍数关​​系,但这个倍数很难求。这就是有限域上椭圆曲线的离散对数问题)

无超发货币(范围证明)

以上Balance-to-zero验证是否证明交易金额不会有问题? 这还不够。 因为矿工不知道每个Commitment的具体金额,如果只判断总和,可能会忽略金额为负的情况,如下图。

在这里插入图片描述

如果Alice按照约定支付给Bob 5的币量,然后为自己构造两笔交易,一笔价值15,另一笔价值-10,-10的Commitment直接扔掉。 然后爱丽丝凭空创造了一个价值10的货币。 在这种情况下,Balance-to-zero 可以通过验证。 (这里不考虑手续费)

因此,矿工需要保证每个输出的Commitment的值为正值,这就需要使用范围证明技术。 rangeproof 保证数字在给定范围内,但不透露数字是多少。

早期的 Mimble-Wimble 使用环签名进行范围证明,但存储性能较差。 基于环签名的范围证明需要大约 5kb 的存储空间。 现在业界大多使用bulletproof做范围证明,存储大小降到1kb。

为了保证输出金额合法,交易发起方需要为每一个输出Commitment添加一个rangeproof,这在之前的交易内容中有提到。 矿工验证rangeproof的合法性,保证金额为正,防止货币超发。

签名是合法的

生成签名和验证签名的过程是本章的重点,后面会详细介绍。

我们现在需要知道的是,一个交易签名的生成过程是由双方在链外即线下交互产生的。 交易双方通过 Schnorr 多重签名技术,在不泄露各自私钥(即致盲因子 r)的情况下,共同对一笔交易的内容进行签名。

通过Schnoor多重签名,双方最终协商产生的密钥为

Schnorr_secret_key = r2+r3-r1-offset

excess_value 相当于一笔交易的公钥,计算方式为:

excess_value = (r2+r3-r1-offset)*G

这个公钥实际上是一笔交易的所有输出承诺减去所有输入承诺减去手续费减去交易附带的抵消额,可以由打包区块的矿工计算得出。 (注意,打包区块的是矿工,也就是监听这个交易的矿工)

产生交易的过程

了解了Schnorr多重签名的原理之后,就很容易理解Mimble-Wimble交易生成和验证的过程。

假设Alice以50元的Commitment支付给Bob 30元,将剩余的19元转给自己,并支付1元的交易手续费,如下图所示。

在这里插入图片描述

注意,为了更清楚的说明整个交易的生成和验证过程,下面的描述将屏蔽rangeproof的生成过程。 Rangeproof是交易发起者对每一个输出分别进行的零知识证明过程,并会附加到每一个输出上。

Alice统一随机生成交易的offset偏移量计算自己的(发送方)私钥rso:统一随机生成自己的(发送方)random nonceks计算交易手续费比特币参考文献,本例为1发送以下数据给Bob Bob统一和随机创建自己的(接收者)随机数 kr 并随机创建自己的(接收者)盲因子 rr 计算 Schnorr 多重签名中共享的 e 值 计算接收者的 Schnorr 签名 sr 将以下数据发送给 Alice Alice 验证 Bob(接收者)是否)的签名合法(即验证Schnorr签名的过程) 生成自己的签名ss 生成整个交易的签名s和r 生成交易验证交易流程

比特币平台关闭后比特币怎么办_比特币参考文献_比特币行情实时走势图比特币行情

balance-to-zero 和 rangeproof 的验证上面已经讲过了。 这里主要介绍矿工如何验证签名的有效性。

矿工接受交易后,在balance-to-zero和rangeproof验证通过后,矿工验证签名是否合法,如下:

对于签名(s,r*G),做如下计算

如果验证通过,则为合法交易

投币

Coin-join 技术允许用户将他们的交易组合在一起,从而使交易图更加模糊。 交易图可以指出谁是交易的参与者,显示不同用户之间的关系,以及一个币的历史。 如果有足够多的用户使用 Coin-join,这就打破了交易的多个输入来自同一用户的假设,从而保护了用户隐私。 Coin-join 是一项伟大的技术,但它有一个明显的缺点:它需要参与者之间的合作或互动。 为了验证组合交易,每个输入所有者必须签署整个组合交易。 这极大地限制了 Coin-join 技术的使用。

也有很多关于非交互式 Coin-join 技术的研究。 有一种技术实现了一种叫做单向聚合签名(OWAS)的方案,它具有很大的发展前景。 然而,这种技术使用椭圆曲线上的配对操作,这很难理解。

Mimble-Wimble 原生支持 Coin-join 的操作:矿工将监测到的交易混合形成一个大交易,并将这个大交易打包成一个区块,即一个区块只会包含一个大交易,如图下图

在这里插入图片描述

混币出块后,需要保证其他矿工可以验证这个块中所有交易的合法性。 为此,矿工需要保留每笔交易的内核,因为有每笔交易的公钥excess_value和签名信息signature。 并累加所有交易的offset,得到一整笔大交易的Σoffset,保存在区块中。

对于验证区块有效性的矿工,他首先计算

∑output_commitment - ∑input_commitment-∑offset-∑fee*H

并取出每一个保留的交易内核

∑excess_value

并判断两次计算结果是否相等。 然后矿工可以通过验证每个内核中签名的有效性来确保每笔交易都是合法的,尽管他们不知道具体的交易内容是什么。 (简单提一下为什么签名不能求和?答案可以从签名生成的细节中得到,因为Schnorr多重签名需要用到变量e,不同的交易e不同,所以不能相加。)

值得一提的是,Mimble-Wimble 提出抵消是为了增加混币过程的隐私性。 原因如下,因为每笔交易的内核都会被保存下来,即每个内核中的excess_value都是公开的。 在没有offset的情况下,虽然多笔交易混为一谈,但黑客仍然可以利用多个excess_value值进行输入输出的暴力匹配,从而有可能在大笔交易中分析出具体的小笔交易。 为了防止这种攻击,设计者在每笔交易中加入了一个随机偏移值offset。 矿工在进行Coin-join时,将所有交易的offset值累加起来,得到一笔大交易的offset。 这样,除了打包区块的矿工知道每笔交易的offset外,其他矿工无法从大交易中分析出每笔小交易。 进一步确保交易不会被回溯,隐私得到保障。

Coinbase 交易和费用

从打包区块的矿工的角度讲完Coin-join操作,这里简单提一下之前没有提到的Coinbase交易和手续费的实现。

Coinbase交易是指打包区块的矿工给予的奖励,手续费是指所有在矿工打包区块的交易所愿意支付的交易手续费。 这两笔钱都是对打包区块的矿工的奖励。 对于比特币这样的非隐私货币,交易价值可以直接写在链上。 然而,Mimble-Wimble 隐藏了任何交易的金额,那么 coinbase 交易和手续费如何取钱呢?

答案是矿工会在区块中添加一个交易输出(注意没有添加输入),输出结构如下

r * G + (coinbase_Value + total_fee) * H

这个输出也会有自己的kernel,也就是有excess_value和signature,但是这个签名可以由矿工单独完成。 验证签名的具体过程与前面类似,这里不再赘述。

值得一提的是H的系数,当矿工打包一个区块进行广播时,接收到该区块的矿工会验证该区块的合法性。 他们从区块中的所有输出中减去所有输入(这里包括 coinbase 交易的输出),然后减去 H,即超额时间。 (这个overage是代码中的声明,其实就是全网约定的coinbase_Value值)。 最后的结果应该是 G 的倍数。

可以看出,通过增加一个coinbase交易输出,矿工在输出中包含了coinbase和自己的手续费,并不妨碍矿工验证合法性。

直通(交易记录核销)

一般来说,具有隐私属性的加密货币一般需要更大的存储空间。 但 Mimble-Wimble 使用 Cut-through 技术来降低存储需求并进一步扩展其可扩展性。

直通技术的核心思想是删除中间过程数据。

从区块的角度来看,矿工内存池中的很多交易可能存在某个交易的输出Commitment已经在另一个交易中使用过,这样矿工在打包交易时就可以使用已经使用过的输出Commitment进行注销删除。 这可以在一定程度上减小块大小。

比特币行情实时走势图比特币行情_比特币平台关闭后比特币怎么办_比特币参考文献

从整个区块链来看,如下图所示。 输入中的黑色块是指 coinbase 交易直接发送的钱。 非黑块必须是先前交易的输出承诺。 Cut-through就是把这些非Coinbase的钱(commitment)注销删除(删除输出的Commitment的rangeproof也被去掉)。 链在任何时间点的状态(不包括区块头)可以由以下信息唯一确定:

每笔交易的完整未花费交易输出 (UTXO) 内核集

对于矿工来说,Cut-through之后,区块链中给定的节点需要维护的状态是非常小的(对于比特币大小的区块链,几千兆的数量级,可能优化到几百兆字节) . 而当一个新的节点加入构建MimbleWimble链的网络时,需要传输的信息量也非常少。

验证整个链的合法性类似于在 coin-join 期间验证区块的合法性。 Cut-through会抵消等式两边的相同项,每个kernel都会被保存,这样就不需要验证过程了。 任何变化。

在这里插入图片描述

Mimble-Wimble 瓶颈

Mimble-Wimble 使用 Coin-join 和 Cut-through 技术看似优化了存储性能,但 rangeproof 的生成和存储是 Mimble-Wimble 技术的瓶颈。 在验证输出Commitment(即UTXO)的有效性时,需要从头到尾计算rangeproof,非常耗时。 并且rangeproof的存储大小>1kb,这对存储的要求是不小的。

Mimble-Wimble 安全和蒲公英(蒲公英协议)

2019年11月8日,一场关于Mimble-Wimble隐私保护的辩论在推特上引发热议。 事件源于 Dragonfly Capital 研究员 Ivan Bogatyy 在 Medium 上发表的一篇文章。

在这里插入图片描述

在这篇文章中比特币参考文献,Ivan Bogatyy 明确表示:“Mimblewimble 的隐私保护功能存在根本性缺陷。” 受此影响,Grin、BEAM、Sero等隐私币出现了不小的跌幅。

在这里插入图片描述

在这里插入图片描述

简单来说,作者的攻击方式就是部署大量的嗅探(sniffer)节点,通过构建交易图达到破解隐私的效果。 从上面的Mimble-Wimble打包区块的过程也可以看出,只有矿工清楚地知道每一笔交易的输入输出内容。 因此,如果部署很多节点进行嗅探,则可以将交易的输入和输出关联起来。 通过累积这样的关联,可以构建连接不同钱包的交易图。 使用此图结合交易构建的源 IP,可以推断和证明两个已知方之间的财务联系。

为了解决这个问题,蒲公英协议(Dandelion Protocol)被提出。 目前为止,Grin 和 Beam 都实现了这个协议,并做了一些优化。 Beam 的新协议 Lelantus MW 正在开发中,很快就会上线。

简单来说,蒲公英协议分为以下两个阶段

茎期(树干期)

交易完成后,不会在全网广播。 首先,随机指定一个节点将其发送到网络。 接收节点可以选择以主干的形式继续传播,也可以选择进入Fluff阶段(fluff phase)。

绒毛阶段(fluff phase)

交易即将广播。

以上是最原始的Dandelion协议,针对Grin和Beam的具体实现进行了优化,不再过多赘述。

在这里插入图片描述

Mimble-Wimble 和机密资产

Mimble-Wimble 也可以用来实现多资产隐私(Confidential Assets)。

在Mimble-Wimble和Confidential Transaction中,每一个UTXO实际上都是以Commitment的形式存在,即

承诺 = r * G + v * H

我们认为H点对应的是某种资产,可能有多种货币,比如

r1*G+v1*J 或 r2*G+v2*K

比特币行情实时走势图比特币行情_比特币平台关闭后比特币怎么办_比特币参考文献

其中J和K代表两种不同的货币。

这样的交易可能是

在这里插入图片描述

仔细想想,这样的结构是有问题的,因为资产J和K暴露了。 虽然我们不能说 J 和 K 是什么,但我们知道它们是两种不同的资产。 他们有不同的发电机。 因此,为了实现资产类型的隐私,我们需要对资产类型本身进行隐藏,同时也通过引入致盲因子来达到隐私的效果。

为了

承诺 = r * G + v * J

让 J = x*G + H

其中J又被称为Asset Tag。因此,一个包含Confidential Assets的承诺结构如下所示

Commitment = r * G + v * (x*G+H)
         = (r + x*v)*G + v*H

通过这样的结构,可以在不公开资产类型的情况下,在一次交易中包含多种不同的隐私资产。 那么,如何验证包含多个隐私资产的交易呢?

思路和Confidential Transaction类似,同样需要做balance-to-zero,并且在每个output上加上rangeproof保证金额为正,这里就不细说了。但这还不够,考虑到J = x*G + H, 让

J' = -H + x*G

然后交易输出变成

Commitment = r * G + v * (x*G - H)
       = (r + x*v)*G - v*H

可以看出,在隐藏资产时,如果H与x轴点-H相反,则可以在balance-to-zero和rangeproof验证的基础上实现货币超发(v确实是a positive number) ,为了解决这个问题,引入了 Surjection 证明。

抗干扰

与 rangeproof 类似,Surjection Proof 是交易发起方附加在每笔交易输出 Commitment 上的一种证明。 Rangeproof证明金额在一定范围内,而Surjection Proof证明目标对象(资产类型)属于一个对象集合(输入中的所有资产集合之一),这个解释很抽象,我们将在下图。

如图所示,如果交易发起方想要证明out1中的Asset TagH+b*G是合法的,需要将out1中的Asset Tag依次减去每个输入的Asset Tag。 这样会得到一个set,如果out1是一个合法的Asset Tag,那么这个set中一定有一个item是G的倍数(因为代表资产的H已经被剔除了),这个multiple的值可以通过multi-signature 为了实现这一点,也就是说,你可以使用这个值的倍数作为私钥,将集合中的几个公钥组合起来生成一个环签名。 如果能够正确生成并验证环签名,就可以证明输出的Commitment的Asset Tag是合法的。

对于下图,如果要证明H+b*G是一个合法的Asset Tag,那么将这个Asset Tag减去每一个输入的Asset Tag,这样一项就是(ba)*G,而(ba)就是为交易发起者所知(使用多重签名技术),因此可以结合其他几个资产标签的差异进行环签名。 验证者通过验证环签名的准确性来判断资产标签确实属于输入的资产标签集合之一。

在这里插入图片描述

总结

Mimble-Wimble 技术作为一种新兴的隐私技术,前景无限。 但现在业内也有一些非议。 然而,每一项技术都是在曲折的道路上发展起来的。 希望Mimble-Wimble技术能够不断迭代,为社会带来可观的价值!

参考

Tips:文章更新到我的Github:Kingsley-Sun's Github