区块广播:

【技术社区】在LBTC上采用MimbleWimble协议的可行性

Lbtc社区版主发布在 LBTC/闪电比特币
 18235  0
作者:LBTC developer
编译:Kyle
原文链接:https://medium.com/lightning-bitcoin-blog/mimble-wimble-on-lbtc-420f7f292404

本文由LBTC社区志愿者Kyle翻译自LBTC海外研发团队于2019年3月14日所发表的文章「Mimble-Wimble on LBTC」

首先介绍了比特币UTXO的原理,并解释如何在理解UTXO原理的基础上进一步考虑对交易信息的隐藏。LBTC使用类似于比特币的UTXO机制,因此也适用这一思路。
 
其次,本文介绍了当下人们的Mimble-Wimble协议的基本原理。MW协议通过对交易信息进行椭圆曲线加密,同时结合致盲因子、交易聚合等手段,实现了良好的隐私性,又保证了?的健壮性和可拓展性。MW协议同样可以基于UTXO实现,但是在交易格式和区块结构上有较大改动。
 
最后,本文重点讨论LBTC适用Mimble-Wimble协议的可行性,认为这一协议是可以考虑在LBTC上使用的。但在技术实现上,我们需要对其中的性能、功能和复杂性进行权衡,考虑某些协议特性的取舍。技术开发小组针对各种潜在问题,亦提出了一些可能的方案。

从比特币UTXO到隐私性的实现

为更明确地阐释Mimble-Wimble协议,我们需从比特币UTXO模型开始解释,这种模型下隐私性的实现基础。
 
众所周知,比特币采用一种名为UTXO模型。对于不太了解比特币技术原理的朋友们来说,这个概念可能稍有晦涩。UTXO指代Unspent Transaction Output,中文含义为:未被花费的交易输出。
 
比特币本质上是一个账本(Ledger),那么就必然涉及如何记账的问题。最为大家所知的账本模型是账户-余额模型(Account-Balance Model),这种模型非常符合直觉,即在账本上记录每次交易后、每个账户的余额变动情况。讲一个比较简易的例子,假设Alice与Bob进行一笔转账交易,Alice的账户先前有100个比特币,而Bob的账户为空,此次转账的金额为40个比特币。在转账前,账户-余额的情况为:
Alice 100
Bob 0

转账之后,账户-余额的情况变动为:
Alice 60
Bob 40
 
这种模型之所以非常直观、易懂,是因为它直接表达了系统当前的状态(State),这也是一个区块链中非常重要的概念。我们使用银行账户的时候,就是关心我们的账户有多少钱,因此基本上人人都可以很容易地理解账户-余额模型的基本理念。
 

但是,比特币并没有采用这种看似合情合理的模型,而是考虑了一个正常人需要花点时间精力才能搞懂的UTXO模型。这背后是有原因的。首先解释一下UTXO模型是怎么来的:归根结底,比特币的交易采用了一种输入+输出的交易数据结构,即每一笔交易都由两个数据板块组成,一个是输入(Input)、另一个是输出(Output);当然,输入和输出是可以有不止一个的,但这并不妨碍我们的理解,你可以把多个输入或者输出合并为一个去看待即可。每一笔交易的输入都需要引用过去生效交易的输出,而这笔交易的输出在被花费的时候又会被下一笔交易的输入引用,交易的历史记录之间形成一个很长的树状链,忠实地还原了交易的由来和期间每一笔流转的记录。
 
还是借用刚才Alice转账给Bob的例子,我们假设Alice的100个比特币是她挖矿得来的,因此Alice通过一笔CoinBase交易得到这100个比特币:
交易1(CoinBase交易):
输入-CoinBase 挖矿奖励100BTC;
输出-Alice的地址,需要Alice给出签名解锁;
当Alice转账给Bob 40个比特币时,又形成了第二笔交易:
交易2(转账交易40BTC):
输入:引用交易1的输出,Alice给出签名解锁该输出;
输出:Bob的地址,需要Bob给出签名解锁;
 
这个示例并不是在技术上特别严谨,但是我们可以借此简单理解UTXO的运作原理。从该示例可以看到,当Alice得到挖矿奖励的,Alice实际得到的是一个指向她的地址的交易输出,而这个输出需要Alice给出签名(需要用到她地址对应的私钥)才能解释使用这些比特币。这笔交易的输出,在Alice给出解锁签名之前,就是一个未被花费的交易输出,即UTXO;只有当她创建第二笔交易,把其中40个比特币转给Bob时,才能认为她花费了上一笔交易给到她的比特币。
 
