昨日,知名黄金爱好者兼加密货币怀疑者 Peter Schiff 在 Twitter 上声称自己的钱包丢失了密码,因此无法访问自己的比特币。
Schiff 在推特上公布自己的损失后,加密货币社区很快展开了讨论,例如 Morgan Creek Digital 联合创始人兼合伙人 Anthony Pompliano 就提问他是否自己忘记了密码,而 Schiff 对此的回答却是:「是我的钱包忘记了密码。」 看不下去的 Pompliano 只好耐心解释道:
不过根据 Schiff 的回答,他的比特币基本已无望找回了,他提到说:
看到这里,读者可能觉得这是一个非常悲伤的故事,一位加密货币怀疑者好不容易尝试了比特币,结果却因为自己忘记了密码而丢失了它们。而倘若他在多处备份好私钥,那么即使他忘记了钱包密码,也可以通过私钥访问自己的钱包。 当然,也有人会认为这是一个深刻的教训,它提醒我们要开发相关的技术,为类似的人群提供安全保障。 比如以太坊联合创始人 vitalik 就评论称:
那 V 神所说的社交恢复提案具体是指什么呢? 下面我们就来简单了解一下吧。 EIP 2429:秘密多重签名恢复
摘要 一般来说,加密货币的一个糟糕体验是私钥丢失或暴露,这可能导致不可逆转的情况。 社交恢复被视为账户合约去中心化恢复的一种选择,然而社交恢复的使用,带来了人的因素,而人的因素通常是安全系统脆弱性的主要原因。 社交恢复的主要风险是: 合谋:如果一些用户知道他们是某个恢复的一部分,他们可能会对恢复攻击的执行感兴趣;目标攻击:外部代理可能了解恢复的所有者,并瞄准执行恢复攻击所需最薄弱的点;一般暴露:攻击者如果设法感染大型用户基础环境依赖项,并获得对多个身份的访问权限,也可能通过恢复对未受影响的用户产生副作用;模拟攻击:针对性攻击可以了解用户的情况,并将该用户模拟到其社交对等方以执行恢复攻击。这变得更加令人关注,因为 AI 研究能够「深度伪造」其他人的声音和面部动作。尽管还没有完美的解决方案来解决所有这些问题,但我们的目标是实现「信任最小化」控制者合约,并为用户可能使用的不同钱包启用互操作性。 据悉,该标准提出了一种定义存储在 Melkle 树中的地址列表方法,这些地址连同它们的权重和用户的个人秘密,将组成一个秘密集,而该秘密集可以在不直接危及用户的情况下公开,因为它仍然需要对地址列表中的总阈值进行人工验证。 该秘密集可以保存,例如存储在 web2 云存储当中,而不会严重影响安全性,这对于一些不信任自己,但也不希望信任某些特定实体的用户而言是非常有用的。 用户秘密永远不会在链中显示,显示的只是一个 nonce 哈希,每次恢复时它都会增加。恢复设置获取此哈希秘密 nonce 的哈希值的哈希值(hash of a hash),这种双哈希方法被用于数学证明请求恢复的人知道该秘密,而不会泄露它。 根据提案,用户可通过提供秘密(user_secret_data)以及加权地址列表(address_list)来配置恢复。 user_secret_data 可以是用户可猜测的半私有信息。而 user_secret_type 是可选的随机大整数,并将其与 address_list 一起导出为 private_hash 。 地址列表的总权重必须大于阈值,而阈值是一个常数:THRESHOLD = 100 * 10^18。 而标准定义了生成可预测用户秘密的几种方法。 当生物识别(biometrics,例如指纹、面部和瞳孔)技术可用时,应该使用它们,这是最简单的方法。 而当没有生物识别技术时,一组通常只有用户知道的诸多问题的标准表单,可被用于生成用户的秘密数据。所有可选的默认字段有:Full Name (全名)、Birth Date (生日)、Mother Name (母亲名字)、Mother Birthdate (母亲生日)、Nationality (国籍)、First Love's Name (初恋者姓名)、First Pet's Name (第一只宠物名)、Childhood Nickname (童年昵称)。 而密码派生方法,则类似于详细表单方法,但它只要求用户输入一些内容:Full Name (全名)和 Password (密码)。 地址列表 用户将定义监护人账户列表,该列表通过用户的联系人列表进行填充。导入选项和输入一个地址应该是很方便的,如图所示: 选择好监护人后,系统将提示用户定义每个监护人的权重: 这些地址存储在一个标准的 merkle 树当中,但是每个子叶必须与 hash_to_peer 进行哈希运算。 merkle_root 被哈希为一个标准 merkle 树,它由 keccak256(bytes32(hash_to_peer), uint256(weight), boolean(is_ens), bytes32(ethereum_address)) 格式的 address_list 子叶组成。 方案支持了 ENS 域名,当监护人拥有一个 ENS 域名时,应该使用 ENS 域名。根据 EIP-137,如果使用了 ENS 域名,则 is_ens 必须为「true」。 列表中的地址可以是账户合约,如果是账户合约,则可以直接调用审批功能,也可以提供 EIP-1271 签名。而如果是外部拥有帐户,则应用 ecrecover 逻辑,但它们也可以直接调用 approve 函数。 weight 设置此地址值相对于 THRESHOLD 常量的批准程度。 用户秘密数据哈希 对于多个用户而言,recovery_contract 可能是相同的,这是用户正在使用的共享秘密多重签名合约地址;2.user_secret_data 是用户数据的纯格式字节数据,它从不暴露,也不会被保存。当 private_hash 是未知时,应向用户进行请求; 3.private_hash 是 keccak256(user_secret_data),它从不暴露,可以用秘密集导出。这可以在所有恢复中重复使用; 4.merkle_root 是通过对普通 merkle 树进行哈希运算得到的,它在执行时会被揭露; 5.weight_multipler 定义要达到 THRESHOLD 需要乘以多少个单独权重; 6.hash_to_execute 是 keccak256(private_hash, address(recovery_contract), recovery_contract.nonce(user_address)),它仅在执行时公开,每次恢复都是唯一的,也被称为「显示哈希」。Nonce 和恢复合约地址被用于允许重用 private_hash; 7.hash_to_peer 是 keccak256 (hash_to_execute),它在恢复授权请求时会公开,其被用于通过揭露 public_hash 种子来证明用户知道 hash_to_execute 和 merkle_root,这也被称为「部分泄漏哈希」; 8.public_hash 是 keccak256 (hash_to_peer,merkle_root,weight_multiplier),它自配置后就是公开的,只能使用一次,这也用于防止执行的重放。执行成功后,必须使用 setup(bytes32,uint256) 进行重配置; 恢复秘密集 URL 恢复所需的所有信息都将存储在 url 类型标准中: recovery = erc831_part account_contract [ "@" chain_id ] "/" recovery_contract "/" private_hash | secret_type "/" address_list / weight_multipler [ "?" parameters ] [ "#" notes ] erc831_part = "ethereum:recovery-" account_contract = ADDRESS chain_id = 1*DIGIT recovery_contract = ADDRESS private_hash = "0x" 64*HEXDIG secret_type = UINT address_list = ethereum_address *( ";" ethereum_address ) weight_multipler = UINT ethereum_address = ADDRESS / ENS_NAME "*" weight weight = UINT ADDRESS = "0x" 40*HEXDIG parameters = parameter *( "&" parameter ) parameter = key "=" value key = STRING value = STRING notes = STRING 1.account_contract 是指要进行恢复的账户合约,可以使用任何账户合约,因为恢复合约可以执行到任何接口或地址(如常规多重签名); 恢复程序 当需要恢复时,用户需要将其 Recovery Secret Set URL (恢复密钥集 URL)加载到支持此标准的电子钱包中。根据配置的不同,当 private_hash (私有哈希)不可用时,必须从对用户构成挑战的 user_secret_data 处生成。 加载有效的密钥集时,它将提示哪些用户请求帮助。一些钱包或许能自动发送请求,而另一些钱包则允许用户共享这个 Help Recover Request URL (帮助恢复请求 URL)。 该 EIP 鼓励尽可能使用预签名的消息 EIP-191,这一点很重要,因为 gas 成本是一个常见的障碍。如果监护人选择的地址是帐户合约,则必须是 EIP-1271 才能使用预签名信息。建议的正常顺序如下: 在特殊情况下,如果账户合约无法签署信息,或者用户的钱包无法按照这个 EIP 上指定的格式签署信息,则也可以通过使用 msg.sender 的方法执行常规操作。 在这种情况下,监护人将不得不支付一小部分 gas 费用。 理论基础 user_secret_data 从不公开,在用 keccak256 算法进行哈希运算一次后,它就成为从不公开的 private_hash。理论上,应该使用生物特征技术,因为用户不太可能丢失他们的生物特征。而生物特征通常是不安全的,因为它们并不是真正的秘密,任何高分辨率相机实际上都可以读取大多数生物特征,而且这些信息通常也为政府所知。 当生物特征不可用时,用户数据表单仍然提供相当好的安全性,因为合约中存储的哈希是离源数据非常远的加盐(salted )哈希,即使只有名字被用作 user_secret_data,也是很难发现的。这些数据越不可预测,就越能抵御目标攻击,而目标攻击仍需要发现用户列表并接收足够的授权。 在成功执行之后,需要重新配置以实现安全性保障。在经历一次恢复后,恢复合约必须禁用自身,并等待新的配置。 可能存在的攻击 需要注意的是,支持此 EIP 的钱包,应考虑用户可能被请求帮助恢复其他账户,而请求可能来自任何知道 secret_set 的人,包括合法拥有者或以某种方式获取 secret_set 的攻击者。 因此: 钱包必须询问用户请求的合法性,询问请求是否是通过个人验证后进行的;用户必须知道,他们对自己的链上操作负有责任(在某些国家是道德的、合法的),并且必须验证恢复请求的合法性;视频通话可能是通过 AI 伪造的,但攻击者需要图像和语音样本,例如互联网上的公共演讲内容;为名人进行恢复的用户,永远不要信任视频通话,应该去尝试直接联系周围的人,以检查请求的合法性;—- 编译者/作者:炒币五年老韭菜 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
私钥也能找回?了解 Vitalik Buterin 提出的秘密多重签名恢复方案
2020-01-20 炒币五年老韭菜 来源:区块链网络
LOADING...
相关阅读:
- Coinbase考虑添加新的ETH DeFi代币,例如Kava,AMPL2020-08-01
- 国际金融领袖集团表示,瑞波币的XRP汇款网络跨越了传统银行系统2020-08-01
- DeFi项目yEarn.Finance是否能带来丰厚的利润?2020-08-01
- 来自衍生品市场的乐观情绪可能会随着Ripple,以太坊经典,Uniswap,DeF2020-08-01
- 基于DeFi的流动性挖矿Yield Farming2020-08-01