以太坊系统学习教程:
https://www.netkiller.cn/blockchain/bip39.html

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

BIP:39
层:应用层
标题:使用助记词生成确定性钱包秘钥
作者:Marek Palatinus slush@satoshilabs.com
Pavol Rusnak stick@satoshilabs.com
Aaron Voisine voisine@gmail.com
Sean Bowe ewillbefull@gmail.com
状态:已经被提议
类型:标准化跟踪
创建日期:2013-09-10
译者:kimziv

1.16.1. 摘要
这个BIP描述了使用助记码或者助记句子(简称助记词)--一组便于记忆的单词来生成确定性钱包。

这个BIP由两部分构成:生成助记词和把生成的助记词转化成一个二进制种子。这个种子后面会更急类似于BIP32的方法生成确定性钱包。

1.16.2. 动机
与处理原始的二进制或者十六进制的钱包种子相比,在人机交互过程中助记词是更胜一筹的。这些助记单词可以被写在纸上或者通过电话说出来。

本指南旨在通过人类可读的转录来传输计算机生成的随机性。并不是将用户创建的句子(也称为脑钱包)处理到钱包种子中的方法。

1.16.3. 生成助记词
助记符必须以32位的倍数编码熵。随着熵的安全性提高,同时句子的长度也在增加。我们将初始熵长度称为ENT。ENT允许的大小为128-256位。

首先,生成ENT位的初始熵。通过取第一个生成的校验和

ENT/32

它的SHA256哈希的位。该校验和附加到初始熵的末尾。接下来,这些连接的比特位被分成多个11位的组,每个组用从0-2047的数字编码,用作单词表的索引。最后,我们将这些数字转换为单词,并将加入的所有单词组成助记句。

下表描述了初始熵长度(ENT),校验和长度(CS)和生成助记词(MS)的长度之间的关系。

CS = ENT / 32
MS = (ENT + CS) / 11

ENT CS ENT + CS MS

128 4 132 12
160 5 165 15
192 6 198 18
224 7 231 21
256 8 264 24

1.16.4. 单词表
理想的单词列表具有以下特点:

智能选词

单词列表以这种方式创建:输入前四个字母来就足以明确地标识这个单词;

避免相似的单词

"build" and "built", "woman" and "women", or "quick" and "quickly" 这样的词对,不仅使记忆困难,而且更容易出错,更难猜到;

排序的单词列表

排序的单词列表允许更有效地查找代码字(即,实现可以使用二分搜索而不是线性搜索)

这也允许使用字典树(前缀树),例如用于更好的压缩

单词表可以包含本土字符,但必须使用规范化形式兼容性分解(NFKD)以UTF-8编码。

1.16.5. 从助记词到种子
用户可以决定用密码保护他们的助词。如果密码不存在,则使用空字符串“”代替。

要通过助记词创建一个二进制种子,我们使用助记符作为密码(UTF-8 NFKD)和字符串“mnemonic”+ passphrase 作为盐(再次以UTF-8 NFKD)来调用PBKDF2函数。迭代计数设置为2048,HMAC-SHA512用作伪随机函数。派生密钥的长度为512位(= 64字节)。

该种子可以随后用于使用BIP-0032或类似方法产生确定性钱包。

助记词转换为二进制种子完全独立于生成这个助记词。这导致相当简单的代码; 助记词结构没有约束,客户可以自由地实现自己的单词列表,甚至是整个助记词的生成器,允许字典列表中的输入错误检测或其他用途的灵活性。

虽然使用的助记词可能不是通过“生成助记词”部分中描述的算法生成的,但这是不建议的,软件必须使用单词表计算助记词的校验和,如果无效则发出警告。

所描述的方法还提供似乎可信的可否认性,因为每个密码短语产生一个有效的种子(因此产生确定性钱包),但是只有正确的那一个才能使所需的钱包可用。

1.16.6. 单词列表
https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md

如果一个 HD 钱包助记词是 12 个单词,一共有 2048 个单词可能性,如何算出随机的生成的助记词可能性是一个排列问题,根据公式: n!/( n - r )! ,既 2048!/(2048-12)! = 5.2715379713014884760003093175282e+39。

Wordlists

English https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt

Japanese https://github.com/bitcoin/bips/blob/master/bip-0039/japanese.txt

Korean https://github.com/bitcoin/bips/blob/master/bip-0039/korean.txt

Spanish https://github.com/bitcoin/bips/blob/master/bip-0039/spanish.txt

