科普 | Eth2 验证者如何生成和保护取款密钥
摘要: 取款密钥是以太坊 2.0 中的验证者用来提现以太币的密钥
取款密钥是什么?
取款密钥(withdrawal key)是以太坊 2.0 中的验证者用来提现以太币的密钥 1。
以太坊 2.0 的密钥与以太坊 1.0 的密钥在生成和使用方式上大致相同,但二者并不兼容,也就是说,在以太坊 1.0 上生成的密钥不能在以太坊 2.0 上使用。
以太坊 2.0 中的密钥总是以公钥与私钥的形式成对出现。取款密钥由 权益人(staker) 自己持有,因为他们是资金的提供者,当然也想保有撤资的权利。
取款密钥是用来干什么的?
在以太坊 2.0 中,取款密钥的信息主要用于以下两种情况:在以太坊 1.0 中创建押金存入交易;在以太坊 2.0 中提现以太币。
当用户在以太坊 1.0 上存入押金时,取款公钥的作用是使该笔押金与取款私钥关联起来。这就是为什么以太坊 2.0 能通过取款公钥知道谁有权提款(与该取款公钥对应的取款私钥才有权提取该笔保证金)。取款公钥还用于将数据整合到以太坊的押金存入交易中,如下图所示:
要注意的一点是,每个押金要约(deposit agreement)中都要用到取款公钥 2。
在以太坊 2.0 上提现以太币的操作细节还未确定,但无论将来采取怎么样的方式,都需要提款私钥来签名授权。
在上图的示例中,权益人使用提款私钥对提现操作的细节进行签名。然后,以太坊 2.0 网络就可以比较提款操作中的签名授权与存款协议中的提款身份标识(withdrawal identification)(如图一所示)。如果两者匹配,提款操作就能进行下去。
直到可以使用提款功能之前,我们都无需用到提款私钥。提款功能可能要等存入押金后一年以上才可以使用。即使功能可用后,也不一定要使用。对于那些想要长期获得奖励的权益人来说,能否提款对他们的日常操作几乎没有影响。
这就意味着,我们应该保护好自己的提款私钥,短期内不需要使用它,即使从长期来看也只需要偶尔使用它。也就是说,在平衡密钥的安全性和可用性时,安全性应该是我们更看重的。
要保护多少个私钥?
还有一个需要回答的问题是:我们一共需要保护多少个私钥?
如果你只创建一个验证者身份,那么答案很简单:一个私钥。如果你要创建多个验证者身份,那么答案会变得复杂起来。我们可以为每个验证者身份创建一个不同的提款私钥,但这不是必须的。那么,每个验证者身份的提款私钥应该是唯一的吗?
使用多个提款私钥的理由主要有两个。第一个原因是,如果不同的验证者身份共享一个密钥,这些验证者身份之间就有了联系:显然,这些账号下的押金同属一个实体。由此,也就很容易计算出使用这个私钥可以访问的资金量,以及该实体持有的以太币总量。不过,使用不同的私钥并不能防止他人从其它渠道获取这些信息,例如,发起这些存款交易的以太坊 1.0 地址同样反映了这些信息。因此,除非我们在使用以太坊 1.0 地址时足够谨慎,否则使用多个提款私钥对安全性的提升不值一提。
第二个原因是,使用同一个私钥会让这个私钥的价值过高,也就更容易遭窃。但是,如果将不同的私钥存放在同一个地方,也会导致相同的问题。也就是说,应该从物理和逻辑上将不同的私钥分开,以减少丢失所带来的影响。
总之,如果你想防止其他人发现多个验证者身份背后的同一个实体(假设你的每笔存款来自不同的以太坊 1.0 地址),并且将你的每个提款私钥分别储存在不同地方,或者采用了不同的密钥保护机制,那么使用多个私钥会带来实质性的好处。由于普通用户一般不会这样操作,本文的余下部分只介绍了单个提款私钥是如何使用的,如有需要,本文内容也将适用于持有多个私钥的情况。
步骤
我们已经了解了基本要求,现在来看看怎么创建并保护取款密钥。创建新密钥的步骤如下:
-
创建提款钱包; -
创建提款账户; -
记录取款公钥; -
删除提款钱包; -
确认提款钱包可以恢复。
- 图三:创建并保护取款密钥的步骤 -
创建提款钱包
ethdo
命令行工具为例,你也可以使用其它工具来实现。ethdo
采用了 钱包 的概念。一个钱包可以包含一个或多个账户,而且可以从逻辑上将不同账户分隔开来(例如,将提款账户和验证账户分开)。一个账户包括私钥、公钥以及其它一些数据(如,一个好记的账户名),这样就不用直接使用公钥登陆了 3。如果要为提款账户创建钱包,请运行以下代码:ethdo wallet create --wallet="Staking wallet" --type=hd --walletpassphrase=secret1
创建提款账户
ethdo account create --account="Staking wallet/Withdrawal account" --walletpassphrase=secret1 --passphrase=secret2
记录取款公钥
ethdo account info --account="Staking wallet/Withdrawal account"
删除提款钱包
ethdo wallet delete --wallet="Staking wallet"
随后,你可以运行下方代码来访问钱包,以确认该钱包是否已经删除:
ethdo wallet info --wallet="Staking wallet"
正常情况下,会返回一条错误消息,原因是无法找到钱包。
确认提款钱包可以恢复
ethdo wallet create --wallet="Recovery wallet" --type=hd --walletpassphrase=temp1 --mnemonic="MNEMONIC"
mnemonic
换成你的助记词。ethdo account create --account="Recovery wallet/Withdrawal account" --walletpassphrase=temp1 --passphrase=temp2
ethdo account info --account="Recovery wallet/Withdrawal account"
ethdo wallet delete --wallet="Recovery wallet"
然后运行下方代码来尝试访问钱包,确认其是否已经删除:
ethdo wallet info --wallet="Recovery wallet"
以上步骤也能用于验证者密钥吗?
脚注
(完)
(文内有许多超链接,可点击左下 ”阅读原文“ 从 EthFans 网站上获取)
原文链接:
https://www.attestant.io/posts/protecting-withdrawal-keys/
作者: Jim McDonald
作者:以太坊爱好者;来自链得得内容开放平台“得得号”,本文仅代表作者观点,不代表链得得官方立场凡“得得号”文章,原创性和内容的真实性由投稿人保证,如果稿件因抄袭、作假等行为导致的法律后果,由投稿人本人负责得得号平台发布文章,如有侵权、违规及其他不当言论内容,请广大读者监督,一经证实,平台会立即下线。如遇文章内容问题,请发送至邮箱:linggeqi@chaindd.com
评论(0)
Oh! no
您是否确认要删除该条评论吗?