本文讨论了传统冷存储方案在以太坊上面临的风险,并提出了一种更安全的替代方案:利用智能合约的可编程性来构建自保护的冷存储钱包。这种方法通过实施角色分离、时间锁和速率限制等多层安全控制,即使在多重签名密钥泄露的情况下,也能最大程度地减少资金损失。
你的交易所的冷存储的安全性取决于其最薄弱的假设。虽然该行业十多年来一直依赖比特币时代的、不可编程的冷存储解决方案,但这些方法从根本上低估了以太坊的能力。通过使用智能合约的可编程性,交易所可以构建即使在多重签名密钥泄露时也能保持安全的托管解决方案。
在EthCC[8]上,我们区块链工程总监Benjamin Samuels,提出了在以太坊上冷存储资金时,应更广泛地使用智能合约,以突破传统密钥管理的局限性。
传统冷存储基于一个危险的前提:如果你控制密钥,你就控制资金。这会产生灾难性的单点故障:
即使是复杂的多重签名设置也存在同样的基本弱点:它们都是非此即彼的安全模型。一旦攻击者获得了达到阈值的密钥,再多的操作安全也无法阻止资金的完全损失。
以太坊实现了一种根本不同的方法。我们可以不只依赖密钥安全,还可以对钱包进行编程,以在协议级别强制执行安全策略。核心设计原则应该是功能约束:不要使用通用的钱包合约,而是使用专门构建的合约,只执行特定的、预定义的操作。这是一个例子:
// 不要:通用执行允许任意操作。许多多重签名解决方案的合约中都有这样的函数。不要在那里存储资金。
function execute(address target, bytes calldata data) external onlyMultiSig {
(bool success,) = target.call(data);
require(success, "Execution failed");
}
// 应该:具有内置安全策略的约束函数
function transferToHotWallet(
address hotWallet,
address token,
uint256 amount
) external
onlyOpsMultisig
onlyWhitelistedReceivers(hotWallet)
rateLimited(token, amount)
afterTimelock
{
IERC20(token).safeTransfer(hotWallet, amount);
...
}
图 1:一个非理想的多重签名执行函数的示例,以及一个应用一系列安全策略的函数
通过阻止钱包合约盲目地执行多重签名的任何请求,我们可以将安全控制和策略应用于多重签名的操作,从而提高系统的纵深防御和整体安全态势。
为了保护你的冷存储基础设施,拥有多层安全控制非常重要,这也称为纵深防御。我们在使你的智能合约超越私钥风险更加成熟中更详细地讨论了其中几种策略。
实施两个具有严格分离权限的独立多重签名:
配置多重签名
操作多重签名
这种分离确保即使其中一个多重签名完全泄露,也无法绕过安全策略。
所有关键操作都应强制执行强制延迟。以下是这些时间锁定操作的模型。这为事件响应团队提供了一个关键窗口,以检测和阻止恶意交易。
图 2:时间锁和角色分离为智能合约创建纵深防御
实施适合你的交易所风险承受能力、资金偿还能力以及从冷存储中转移资金的预期利用频率的速率限制。
在实践中使用的一个很好的速率限制器示例是 Chainlink 的 CCIP RateLimiter.sol
。这种基于桶的速率限制器以指定速率缓慢地填充每个Token的“桶”,直到桶满为止。当容量被消耗时,它会从桶的余额中扣除。这种方法允许有效的速率限制,并能够在短时间内消耗大量容量(直到桶限制)的能力。
你需要确保你的交易所拥有应急响应计划和监控基础设施,这些设施可以检测并使你的团队能够响应涉及冷钱包基础设施的事件。在正常的多重签名设置中,一旦恶意交易在链上执行,事件响应团队就无法最大限度地减少损失。
冷存储钱包应使用时间锁机制,监控基础设施可以使用该机制来协调链上活动与预期的冷钱包活动,并在检测到差异时触发事件响应。
使用时间锁还可以使事件响应团队在恶意交易执行之前取消它们,从而完全消除任何损失。
假设你的系统受到攻击:攻击者破坏了一个或两个多重签名,或者他们发现并利用了你智能合约中的漏洞。以下是对于传统多重签名与设计良好、策略强制执行的钱包的损害情况。
攻击场景 | 传统多重签名的损害 | 策略强制执行钱包的损害 |
---|---|---|
操作多重签名被破坏 | 资金完全损失 | 仅限于每日速率限制和允许列表中的地址。如果恶意交易被时间锁守护者取消,则可能没有影响。 |
配置多重签名被破坏 | 资金完全损失 | 只能添加、删除或修改速率限制配置。如果未破坏允许列表中的地址,则无法窃取资金。如果恶意交易被时间锁守护者取消,则可能没有影响。 |
两个密钥都被破坏 | 资金完全损失 | 最大损失受时间锁和速率限制的限制。如果恶意交易被时间锁守护者取消,则可能没有影响。 |
智能合约漏洞 | 不适用 | 取决于漏洞的严重程度;可以使用简单、经过良好测试的合约来降低漏洞的风险。 |
如表所示,在多重签名被破坏或漏洞利用后,使用实施上述纵深防御措施的自保护钱包会导致货币损失大大减少。
要实施此方法,请执行以下操作:
审计你当前的架构:绘制所有可能的资金移动路径。尽可能使用策略约束它们。
设计你的约束:定义适当的允许列表、速率限制和时间锁。
实施监控:构建系统来检测和响应时间锁事件。
测试事件响应:在需要之前练习紧急程序。
获得审计:让安全专家审查你的实施。
通过利用以太坊的可编程性,交易所可以构建能够抵抗密钥泄露的冷存储系统。关键的见解很简单:不要只保护你的密钥;对你的钱包进行编程以保护它自己。
这些模式并不是什么新鲜事物。事实上,它们已经在生产中使用了多年,由领先的 DeFi 协议管理着数十亿的 TVL。现在是中心化交易所采用 DeFi 开创的安全创新的时候了。
非此即彼的密钥安全时代已经结束。构建能够优雅失败、限制损害并为你的安全团队提供响应时间的系统。你用户的资金取决于它。
有关智能合约安全性和托管解决方案的更多信息:
- 原文链接: blog.trailofbits.com/202...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!