助记词是什么,有什么用?

  玩加密货币的朋友相信对助记词都不陌生,我们在使用钱包之前,会让你备份12个单词,在备份期间不允许截图操作,并且不断强调这12个单词非常重要,最好用物理方式备份,备份时身边不要有任何人。

  对于普通用户来说,如果只是一味的向他们强调助记词重要性的结论,而不告诉背后的原因的话,是很难调动起人的底层动力的,很可能过几天就忘了助记词的重要性(小编已经看过不少在群里呼唤自己因为助记词丢失而导致破产的杯具)。

  助记词的英文是Mnemonic,在大部分人的印象中,助记词=私钥,是导入钱包的工具,其实准确的说,助记词≥私钥,那么,助记词到底是从何而来,助记词到底有什么用呢?

  多账户需求

  我们先拿现实生活的例子打一个比方,通常来说,我们存在银行的钱都会有很多账户,有的账户用来买煎饼果子的零钱账户,有的是用来对公业务的账户,有的是存大额资产的账户。这些账户只需要一个身份证就能够办理,我们用一个身份证可以在网银上登录很多账户,万一银行卡不慎丢失了,也可以通过身份证进行补办。在现实生活中,身份证是无比重要的。

  而到了数字货币的世界,道理也是一样的,为了业务的方便,我们通常想要有多个账户,满足不同场景的需求。如果说每次创建账户都在公链上生成一个私钥,那就像每次办理银行卡都要记忆一长串的银行卡号一样的反人性。

  降低出错概率

  众所周知,在区块链世界里,只要保留了私钥,就能解锁账户,但是通常来说私钥是由64位的很长的字符串组成,如果我们想要创建100个账户,那我们就要记100个私钥,记录和保存成本是非常大的,况且,在记录海量的私钥的过程中,可能还会出现地址和私钥匹配不上的问题,或者记录时粗心大意写错字母的问题,等等,总而言之,出错的概率是很高的,由于数字货币这种“只认私钥不认人”的特点,这些小的错误很可能导致资产无法找回。

  保护隐私

  由于区块链公有链的公开的特性,链上的所有转账记录任何人都可以查到,如果同一个账户关联的收入支出太多了,最终是可以摸出一些线索,把你和一些交易给匹配起来的,所以为了隐私考虑,我们的很多隐私业务通常会创建出新的账户来进行交易。

  聪明的开发人员为了解决上述问题,提出了Bip39协议。Bip39协议的全称是Bitcoin protocol,最初是由比特币社区的开发者提出,后来被其他的主流区块链项目所认可,继而成为了整个行业共识和规范。

  BIP39协议的核心是,由12个单词来确定自己的账户,12个单词会生成很大的种子,从2的256次方选出一个数,由于随机生成的数是很大的,所以完全不用担心生成的12个单词会重复。

  12个单词生成的账户是固定的,拿到的12个单词就可以创建无数多的私钥、公钥和地址。

  用公式表示他们之间的关系,可写成如下形式:

  私钥=算法1(助记词)

  公钥=算法2 (私钥)

  公钥哈希=算法3 (公钥)

  地址=算法4 (公钥哈希)

  所以,地址=算法4(算法3(算法2(算法1(助记词))))

  当然,算法1、2、3、4都是公开的算法。

  通过密码学的保证,生成的单词顺序和内容是不可能会重复的,通过助记词,我们可以生成任意公链的地址,需要多少的地址就能够生成有多少个地址。

  大家可以通过https://iancoleman.io/bip39/生成助记词或者查看助记词对应的私钥、公钥和地址。

  并且,BIP39协议几乎是支持所有公链的。

