跳到主要内容

其他延伸技术

零知识证明、zk-SNARK

莎菲·戈德瓦塞尔、西尔维奥·米卡利和查尔斯·拉考夫在1985年的论文《交互证明系统的知识复杂性》a中首次提出了零知识证明,它是一种特殊的交互式证明,意为证明者可以向验证者证明自己知道X的值,但不需要向验证者透露除了“自己知道X的值”外的任何信息。

zk-SNARK意为零知识、简洁、非交互的知识论证,是零知识证明的一种,使证明者能够简洁地使任何验证者相信其给定论断有效,并且实现计算零知识,不显示验证内容,不需要证明者与验证者之间进行交互。zk-SNARK可以在加密货币网络中让矿工知道一笔交易是有效的,但不知道这笔交易的发起者、接收者以及转账金额等隐私信息。

为应用zkSNARKs技术,以Zcash为例,首先需要将交易验证函数转换为称为“算术电路”的基本逻辑操作,即由加减乘除这些基本算术构成的操作,接着通过头号排名约束系统(Rank 1 Constraint System,R1CS),检测算术门(如加法门、乘法门等)计算的正确性。在R1CS表示中,验证者需要检查许多约束,Zcash采用了二次型算术程序(Quadratic Arithmetic Program,QAP)的电路表示方法,使得单个约束需要检测的是多项式而非数字。尽管多项式可能很庞大,但一旦多项式间的一致性不保持,在多个点也不可能保持。因此,只需要检查两个多项式是否在一个随机选择的点匹配,就可以很高的概率验证证明。zkSNARKs使用了同态加密和椭圆曲线配对的数学工具,使得证明者难以提前知道验证者选择的检测点。实际上,上述数学工具的使用,使得无论证明者还是验证者都不能知道检测点的精确值。同时对原始多项式的随机移位,使得无论证明者既保持其输入值的保密性,也满足多项式一致性的验证。

跨链技术

跨链技术(Inter-Blockchain Technology),在区块链所面临的诸多问题中,区块链之间互通性极大程度的限制了区块链的应用空间。不论对于公有链还是私有链来看,跨链技术就是实现价值互联网的关键,它是把区块链从分散的孤岛中拯救出来的良药,是区块链向外拓展和连接的桥梁。

主流的跨链技术包括:

1、公证人机制(Notary schemes);

2、侧链/中继(Sidechains/relays);

3、哈希锁定(Hash-locking);

4、分布式私钥控制(Distributed private key control)。

早期跨链技术包括以瑞波和BTC Relay为代表,它们更多关注的是资产转移;现有跨链技术以Polkadot和Cosmos为代表更多关注的是跨链基础设施;新出现的FUSION实现了多币种智能合约,是一种很有应用价值的公有链,在其上可以产生丰富的的跨链金融应用。

预言机

多重签名验证

在2012年,“比特币核心开发者”加文·安德烈森往比特币协议中引入了一类新的比特币地址,名为“pay to script hash,P2SH。”它的目的是让一方“注资实现仲裁形式的交易,无论这交易的复杂程度如何”。23各方使用多重认证签名或秘钥而不是单一的私钥去完成一个交易。社区通常将这个多重签名特性简写为“miltisig”。 在多重签名交易中,各方就以下两个问题达成共识:生成了多少把钥匙(N),以及需要多少把钥匙(M)才能完成一个交易。这就叫M/N签名计划(安全协议)。想象一个带锁的箱子,你需要多把物理钥匙才能打开。通过这个特性,鲍勃和艾丽斯可以事先委托一个中立的、利益无关的第三方仲裁者帮助他们完成交易。这三方中的每一方都会持有1/3个私钥,要访问转账后的资金就需要有任意两个私钥的签名。艾丽斯会将她的比特币发送到一个公开地址。这时,这些资金可以被任何人查看,不过没人可以访问。当鲍勃看到这些资金已经被发送过来了,他就履行自己的合约义务。若验收的时候艾丽斯认为鲍勃的商品或服务是无法令人满意的,而且她感觉受到欺骗了,这时她可以拒绝给鲍勃提供第二把钥匙。这两方将会求助于仲裁者(第三把钥匙的持有者),以帮助他们解决争议。仲裁者只在争议发生后进行干预,在任何情况下他们自己都无法接触到这些资金,因为这是一个由智能合约实现的机制。 若要远程签订合约甚至是自动化签订合约,你需要在一定程度上信任系统会根据协议实现你的权利。如果你不能相信另一方,你就必需相信争议解决机制以及(或)其后的法律体系。多重签名技术使得那些刻意保持公正的第三方能在匿名交易中引入安全性和信任。 多重签名技术越来越流行了。一个名为Hedgy的初创公司正使用多重签名技术创建期货合约:各方就一个将来交易的比特币价格达成共识,只交换其差价。Hedgy从来不持有抵押品。各方在执行日之前将抵押品放置到一个多重签名的钱包中。Hedgy的目标是将多重签名作为智能合约(完全自执行,验证透明化)使用的基础。24可以将区块链视为是在匿名性和开放性之间的辩证产物,而多重签名能够平衡这两个方面的需求。

