.jpg)
一、【概念】私钥、助记词和keystore到底是什么关系
使用了很久的钱包,用得有点诚惶诚恐,钱包除了用于转账外,都不怎么敢动它,怕误操作搞不好就空了,所以大部分都在交易所,不敢提。这也间接印证了李笑来老师的一句话:
在申请钱包时,当然看过不少资料,老老实实地记下了私钥、助记词,备份了keystore,还放在两个U盘里备份。但对私钥、助记词和keystore是一知半解的,也不知道他们到底什么关系。如果不是要了解EOS映射,我可能一直不会动钱包,也不会去了解它们。
下面就一个个来好好学习一下这些概念。
私钥是由64位十六进制的字符组成,每个私钥是随机生成的,随机生成这样的字符串有2的256次方种可能,这个数字已经超过了宇宙中原子的个数,用“暴力破解”的方式逐一遍历可能的私钥,幻想能碰到一个有效的且有币的私钥,可以说是不可能,就算是量子计算机也没用。
一个钱包只有一个私钥且不能修改。
在导入钱包中,输入私钥并设置一个密码(不用输入原密码),就能进入钱包并拥有这个钱包的掌控权,就可以把钱包中的代币转移走。
由于私钥64位,长得太难看,没有可读性,而私钥的备份在电脑上复制起来容易,手抄下来就比较麻烦,但私钥保存在联网的电脑上不安全,有被其他人看到的风险,于是有了助记词工具。
助记词是明文私钥的另一种表现形式,最早是由BIP39提案提出,其目的是为了帮助用户记忆复杂的私钥(64位的哈希值)。助记词一般由12、15、18、21个单词构成,这些单词都取自一个固定词库,其生成顺序也是按照一定算法而来,所以用户没必要担心随便输入12个单词就会生成一个地址。助记词是未经加密的私钥,没有任何安全性可言,任何人得到了你的助记词,可以不费吹灰之力的夺走你的资产。所以在用户在备份助记词之后,一定要注意三点:
助记词一般会在你创建新钱包的时候出现一次,后面就再也不会出现了,所以创建新钱包时一定要把助记词抄下来,想办法备份。最好不要用屏幕截图或保存在电脑里,因为只要泄露,获取了你的助记词就等于获取了私钥,你的钱包就成了别人的钱包。
简而言之:助记词等于私钥,绝对不能泄露。
keystore常见于以太坊钱包,是你独有的、用于签署交易的以太坊私钥的加密文件。keystore是一串Json格式的字符串,可以用任何以太坊钱包打开它。keystore必须配合你的钱包密码来使用,备份了keystore同时别忘了备份钱包的密码。
用户可以使用备份的助记词,重新导入imToken之类的钱包工具,用新的密码生成一个新的Keystore,可以用这种方法来修改钱包密码。
助记词=密钥=keystore+密码!保管好私钥或者助记词不被泄露,或是保存好keystore+记住密码,你才真正拥有了虚拟资产。
再来一个比较形象的比喻。
概念清楚之后,瞬间感觉轻松多了。再也不用担心因为不明白而担心操作失误的问题。最重要的是将私钥、助记词和keystore备份好,尽量离线备份多份,这样才能保证账号的安全。
1、科普|什么是以太坊私钥储存(Keystore)文件?
2、如何妥善备份你的以太坊钱包?
3、币圈名词:地址、密码、私钥、助记词,你真的分清楚了吗
4、「地址、密码、私钥、助记词、Keystore」那些事
二、一文看懂钱包助记词和根私钥的关系
在最近的《区块链核心成员》的课程答疑中,讲师讲的最多的还是加密货币的密码机制。其中有好几个问题是关于私钥和助记词的。比如:
简单地说,私钥就是一个256位的随机数。这个随机数的产生是钱包功能之一。也就是说,钱包内置了密码级别的随机数产生器,保证产生的随机数是没有规律可循的,也就是说不易破解的。注意钱包是在用户终端运行的,产生的私钥就保存在用户终端,不会也不应该上传给钱包公司。这一点非常重要。大家尽量要使用开源的,被公开考验过的钱包软件,保证安全。
进一步说,现在的绝大多数钱包都是确定性钱包,它首先产生一个根私钥,而后根据这个根私钥可以产生无数的派生私钥,我们的钱包地址就是这些派生私钥所对应的公钥经过运算得到的地址。算法是固定的,因此地址也就是固定的。那么,这里,最重要的就是根私钥了。因为有了根私钥,根据固定的算法,就可以求出派生私钥,一切都可以简单地计算出来。
这里注意,根私钥不一定要是256位的。可以是128位,或196位或其他位数,只要强度足够大(一般要求至少128位)就行,而由其计算出来的派生私钥则一定是256位的。
根私钥与助记词是一一对应的关系。也就是说一个根私钥就对应一组助记词,一组助记词也对应一个根私钥。两者可以简单运算出来。
根私钥与助记词之间的对应关系可以查看 BIP39(BIP的意思是比特币的改进建议,BIP39是正式发布的第39号建议)。BIP39是一部字典,这个字典有各种语言版本,我们最感兴趣的就是中文版了。当然还有英文,韩文,德文,法文,日文等等。这个字典什么样呢?很简单,每本字典都是一个模子,都包含2048个常用字(比如中文版)或单词(比如英文版),不多不少,就是2048个。每个字都有一个编号,从0到2047,就这么多。其他啥也没有。
那么这个字典表示什么呢?就是表示一个对应关系,也就是说通过字可以查编号,或者通过编号可以查到字。
好了,学过计算机或者了解2进制的朋友,当然知道2048(0~2047)意味着什么,很简单,就是2的11次方,也就是说11位2进制数可以表示0到2047。其实这就是助记词和根私钥的关系。
也就是说每一个字表示一个11位2进制数,或者说一个11位2进制数通过查字典就知道它表示哪个字。举个例子来说,我们产生了一个128位的根私钥,这样从头开始,每11位11位地分开,这样我们就有了11个11位二进制码,还剩下7位,咋办?好办。把最后7位也凑成11位就行了,差4位就补上。这4位正好可以为128为做校验来保证正确性。整个过程是这样:
那助记词回推私钥也就简单了,这样:
更多细节可以参看我的文章:
数字货币入门之钱包原理及钱包安全
三、助记词和私钥有一个就行了吗
一个助记词包括非常多的私钥和私钥对应的公钥。
有一个开源站bip什么的,可以把助记词翻译成各种语言和密钥对。从HD钱包的创建方式可知,要创建一个HD钱包,我们必须首先有一个确定的512bit(64字节)的随机数种子。如果用电脑生成一个64字节的随机数作为种子当然是可以的,但是恐怕谁也记不住。
由于在生成助记词的过程中引入了校验码,所以,助记词如果弄错了,软件可以提示用户输入的助记词可能不对。生成助记词的过程是计算机随机产生的,用户只要记住这些助记词,就可以根据助记词推算出HD钱包的种子。
从助记词算法可知,只要确定了助记词和口令,生成的HD种子就是确定的。如果两个人的助记词相同,那么他们的HD种子也是相同的。这也意味着如果把助记词抄在纸上,一旦泄漏,HD种子就泄漏了。如果在助记词的基础上设置了口令,那么只知道助记词,不知道口令,也是无法推算出HD种子的。
把助记词抄在纸上,口令记在脑子里,这样,泄漏了助记词也不会导致HD种子被泄漏,但要牢牢记住口令。
私钥安全吗:
我们前面提到了私钥是本质是256位的随机数,那么私钥生成的总数为2的256次方。
这个总数听上去好像很普通,但其实已经无法用常见事物来描述了:“一根头发丝儿的直径,尺寸约为50万个原子叠加,私钥的总数接近可观测宇宙中所有原子的数量。”“360个地球上的每一克土地(物质)都变成一个地球,这些地球上所有的水分子数量之和就是私钥的总数。”
所以想通过暴力碰撞去获取特定地址的私钥,难度相当于在辣么多地球上找一个水分子,在浩渺的宇宙中寻找一个原子……而你,连家里钥匙丢了都找不到。虽然私钥可生成范围足够大,但是如果生成私钥的算法有问题,那也会有隐患。比如一个钱包的随机数生成不够随机,那么是有可能给两个用户生成同一组私钥的,这里就比较考验钱包团队的密码学功底了。
本文来自用户投稿,不代表币大大立场,如若转载,请注明出处:https://czxurui.com/jys/177255.html


发表回复
评论列表(0条)