区块链中常用的跨链技术
区块链所面临的诸多问题中,区块链之间互操作性极大程度的限制了区块链的应用空间。不论是公有链还是联盟链,跨链技术就是实现价值互联网的关键,是区块链向外拓展和连接的桥梁。目前主流的跨链技术包括:
公证人机制(Notary schemes)
侧链/中继链(Sidechains/relays)
哈希锁定(Hash-locking)
分布式私钥控制(Distributed private key control)
跨链交互根据所跨越的区块链底层技术平台的不同可以分为同构链跨链和异构链跨链。同构链之间安全机制、共识算法、网络拓扑、区块生成验证逻辑都一致,它们之间的跨链交互相对简单。而异构链的跨链交互相对复杂,如Bitcoin采用PoW算法而Fabric采用传统确定性共识算法,其区块的组成形式和确定性保证机制均有很大不同,直接跨链交互机制不易设计。异构链之间的跨链交互一般需要第三方辅助服务辅助跨链交互。
跨链要达到安全可信必然对跨链机制、步骤等有一些要求,其中最重要的是跨链事务的原子性。对于普通的链内交易来说,交易需要支持原子性——交易如果失败则需要回滚。而跨链的交易也是如此,其失败时要回滚涉及本次交易两条或多条链的交易。
目前公链中最有名的跨链项目有Cosmos和Polkadot,两者采用的都是基于中继链的多链多层架构。联盟链中开源的跨链平台有WeCross和BitXHub,WeCross采用中继链 + 哈希时间锁定 + 两阶段提交技术,BitXHub采用中继链 + 跨链网关技术,由此可见,侧链/中继链技术将会是未来跨链技术的主力。
1 公证人机制
公证人机制是一种简单的跨链机制,在数字货币交易所中使用广泛,它和现实世界很类似。假设A和B是不能进行互相信任的,那就引入A和B都能够共同信任的第三方充当公证人作为中介。区块链中这个第三方它可以一个双方可信中心化机构,也可以是一群节点。它不仅进行数据收集,还进行交易确认和验证。
1.1 单签公证人
单签公证人也叫中心化公证人机制,通常由单一指定的独立节点或者机构充当,它同时承担了数据收集、交易确认、验证的任务。公证人在该交易过程中充当交易确认者和冲突仲裁者的角色,是用中心化机构替代了技术上的信用保障,这种模式虽然交易处理速度快,兼容性强,技术架构简单,但中心节点的安全性也成为系统稳定的关键瓶颈。
最传统的公证人机制是基于中心化交易所的跨链资产交换,这种跨链的方式比较单一,只支持资产的交换,如下图演示了Alice通过交易所,用比特币和Bob交换ETH的过程。
1.2 多签公证人
多重签名公证人机制,由多位公证人在各自账本上共同签名达成共识后才能完成跨链交易。多重签名公证人的每一个节点都拥有自己的一个密钥,只有当达到一定的公证人签名数量或比例时,跨链交易才能被确认。
公证人是一群机构组成的联盟,跨链资金的转移是这个联盟所控制的。这种方式相较于单签名模式的安全性更高,少数几个公证人被攻击或者是作恶都不会影响系统的正常运行。但是需要两条链本身需要支持多重签名。
1.3 分布式签名公证人
分布式签名公证人机制和多重签名公证人机制最大的区别在于签名方式不同,它采用了多方计算MPC(Multi-Party Computation)的思想,安全性更高,实现也更复杂。基于密码学生成系统中唯一的密钥,并拆分(公证人组中谁都不会拥有完整的密钥)成多个碎片分发给随机抽取的公证人,即使所有公证人将碎片拼凑在一起也无法得知完整的密钥,允许一定比例的公证人共同签名后即可拼凑出完整的密钥,从而完成更加去中心化的“数据收集验证”过程,类似门限签名机制。
分布式签名公证人机制全面地保障了密钥的安全性,这种方法更灵活,也更安全,当少数节点遭受攻击时或发生各种错误时,并不会影响整个系统。
2 侧链/中继链
2.1 侧链的概念
侧链用来指代与主区块链并行的那条区块链。来自主区块链的entries可以向侧链连接,也可以被侧链连接;这样一来,侧链就可以独立于主区块链进行操作。这个说法包含三个要点:
侧链是相对的。不能单纯的说某条链B是侧链,而必须说这条链B是链A的侧链。主链不需要知道侧链的存在,侧链
侧链与主链是独立的。链B可以有自己的功能,它自己运行时不需要链A的支持。如果B链发生运行故障或被中心化控制,不会直接影响到A链本身的运行,但可以间接影响,比如B链被控制后,A链还依旧与之交互。
侧链与主链可以连接互通,即跨链。当要实现跨链的功能时才需要B链和A链进行互通。因为侧链的互通机制是其最主要的功能,所以常常将侧链与主链的互通叫做侧链技术。
2.2 侧链的作用
从主链角度讲,侧链可以虚拟化地横向和纵向提升主链的性能。
横向,将多个侧链与主链互通,将大部分交易放到侧链上,然后再通过与主链互通实现,可以虚拟地提升主链的TPS。
纵向,侧链可以有主链不具有的功能,通过侧链,主链看上去也像是支持了这些功能。
从全局角度讲,侧链作为跨链技术的一种,自然是为万链互联做出了重要贡献。
任何一条链,既有主链的功能,又有侧链的功能,这就像计算机网络中任何计算机既是主机又是路由器。
只有特定的几条链作为主链,其他所有链都只支持侧链功能,就和现在的计算机网络类似,有网络核心部分(单纯的路由器),也有网络的边缘部分(单纯的主机)。
2.3 侧链的技术
侧链实现是通过双向锚定技术。将暂时的数字货币在主链中锁定,同时将等价的数字资产在侧链中释放。实现双向锚定的最大难点在于协议改造需兼容现有主链,也就是不能对现有主链的工作造成影响。其具体实现方式有:单一托管模式、联盟模式、SPV模式、驱动链模式、混合模式。
单一托管模式就是类似交易所做中介完成锁币放币,其实和联盟模式即公证人模式,由多个公证人的多重签名来对转移资产的交易进行签名,避免了中心化。
SPV模式是通过将交易发给本链的一个特殊地址,由此会自动创建一个SPV证明给侧链上并发起一个交易在侧链上解锁对应的资产。
驱动链模式是用矿工来作为资金托管方,将资产的监管权发放到数字资产矿工手上,矿工进行投票决定何时解锁资产及将资产发送到何方。
混合模式就是将这些侧链机制进行有效结合,对结构不同的链,为其使用最适合其结构的模式,如主链使用SPV,侧链使用驱动链。
SPV模式是使用得最多的。SPV就是简单支付验证(Simplified Payment Verification),其能验证交易是否存在。侧链的机制相对哈希锁定而言能够提供更多的跨链交互场景,侧链以及类SPV验证的思想适合所有跨链的场景。
2.4 中继链
中继链就是“中间人”的角色,如果在链A和链B之间存在第三方链C,C是A和B的中继,通常称C为中继链。中继链是公证人机制和侧链机制的融合和扩展,并不需要严格区分中继和侧链,从形式看中继是一种方式,侧链是一种结果。侧链表达的是两条链之间的关系,并不是特指某种跨链技术或方案。
目前社区内最活跃的两个跨链项目Cosmos和Polkadot采用的都是基于中继链的多链多层架构,其中Cosmos目前支持的是跨链资产交互,而Polkadot则宣称提供任意类型的跨链交互。Cosmos和Polkadot的跨链机制相对复杂,后续单独写文章介绍。
3 哈希锁定
哈希锁定是一项可用于区块链网络之间资产交换的技术。在资产交换过程中,为了保证各个区块链的资产安全,资产转移要么全部完成,要么全部没有完成,不存在任何中间状态。微众银行开源的WeCross跨链平台中的哈希时间锁定合约基于哈希算法和超时机制,HTLC并不依赖可信的协调者,特别适合区块链资产交换的场景。
哈希时间锁定合约的处理流程基于哈希算法和超时机制,假设有两个区块链A和B,试图交换位于链A的资产α和位于链B的资产β,则整个哈希时间锁定的流程如下:
A首先选取一个秘密随机数S,使用特定的哈希算法计算出S的哈希值H,之后A将H发给B,同时A和B协商两个时间点T0和T1,确保T0 >T1。
A基于H和T0创建资产锁定智能合约 LockContractA,该智能合约会锁定资产α,其可以使用S来解锁并将资产α转移给B,如果在T0前仍未解锁,则会自动撤销锁定,且不会发生任何资产转移。
B基于H和T1创建资产锁定智能合约 LockContractB,该智能合约会锁定资产β,其可以使用S来解锁并将资产β转移给A,如果在T1前仍未解锁,则会自动撤销锁定,且不会发生任何资产转移。
A 使用秘密随机数S,调用B上的智能合约 LockContractB,将资产β转移给A 。经过上 述步骤,B获得了秘密随机数S,B使用S调用A上的智能合约LockContractA,将资产α 转移给B,资产交换完成。
如果A或B任意一方超时未执行操作,则在T1时间点后,B资产会撤销锁定,T0时间点后,A资产会撤销锁定,还原初始状态。
T0和T1用于避免A或B单方延误交易,所以这其中的交易包α和交易包β都需要设定时间限制,超出这个时间限制后,相关资产立即撤销锁定,原路返回。
4 分布式私钥控制
分布式私钥控制其实就是多方计算和门限密钥共享机制的技术。其主要作用是将中继链账户的私钥分为冗余的多份,然后分发给验证人,可以防止某个验证人在在跨链资产交换的解锁锁定阶段的单方作恶,因为只有多个验证人集合起来才拥有私钥。深入了解分布式私钥控制可以参考Fusion项目和Wanchain项目的白皮书。
4.1 案例分析
举例说明交易流程:
A账户和B账户同时向分布式密钥网络系统(FUSION、Wanchain等)发出跨链申请。
系统生成账户C产生对应的公钥和私钥,公钥就是C的地址。其中将私钥分为N份,然后分发给N个分布式网络中参与者,参与者每人掌握一部分私钥。
系统将C的地址发送给A。
A账户在比特币链中实现交易A—>C(1BTC),交易在一段时间的等待期后被收集写进区块链中。并在后续有连续的多个区块确认。
系统检查账户C中的金额是否是B账户所要求的金额,验证通过后即达成对A的锁定。
系统再生成账户D产生对应的公钥和私钥,公钥就是D的地址。同样的将私钥分为N份,分发给N个分布式网络中参与者,每人掌握一部分私钥。
系统将D的地址发送给B
在以太坊中B->D(10ETH),同样的要等待多个确认。
此时,系统开始检查账户D中的金额是否是A账户所要求的金额。验证通过后,即达成了对B的锁定。
系统将分布式系统中D账户的私钥收集起来,可能达到K个私钥就可以恢复出这个完整的私钥了(k < N),将私钥交给A,A就有了在以太坊链上的10ETH使用权。同样的,系统将分布式系统中C账户的私钥收集起来,可能达到K个私钥就可以恢复出这个完整的私钥了(k < N),将私钥交给B,B就有了在比特币链上的1BTC使用权。
4.2 问题分析
为什么将密钥交给这个系统是可信任的?
采用分布式的密钥分发,类似于分布式签名公证人机制,很好的完成了去中心化的过程。
设计怎样保证跨链交易的原子性?
如果在中途发现所要求的转入账户的金额不对,那么系统会收集私钥将资金转回该账户,并终止整个交易过程。
为什么要等单链上的交易最终确定后才开始验证?
因为不确定交易的话可能造成双花问题。
为什么只要求k个碎片就可以解锁,而不是要求拼凑出完成的密钥才能解锁?
防止分布式系统中的恶意节点被分配到碎片后不交出来
Reference
《WeCross白皮书》
《跨链的简要研究:从原理到技术》
《跨链技术-分布式秘钥机制》