正文
2.环签名
Monero(门罗币)在保证交易的隐私性方面应用了一次性环签名(One-time Ring Signature)技术,具有不可链接(Unlinkability)和不可追踪(Untraceability)两大特性。
门罗币里,用户有两对主公私钥对,用于生成一系列的一次性密钥对。这些一次性密钥在交易时使用,且无法关联到主公私钥对。进行交易时,发送者需要使用一次性公私钥来计算唯一的key image,然后选择一个公钥集合来进行环签名。校验者可以验证签名的合法性,但无法知道签名者的公钥。在网络里,节点需要维护一张表,来记录每次使用过的key image,否则会出现双花问题。环签名可以有效提高匿名性的同时,无需任何第三方协作参与。但相比椭圆曲线签名,环签名的签名长度明显增大,生成签名和验证签名的复杂度也大大增加,这会给网络带来多余的负担。
3.零知识证明
ZCash采用了名为zk-SNARK的零知识证明技术,来保证交易的发送者、接受者和交易金额的机密性。在ZCash里,发送者通过向全网广播承诺(commitment)和废弃值(nullifier)来进行转账交易。zk-SNARK用于向网络证明承诺和废弃值的合法性,同时又不揭露发送者的身份。
zk-SNARK具有两个特点:简洁性(Succinct),即验证者只需要少量计算就可以完成验证;非交互性(Noninteractive),即证明者和验证者只需要交换少量的信息即可。zk-SNARK可以证明所有的多项式验证问题。它提供了一个系统化的方法,可以把任何验证程序转化成一个名为 Quadratic Span Program (QSP)的多项式验证问题。因此,任意复杂的验证问题都可以由zk-SNARK来证明。zk-SNARK的缺点在于计算验证数据时,需要一定的计算量。此外,zk-SNARK还有一个初始参数设置阶段,来生成一个“绝对机密”的随机信息。使用这些初始化的随机信息可以欺骗验证者,因此需要保证该过程的绝对机密与安全。
(二)数字账户安全
钱包私钥直接关系到账户安全,需要对钱包私钥进行妥善保护。可采用无密钥的密码算法(标准算法的白盒化方案或设计新型的白盒密码算法)和代码混淆技术,实现敌手无法提取核心密码算法和密钥信息;或采用基于口令、身份、生物特征等认证因子的加密算法对密钥进行加密存储;基于TEE(可信执行环境)、辅助硬件的技术方案也是保障数字账户安全的可选方案之一。
(三)密码算法的实现安全及升级机制
需确保区块链中密码算法的实现安全,并构建密码算法更新/升级时的安全机制。密码算法的实现安全包括软件实现的安全性及硬件实现的安全性,避免密码误用,有效抵抗旁路攻击。
三、
可扩展性与效率
可扩展性旨在分布式账本协议的基础上,对整体进行性能效率的提升、扩容或功能性上的扩充,可选方法包括:缩短区块的产生间隔、增加区块大小、采用双层链结构、引入闪电网络、在不影响安全性的前提下修剪区块中的数据等。
(一)闪电网络
闪电网络是比特币的链下扩容方案,旨在扩大比特币的交易规模和交易速度。闪电网络的基础是交易双方建立双向微支付通道。HTLC(Hashed Timelock Contract)定义了该双向微支付通道的基本工作方式。双方在转账时,转账人将一笔钱冻结,并提供一个哈希值。在一定的时间内,若有人可以给出哈希原像,就可以使用这笔钱。在这个基础上,两两各自建立链下微支付通道,最终可以扩大成一个链下支付网络。一旦链下网络达到一定的规模,用户找到一个通道数较多的节点后,便可连接到其他用户,从而完成链下交易。由于不需要上链,闪电网络中的交易是即时完成的,只有最终的清算才需要上链。
目前比特币和莱特币均已支持闪电网络。然而,在闪电网络方案中,链下网络的建立及路由协议还存在较大的不足之处,伊利诺伊大学香槟分校Andrew Miller等在2017年提出了一种新型的闪电网络协议,进一步优化提升了闪电网络在链下网络建立及路由方面的性能效率。
(二)采用双层链结构
Bitcoin-NG采用了双层链结构,其主要思想是:矿工解决哈希难题并由此创建的区块称为keyBlock,创建keyBlock的矿工在下一个keyBlock出现之前每隔一小段时间可以发布一个microBlock。系统的安全性和健壮性建立在keyBlock的PoW机制上,而系统的交易吞吐量则通过microBlock的频繁发布得以显著提高。
然而,在Bitcoin-NG中存在两个安全隐患:一是不能有效阻止自私挖矿,二是当某个矿工创建keyBlock之后,他可在短时间内发布大量的microBlock,从而引发系统大量分叉并最终对共识机制的收敛性造成很大影响,同时也大大加重了系统的通信负荷。
(三)MimbleWimble
MimbleWimble技术删除交易中所有已花费的输出,可以有效压缩区块数据的大小。MimbleWimble使用单向聚合签名(OWAS)对金额进行隐藏,其隐藏公式为,其中C是Pedersen commitment,G和H是与椭圆曲线加密函数(ECDSA)生成的无关的固定值,v是金额,而r是一个秘密的 random blinding key(随机盲密匙)。此后,需要通过range proof 证明输出在正常的取值范围内。用户不需要遍历整个区块链,只需要验证整个区块链的输入之和和未花费的输出之和是否相等,依次证明整条区块链是正确的。因此,用户可以删除所有已花费的输出,来有效压缩区块数据的大小。除此之外,MimbleWimble还提供一定的隐私和扩展性,但该方案无法支持复杂的比特币脚本。
四、
区块链/协议的安全分析与评估
在区块链(协议)的安全性分析与评估中,一方面,需要对已有的共识协议建立抽象理论模型,并基于该模型研究共识协议的安全性;另一方面,需要研究在不同攻击方法(或场景下)区块链的安全性,例如:分别在高同步性、高异步性网络条件下,基于合理的困难问题假设、攻击者的计算能力、攻击类型及方法等建立相应的统计分析模型,给出共识协议能有效抵抗相应攻击的安全界;需分析在激励机制失效下系统的安全性;需对系统中密码方案软硬件实现进行安全性分析等。
(一)自私挖矿
传统观点认为比特币是有激励相容机制的,即没有人可通过损害集体利益去实现自己利益的最大化。但自私挖矿(selfish mining)的提出证明了这种观点是不完全正确的。在矿工是追求最大化利益的理性者的条件下,只要矿池能控制全网超过1/3的算力,就可以发起自私挖矿攻击,获取更大的收益,并对网络安全造成威胁。
自私挖矿的分析是基于理性者条件的假设下,但现实中人往往不是完全理性的,且存在多方博弈,因此实现自私挖矿攻击还是存在一定的难度。
(二)分区攻击
在P2P网络里,只要控制一定数量的节点,就可以进行Eclipse Attack,从而发起51%攻击,控制整个网络。这是一种分区攻击。假设网络中只有3个节点在挖矿,其中两个分别拥有 30%的全网算力,剩余一个有40%全网算力。如果攻击者可以控制拥有40%算力的节点,则他可以隔离其他两个节点,使得他们无法达成共识。最终的结果是,攻击者所生成的链会经共识成为最终的区块链。因此在分区攻击下,攻击者不需要拥有超过一半的算力,就可以发起51% 攻击。发起这种攻击的前提条件是,被隔离节点链接到的所有节点都受攻击者控制。在网络规模不大的时候,这比较容易实现。
(三)大数据分析
区块数据在全网都是公开的,因此可以很容易地对它们进行分析。Kumar Amrit 等在2017年通过对Monero历史区块数据的分析,得到了如下结果:65%以上的input会产生级联影响,影响到22%的交易被追踪到;来自同一交易的output在下次交易时通常会聚合在一起;匿名集中最近发生的output很可能就是真实被花费的 output。
因此,尽管Monero具有良好的匿名特性,但通过数据分析,还是有超过半数的交易被追踪并分析出来。这说明了系统的参数选择和用户的使用习惯也会导致隐私暴露。
(四)共识协议的抽象理论模型的安全性分析