53 个版本 (35 个主要版本变更)
37.0.0 | 2024 年 7 月 18 日 |
---|---|
36.0.0 | 2024 年 7 月 12 日 |
35.0.0 | 2024 年 6 月 24 日 |
34.0.0 | 2024 年 5 月 23 日 |
2.0.0-alpha.5 | 2020 年 3 月 24 日 |
#1388 in 魔法豆
每月下载量 4,552 次
用于 12 个crate(4 个直接使用)
2MB
38K SLoC
恢复托盘
概述
恢复托盘是一种 M-of-N 社会恢复工具,允许用户在私钥或其他认证机制丢失时访问其账户。通过该托盘,用户能够代表另一个账户进行调用,该账户已被恢复。恢复过程由原始账户所有者选择的受信任“朋友”保护。需要 N 个朋友中的 M 个朋友才能授予另一个账户访问恢复账户的权限。
恢复配置
每个可恢复账户的恢复过程都可以由账户所有者配置。他们可以选择
friends
- 账户所有者信任并委托以保护其账户恢复过程的朋友列表。threshold
- 需要批准账户恢复过程的朋友数量,以成功恢复账户。delay_period
- 在账户可以成功恢复之前,需要经过的、从恢复过程开始的最小块数。
所有用户都需要支付一笔可配置的押金来创建恢复配置。这笔押金由基本押金和所选朋友数量的乘数组成。当账户所有者移除其恢复配置时,这笔押金将全额退还。
恢复生命周期
成功的恢复预期生命周期遵循以下步骤
- 账户所有者调用
create_recovery
为其账户设置恢复配置。 - 在某个时间之后,账户所有者失去了对其账户的访问权限并希望恢复它。很可能会创建一个新账户,并用足够的余额支持交易费用和恢复过程的押金。
- 使用这个新账户,他们调用
initiate_recovery
。 - 然后账户所有者会联系他们配置的朋友来为恢复尝试作证。账户所有者会提供他们的旧账户 ID 和新账户 ID,而朋友则会使用这些参数调用
vouch_recovery
。 - 一旦达到一定数量的朋友为恢复尝试作证,账户所有者需要等待延迟期过去,从他们开始恢复过程时开始计时。
- 现在账户所有者可以调用
claim_recovery
,随后允许他们调用as_recovered
并直接代表丢失的账户进行操作。 - 使用现在已经恢复的账户,账户所有者可以在他们开启的恢复过程中调用
close_recovery
,收回他们放置的恢复押金。 - 然后账户所有者应该调用
remove_recovery
来移除恢复账户上的恢复配置并收回他们放置的恢复配置押金。 - 使用
as_recovered
,账户所有者能够调用任何其他包以清理其状态并收回任何预留或锁定的资金。然后他们可以将所有资金从恢复的账户转移到新账户。 - 当恢复的账户成为被收割的(即其可用和预留余额降至零)时,最终的恢复链接将被移除。
恶意恢复尝试
初始化可恢复账户的恢复过程是开放和无需许可的。然而,恢复押金是一种经济威慑,应该阻止潜在的攻击者试图恶意恢复账户。
恢复押金始终可以由试图恢复的账户收回。在恶意恢复尝试的情况下,仍然可以访问其账户的账户所有者可以收回押金,并实质上惩罚恶意用户。
此外,恶意恢复尝试只有在攻击者也能获得足够的朋友为恢复尝试作证的情况下才能成功。在账户所有者阻止恶意恢复过程的情况下,此包使得重新配置恢复设置和移除/替换不当行为的朋友的成本几乎为零。
安全注意事项
需要注意的是,这是一个功能强大的包,如果使用不当可能会损害账户的安全性。此包用户的一些推荐做法包括
- 为您的恢复过程配置一个重要的
delay_period
:只要您有权访问您的可恢复账户,您只需要每隔delay_period
区块检查一次区块链,以确保没有恢复尝试针对您的账户成功。使用链下通知系统可以帮助解决这个问题,但最终,设置一个大的delay_period
意味着即使是技术最娴熟的攻击者也需要等待这么长时间才能访问您的账户。 - 使用高的批准阈值:将阈值的值设置为1意味着您的任何朋友都可以恢复您的账户。他们只需要启动恢复过程并批准自己的过程。同样,2个朋友的阈值意味着任何两个朋友可以合作获取对您的账户的访问权限。防止这类攻击的唯一方法就是选择一个高的批准阈值,并选择一个多样化的朋友群体,他们不能合理地相互协调。
- 随着时间的推移重置您的配置:由于创建恢复配置的整个存款都返还给用户,更新您的恢复配置的唯一成本是调用的事务费用。因此,强烈建议根据您的生活变化以及您与新旧朋友的关系变化,定期更新您的恢复配置。
界面
可调用的函数
针对普通用户
create_recovery
- 为您的账户创建恢复配置并使其可恢复。initiate_recovery
- 为可恢复账户启动恢复过程。
针对可恢复账户的朋友
vouch_recovery
- 作为可恢复账户的friend
,为账户上的恢复尝试担保。
成功恢复账户的用户
claim_recovery
- 声明访问您已成功完成恢复过程的账户。as_recovered
- 以已恢复的账户发送交易。请参阅以下其他函数。
针对可恢复账户
close_recovery
- 关闭您的账户的活跃恢复过程并收回恢复存款。remove_recovery
- 从账户中删除恢复配置,使其不可恢复。
针对超级用户
set_recovered
- ROOT 原点能够跳过恢复过程并直接允许一个账户访问另一个账户。
许可协议:Apache-2.0
依赖项
~17–32MB
~537K SLoC