Chinese (Simplified) https://github.com/bitcoin/bips/blob/master/bip-0039/chinese_simplified.txt

Chinese (Traditional) https://github.com/bitcoin/bips/blob/master/bip-0039/chinese_traditional.txt

French https://github.com/bitcoin/bips/blob/master/bip-0039/french.txt

Italian https://github.com/bitcoin/bips/blob/master/bip-0039/italian.txt

1.16.7. 开发库
1.16.7.1. Node.js
https://www.npmjs.com/package/bip39

1.16.7.2. Python
https://github.com/trezor/python-mnemonic

1.16.7.3. 其他实现

Elixir: https://github.com/izelnakri/mnemonic

Objective-C: https://github.com/nybex/NYMnemonic

Haskell: https://github.com/haskoin/haskoin

.NET C# (PCL): https://github.com/Thashiznets/BIP39.NET

.NET C# (PCL): https://github.com/NicolasDorier/NBitcoin

JavaScript: https://github.com/bitpay/bitcore-mnemonic, https://github.com/bitcoinjs/bip39 (used by blockchain.info)

Ruby: https://github.com/sreekanthgs/bip_mnemonic

Rust: https://github.com/infincia/bip39-rs

Swift: https://github.com/CikeQiu/CKMnemonic

C++: https://github.com/libbitcoin/libbitcoin/blob/master/include/bitcoin/bitcoin/wallet/mnemonic.hpp

C (with Python/Java/Javascript bindings): https://github.com/ElementsProject/libwally-core

1.16.8. Netkiller 助记词词库
HD Wallet 采用 2048 个单词,或者汉字作为助记词,这些词库对外公开,很多钱包仅仅使用path第一个地址并且没有加密。如果你知道某个用户的助记词中的11各词的排列顺序,那么我们就可以通过穷举方法,算出所有地址的私钥,如果碰巧找到了已经在使用的地址。就可以将里面的ETH全部转走。

为了增加 HD Wallet 的安全,我做了一个词库,这个词库不对外公开,并且使用的汉字均是不常用汉字。只能复制粘贴,几乎很难使用输入法输入该汉字。

同时path 还做了分层,和索引地址。分层采用时间维度,索引采用随机数, Seed 做加密处理。助记词共 15 个汉字。

效果如下

汉字助记词:欈 戀 髎 響 麢 戵 邎 蠢 鶖 躒 蠈 鰘 譥 趱 巆
地址:0x4949225eab0121d1e0b0eeb286a12b04ff596471
私钥:b5ce4ac958fbdcd385d6ae850c1870c6da7b990981363c25036a31ba06be6636

汉字助记词:霼 彎 曤 纀 鸇 鷔 鶹 纚 鱱 讁 艣 鼴 黭 纒 贛
地址:0x430097d16819108068a7af22a116285e54bc3e6b
私钥:3b78431a43a2c69e861870f0eff1d54d3965247ca5e588a9f907904f9ea5b822

汉字助记词:聾 鱦 骥 鬘 鰕 蘲 韃 鏻 雤 鑀 瓤 蘣 壥 躠 罋
地址:0x641fd58728cf08bc8795d41cfd3885a4f1c8dced
私钥:b7c2ff2a39e3a534e6e89288b05b4a283b10b34b2dfca2b336676729c7a68ad1

汉字助记词:轕 鶼 瀝 钁 麝 鸑 灙 纞 躐 嚹 櫞 鱁 贑 癠 躤
地址:0xae6ad7cf3e31556bc7262e25fba2ebad9954d08b
私钥:c989fe5c108b0bd33e5731919e09c30c639a4ff29fb4e66fe3052975855181f6

汉字助记词:鰵 鐗 鱇 彏 鱞 鷮 鼯 矃 曟 鬙 衢 斅 櫜 鸒 襨
地址:0x7fc6bca55c51ab3b4266d8f67d63c196ac874d93
私钥:53e755075653a64867f885e702ca0a2612bdd13ec2bed0df647bf568a639bc46