小豹拿小豹私人的Matemask的助记词做了个实验:

  可以看到,通过我的Matemask的助记词创建的账户地址,和网站生成的地址是一模一样的,就连顺序也是高度一致的。

  技术角度理解助记词

  从技术上的角度来说,BIP39 是通过12个助记词的单词序列,通过 PBKDF2 与 HMAC-SHA512 函数创建出随机种子作为 BIP32 的种子(通常是16进制的)。

  相比于BIP32协议,我们可以看出那一种备份起来更友好:

  //BIP32 随机数种子090ABCB3A6e1400e9345bC60c78a8BE7

  //BIP39 助记词种子

  candy maple cake sugar pudding cream honey rich smooth crumble sweet treat

使用助记词作为种子其实包含2个部分:助记词生成及助记词推导出随机种子。

  生成助记词

  助记词生成的过程是这样的:先生成一个128位随机数,再加上对随机数做的校验4位,得到132位的一个数,然后按每11位做切分,这样就有了12个二进制数,然后用每个数去查BIP39定义的单词表,这样就得到12个助记词,这个过程图示如下:

助记词推导出种子

  这个过程使用密钥拉伸(Key stretching)函数,被用来增强弱密钥的安全性,PBKDF2是常用的密钥拉伸算法中的一种。

  PBKDF2基本原理是通过一个为随机函数(例如 HMAC 函数),把助记词明文和盐值作为输入参数,然后重复进行运算最终产生生成一个更长的(512 位)密钥种子。这个种子再构建一个确定性钱包并派生出它的密钥。

  密钥拉伸函数需要两个参数:助记词和盐。盐可以提高暴力破解的难度。 盐由常量字符串 “mnemonic” 及一个可选的密码组成,注意使用不同密码,则拉伸函数在使用同一个助记词的情况下会产生一个不同的种子,这个过程图示图下:

  助记词推动了区块链的普及

  有了助记词之后,任何一笔交易,我们都可以创建一个新的账户,账户里面的钱也可以进行自由转移。

  在区块链世界,只需要记住12个简单的助记词,就间接记住了所有区块链上的资产,就如同现实生活中的身份证一样便捷、高效。

  有了助记词之后,大大减轻了普通用户的使用成本,从体验上来说对用户是非常友好的,这拉进了区块链与普罗大众的距离,同时也满足了高端用户的隐私问题。可以这么说,BIP39协议大大的推动了区块链的普及。

  可能有人会说,“我最讨厌英语啊,让我记12个英语单词,简直就是要了我的命啊!”

  对于这部分用户我先不做评价,但是聪明的开发者早就想到了这一点,BIP39协议目前是支持了几大主流语言的,英语、日语、西班牙语、韩语、法语,当然也少不了中文,所以大家完全可以用12个汉字作为助记词。

  如果连12个汉字都懒得记的话,那我只能说,施主,区块链世界实在与你无缘,找个好人就嫁了吧。

  当然,任何事物都有两面性,助记词虽然带来了许多便利,但是,也诞生了另外的安全隐患,那就是一旦12个单词泄露,或者被黑客获取,助记词是未经加密的私钥,任何人得到了你的助记词,可以不费吹灰之力的夺走你的资产控制权。

作者:猎豹区块链

原文链接:https://www.kg.com/article/513424206583697408

原文地址:https://www.cnblogs.com/space007/p/9983219.html

时间: 2024-11-05 15:57:54

助记词是什么,有什么用?的相关文章

1.16. BIP39协议:使用助记词生成确定性钱包

以太坊系统学习教程: https://www.netkiller.cn/blockchain/bip39.html BIP:39 层:应用层 标题:使用助记词生成确定性钱包秘钥 作者:Marek Palatinus [email protected] Pavol Rusnak [email protected] Aaron Voisine [email protected] Sean Bowe [email protected] 状态:已经被提议 类型:标准化跟踪 创建日期:2013-09-10

Bytomd 助记词恢复密钥体验指南

比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom 背景知识 Bytom 使用的 密钥类型为基于 ed25519 的 chainkd.XPub 代码见 bytom/crypto/ed25519/chainkd 文档见 https://chain.com/docs/1.2/protocol/specifications/chainkd` 预备 代码修改 首先适

[转]简单科普私钥、地址、助记词、Keystore的区别

