显示软件包…
1 个稳定版本
2.0.0 | 2021年4月4日 |
---|
#121 在 #tetcoin
32 每月下载
用于 8 个软件包(通过 node-runtime)
1MB
24K 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的阈值意味着任何2个朋友可以一起工作以获取对您的账户的访问权限。防止这类攻击的唯一方法是将批准阈值设置得高,并从不会合理协调的多元化朋友群体中选择。
- 随着时间的推移重置您的配置:由于创建恢复配置的全部存款都会返还给用户,更新恢复配置的唯一成本是调用的事务费用。因此,强烈建议定期更新您的恢复配置,因为您的生活发生变化,以及您与新旧朋友的关系也发生变化。
界面
可调用的函数
对于普通用户
create_recovery
- 为您的账户创建恢复配置并使其可恢复。initiate_recovery
- 为可恢复账户启动恢复过程。
对于可恢复账户的朋友
vouch_recovery
- 作为可恢复账户的friend
,为该账户的恢复尝试提供担保。
对于成功恢复账户的用户
claim_recovery
- 声明对已完成恢复过程的账户的访问权限。as_recovered
- 以已恢复的账户发送交易。请参阅下面的其他功能。
对于可恢复账户
close_recovery
- 关闭您账户的活动恢复过程并收回恢复押金。remove_recovery
- 从账户中删除恢复配置,使其不可恢复。
对于超级用户
set_recovered
- 根起源可以跳过恢复过程并直接允许一个账户访问另一个账户。
许可证:Apache-2.0
依赖关系
~3–12MB
~137K SLoC