群签名”在1991年提出,其基本思想是一群人中的任何一个人可生成一群签名,外界可验证其合法性,即此签名的确为此群中的某人生成,但不能确定到底是他们当中哪一位签的(隐私保护),在发生争议的情况下,可由一拥有特权的群管理员“打开”争议的签名找出真正的签名者(可追踪)。 2001年,“环签名”提出。环签名可以被视为一种特殊的群签名。与已有的群签名相比,环签名是完全匿名的,且成员在生成群签名时可自由地选择其他成员构成群。环签名没有可信中心,没有群的建立过程,对于验证者来说签名者是完全匿名的。环签名的这种无条件匿名性在对信息需要长期保护的一些特殊环境中非常有用。例如,即使底层困难问题被攻破也必须保护匿名性的场合。 1982年提出的“盲签名”具有盲性这一特点,可以有效保护所签署消息的具体内容,所以在电子商务和电子选举等领域有着广泛的应用。盲签名允许消息者先将消息盲化,而后让签名者对盲化的消息进行签名,最后消息拥有者对签字除去盲因子,得到签名者关于原消息的签名。对于盲签名算法,消息的内容对签名者是不可见的,而且在签名被接受者公开后,签名者不能追踪签名。 在数字签名过程中,有时需要多个用户对同一消息进行签名和验证。能够实现多个用户对同一消息进行签名的数字签名称为多重数字签名。 根据签名过程的不同,多重数字签名方案可分为两类:一类为有序多重数字签名方案,另一类为广播多重数字签名方案。两类方案都包含消息发送者、消息签名者和签名验证者,在广播签名方案中还包括签名收集者。 在有序多重数字签名方案中,由消息发送者规定消息签名顺序,然后将消息发送到第一个签名者。除了第一个签名者外,每一位签名者收到签名消息后,首先验证上一签名的有效性。如果签名有效,继续签名,然后将签名消息发送到下一个签名者;如果签名无效,拒绝对消息签名,终止整个签名。当签名验证者收到签名消息后,验证签名的有效性,如果有效,多重签名有效,否则多重签名无效。 在广播多重数字签名中,消息发送者同时将消息发送给每一位签名者进行签名,然后签名者将签名消息发送到签名收集者,由收集者对签名消息进行整理并发送给签名验证者,签名验证者验证多重签名的有效性。

区块链隐私保护既需掩盖交易细节,又需验证交易的正确性。区块链目前的隐私保护方案包括混币、环签名、同态加密、零知识证明等方式。 (1)混币 混币通过割裂输入地址和输出地址之间的关系实现匿名。如果在一个多人参与的交易中,包括大量输入和输出,试图在输入和输出中找出每个人的对应对并非一件容易的事情,于是,输入与输出之间的联系被事实上割裂。Mixcoin协议试图打乱支付账号和收款账号之间的关系,从而提高比特币及类似系统的匿名性。CoinJoin技术是一种混淆比特币交易数据中用户敏感信息关联性的比特币交易压缩方法。一个CoinJoin交易是指:多个用户同意一个单独的交易,这项交易有多项相同大小的输出。交易中每一个输入的签名对每个用户是独立的,用户可以通过协商允许多个输入和多个输出的交易,然后每个用户独立分散地签名,最后将签名合并允许交易。这样,一个普通的区块链观察人员无法分辨输出和用户的对应关系。达世币则通过建立Darksend节点,将多笔交易拼凑成一笔交易一起执行,以打断发送地址和接收地址之间的联系,实现数字货币交易模糊化。 (2)环签名 环签名是一类简化的类群签名。环中一个成员利用他的私钥和其他成员的公钥进行签名,但却不需要征得其他成员的允许,而验证者只知道签名来自这个环,但不知道谁是真正的签名者。环签名可以解决对签名者的匿名问题,允许一个成员代表一组人进行签名而不泄漏签名者的信息。比特币是最早引入环签名和隐身地址的加密货币。暗网币则在比特币基础之上进行开发和创新的。暗网币的环签名是块链上的混币服务。这种混币具有相同金额的输入,并且使用了多个别人的公钥,只知道是从这一群人中的一个发送的,但无法判断是哪一个,也无法通过金额分析来判断输入输出对。门罗币应用了环签名,用发送者的私钥和多个无关者的公钥加密交易数据,再用所有人的公钥解密数据,以此隐藏交易的发送者。 (3)同态加密 同态加密是一种无须对加密数据进行提前解密就可以执行计算的方法。通过在区块链上使用同态加密技术存储数据可以达到一种完美的平衡,不会对区块链属性造成任何重大的改变。也就是说,区块链仍旧是公有区块链,但区块链上的数据将会被加密。 4)零知识证明 零知识证明支持在无须泄漏数据本身的情况下证明某些数据运算,允许验证者可以验证证明而不需要证明,无须泄漏除了“它是真实的”之外的任何信息。零币是一种去中心化的混币技术,把一定数量如1个比特币转化为零币,采用零知识证明技术花费零币或转化为其他零币,使得在零币之中的交易不可追踪。Zcash应用了zkSNARKs零知识证明实现方案,可在无须泄漏交易数据、无任何额外信息的前提下,向验证者证明某个交易是正确的。Zcash实现了交易关联性和转账金额的隐藏,在无须泄漏交易数据的前提下,完成交易的确认和验证。通过扩展Zcash,可以实现具有隐私保护的智能合约,可支持任意交易的隐私保护。同态加密基于同态映射保证了先运算后加密和先加密后运算的结果相同,从而可基于加密数据实现交易验证。