本文转自:https://www.jianshu.com/p/d0a4a44685d3 很多人保管不好自己的虚拟财产,发生丢币的情况,很多都是因为不清楚私钥的概念. 私钥(Private Key) 比特币的私钥是由64位十六进制的字符组成,长得像这样,比如:5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss. 私钥的生成方式是完全随机的,随机生成这样的字符串就会有16的64次方种可能,即:2的256次方,这个数字已经超过了宇宙中原子的个数,用“

如何开发一款以太坊(安卓)钱包系列1 - 通过助记词创建账号

上周我开源了一款钱包,反映很好,一周时间不到已经快到100 Star.接下来我会几篇系列文章把开发以太坊钱包的核心要点写出来,也算是对代码的一个解读. 写在前面 钱包是使用Android安卓平台编写,使用的是原生代码Java 语言编写, 是基于Java 1.8 版本,也使用了Java 1.8 中一些较新的语言特性,如 Lambda表达式等:另外还较多使用了ReactiveX/RxAndroid响应式编程用法. 在本系列文章中,重点是介绍以太坊钱包账号.交易等逻辑,有时可能会假定读者已经了解And

php实现以太坊助记词

以太坊助记词PHP开发包用来为PHP以太坊应用增加助记词和层级确定密钥支持能力.下载地址:以太坊助记词php开发包 . 1.开发包概述 以太坊助记词PHP开发包主要包括以下特性: 生成符合BIP39标准的助记词 将BIP39助记词转换为符合BIP32标准的层级确定密钥 支持BIP44多币种层级确定性钱包规范 兼容imtoken.metamask等常见钱包的助记词与密钥/地址转换 以太坊助记词PHP开发包运行在Php 7.1+环境下,当前版本1.0.0,主要代码文件清单如下: <table cla

[币严BIZZAN区块链]Java生成ETH钱包助记词、私钥、地址

本文主要介绍在Java工程中如何生成ETH钱包的助记词.私钥.地址. 一.在之前创建的spring boot 项目中的 pom.xml文件中加入需要的依赖 <dependency> <groupId>org.bitcoinj</groupId> <artifactId>bitcoinj-core</artifactId> <version>0.14.7</version> </dependency> <d

BIP39助记词生成简单流程

其实,bip39之前有过一些了解,但是都没有过深入的探索,最近具体学习下,顺便记录下: 1.首先,随机生成一个长度为32倍数的128-256位的二进制类型,我们把它称之为熵: 2.对这个生成的熵做sha256计算,取结果的前8位:(这里说明下,虽然取了8位,但是不一定全部用上,具体使用的位数计算:n = 熵的位数/32) 3.用熵与上一步中前n位进行拼接(熵放前),获得一个大整型(我们一般称这n位为校验位): 这里也说明下,之前我看到网上有人说是将熵以32位分割,然后每段末尾插入1个校验位,于是

《C++运算符优先结合助记词》

===================================== (新手上路一原创,共20 +1句) 作用类名全: 点箭标调构: 后增减运明转: 前增减非位反,正负解尺址换,新删数组无异常: 成员指针解引用: 乘除模: 加和减: 左移右移: 小于大于: 等于不等: 位与: 位异: 位或: 逻与: 逻或: 条件: 赋值: 复赋值: 抛出异常: 逗. (注:)一三赋值复赋值,抛出异常右.

声母数字助记系统

声母数字助记系统 大部分人日常应用的数学大概就是加减乘除,但很多人应该都算不过菜市场的小贩.五元三斤的大葱你想买一斤半,他看似不经意地一抓准保给你抓一斤八两凑三块钱的.这是熟能生巧. 除了熟能生巧,心算肯定还有方法.阿瑟本杰明(Arthur Benjamin)是大学教授,也是个数学魔法师(Mathemagician).他的心算能力很强,我看过他在TED上的表演,他可以很快速心算3.4位数的乘法,5位数的乘方,公元某年某月某一天是星期几等.在他算现场随机给出的数字37691的平方时,他告诉了我们他