可见,UTXO实际上是一个比特币账本当前状态(State)的集中体现,即当前谁(地址或账户)拥有多少未被花费的比特币(余额)的全部信息。这种思路确实比较绕,但是它有一个很大的优势,就是非常强健(Robust),因为比特币系统仅记录历史上每一笔交易的流转过程,环环相扣,对任意一笔交易的篡改都会被很容易识别出来,除非动用远远超过过去积累的算力,否则这些交易记录无法被改变,而这是比特币得以完成巨大信任积累的制度基础。
现在观众应该已经对UTXO有一定的理解了。
 
如果您还是不清楚UTXO的概念,可以借助网络再详细了解一下,毕竟作者本人认为UTXO对理解比特币是至关重要的,也会影响到对后续Mimble-Wimble协议的理解。要知道,闪电比特币(LBTC)与比特币在这方面是一样的,采用的是UTXO交易模型。
 
话题转向隐私性:从先前解释UTXO的原理来看,UTXO模型的输入给出了交易出金地址,输出给出了交易入金地址,再加上该笔交易的交易金额。自然而然地,我们可以从三个角度考虑UTXO模型隐私性的实现:
第一、隐藏输入的地址;
第二、隐藏输出的地址;
第三、隐藏交易的金额。
比特币有隐私性吗?有,也没有。所谓有,体现在比特币只暴露了地址,但外人无法得知这个地址是谁的。在使用比特币转账时,一般都会建议使用变动的地址,即每一笔新交易都从钱包内创建一个新地址使用。这种使用方式给比特币带来了不错的隐私性,有人认为这样对比特币就已经足够了。
 
说没有是因为,其实有部分用户希望得到更加强大的隐私性,即能够隐藏交易的出金、入金地址,以及交易金额。如此,任何用户的任何交易行为,都不会被网络发现,也自然不可能被分析。事实上,有多个项目,如门罗币(Monero)、达世币(Dash)、ZeroCash都使用了不同的方法对以上信息进行了隐藏,都有不错的效果。而最近的Mimble-Wimble协议,就是一个基于UTXO结构,实现的对交易的出金、入金地址,以及交易金额的隐藏,并且具有很不错的稳定性和可靠性。

Mimble-Wimble协议原理的入门解释

Mimble-Wimble协议(后简称MW协议)是一个区块链的格式和协议体系,依托于健壮的加密算法,同时兼顾非常优异的可扩展性、隐私性和灵活性。从技术上讲,MW协议重新定义了交易格式、区块数据格式,通过加密算法实现了对交易信息的隐藏。
 
MW协议也是基于UTXO的,但是输入、输出格式是有所区别的。我们假设一笔交易引用了两个输入(I1和I2),合并一个输出(O1):

很明显,我们有I1+I2=O1的关系。

 
但是这个关系太浅显了,以至于网络中任何人都可以了解到交易的输入、输出情况和金额。为了隐藏这个关系内的真实信息,可以引入椭圆曲线加密算法:
I1 * H + I2 * H = O1 * H
 
上式中的H代表某种椭圆曲线加密函数的处理,I1*H表示将I1信息经过椭圆曲线H处理后的结果。由于椭圆曲线具有一种很良好的特性,就是满足加法和标量乘法的交换律和结合律,因此上式的关系是可以成立的。




了解比特币技术原理的朋友知道,椭圆曲线加密算法是十分强大的,这也是比特币安全性的密码学基础之一。但是上面的处理方法是否万无一失?答案并不是。因为加密算法的可靠性,不仅依赖加密算法本身的破解难度,也依赖被加密的明文的复杂程度和可预测性。
 
来一个简单的例子:当我们使用互联网论坛发言时,常会用到登录名密码这一套组合去确认身份、使用自己的账号。假设我在某论坛的登录名是Jack,使用的密码是123456。对于论坛服务器而言,为了保证广大用户们身份信息的安全性,一般是不会保存明文密码的,也就是说我设置的密码是不会以123456这样明文的形式保存在论坛的服务器中。论坛服务器的常规操作是,使用一个单向加密的哈希函数Hash(),计算哈希后的密码密文:
Hash(123456)=32uio58ca992rh4r8wqq
于是服务器就会保存如下对应关系:
用户名=Jack、登录密码哈=32uio58ca992rh4r8wqq
 
当我们使用这个用户名密码登录论坛时,服务器会检验我的用户名以及输入的密码的哈希值是否与它储存的信息对应,如果对应就表示输入的是正确的用户名密码组合。
 
如果您没有了解过这种方式,可能会惊讶于发明者的智慧。但我们今天要指出的是,这种方式是很容易被攻击的,原因是123456这个密码太简单了,太具有可预测性,我们大概率可以认为全世界有一大堆像我一样的懒汉,不动脑筋地设置了一个这样简单好记的密码。那么当黑客窃取论坛服务器的数据时,就会发现一大堆登录密码哈希=32uio58ca992rh4r8wqq的用户名密码组合!
 
