Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

( J, o' d: q% M: \$ U写在前面:丢失钱包密码或私钥是加密货币用户经常会遇到的问题,那能否有方法可在最小化信任的同时,恢复丢失的密钥呢?这正是以太坊联合创始人vitalik等人正在探索的一个方向,而他们已编写了一个新的EIP(以太坊改进提案),并将其命名为秘密多重签名恢复(Secret Multisig Recovery)方案。' k1 B  O  x& a+ t3 w8 I& |

8 U9 Y1 _( x$ y: [# _3 d; k( b7 G9 e昨日,知名黄金爱好者兼加密货币怀疑者Peter Schiff 在Twitter上声称自己的钱包丢失了密码,因此无法访问自己的比特币。" v5 G% X/ e. \3 x, \: q( \3 U& K
Schiff接着补充说:" j- {' ?2 O. g. t* }
' s- c7 |  }2 j8 ]6 q" _, V# [
“所以现在我的比特币在本质上毫无价值,它也没有市场价值。我知道拥有比特币是个坏主意,但我从来没有意识到它是如此糟糕!”! @& c# O/ h9 H6 @( t0 Y, A

5 v: f; P- Z& o4 }; M& Z1 e2 G, n2 N: ~! u; ^# h8 P
Schiff在推特上公布自己的损失后,加密货币社区很快展开了讨论,例如Morgan Creek Digital 联合创始人兼合伙人Anthony Pompliano就提问他是否自己忘记了密码,而Schiff对此的回答却是:“是我的钱包忘记了密码。”  e* J( J7 b8 Z  n4 O( i
看不下去的Pompliano只好耐心解释道:  e9 d0 n& M8 v' q! L% M+ R- d; z
- a- g4 |8 T6 I
“软件只是执行人类发出的命令,它不能‘忘记’任何事情,给我发邮件吧,我会尽力帮你找回丢失的比特币。”+ L8 b8 O, x0 Z7 E
不过根据Schiff的回答,他的比特币基本已无望找回了,他提到说:
6 s- X$ i  b; M5 L% G" ]( B& M" x: _
“是Eric Voorhees(注:ShapeShift首席执行官)帮我准备的钱包,即便是他也觉得我无能为力。如果你有任何想法,欢迎尝试。”
/ ]! }- w+ L' L/ h  n1 C9 m
" H" W8 d' x8 H9 T) X/ K
看到这里,读者可能觉得这是一个非常悲伤的故事,一位加密货币怀疑者好不容易尝试了比特币,结果却因为自己忘记了密码而丢失了它们。而倘若他在多处备份好私钥,那么即使他忘记了钱包密码,也可以通过私钥访问自己的钱包。: B( C  v: X+ C- ~3 l: O
当然,也有人会认为这是一个深刻的教训,它提醒我们要开发相关的技术,为类似的人群提供安全保障。
+ Z# H% x. |5 |- ]" k0 i比如以太坊联合创始人vitalik就评论称:
/ n$ j3 o$ p" r% D
3 K4 u' ?; z" q" e- S- m“对于人们用‘加密货币就是加密货币,你的工作就是要非常小心地在三个地方写下备份种子’来回答这个问题,我感到失望。我们可以,也应该创造更好的钱包技术,使得安全变得更容易实现。
! I: B- n- F+ w* q( {% F例如,这里有一个社交恢复提案:https://t.co/tuSbHhXKgd?amp=1
8 U: T  @- b: B5 B8 X, ?那V神所说的社交恢复提案具体是指什么呢?
) f) u2 Q3 i5 g4 e下面我们就来简单了解一下吧。
; E7 N9 t6 A' o0 n' V9 c7 JEIP 2429:秘密多重签名恢复
- ]8 K3 p5 L3 ?' ~) f6 l: V$ w5 X作者:Ricardo Guilherme Schmidt(ricardo3@status.im)、Miguel Mota(@Miguel Mota)、Vitalik Buterin(@vbuterin)、naxe(@ngmachado)/ ?' S; g% Q$ z/ n
状态:草案$ b5 U; ?* g7 F% \5 F, S
类别:ERC3 R# Z  Q$ m+ Z4 y
创建日期:2019-12-07
) E5 R& }# ]2 l& N要求:EIP (137, 191, 831, 1271, 1344, 2470)/ Y4 P: k% W3 y( r+ K8 ?
摘要& [8 a8 R1 B4 {. ~9 h6 N* {6 c
一般来说,加密货币的一个糟糕体验是私钥丢失或暴露,这可能导致不可逆转的情况。+ B( _) C% S( A' j4 W4 h0 L+ z9 C
社交恢复被视为账户合约去中心化恢复的一种选择,然而社交恢复的使用,带来了人的因素,而人的因素通常是安全系统脆弱性的主要原因。$ [5 V) b7 D" W; }7 W' X6 @
社交恢复的主要风险是:2 t  F3 g) a* c( [, r# X
合谋:如果一些用户知道他们是某个恢复的一部分,他们可能会对恢复攻击的执行感兴趣;目标攻击:外部代理可能了解恢复的所有者,并瞄准执行恢复攻击所需最薄弱的点;一般暴露:攻击者如果设法感染大型用户基础环境依赖项,并获得对多个身份的访问权限,也可能通过恢复对未受影响的用户产生副作用;模拟攻击:针对性攻击可以了解用户的情况,并将该用户模拟到其社交对等方以执行恢复攻击。这变得更加令人关注,因为AI研究能够“深度伪造”其他人的声音和面部动作。7 l% \5 q1 t# r5 D7 L# k# v
' Q$ c) R; M0 f( B8 h
尽管还没有完美的解决方案来解决所有这些问题,但我们的目标是实现“信任最小化”控制者合约,并为用户可能使用的不同钱包启用互操作性。
, H+ s- D3 z( _1 X据悉,该标准提出了一种定义存储在Melkle树中的地址列表方法,这些地址连同它们的权重和用户的个人秘密,将组成一个秘密集,而该秘密集可以在不直接危及用户的情况下公开,因为它仍然需要对地址列表中的总阈值进行人工验证。; C, p: m9 d! l# i6 s$ S& D
该秘密集可以保存,例如存储在web2云存储当中,而不会严重影响安全性,这对于一些不信任自己,但也不希望信任某些特定实体的用户而言是非常有用的。
2 \1 U4 |) ?5 S用户秘密永远不会在链中显示,显示的只是一个nonce哈希,每次恢复时它都会增加。恢复设置获取此哈希秘密nonce的哈希值的哈希值(hash of a hash),这种双哈希方法被用于数学证明请求恢复的人知道该秘密,而不会泄露它。; j8 F# S5 ]. c, h6 r3 j& _
根据提案,用户可通过提供秘密(user_secret_data)以及加权地址列表(address_list)来配置恢复。5 x8 h* P1 ^" V) x5 I% C0 b
user_secret_data可以是用户可猜测的半私有信息。而user_secret_type是可选的随机大整数,并将其与address_list一起导出为private_hash 。- l; z$ a% _8 A" O
地址列表的总权重必须大于阈值,而阈值是一个常数:THRESHOLD = 100 * 10^18。( l4 c, Y6 Z" ^$ {
而标准定义了生成可预测用户秘密的几种方法。
2 I3 |8 K9 D0 D# t/ K
) [* ^, [! n- v0 j$ v! o4 {- k+ p4 P当生物识别(biometrics,例如指纹、面部和瞳孔)技术可用时,应该使用它们,这是最简单的方法。( E4 r0 |5 c. r) m! D6 F6 H" o

! p/ g3 a7 d2 p! x而当没有生物识别技术时,一组通常只有用户知道的诸多问题的标准表单,可被用于生成用户的秘密数据。所有可选的默认字段有:Full Name(全名)、Birth Date(生日)、Mother Name(母亲名字)、Mother Birthdate(母亲生日)、Nationality(国籍)、First Love’s Name(初恋者姓名)、First Pet’s Name(第一只宠物名)、Childhood Nickname(童年昵称)。; w- N6 V3 s+ v/ C$ x- N
( N. ]- d( I, P( _
而密码派生方法,则类似于详细表单方法,但它只要求用户输入一些内容:Full Name(全名)和Password(密码)。
3 S6 `8 \. S1 D- w5 o6 @: j4 j地址列表
5 J* R" }1 B1 J$ F- q" n( W$ l/ V  e用户将定义监护人账户列表,该列表通过用户的联系人列表进行填充。导入选项和输入一个地址应该是很方便的,如图所示:, \9 E& Z+ z0 U5 q2 M
4 d" o0 l8 ?" p: }( n$ n
选择好监护人后,系统将提示用户定义每个监护人的权重:4 l; a# ~) e* M# |9 \

% X$ Q7 I" K! a; k这些地址存储在一个标准的merkle树当中,但是每个子叶必须与hash_to_peer进行哈希运算。$ C$ L3 ~- Z8 A; @* u; N) P9 _
merkle_root被哈希为一个标准merkle树,它由keccak256(bytes32(hash_to_peer), uint256(weight), boolean(is_ens), bytes32(ethereum_address))格式的address_list 子叶组成。7 u* J( ^" m% K+ \& m7 E# Y9 I; o
方案支持了ENS域名,当监护人拥有一个ENS域名时,应该使用ENS域名。根据EIP-137,如果使用了ENS域名,则is_ens必须为“true”。  P/ u7 w, d: X# y/ R! j
列表中的地址可以是账户合约,如果是账户合约,则可以直接调用审批功能,也可以提供EIP-1271签名。而如果是外部拥有帐户,则应用ecrecover逻辑,但它们也可以直接调用approve函数。6 i( _. r. O/ Y& l! A; H5 H8 V5 S
weight设置此地址值相对于THRESHOLD常量的批准程度。( x! ^( s/ C; H
, a; `7 u4 t5 \
用户秘密数据哈希2 T1 z5 p: G. h' z& D- y7 @" Q
8 P) o; X* O# J- }. k8 D
对于多个用户而言,recovery_contract可能是相同的,这是用户正在使用的共享秘密多重签名合约地址;user_secret_data是用户数据的纯格式字节数据,它从不暴露,也不会被保存。当private_hash是未知时,应向用户进行请求;private_hash是keccak256(user_secret_data),它从不暴露,可以用秘密集导出。这可以在所有恢复中重复使用;merkle_root是通过对普通merkle树进行哈希运算得到的,它在执行时会被揭露;weight_multipler定义要达到THRESHOLD需要乘以多少个单独权重;hash_to_execute是keccak256(private_hash, address(recovery_contract), recovery_contract.nonce(user_address)),它仅在执行时公开,每次恢复都是唯一的,也被称为“显示哈希”。Nonce和恢复合约地址被用于允许重用private_hash;hash_to_peer是keccak256(hash_to_execute),它在恢复授权请求时会公开,其被用于通过揭露public_hash种子来证明用户知道hash_to_execute和merkle_root,这也被称为“部分泄漏哈希”;public_hash是keccak256(hash_to_peer,merkle_root,weight_multiplier),它自配置后就是公开的,只能使用一次,这也用于防止执行的重放。执行成功后,必须使用setup(bytes32,uint256)进行重配置;- l9 v* j- g% m9 `" N" I" o( M* [5 J
& @! H1 P4 X: y, s# w3 `3 p
恢复秘密集URL2 \- u; M4 k; }3 y; w8 _4 c! S* g5 N

3 ^; u' ~3 D# y4 O1 p. A6 k/ O恢复所需的所有信息都将存储在url类型标准中:
+ x. N! H+ e" a/ F  Y( Wrecovery = erc831_part account_contract [ "@" chain_id ] "/" recovery_contract "/" private_hash | secret_type "/" address_list / weight_multipler [ "?" parameters ] [ "#" notes ]9 z- q* J; R2 {$ f7 h
erc831_part = "ethereum:recovery-"0 N6 G+ n% W" M8 p
account_contract = ADDRESS2 k1 {. z, n2 x6 p) f% B
chain_id = 1*DIGIT
7 Z' E1 i- Y, C5 \recovery_contract = ADDRESS1 y# k( ]3 h0 d3 z- |4 K
private_hash = "0x" 64*HEXDIG+ E/ K. O( u( @. C
secret_type = UINT
' Y; D( o4 r4 D4 e4 L# faddress_list = ethereum_address *( ";" ethereum_address )
% N* o7 _& s, Yweight_multipler = UINT
3 n. H' q8 q8 j. T# h, E' r$ Y8 fethereum_address = ADDRESS / ENS_NAME "*" weight9 S5 x( v% E& J. @, P6 U, W
weight = UINT- f/ X# m% N8 z
ADDRESS = "0x" 40*HEXDIG) t) m& c- Q& N- @
parameters = parameter *( "&" parameter )
. ?9 o  o0 M) a( |) B$ ]9 gparameter = key "=" value
& K# e5 B: Q& y) pkey = STRING; _! S. L! g* p  @6 I# }! O- J
value = STRING' k) c  A: Q0 B, v+ l" t
notes = STRING
. j# W; W0 d& faccount_contract是指要进行恢复的账户合约,可以使用任何账户合约,因为恢复合约可以执行到任何接口或地址(如常规多重签名);chain_id为所有地址定义了以太坊链,如果不存在,则预设为1(主网);recovery_contract 执行恢复合约的逻辑,必须支持此文档中指定的ABI;secret_type选择生成user_secret_data时使用的标准,在未给定private_hash时是必需的;private_hash是user_secret_data的哈希,如果不存在,恢复将要求使用secret_type所选的标准来获取user_secret_data;weight_multipler 是每个weight将乘以的值,以达到THRESHOLD常数;address_list是具有个人权重的地址列表,最好是另一个帐户合约,表明它们可用于恢复请求,但任何地址都可以帮助恢复。可以使用ENS域名,并在恢复过程中进行解析。总权重应高于THRESHOLD常数;weight默认为Math.ceil(THRESHOLD / address_list.length),由用户设置自定义;parameters可能需要特定的secret_type;如果需要的话,notes可用于密码提示;
* X* F  i) L% R7 z- P$ [6 R  R3 Y: ]5 _/ O& k
恢复程序# L$ k& d6 s! X2 Z5 c
当需要恢复时,用户需要将其Recovery Secret Set URL(恢复密钥集URL)加载到支持此标准的电子钱包中。根据配置的不同,当private_hash(私有哈希)不可用时,必须从对用户构成挑战的user_secret_data处生成。
( @$ j( I4 `" C( K/ A加载有效的密钥集时,它将提示哪些用户请求帮助。一些钱包或许能自动发送请求,而另一些钱包则允许用户共享这个Help Recover Request URL(帮助恢复请求URL)。
: I- G3 z# ?4 L: }该EIP鼓励尽可能使用预签名的消息EIP-191,这一点很重要,因为gas成本是一个常见的障碍。如果监护人选择的地址是帐户合约,则必须是EIP-1271才能使用预签名信息。建议的正常顺序如下:4 V- {! z6 P! H& R- j& n, t5 ~6 a  q

7 u9 R) e3 u$ a在特殊情况下,如果账户合约无法签署信息,或者用户的钱包无法按照这个EIP上指定的格式签署信息,则也可以通过使用msg.sender的方法执行常规操作。
$ T. f! [* s' S! \在这种情况下,监护人将不得不支付一小部分gas费用。
5 a6 _) K; v: u2 Q  x) U/ C, X6 U4 ~2 ?; p" h% s2 i
理论基础
' m; G! k" V1 k: i7 e! F* a8 suser_secret_data从不公开,在用keccak256算法进行哈希运算一次后,它就成为从不公开的private_hash。理论上,应该使用生物特征技术,因为用户不太可能丢失他们的生物特征。而生物特征通常是不安全的,因为它们并不是真正的秘密,任何高分辨率相机实际上都可以读取大多数生物特征,而且这些信息通常也为政府所知。
. C- |3 b5 s$ {- _. k1 j( y当生物特征不可用时,用户数据表单仍然提供相当好的安全性,因为合约中存储的哈希是离源数据非常远的加盐(salted )哈希,即使只有名字被用作user_secret_data,也是很难发现的。这些数据越不可预测,就越能抵御目标攻击,而目标攻击仍需要发现用户列表并接收足够的授权。; o' B$ h" T* R' J) N% J
在成功执行之后,需要重新配置以实现安全性保障。在经历一次恢复后,恢复合约必须禁用自身,并等待新的配置。
0 ?6 g* v& h6 e. ?1 @$ j可能存在的攻击
  g8 s1 j1 Y( v( Z0 a4 q  c: M需要注意的是,支持此EIP的钱包,应考虑用户可能被请求帮助恢复其他账户,而请求可能来自任何知道secret_set的人,包括合法拥有者或以某种方式获取secret_set的攻击者。' q/ }" s' s% C+ d4 X
因此:
4 S- n- ~9 |8 e  o钱包必须询问用户请求的合法性,询问请求是否是通过个人验证后进行的;用户必须知道,他们对自己的链上操作负有责任(在某些国家是道德的、合法的),并且必须验证恢复请求的合法性;视频通话可能是通过AI伪造的,但攻击者需要图像和语音样本,例如互联网上的公共演讲内容;为名人进行恢复的用户,永远不要信任视频通话,应该去尝试直接联系周围的人,以检查请求的合法性;
) g6 G1 h7 G& v! }简评:这种方案正是针对Peter Schiff这样容易忘记钱包密码或私钥的群体而设计的,但其也存在着安全隐患,而它对加密货币的社会可扩展性而言是非常重要的,因为多数人在最初接触加密货币时会和Peter Schiff类似。本文省略了很多技术细节内容,有兴趣的读者可以看原提案内容:https://gitlab.com/status-im/docs/EIPs/blob/secret-multisig-recovery/EIPS/eip-2429.md
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

今日晚报灼 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    8