1. 首页 > 娱乐生活

Eth2.0验证者如何生成和保护取款密钥

Eth2.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 地址),并且将你的每个提款私钥分别储存在不同地方,或者采用了不同的密钥保护机制,那么使用多个私钥会带来实质性的好处。由于普通用户一般不会这样操作,本文的余下部分只介绍了单个提款私钥是如何使用的,如有需要,本文内容也将适用于持有多个私钥的情况。

步骤

我们已经了解了基本要求,现在来看看怎么创建并保护取款密钥。创建新密钥的步骤如下:

创建提款钱包;

创建提款账户;

记录取款公钥;

删除提款钱包;

确认提款钱包可以恢复。

我们来看一下图解:

– 图三:创建并保护取款密钥的步骤 –

这些步骤必须在电脑上完成,要小心防止电脑被入侵。本文篇幅有限,不展开讨论如何防止电脑遭到入侵,但是用户至少要做到的一点是:在执行上述过程时,电脑不能联网。

创建提款钱包

本文截稿时,尚未开发出基于 BLS12-381 曲线的以太坊 2.0 密钥硬件钱包,也就是说,目前还没有可以储存以太坊 2.0 密钥的硬件钱包(编者注:在本译本出版时好像已经有了)。因此,密钥必须在软件中生成。本文以 ethdo 命令行工具为例,你也可以使用其它工具来实现。

ethdo 采用了 钱包 的概念。一个钱包可以包含一个或多个账户,而且可以从逻辑上将不同账户分隔开来(例如,将提款账户和验证账户分开)。一个账户包括私钥、公钥以及其它一些数据(如,一个好记的账户名),这样就不用直接使用公钥登陆了(注3)。如果要为提款账户创建钱包,请运行以下代码:

ethdo wallet create –wallet="Staking wallet" –type=hd –walletpassphrase=secret1

这行代码会创建一个带有 助记词 的钱包。助记词由 24 个单词组成,可用来恢复之前创建的钱包和钱包内的所有账户,应该立即保护好。上述命令会输出助记词,应该离线保存好。如果输入命令后并没有显示助记词,说明钱包无法恢复,那么我们不应使用这个钱包。

保存助记词的方法有很多,如 Blockplate 和 Cryptosteel,但你也可以把它抄下来,放在一个安全(最好防火)的地方。记住,一旦助记词丢失,你就无法提款,因此要采取恰当的措施保存好助记词。

助记词保存好后,我们就可以开始创建提款账户了。

创建提款账户

创建提款账户的命令如下:

ethdo account create –account="Staking wallet/Withdrawal account" –walletpassphrase=secret1 –passphrase=secret2

钱包口令(walletpassphrase)必须与你在上一部分提供的口令保持一致。后面一个口令则仅仅是这个账户的口令,只在删除账户前暂时使用。

记录取款公钥

顾名思义,公钥是 公开 的,无需采取特殊的安全保护措施。运行下列代码查看公钥:

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"

正常情况下,会返回一条错误消息,原因是无法找到钱包。

上面这些步骤也能用于验证者密钥吗?

不可以。以太坊 2.0 的验证者密钥与取款密钥在使用方式上差异很大,而且与你熟悉的绝大多数密钥都不相同。我们将在下一篇文章中细述验证者密钥,及其用法和保护措施。

希望全面深入的了解币圈炒币、打新币、以及挖矿收益的问题,那么可以添加我们的官方微信进行更加详细深入的沟通和交流,同时我们可以邀请大家进入我们的官方社群进行深入学习和交流,群里也有非常多的一级市场的粉丝币友们,他们有的是行业大咖和职业玩家,经验知识都是非常丰富的,可以给大家解疑答惑。快联系我们的客服申请加入吧。

徐明星上央视CCTV-1 徐明星海南区块链高端论坛讲话全文一览

尊敬的各位领导,今天我从一个区块链行业创业者角度,与各位分享一下我们在区块链行业的实践经验与心得。