要解决这个问题,需要在设置密码、计算哈希值时引入一个较为随机的干扰因素R,并计算一个新的哈希值:
Hash(123456+R)=4d9ti14hfsdr4rwqo28e
 
如果每个论坛的服务器都设定了个性化的干扰因素R,那么黑客在窃取服务器资料后,就会发现哪怕大家都使用了诸如123456这样简单的密码,都会呈现出完全不同的哈希加密结果,使得破译变得非常困难。



在MW协议中,也使用了类似的手段,我们称之为致盲因子:
(ri1 * G + I1 * H) + (ri2 * G + I2 * H) = ( ro1 * G + O1 * H)
 
在上式中,用户的私钥r被用作致盲因子,重新对输入、输出信息进行了加密。这样,即使交易的金额、地址信息有很强的可预测性,攻击者也很难通过加密后的结果反推交易原文的内容。毕竟,作为致盲因子的用户私钥r是只有用户自己才知道的。
 
致盲因子的加入,确实大大提高了加密的安全性,并且更巧妙地是结合原有的电子签名机制,使得对交易的检验也极为简单可靠。
 
由于在检验交易合法性时,我们要进行一系列校验,例如验证交易的输入金额是否等于输出金额。我们取出等式:
(ri1 * G + I1 * H) + (ri2 * G + I2 * H) = ( ro1 * G + O1 * H)
结合原先的关系:
I1 * H + I2 * H = O1 * H
等式演变为:
ro1 * G - ri1 * G - ri2 * G = (ro1 - ri1 - ri2) * G
括号中的ro1 - ri1 - ri2的值会被创建者附加在交易中。这个值被称之为Kernel Excess。在检查交易合法性时,只需要检测等式左侧减去Kernel Excess* G是否为零,即可验证交易的输入金额是否等于输出金额。
 
另有一种特殊情景,输出额为负数。如输入额1,输出额分别为2和-1,在花费-1时,系统则会提示非法,不能花费该交易输出;而花费2则合法。如此,系统变相非法增发了1个币。
为了解决这个问题,MW协议利用了另一个加密概念,称为范围证明:一个数字落在给定范围内的证明,而不会泄露数字。我们不会详细说明范围证明,您只需要知道,对于任何r*G + v*H,我们都可以创建一个证明,证明 v 大于零且不会溢出。
 
总而言之,MW协议中的交易输入输出不再需要地址的概念。实现中,把私钥作为致盲因子,只有有私钥才能花费未花交易输出,则变相使得输出也有地址。而在使用未花费输出时,用户使用自己的私钥对Kernel Excess签名;以至系统检查交易时,检查签名是否正确即可实验验证。这样我们也很好地实现了用户使用私钥对链上资产的控制。
 
此外我们还想介绍一个交易聚合的优异特性:
假设三笔交易:
上面三个交易聚合后:
交易聚合后有两大优点:

1)交易聚合后,把中间的输出去除,交易信息更加私密、难以追溯分析。
2)交易聚合后,区块数据变小;一个直接的结果就是区块在P2P网络中同步更块。

LBTC应用Mimble-Wimble协议的讨论
(上)关于LBTC使用Mimble-Wimble协议可行性的讨论
 
基于以上分析,我们了解Mimble-Wimble协议也基于UTXO模型。而LBTC与比特币一样,是基于UTXO模型作为交易拓扑结构使用的。
 
MW协议的UTXO模型与比特币的区别在于,MW协议需要重新定义交易的数据格式和区块的数据内容结构。
 
LBTC使用的UTXO,与比特币的UTXO并无本质区别;较大的区别在于,LBTC建立了基于UTXO的DPOS共识机制,打造了更为高效稳定的运作机制。DPOS共识机制不仅运行速度快、拓展性强,并且可以保证较为固定的出块时间,这对于一些复杂功能的应用是大有好处的。很多普通POW+UTXO系统无法完成的功能,都可以在LBTC上实现。

在实际的工作中,需要考虑以下改造内容:
 
1)实现MimbleWimble中使用到的加密原语,即加密算法实现。
前文已经讨论了MW协议加密算法的基础原理,但这一讨论还仅限于入门介绍的性质作用。我们仍需要研究其加密机制中的细节问题,以至最终的实现。
 
2)MW UTXO和LBTC UTXO的兼容。
在技术实现中,可能通过重载类或者在类加标识字段,来识别不同格式的UTXO。
 
3)交易检查的算法实现。
交易格式检查中,对于基于MW协议的交易,调用MW加密算法验证交易合法性。检查的基本原理也在上一节进行了介绍。
 
