隐私问题是密码货币产生的一个根本原因,区块链隐私技术的演进是怎样的呢?
要点速览
1.区块链的出现首次从技术上解决了基于信任的中心化模型带来的安全问题,它基于密码学算法保证了价值的安全转移,基于散列链及时间戳机制保证了数据的可追溯、不可篡改特性,基于共识算法保证了节点间区块数据的一致性。
2.零知识证明主要是指证明者能够在不向验证者提供任何有用信息的情况下,使验证者相信某个论断是正确的。
近日,用维通信CEO谭伟 、隐私区块链践行者飞鼠哥做客「火星财经创始学习群」,做了主题为“隐私进化论—从DASH 到DERO”的分享。
谭伟认为,隐私保护成为了制约区块链应用发展的瓶颈之一,如何在不牺牲区块链人人可验证、公开透明等特性的前提下,使参与方的隐私数据受到保护,成为当前区块链研究领域的的主要科学问题。
飞鼠哥提到,对于交易金额的隐藏(讨论基于UTXO模型),我们不仅要隐藏交易金额,而且要支持交易集合的同态运算.,所以通常的做法是通过同态隐藏的方法,业界比较成熟的两种同态隐藏方法为: zkSNARKs的双线性映射和结合Pedersen承诺的rangeproofs。
以下为谭伟、飞鼠哥分享内容,由火星财经(ID:hxcj24h)整理:
刘昌用:
今天有幸请到神秘嘉宾为我们分享神秘话题,隐私问题是密码货币产生的一个根本原因,一直也有争议,今天主要从技术层面讨论一下区块链隐私技术的演进,并且只是一个部分,做个引子。有请谭总和神秘嘉宾飞鼠。
谭伟:
我和飞鼠哥是以前做安全时候的老同事。我们公司以前主要是做一些数通产品的开发,比如ISP 用的防火墙、路由器、DPI行为分析、TCP(单、双边)加速系统,海量日志分析系统,超大规模的APN 网关 ,234G 、WiFi定位系统技术等等。
我在,2013年开始接触比特币,2016年全面切入区块链开发,初期进入这个行业是有人希望优化CUDA 下挖ETH 的效率,小改了一下,发现效益可观,于是全身心切入区块链,刚好也赶上了去年的牛市,现在工作重点主要是用传统做数通安全产品的经验对区块链进行一些优化,主要针对两个方面做优化:
第一,解决跨境网络环境下的因为高丢包高、高延时造成的区块同步慢、网络难以收敛的问题,可以理解为优化TPS。如果解决了跨境环境下的高延时、搞丢包的问题,类似BCH 这种究竟是32M 还是128M 的问题根本就不是问题。
第二,因为一直做数通和安全,本身对安全和隐私比较敏感,所以很早就关注了bytecoin 、XMR 、ZEC 、XZC 、dero 等强调匿名隐私的项目。这次专门和大家交流一下专注隐私匿名的数字资产项目的匿名技术。
区块链的出现首次从技术上解决了基于信任的中心化模型带来的安全问题,它基于密码学算法保证了价值的安全转移,基于散列链及时间戳机制保证了数据的可追溯、不可篡改特性,基于共识算法保证了节点间区块数据的一致性。
但是区块链的公开透明也给用户的隐私保护带来了巨大的挑战。区块链参与方维护一个共同的账本,皆可查看并且验证其他参与方的交易数据,这就给参与方的隐私泄露开了一道大门。(这一段话是借鉴网上的,我自己文采没这么好)所以说用BTC 做XX 都是笑话。
因此,隐私保护成为了制约区块链应用发展的瓶颈之一。如何在不牺牲区块链人人可验证、公开透明等特性的前提下,使参与方的隐私数据受到保护,成为当前区块链研究领域的的主要科学问题。
传统银行要查他人的交易记录还是需要职能部门以及一些其他手段,而区块链则是无需任何门槛。常见匿名技术分两大技类:1.混淆技术,2.隐藏技术。
混淆技术:混淆侧重于在公开透明的账本上,混淆交易路径。分离交易中的输入输出地址,使得交易更难追踪,比如BTC 之前很多混币公司就做类似业务。
下面从技术上列举。相当于一次性收款地址,隐藏接受者身份,这个地址是用接收者公钥计算出来,接收者可以通过私钥计算出相应的私钥。把交易路径混淆掉,可以中心化或去中心化。中心化类似交易所,发送者的代币转到中心地址后,之后再重新划拨出去。去中心化则是将多笔交易组合成一笔交易发出去,类似比特币的多个地址。
CoinJoin:
这是Dash主要应用,由Gregory Maxwell开发的,达世币的Mixer主节点资金池进行混币,多笔交易混在一起,拥有多个输入输出,以此来切断直接的交易路径。因为将交易输入和输出关联起来比较困难。
Ring signature环签名:
主要是门罗币的应用,使用私钥及其他人的公钥生成一个签名,当其他人想要验证时,利用环成员公钥验证一个环签名是否由某个可能的签名人生成,但无法确定具体的公钥,拥有untraceability(不可追踪性)。
从混币公司开始,第一个在链上做混币且相对成功的就是DASH 币,可是DASH 在技术演进上最近2年基本没什么进展。
下面一种分类就是隐藏类技术:隐藏技术对机密信息(发送者、接收者及交易数额)进行隐藏,直接改造账本的全公开逻辑,但在加密状态下,让公共区块链仍然可以验证交易有效性。
Gregory Maxwell 就是BTC core的核心开发者。这个涉及改造账本,改动较大,真正成功的项目不多。
Stealth adresses:
一次性地址,可以隐藏接收者身份,拥有unlinkability,这在门罗币里面是一个系统级别的强制设计。
Ring Confidential Transaction:
隐藏交易数量,只要向节点证明:交易金额为正;进出总金额为0;这也是门罗币的特色。
Kovri:
门罗币通过Kovri项目,被动网络监控无法揭示用户是否在使用门罗币。这是通过加密门罗币的流量并通过I2P(隐匿互联网项目)节点来实现的。这些节点只是简单地传递消息。不知道传递的消息的内容,也不知道节点是最终目的地或者最终目的地的中转路线。Kovri项目通过保护用户免受区块链外部的审查,极大地提高了门罗币网络的安全性。
这种解决数据在传输过程中被监听的方法,很对币都做了类似改进。DERO 这块略又区别,它是采用节点间采用SSL 链接解决这个问题。
DERO 这个项目大家一定会觉得陌生,这是一个纯技术社区推动的币,因为它对开发路线和开发效率的认同,我所以今天就用它做一些对比,一些社区已经开始用DERO 和XMR 做比较。
零知识证明ZKP: Zcash的经典代表之处,允许双方(证明者与验证者)来证明某个提议是真是的,而且无需泄露除了它是真实之外的任何信息。无需了解原始信息,即可验证交易真实性,根本上推翻了公开发送人、接收人、交易金额的做法,完美解决隐私泄露的风险。
这个是今天重点要讲的东东:零知识算法及其运用。隐私链主要有下面几个典型代表(热门的),根据先后顺序排序。
DASH系统集成Darksend,实现混币。现在来看,DASH的混币匿名性不够,但是他开开创了主节点这一举措,解决了区块收敛的问题,同时利用主节点实现了即时支付,并实现了一定的社区自治。
DASH的秒大和BCH 的零确认又相似的地方,本质都是UTXO和交易的锁定。
DAHS我觉得是BTC 进化路线上一个重要参考和测试。
XMR通过CryptoNote(隐藏交易地址)+ ringct (隐藏交易金额) 全匿名支付 (供应可查) 计算轻量,交易体积巨大(13-20K)。
XMR就是来源于bytecoin 。XMR 以隐私和去中心化为目标,发扬光大了CryptoNote协议。
XMR以隐私为己任,加入了RINGCT 后,交易体积非常巨大。
这是2017年XMR 的单笔交易体积,都是10 多K ,是BTC 交易的几十倍大小。当然XMR 最近通过升级到防弹,交易体积大幅降低。
ZEC大零币最大的问题是需要可信设置。第二就是匿名支付的证明需要很大的计算,所以ZEC 网络里面大部分都不是匿名支付。
30S运算+3G 内存运行空间的需要造成ZEC不能在APP 终端运行。
ZCOIN和ZEC一样也采用zkSNARKs,但是它做了一定的优化,每次做匿名支付需要的运算大幅度减少,它也是可选匿名支付,只是在需要匿名的时候才匿名,单笔匿名交易体积在25K 左右,可以理解为ZCOIN是ZEC 的一个优化实现。
下面就讲一下DERO:说到DERO 肯定就会想到XMR ,XMR 最近最大的升级就是改POW 算法,以及实现 Bulletproofs(防弹协议)。
比较厉害的是在XMR 还没推出 Bulletproofs 之前,DERO 就在主网上实现了 Bulletproofs 协议,且计算量极其小(40MRAM+0.5毫秒级计算),交易体积较小(2K 左右)。而且最近很多币,比如ETH 都BTC 都提到了Bulletproofs。
Bulletproofs验证方面感觉又一统天下之势。Bulletproofs 到底是什么呢?Bulletproofs最初发布于斯坦福大学的2017年白皮书中,由密码学家Benedict Bunz和Jonathan Bootle提出,目前代码贡献主要是来自伦敦大学及Blocksteam。从概念上讲,Bulletproofs可以被认为是一种更有效的零知识证明(Zero Knowledge Proof)形式。
Bulletproofs设计精妙,创建了一种更简短、更快和更强大的非交互式零知识证明。bulletproofs通过将信息聚合到新的数据结构中,使其以对数而不是线性的方式进行扩展——这意味着对于包含多个输出的大交易,扩展性变得更加显著。直接点讲就有多个输出的这种交易,Bulletproofs可以把交易体积大幅减少。
Bulletproofs技术本身并不会有助于匿名或隐私本身。Bulletproofs技术只是确保机密交易中存储的信息不包含任何虚假信息。但Bulletproofs革命性地带来了一种比其他区块链隐私方法更快,更灵活,更强大的替代方案。
之前我为什么很推荐DERO了,DERO这里做了一个很好的创新。它采用区块链的方式排序DAG,配合客户端过滤,无惧51%攻击和双花,因为纯DAG 都中心化的,否则都解决不了双花。
下面我们在请飞鼠哥给大家详细讲一下零知识证明的具体算法和更多运用。
飞鼠哥:我主要讲讲零知识证明的算法实现和隐私交易里的应用。
零知识证明是什么?
零知识证明是20世纪80年代初由计算机科学家Goldwasser和Micali等人共同提出的一项技术,它主要是指证明者能够在不向验证者提供任何有用信息的情况下,使验证者相信某个论断是正确的。
举个经典例子,如下图所示: 假设P向V证明其拥有打开秘密门的咒语, 但是又不想泄漏咒语. V站在门外, 随机要求P从A方向进去, 从B方向出来, 或者从B方向进去,从A方向出来.,那么经过N轮后, P每次都能走出来, 就证明P拥有秘密门的咒语。
上面例子里可以总结出挑战——应答模型, 即P会随着V的随机挑战作出正确的应答,我们称该模型为交互式零知识证明。
下面我们讲讲零知识证明的算法实现。我们都知道Elgamal加密算法是基于大整数离散对数问题(DLOG),即在多项式时间内计算DLOG是困难的。我们基于这个构造一个交互式的零知识证明算法:我们假设P拥有公私钥对(x, Y), 其中Y=g^x (次方), 如何证明自己拥有该公钥Y的私钥?
1. P (Prover)选择随机的整数t, 计算R=g^t mod p (t次幂模运算)。 发送R(我们称之为承诺)给V(verifier)。
2. V得到承诺R后,发送随机挑战u给P。
3. P 计算w (w=t-ux mod q), 发送响应w给V。
4. V验证R=g^w·Y^u mod p是否相等。 如果相等,则证明P拥有Y的私钥x。
这是交互式零知识证明,网络开销很大,需要进行3次交互。 后来,Fiat-Shamir Heuristic提出了非交互零知识证明(NIZK), 把拥有计算能力的证明变成了一个凭证。也就是说,P只要生成一个凭证,V通过该凭证即可验证P是否有这个能力。
形如这样,NIZK变成了一个二元组(R, w)的凭证。由于u=H(Y || R)是通过Hash算法实现,因此,是抗量子攻击的。
下面举个大家都熟悉的Schnorr签名, 这个签名也是具有零知识证明特性。
其实除了上面几个零知识证明实现, 我们还有很多其他方案, 比如DLOG的平行证明等。我们不仅仅可以构造身份证明、消息证明, 我们还可以构造某些特定需求的协议, 如去中心化游戏等。
基于零知识证明的隐私交易
隐私交易包括交易接收者地址的隐私和交易金额的隐藏。对于交易接收者地址的隐私可以参考cryptenote方法, 其通过发送者随机数和接收者公钥生成的一次地址,具体通过DH算法实现。(这个不属于零知识证明范畴,下次有机会可以讨论这个实现细节。)
对于交易金额的隐藏(讨论基于UTXO模型),我们不仅要隐藏交易金额,而且要支持交易集合的同态运算. 所以,通常我们的做法是通过同态隐藏的方法,业界比较成熟的两种同态隐藏方法为: zkSNARKs的双线性映射和结合Pedersen承诺的rangeproofs。
2.1 zkSNARKs
双线性映射满足: e([x]·G, [y]·G)=e(G, G)xy. 因此,我们有e(A, [x]·G) = e(B, G), 其中B=[x]·A.
zkSNARKs通过随机数s和随机系数a对于多项式进行线性隐藏(指数运算).
最初的zkSNAKs基于bn256曲线实现,生成速度慢,占用内存高,zcash团队后来发现使用jubjub椭圆曲线进行优化, 证明时间减少了80%,内存使用量减少了98%,这是开放移动支持Zcash隐私地址的关键要求。
2.2 rangeproofs
我们知道Pederson承诺形式为: com(m, r) = [m]·G + [r]·H.
其中, m为交易金额, r为盲化因子. H为椭圆曲线上另一个点. 我们可以通过G的哈希得到: H = HashToG(SHA256(Encode(G))).
椭圆曲线加法群具有加法同态特性, E([a]·G+[b]·H) = a·E(G) + b·E(H). 同样基于该曲线的Pederson承诺也具体加法同态特性.
即com(m1, r1) + com(m2, r2) = com(m1+m2, r1+r2).
对输入和输出的金额我们可以先通过Pedersen承诺做同态隐藏, 然后做交易集合的输入和输出的零和验证.
如下图, 我们的输入金额为A和B, 输出金额为C和D. 我们得到:
com(A, r1) + com(B, r2) = com(C, r3) + com(D, r4)
其中满足 [r1]·H + [r2]·H = [r3]·H + [r4]·H.