首先,区块链是数据库技术,数据库是用来存储数据的一种计算机技术,它已经发展了很多年。区块链数据库是一个分布式数据,它并不是过去的单机版数据库。

数据库技术的进步,在互联网科技发展的20年里,对整个互联网科技发展起到了巨大的促进作用。

Yahoo公司把世界上所有的网页做成了一个导航网站,根据把信息分门别类来检索的互联网网站。

随着互联网网页越来越多,我们无法找到我们需要的网页,这个时候出现了数据库。

所以,数据库技术的代表公司有Google、百度这样的公司,能检索整个互联网上大量的海量数据。

随着数据库技术的发展,关系型数据库的强大,现在的数据库技术足以支撑很多金融交易以及电子商务业务。

随着Oracle这样的公司的进步,淘宝Ebay这些公司,我们能够处理海量的交易。

那么随着这个技术不断的进步,又出现了新的数据库技术,比如文件数据库技术等。

这些技术支撑着微博快手这样的应用。我当年从事互联网行业的时候,我很难想象今天的应用能每天能够处理上亿的视频。

新增数据库技术的进步,让我们能够轻松地存储海量的视频,能够用手机能够无限地去看直播。

那么区块链也是一种数据库,这种数据库将给人类带来什么样新型的应用,拭目以待!

区块链这种数据库它有什么特点?首先它是一个点对点的数据,而这个数据库存储建立在现代的互联网基础之上,它的存储节点分布在全网上。

它不由单个的个人或者企业来托管,所以我们把它叫做点对点数据库。

这样的数据库,它不是高效的。但是由于现在互联网的技术非常强大,我们已经不再在乎带宽成本、存储成本,所以我们可以建设这样的点对点的数据库。某一些节点的损坏,甚至某一些网络通道的损坏,并不影响数据库健康高效的运行。

那么,这样的数据库存储的是什么数据呢?我们看到目前大部分的区块链,它存储的是网络里所有的交易明细,或者叫数据明细。

区块链英文叫blockchain,每一个block是一个数据块,这个数据块里面会有一些索引,最后通过计算机的一些数据结构,把这些区块连起来,同时通过一些数学算法对数据进行快速的检索或者校验。

所以,区块链存储的是一个完整的数据库,并且所有人都可以访问完整的数据库。

当然它通过加密公钥和私钥的方法来保护隐私,只有相关的双方可以查看这个数据。

这样的数据库,设计一个点对点的存储了全量的数据库能干什么?这种方式看起来挺笨的。

在区块链上做一笔交易的流程大概是这样的,如果有一个用户A要给用户B来发一笔交易。

这个时候,他会把这笔交易广播到全网,说我要给那个人发交易了,所有人都会收到交易,但是大部分人交易与它是无关的,就扔掉了。

那么这个网络里有一种人,我们把它叫记账人,有的区块链网络靠选举,有的区块链网络靠权威。如何确定记账人的过程叫共识算法,不一样的区块链有不一样的共识机制,这些记账人对这笔交易进行了校验,是不是造假、有没有双花等。

当这笔交易校验无误以后,会广播到全网,每个人都会收到,但是只有A和B是与交易有关的,A告诉他的钱少了,B会收到一个账本承诺,一笔交易就完成了。

这个过程看起来挺傻的。但是,这人类信息时代,我们第一次实现了点对点交易。A和B可以是中国人、美国人或者日本人。一个日本人和一个美国人完成了一个点对点的交易,没有通过中介服务商,没有通过权威机构,这是划时代的。

在信息时代之前,我们的交易都是点对点的,一手交钱一手交货。信息时代以后,我们有大量的资金中介、信息中介、物流中介,区块链是我们在信息时代第一次实现点对点的交易。

 1/4    1 2 3 4 下一页 尾页

本文采摘于网络,不代表本站立场,转载联系作者并注明出处:http://www.longfuchaju.com//ylsh/1067.html

联系我们

在线咨询:点击这里给我发消息

微信号:wx123456