A Gatsby astronaut

Eth2 Staking系列:密钥篇

在Eth2中,验证者需要哪些密钥?又将如何记录和存储密钥?



来源 | Ethereum Blog

作者 | Carl Beekhuizen


质押1.png


感谢Sacha Yves Saint-Leger和Danny Ryan对本文的审校。

无论是哪一个权益证明 (PoS) 系统,其核心都是签名方案。签名用于识别验证每个验证者的身份,从而我们将验证者行为 (无论好坏) 追溯到验证者本身。

我们可以通过查看验证者签名的消息验证其是否诚实,也可以将违反共识规则的消息作为其恶意行径的证明。

在eth2中,每个验证者的身份标识便是他们的公钥。具体来说,每个验证者会有两组密钥:签名密钥和提款密钥。


签名密钥

签名密钥是验证者需要用于签名证明 (attestation) 和提议区块的密钥。由于一个验证者在每个epoch内至少需要对一条消息进行签名,客户端软件必须对签名密钥进行托管。


提款密钥

客户端软件始终保持互联网连接,因此验证者的签名密钥是完全有可能受到威胁的。为了减轻相应影响,验证者的操作需要通过两种密钥来实现。

如上所述,验证者通过签名密钥履行其职责。而提款密钥可以控制验证者的资金 (转移和提取ETH)。

验证者在其整个生命周期内需要使用提款密钥的次数很少。也就是说,可以将提款密钥可以使用冷存储方式,以极高的安全性进行存储 (脱机)。

*最早在阶段1才能进行转账和提款


太多密钥怎么办?

如果每质押32 ETH,质押者都需要保存并且使用两种不相关的密钥来进行存款,那么局面很快就会失控。

幸运的是,对此我们有一个解决方案:为密钥设置一个共用密钥,这样一来仅需存储一个密钥就可以访问多个密钥。

在eth2中,这个解决方案通过EIP 23332334实现:这组标准描述了提款密钥和签名密钥之间的关系,以及如何从单个助记符中导出它们。


助记符

助记符是对密钥进行编码的另一种方法,使得人们在存储和备份其私钥时更为简便。

举个例子,记录一组助记符 sausage solution loud isolate focus glide frame door clown million shuffle impulse 比准确地记录一串密钥 0x1e9f2afcc0737f4502e8d4238e4fe82d45077b2a549902b61d65367acecbccba


要从共用密钥导入密钥

与钱包互动时,你可能会碰到格式为m/44’/60’/0’/0/0的“路径”。这些路径描述了密钥之间的关系。

根据EIP 2333,其关系采用树结构的形式,其中密钥由熵源 (树的seed) 和树路径确定。

我们使用种子来计算树根,然后在基于树根层层构建。该密钥树完全根据其后分支之间的关系和树根来进行定义。

实际上,这使得我们可以从树的根部开始,并在每个分支上计算中间键,然后抵达相关叶子节点,从而在树中找到需要的任何键。

奇妙之处在于,我们可以从单个熵源 (比如一个助记符) 开始,然后基于此衍生出实际上无限数量的密钥。

此外,通过仅存储该助记符,你可以备份作为验证者所使用的每个密钥。

Eth2 就运用了这种理念,允许通过单个助记符来生成验证者需要的任意数量的密钥。举个例子,如果你想运行3个验证者节点,那么你可以借助单个助记符来生成位于m/0, m/1, m/2 的3个提款密钥。

质押4.png

每个分支都由 / 隔开,因此 m/2 表示从主密钥开始并跟随第2条分支。

EIP 2334中,验证者的签名密钥是提款密钥的第0个子分支。也就是说,在实际情况中,当你遵循这个标准时,如果知道了用于提款的私钥,那么你可以计算出相应的签名私钥。

继续上方的例子,我们可以在m/0/0, m/1/0, m/2/0找到相应的三个签名密钥。

质押5.png

为了阐明概念,上面的例子尽可能简化了,但实际上涉及的路径要长一些 (EIP 2334 要求分别使用 m/12381/3600/i/0m/12381/3600/i/0/0 的路径来获得提款密钥和签名密钥)。但其中的逻辑和上面的例子相同。

总而言之,需要记住的要点就是:如果你知道助记符,那你就可以计算出提款密钥,继而通过提款密钥得到你的签名密钥。


存储密钥

验证者客户端使用keystore文件作为交换密钥的方式。

Keystore 是经由用户密码加密的包含私钥的文件。只要该密码不是存储在同一台计算机上,Keystore就可以在不同的计算机之间安全进行存储和传输。

当准备开始验证时,要向你的验证者客户端提供 Keystore和对其进行加密的密码,客户端需要这两条信息才能导入私钥。


成为验证者

要成为验证者,首先要生成适当的密钥。当你记下自己的助记符,密钥就能够生成。

由于在阶段0期间无法提取或转移ETH,所以不需要通过Keystore来获取提款密钥,只需保证助记符以安全方式进行存储就够了。

当验证者客户端需要用到签名密钥时,你的每个验证者节点都会收到一个存储相应密钥的Keystore文件。

生成密钥后,就是质押时刻了!每个验证者都需要质押32 ETH,以及质押数据,其中包含你所有的验证者公钥。

之后质押数据将会被记录在eth1的存款合约中。存款合约会由eth2节点进行监控,以便之后将质押数据复制到eth2中。一旦你的质押数据被成功转移到eth2上,那么你就正式成为了一名验证者!


成为验证者的捷径

我们一直致力于构建一个友好的界面来引导用户成为验证者。很快我们就会发布一篇博文介绍什么是Eth2 Launchpad及其使用指南!

往期系列文章推荐:

Eth2 Staking 系列:分片共识

Eth2 Staking 系列:共识机制篇

Eth2 Staking 系列:激励篇



声明:ECN的翻译工作旨在为中国以太坊社区传递优质资讯和学习资源,文章版权归原作者所有,转载须注明原文出处以及ethereum.cn,若需长期转载,请联系ethereumcn@gmail.com进行授权。


资源导航

ETH 2.0 Launchpad

节点监测运维

加入社区