AnySwap-MPCNode 更新方案
DEFI前线观察
2021-07-15
热度15857

AnySwap团队构建了定制的测试网100%重现错误并确认其已被修复。

问题描述

AnySwap-MPCNode分布式签署了两笔具有相同R值的交易,黑客据此反推出了MPC账户的私钥,并攻击了路由器V3流动性池。

详情:

https://mp.weixin.qq.com/s/V2XZKY26sz_FifHgsfkDDA

技术背景

AnySwap MPC网络使用基于GG20论文的ECDSA 门限签名。该协议是一种非交互式的高效协议,允许AnySwap MPC节点异步参与协议,而无需节点同时在线。该协议可分为预处理阶段和签名阶段,预处理阶段包含大部分计算和通信,签名阶段包含每个MPC节点执行计算以及广播通信。AnySwap MPC节点预处理生成一组R和其他参数用于加速分布式签名。

问题分析

我们构建了一个定制的测试网来100%重现此错误,发现根本原因是路由器V3使用的 MPCNode代码的新补丁导致了该错误。由于AnySwap V1/V2跨链桥使用的是原有版本,因此不存在这个问题。

详细信息:一个月前,AnySwap路由器V3部署了MPC节点的新版本代码,MPC节点重新启动,然后使用过的R数据被从数据库中重新加载到了内存中。使用过的R数据应该在签名之后被删除,但是删除失败了。新跨链交易签名使用了重复的R数据,由此导致了错误。

这是一个概率非常低的错误。它必须同时满足多种情况:不同的MPC节点从数据库中删除相同的R数据出错,并且所有节点重启后重新加载相同的R数据。

解决方案

添加了2个补丁来修复此错误。

1. 恢复f3cabbe提交以避免在重启MPC节点时加载重复的R数据。

https://github.com/anyswap/Anyswap-MPCNode/commit/a31a797adef810bc150d1ee9b2c2b2320501bc2c

2.签名前从数据库中删除R数据。

https://github.com/anyswap/Anyswap-MPCNode/commit/2e4df3c953ce242331ef49067a322782c284654f

这2个补丁已经在测试网上测试通过,解决了重复R数据签名导致私钥泄漏的问题。

 

本内容旨在传递行业动态,不构成投资建议或承诺。
为你推荐

商务合作:TG:@Lottie96