DAG(Directed acyclic graph),有向无环图

是计算机领域一个常用的数据结构。因为独特的拓扑结构所带来的一些特性,它经常被用到处理动态规划、导航中寻求最短路径、数据压缩等场景中。 第一次提出DAG跟区块链结合是在Nxt社区,可以发现DAG最初出现就是为了解决区块链的效率问题。比特币的效率一直比较低,基于PoW共识下的出块机制是一个原因,由于链式的存储结构,整个网络中同时只能有一条链,导致出块无法并发执行。社区有人提出用DAG的拓扑结构来存储区块,这个时候更多还是类似侧链的解决思路,不同的链条存储不同类型的交易,降低出现“双花”的可能,在之后某个节点需要合并的时候,几个分支再归并到一个区块。 通过以上设想我们可以改变区块的链式存储结构,变成区块DAG。在区块打包时间不变的情况下,网络中可以并行地打包n个区块,网络中的交易就可以容纳n倍。 这时候DAG跟区块链的结合还是停留在侧链的思路,不同类型的交易可以并行在不同的链条进行,达到提升性能的目的。这时候的DAG还是有区块的概念。 但是区块的概念其实也是妨碍我们提升效率的关键因素。那么,可不可以没有区块的概念呢?为什么一定需要区块呢?能否让每一笔交易直接参与维护全网的交易顺序?这样交易被发起后直接跳过打包区块的阶段,直接融入全网,如此达到所谓的“无区块”(blockless)效果。这样确实连打包交易出块的时间都省去了,DAG最初跟区块链的结合就是为了解决效率问题,现在不用打包确认,交易发起后直接进入确认网络,理论上效率自然提高很多。 自此,以blockless独树一帜的DAG区块链雏形基本形成。其中IOTA和Byteball在市场上的表现最为耀眼。

布隆过滤器(Bloom Filter)

于1970年由Burton Howard Bloom在论文《Space/Time Trade-offs in Hash Coding with Allowable Errors》中提出。布隆过滤器是一种基于Hash的高效查找结构,能够快速(常数时间内)回答“某个元素是否在一个集合内”的问题。 布隆过滤器因为其高效性大量应用于网络和安全领域,例如信息检索(BigTable和HBase)、垃圾邮件规则、注册管理等。 1.基于Hash的快速查找 在布隆过滤器之前,先来看基于Hash的快速查找算法。在前面的讲解中我们提到,Hash可以将任意内容映射到一个固定长度的字符串,而且不同内容映射到相同串的概率很低。因此,这就构成了一个很好的“内容→索引”的生成关系。 试想,如果给定一个内容和存储数组,通过构造Hash函数,让映射后的Hash值总不超过数组的大小,则可以实现快速的基于内容的查找。例如,内容“hello world”的Hash值如果是“100”,则存放到数组的第100个单元上去。如果需要快速查找任意内容,如“hello world”字符串是否在存储系统中,只需要将其在常数时间内计算Hash值,并用Hash值查看系统中对应元素即可。该系统“完美地”实现了常数时间内的查找。 然而,令人遗憾的是,当映射后的值限制在一定范围(如总数组的大小)内时,会发现Hash冲突的概率会变高,而且范围越小,冲突概率越大。很多时候,存储系统的大小又不能无限扩展,这就造成算法效率的下降。为了提高空间利用率,后来人们基于Hash算法的思想设计出了布隆过滤器结构。 2.更高效的布隆过滤器 布隆过滤器采用了多个Hash函数来提高空间利用率。对同一个给定输入来说,多个Hash函数计算出多个