转载于:https://www.cnblogs.com/xiaocongcong888/p/9534185.html

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

  1. HPB-Wallet:HPB钱包助记词生成和备份

    HPB-Wallet:HPB钱包助记词生成和备份 助 记 词 生 成 1 BIP32, BIP39, BIP44 BIP32:定义 Hierarchical Deterministic wallet ...

  2. HPB钱包助记词生成和备份

    助记词生成 1 BIP32, BIP39, BIP44 BIP32:定义 Hierarchical Deterministic wallet (简称 "HD Wallet"),是一 ...

  3. 通过代码生成以太坊助记词、根据钱包地址获取私钥

    生成助记词.公私钥 新建一个目录 在目录下执行 npm init  (需安装nodejs)nodejs中文官网 安装依赖 (没有yarn的需要安装,直接执行 npm install -g yarn) ...

  4. web3通过助记词获取所有关联的账号:公钥、私钥、地址

    1. 业务逻辑 需要使用bip39协议将助记词转换成种子,再通过ethereumjs-wallet库生成hd钱包,根据路径的不同从hd钱包中获取不同的keypair,keypair中就包含有公钥.私钥 ...

  5. 以太坊BIP39助记词到公钥地址的原理与细节

    以太坊基础-你真的懂吗 以太坊私钥 eg: fad9c8855b740a0b7ed4c221dbad0f33a83a49cad6b3fe8d5817ac83d38b6a19 由256位:不考虑0x前缀 ...

  6. bip39:使用bip39生成助记词

    助记词 从HD钱包的创建方式可知,要创建一个HD钱包,我们必须首先有一个确定的512bit(64字节)的随机数种子. 如果用电脑生成一个64字节的随机数作为种子当然是可以的,但是恐怕谁也记不住. 如果 ...

  7. 比特币钱包(4) BIP39 助记词

    1. 定义生成助记词 助记词句子(mnemonic word sequence)作为密码,使用若干个助记词来替换之前直接生成随机数的方式(确定性钱包的种子随机数). 1.1. 生成步骤 1) . 生成 ...

  8. 数字货币钱包 HD Wallet的助记词和种子的生成原理(BIP39)

    BIP39描述了如何生成助记符,并将其转换为二进制种子.该种子可以生成确定性钱包.    如何生层助记词 我们先看看助记词范围--单词表.生成助记词的过程就是这个表里(2048个单词,记住这个数值)选 ...

  9. java助记词反向_GitHub - gangan1345/mnemonic-sdk: Mnemonic bip39 bip32 bip44 生成助记词 私钥...

    mnemonic-sdk Mnemonic bip39 bip32 bip44 支持 BIP39 助记词 支持 BIP32 子私钥 支持 BIP44 多币种管理 Install Gradle: Add ...

最新文章

  1. Vue中数组赋值问题
  2. 区块链论文: Bitcoin-NG: A Scalable Blockchain Protocol
  3. web程序部署常见(404)错误
  4. 线程、协成、IO模型
  5. 能否用痰盂盛饭——谈谈在头文件中定义外部变量
  6. 数字图像处理,读懂频域处理的“傅里叶变换”
  7. 关于getResource(/)的读取路径问题
  8. 数据库工作笔记15---Sqlserver2005中的DTS_以及DTS升级成Sqlserver2016的思路
  9. 记一次PHP服务器500错误的解决方法
  10. Riot v4.0.0-alpha.10 发布,JavaScript 的 MVP 框架
  11. Data Mining with R
  12. maya藤蔓插件_用maya制作藤蔓蔓延的效果
  13. 交换机配置常用的命令
  14. 人生必看的100部好电影
  15. Misc 自动拼图 CTF
  16. 5GC 网元AMF、SMF、AUSF、UPF、PCF、UDM、NRF、NSSF、NEF介绍
  17. 【VBS脚本】VBS复制Excel工作簿
  18. 如何解除计算机方向键问题,电脑键盘方向键错乱怎么处理
  19. 区块链革命 - 第1篇 假如需要变革 - 第2章 区块链经济七大设计原则
  20. 2020-2021 ICPC - Gran Premio de Mexico - Repechaje

热门文章

  1. Docker 快速上手学习入门教程 1
  2. 通过cocos裁切图片,将大图分为小图
  3. TOGAF®10标准读书会首场活动圆满举办,精彩时刻回顾!
  4. 阿里系App抓包分析(三)
  5. 【JSP】登陆成功跳转用户信息界面显示基本用户信息
  6. 5、实现登陆功能:如果用户名输入“tom”,密码“123”,提示登陆成功,否则提示输入错误,请重新输入!您还有XX次机会。 三次输入错误后将不可以再输入,并提示对不起,你的账号将被锁定
  7. 网站排名下降怎么恢复(网站降权的原因如何知道)
  8. 中国工程院院士、中国人工智能学会理事长李德毅:人工智能研究新进展
  9. 服务器划分不同虚拟主机,服务器划分不同虚拟主机
  10. qt.network.monitor: Could not get the INetworkConnection instance for the adapter GUID.QT关闭时程序异常结束