4)MW UTXO数据、交易历史数据和状态的保存。
本质上,比特币、LBTC都是一个数据库,通过区块链的形式组织储存。因此,从数据库的角度考虑,需要实现历史数据的保存,以及更改协议后,新产生的数据与历史数据的兼容性。
 
5)创建MW交易的机制。
适配MW协议后,必然会引起创建交易算法的改变,这一变动需要改写协议客户端程序。

(下):LBTC使用MW协议可能存在的问题讨论


1)半私密交易问题:
半私密交易即LBTC UTXO和MW UTXO的混合使用。即一个交易中,既有LBTC UTXO,也有MW UTXO。
 
由于现在LBTC的交易都不具有私密性,如LBCT支持MW协议,则有LBTC不保密交易向基于MW协议的私密交易转换的过程。上节内容描述过纯MW交易的验证过程。实现半私密交易中,把交易额写入交易核数据中,可实现普通交易向私密交易转换个过程。
 
2)系统性能问题:
该问题的本质是大家非常关心的交易处理速度和可扩展性(Scalability)的问题。
 
前文的描述可知,MW协议确实具有很好的私密性,但是这些私密性并非凭空而来的。想要实现比比特币更好的私密性,必须要在性能方面做出妥协,这是因为对交易的加密、对交易合法性验证的反向加密工作,都需要运行大量椭圆曲线和电子签名的加密算法运算。
 
这些运算最直接的后果就是导致出块耗费的时间变长,或者在出块时间固定的前提下快容量变少。这是一个很严肃的问题,事实上市场上其他加密币种,如ZCash就面临这一问题。ZCash因为使用了较为复杂、但私密性极强的零知识证明(zk-SNARKS)算法,因此每笔交易的数据量、区块容量和交易处理速度都是不如Na?ve-POW+UTXO算法的。可以说,在POW+UTXO中,安全性、速度与私密性也能形成一个不可能三角。
 
在LBTC中,由于采用了基于UTXO的DPOS,因此LBTC可以保证顺滑的出块体验,固化出块消耗的时间,使得出块具有很强的可预测性。这对于运行复杂功能,或者对于系统状态有严格时序要求的功能(例如智能合约)是大有帮助的。目前LBTC设置为固定3秒出块,如果一个块中包含的交易全部为私密交易,则很有可能造成出块不稳定的问题。
 
不过对于这一问题,我们提供一个潜在的解决方案,即限制一个块中法定的使用私密交易特性的交易数量。由此,私密交易可能作为一种可选特性使用,并希望防止用户滥用,最终保证代理人稳定出块、交易顺滑体验。
 
3)交易聚合问题:
前文讨论过交易聚合的优势。
第一,交易聚合后,把中间的输出去除,交易信息更加私密、难以追溯分析。
第二,交易聚合后,区块数据变小;一个直接的结果就是区块在P2P网络中同步更块。
 
但是,我们认为这种聚合只有在存在大量私密交易中才有比较高的实用意义。比特币大约每10分钟产生一个区块,因此一块中可能有上千笔交易,此时聚合交易可以大大增加私密性,同时减小交易占用块容量的大小。而LBTC可以保证稳定3秒出块,则一块中包含私密交易可能不会太多。因此,交易聚合在LBTC中的实用意义是大打折扣的。
 
我们的结论是,在技术实现中,可以根据交易聚合实际开发难度及效果,对是否需要聚合交易进行取舍。


LBTC开发者计划即将上线



lbtc开发文档:https://lbtc.gitbook.io/doc
加入开发者社群了解更多信息

-END-




闪电比特币(LBTC)是一个去中心化的全球价值互联网传输协议,具体应用包括点对点支付和交易平台等。任何接受LBTC协议的用户都可以几乎免费的使用LBTC来保证交易的实时性以及安全性。
实施了DPoS与链上治理制度的LBTC,使用户得以投票给对网络发展做出建设的议案,也能直接选出适合成为闪电记账节点的代理人(Delegates),使人人都能参与进LBTC生态中,从而解决PoW的中心化问题。


LBTC
联系我们
Website:

LBTC.io  /  LightningBitcoin.io

Twitter:
twitter.com/LightningBTC
Telegram:

t.me/LightningBTC
Telegram(中国社区):
t.me/LightningBTC_CN
Medium:
medium.com/lightning-bitcoin-blog
Instagram:
instagram.com/lightningbitcoin_official
Reddit:
https://www.reddit.com/r/LightningBTC/
闪电爱好者社区:
lbtcfans.com
LBTC论坛:
chat.lbtc.io
邮箱:
support@lightningbitcoin.io
加入微信社群:
  • 正序
  • 最新
帖子暂无回复,回帖抢沙发
登录 账号发表你的看法,还没有账号?立即免费 注册