随着大部分 DeFi 项目逐渐开始从以太坊走向多链布署,用户在各条链之间转移资产变成了一种刚需。而跨链的资产转移从资产所有权这个技术维度上可以分为:托管型 Custodial Service 和去中心化型 Decentralization (或者叫非托管型 Non-custodial)两个大类。由此应运而生了众多提供给用户进行资产链间转移的「桥」。很有意思的一个现象是继前几个月的 DeFi 协议频繁被黑客盯上之后,由于这些跨链「桥」上同样储存了大量的资产,其逐渐成为了黑客攻击的一个热点。近期我们就留意到业界几次针对跨链桥的攻击。如链闻报道的一则 新闻,跨链桥被⿊造成了协议和用户价值数百万美元等值的损失。 一般来说,黑客都会选择去中心化型的跨链桥作为目标,因为托管型的桥属中心化方式控制资产,被攻破的难度较大;而去中心化的跨链桥,由于涉及比较精细的密码学设计和计算机代码的工程实现,往往容易在某处生产漏洞从而被黑客抓住利用进行攻击。 本文将介绍分析用户一般了解较少的跨链桥的核心:多方安全计算中的核心-随机数「k」和由 k 推导出的 R 值的过程,科普一下这些攻击事件到底是如何发生的以及一座可靠的去中心化跨链桥应该是怎么实现。以飨读者。 据链闻《账户私钥被破解?拆解 Anyswap 跨链桥被⿊细节》揭露,此次安全事故是由于链上出现了两笔具有相同 R 值数字签名的交易,黑客通过两个签名值计算出了 Anyswap 跨链桥 MPC 控制的账户的私钥,进而盗走了其中的资产。那么私钥究竟是如何通过签名计算得到的呢?有什么办法去防范这一安全漏洞的产生呢? 首先我们要了解一下这个 R 值是什么。 「R」值——账户安全的阿卡琉斯之踵众所周知,区块链账户的权限是通过数字签名实现的,即用户用私钥对交易数据签名来完成账户资产的转移。目前区块链中广泛使用的数字签名算法是 ECDSA,它属于「非确定性」一类的数字签名算法,即同一数据会有多个合法的签名,这是由于 ECDSA 在每次签名过程中都会引入随机数 k,而 R 值就是通过 k 计算得到的。这就等于说:要想破解出来私钥,必须要获得同样的 R 值;获得同样的 R 值,就等同于随机数 k 值暴露了或者发生碰撞(即两个签名具有相同的 R)。所以随机数 k 的重要性等同于私钥。 假设有两笔交易的签名过程使用了相同的随机数 k,那么两个签名值的 R 是相同的。不妨设两个签名为 (R, s1) 和 (R, s2),那么根据 ECDSA 的算法过程有以下代表这两笔交易的两个等式: (责任编辑:admin) |