作者:Middle.X
感谢Ronnie@BoolNetwork、Aki@Darwinia参与本文内容的探讨,本文部分内容原载于《?PAKA跨链研究报告?》,点击查看完整报告。
在众多的跨链安全事故中,私钥泄露是其中一个重要类型。典型的案例是今年3月份AxieInfinity官方桥RoninBridge遭遇的情况和6月份Harmony官方桥HorizenBridge遭遇的情况,二者都因为跨链桥的验证人节点私钥泄露而导致重大损失。
由于验证人节点需要用程序来对跨链事件执行签名,这使得私钥不得不暴露在网络中,极易成为黑客攻击的目标。然而这样的问题,其实通过用TEE来管理节点私钥就可以很大程度上避免。TEE还能以多种方式被应用于跨链桥,能够在优化跨链桥的安全性和性能上都发挥积极作用。
TEE全称为可信执行环境,它对于我们的日常生活而言并不陌生,手机上的指纹验证就是在TEE中运行的。
TEE是在给定设备上运行的与主操作系统隔离的计算环境,就像一块飞地。这种隔离是通过硬件强制实现的。在TEE中运行程序的过程是隐蔽的,外界不可感知,这减少了TEE遭受黑客攻击的可能性。程序在TEE中运行完成后,输出的计算结果会被附上一个由设备生成的签名,该签名将被设备供应商远程验证,并生成远程验证证明。远程验证证明能够向外界证实该程序在TEE中被完整的执行,没有被篡改和干预。正因为如此,TEE可以运行具有高安全性要求的应用程序,例如加密密钥管理、生物特征认证、安全支付处理等。
我们将结合pNetwork、Avalanche、BoolNetwork、LCP的案例来说明TEE在跨链桥中的具体应用。
pNetwork
pNetwork是有ProvableThings团队开发的一个跨链桥,于2020年3月推出,是一座Wrap桥,Wrap资产被称为pTokens。
Wrap桥的基本模型是Lock-Mint和Burn-Unlock,pNetwork通过一个TEE节点组成的网络来负责验证源链上的Lock和Burn行为,并在目标链上执行Mint和Unlock。
任意拥有TEE设备的主体可以质押200$PNT,即可成为pNetwork的TEE节点。pNetwork中的TEE节点网络将负责对跨链消息进行共识签名。在初始化时,TEE节点集需要共同参与秘钥的计算,以生成公钥和私钥碎片,其中公钥只有一个,处于公开状态,私钥碎片则是在本地生成后,存入TEE中“密封”。即便是TEE节点的运行者也无法知道私钥碎片。
TEE节点除了需要运行Enclave内的程序,还需在Enclave外运行接入链的全节点,以便于Encalve内的轻节点查询区块头。
pTokens之旅
从Token到pToken的过程如下:
用户调用源链智能合约的Lock函数,发起Lock交易T,将Token存入源链托管地址,在交易备注字段中提供他们想要收款的目标链地址;
TEE节点监听到交易后,进一步获取交易T所在区块的区块头N的所有Lock交易,向Enclave中传入,同时也会将区块头N及这些Lock交易的默克尔路径传入;
Enclave中的轻节点程序首先验证区块头N,然后用区块头N验证所有Lock交易;
一旦通过验证,Enclave就会签名一批Mint交易,为所有目标地址Mint对应数量的pToken;
各Enclave相互进行加密通讯,以合成完整的签名,并提交这些Mint交易;
交易被广播到目标链,被目标链确认后,用户的目标地址就获得了pToken。
从pToken到Token的过程如下:
用户调用源链智能合约,发起Burn交易T,将pToken发送到销毁地址,备注字段中写明目标链上的收款地址;
TEE节点监听到交易后,进一步获取交易T所在区块的区块头N的所有Burn交易,向Enclave传入,同时也会将区块头N及这些Burn交易的默克尔路径传入;
Enclave中的轻节点程序首先验证区块头N,并用区块头N验证这些Burn交易;
一旦验证通过,Enclave就会签名一批Unlock交易,从托管地址中向所有目标地址转出对应数量的Token;
各Enclave相互进行加密通讯,以合成完整的签名,并提交这些Unlock交易;
交易被广播到目标链,被目标链确认后,用户的目标地址就获得了Token。
由于私钥在Enclave中保管,且验证和签名的过程也在Enclave中进行,恶意攻击者攻击网络在经济上和实践上都不方便。此外,pTokenNetwork还鼓励TEE节点采用不同厂商的设备,不同厂商的TEE设备的具体原理可能是不同的,多元化厂商的TEE节点将进一步提高攻击者的攻击难度,因为攻击者需要攻破多个厂商的TEE设备才有可能实施攻击。
因此,采用TEE节点组成的MPC网络,相比非TEE节点组成的MPC网络,增加了一层安全保护。此外,pNetwork选择将代码开源,开源代码明确了Encalve当中进行的每个过程,而远程证明中包含程序的哈希根,任何人都可以验证Enclave中执行的代码与pNetwork公开的代码的一致性,这是进一步的安全声明,因为排除了程序编写者作恶的可能性。
2021年10月,pNetworkV2发布,该版本将pNetwork拓展为了一座AMB桥。
pNetworkV2延续了V1的核心特性,依旧使用TEE节点组成的MPC网络来验证跨链消息,但V2版本将不局限于资产跨链相关的消息。
AvalancheBridge
AvalancheBridge(AB)是Avalanche的官方跨链桥,目前支持AvalancheC链与Ethereum之间的跨链资产传递。
与pNetwork相同,AvalancheBridge用TEE节点组成的MPC网络来验证跨链事件,AvalancheBridge的TEE节点被称为Warden。为了追求更低的费率和更快的速度,AvalancheBridge在设计上做了些许优化。
首先,为了加快验证效率,AvalancheBridge直接在TEE内运行全节点,并在Enclave内建立索引来查询交易,而不像pNetwork的TEE节点在Enclave外运行全节点,在Enclave内运行轻节点。当然,pNetwork现在支持9条链的资产传递,未来可能支持更多,如果这么做,Enclave的存储空间可能会构成挑战。
其次,AvalancheBridge使用普通地址,而非合约地址来托管锁定资产。这避免了一部分合约调用的费用。
初始化的时候,Warden之间相互加密通信,创建一个托管地址,并将私钥碎片密封在各自的Enclave中,该托管地址是一个0x开头的EOA地址,既可以用于以太坊,也可以用于AvalancheC链。
我们以ERC20资产的跨链为例,来阐述AvalancheBridge处理资产跨链的步骤:
Wrap:Ethereum->Avalanche
用户在以太坊上发起存款交易,将需要跨链的ERC20资产转入托管地址;
每个Warden监控该地址,以发现这笔存款交易;
Warden将交易传入Enclave,Enclave进行验证;
验证通过后,Warden会用各自的私钥碎片签署一笔Mint交易,并相互进行加密通讯以合成完整签名。
Warden向AvalancheC链提交Mint交易,使得托管地址调用Mint合约,为用户铸造Wrap资产(为了安全考虑,AvalancheBridge仅支持资产跨链至与发起地址相同的目标地址)。
Unwrap:Avalanche->Ethereum
用户在AvalancheC链上调用桥合约中的Burn函数,发起一笔销毁交易,将需要跨链的Wrapped资产发送到指定的销毁地址;
Warden监控到这笔交易后,将交易传入Enclave;
Enclave各自对这笔交易进行验证;
验证通过后,Enclave各自用自己的私钥碎片签名一笔Unlock交易,以将托管地址中对应数量的原生资产发送给用户的Ethereum地址;
Enclave相互进行加密通讯以合成完成签名,并将Unlock交易提交到Ethereum,交易被确认后,用户将在以太坊上收到托管地址的转账。
我们发现AvalancheBridge的资产跨链流程中,只有Mint交易和Burn交易需要调用合约,而Lock和Unlock交易只是普通的转账,不需要调用合约。这样的设计降低了Gas消耗,从而降低了用户端的跨链手续费。
无论是pNetwork和AvalancheBridge,都充分利用了TEE的特性,让私钥被外部攻击者窃取的可能性大幅降低。但我们要注意到,这依旧不能阻止TEE节点的内部串谋。
如果TEE节点之间合谋,可以试图合成私钥、替换Enclave里的程序,或者通过分叉源链制造虚假事件取Enclave的签名。
而我们下文要讲的BoolNetwork,则可以做到“外防攻击,内防串谋”。
BoolNetwork
BoolNetwork也是一个采用TEE节点网络作为外部验证者的跨链桥项目。BoolNetwork做了进一步的创新——增加了TEE节点的轮值机制和匿名机制。
BoolNetwork被设计为了一个任意消息跨链桥,支持任意第三方在其上构建跨链应用。BoolNetwork参考CosmosIBC,引入了Channel的概念,部署在不同链上的两个应用程序之间可以建立Channel,以实现二者之间消息的有序传递。每个Channel都会对应至少一个MPC委员会。该委员会在当前Epoch内负责对该Channel内的跨链消息进行共识签名。这个MPC委员会是轮值的,任期只有1个Epcoh,每个Epcoh都会重新选举。
BoolNetwork目前会为每个Channel分配两个委员会,互为备份,以提高服务可用性。
任何人都可以通过质押$BOL成为候选的TEE节点。每个Epoch开始前,BoolNetwork会通过RingVRF算法,为每个Channel选举MPC委员会。被选为MPC委员会成员的节点会获得一个用于通讯的临时身份,用于在共识签名过程中与同一委员会中的其他TEE节点通讯。当一个Epoch结束时,所有的临时身份都会失效,然后网络将重新进行节点选举,选出新的轮值MPC委员会,赋予他们新的临时身份。
尽管每个候选的TEE节点在注册的时候,需要提供永久身份信息,但节点在通讯时使用的临时身份并不会暴露永久身份信息。换句话说,节点在通讯时是相互匿名的。如果候选节点有100个,那么你只能知道与你通讯的节点是这100个当中的1个,而不知道具体是哪一个。
每个Channel的MPC委员会需要多少个TEE节点,签名的门限是多少,是由Channel创建人自定义的。常用的门限数值有15-of-21、13-of-19、5-of-9。
同一个Epoch内,不同Channel的MPC委员会成员可能会有重叠,也有可能有部分候选节点没有被选入任何一个委员会,而出现闲置的状态。这些情况都是正常的。
我们发现,BoolNetwork通过TEE、轮值机制、匿名机制的组合,构建了一个牢不可破的黑箱。由于签名程序运行在匿名节点的TEE中,而且它们之间的通讯内容是加密的,当处于工作状态时,TEE节点的运行者本人无从知晓自己被选入哪个Channel的MPC委员会,与哪些节点进行了共识通讯,签名了哪些消息,连“自知”都做不到,更谈不上“知人”。这基本上让节点串谋变的不可能。
从外部攻击者的角度,如果要攻击某个特定的Channel,攻击者无从知晓当前的MPC委员会背后是哪些设备、哪些主体,也无法从通讯中截获这些信息。无论是内部串谋,还是外部攻击,都只能选择攻破所有候选节点中的大多数,才有可能攻击成功,这无疑代价是巨大的。
BoolNetwork是一个仍在开发中的项目,还有些技术细节没有完全确定。
LCP
LCP的全称是LightClientProxy,是Datachain提出的一个将TEE用于跨链桥的新范式,本文撰写时,LCP尚处于概念阶段,没有代码实现。LCP与前述三者完全不同。pNetwork、AvalancheBridge、BoolNetwork的思路都是用TEE来管理私钥、验证消息、执行签名。LCP的思路则是用TEE来运行轻客户端。
LCP的思路或多或少借鉴了LayerZero,LayerZero用外部预言机网络来运行超轻客户端,但这个“超轻客户端”并不会像一个真正的链节点那样对新获取的区块头进行验证,而是通过预言机网络的节点们共识签名来确认区块头的有效性。LCP则希望在TEE内运行货真价实的轻客户端。
我们知道,轻客户端跨链桥是安全性最高的跨链桥技术类型,它通过在目标链上部署源链的轻客户端来使得目标链对源链的交易有验证能力。但其缺点非常显著:
链上的存储和计算资源紧张,链上的轻客户端在同步和验证区块头的过程中会消耗较多的Gas,这会使得链上轻客户端很昂贵,有些情况下甚至不具备经济可行性。尽管有一些方案,可以构建相对轻量级的链上轻客户端,但这些方案又会增加开发难度和代码复杂度。
将轻客户端放到链下执行可以有效解决上述问题,但我们需要链上对链下轻客户端的运行状态进行验证,这点可以通过TEE的远程证明实现。理论上,LCP仅需一个TEE节点,并不需要多个节点对交易的真实性进行共识确认。但为了保证可用性,安排一定的冗余还是有必要的。
当有交易T需要验证时:
交易T会首先被提交给TEE节点;
TEE节点将交易T、交易T所在区块高度N、交易T的默克尔路径传入Enclave
Enclave中的轻客户端运行更新程序,更新到的区块高度N,并用高度为N的区块头对交易T执行SPV验证。
Enclave在验证完成之后,通过远程认证,生成远程认证证明
TEE节点将交易T的验证结果及远程认证证明提交到目标链
目标链上的校验程序检查远程认证证明的有效性,确认程序的确是在TEE中运行的,以及运行的程序是正确的轻客户端程序。
需要辨明的是,尽管pNetwork的TEE节点也会在运行轻客户端,但该轻客户端在验证交易之后会触发本地私钥碎片对交易的签名,链上最终验证的是签名,而非TEE内运行的程序本身,因此pNetwork依旧属于外部验证的范畴。LCP则是向链上提交远程认证证明,这当中会包含程序哈希以供链上检查TEE中运行了正确的轻客户端程序,用「原生验证的扩展」来归类LCP会更为恰当。
在TEE中运行轻客户端,事情变的简单许多,轻客户端不再需要考虑如何节约存储和计算资源,不需要复杂的“瘦身”和“扩容”方案。但我们需要认识到,在TEE中运行轻客户端,始终要比在链上运行轻客户端的安全等级降低了一些。因为TEE并不是绝对安全,其技术防护手段有可能被攻破,且TEE设备的厂商也有微小的可能性作恶。不过这个问题可以通过TEE节点的冗余和设备厂商的多元化来弥合。
小结
以上我们讨论了TEE被应用于跨链桥的几种情况。
TEE在跨链桥中最直接的应用便是保管私钥,正如我们所列举的pNetwork、AvalancheBridge和BoolNetwork,在人们对跨链桥安全性忧心忡忡的当今此时,我们或许应该期待用TEE管理私钥成为多签类跨链桥的标配手段。对于防止TEE节点的串谋,BoolNetwork将节点匿名化的思路给了我们很好的启示,而LCP的方案,为轻客户端跨链桥提供了一个新的范式,它在基本保持轻客户端桥的理论安全度的前提下,提升了轻客户端桥的通用性和可扩展性。
跨链桥依旧在激烈的演化之中,TEE的运用只是其演化方向之一。我们还在观察其他的演化方向,我们对更加安全的跨链桥充满期待。
参考资料
https://hackmd.io/@phala/BJh_3bbQU
https://www.8btc.com/article/608236
https://ptokens.io/ptokens-rev5b.pdf
https://medium.com/pnetwork/introducing-pnetwork-v2-bfa7fcdcedb8
https://zhuanlan.zhihu.com/p/406818768
https://medium.com/avalancheavax/avalanche-bridge-secure-cross-chain-asset-transfers-using-intel-sgx-b04f5a4c7ad1
https://mp.weixin.qq.com/s/Hw-jW9YtyJjxtI-xo_ANUQ
https://twitter.com/TigerVCDAO/status/1588215376235462656
https://docs.lcp.network/
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。