- 第 1 章 区块链
- 第 2 章 以太坊
- 第 3 章 以太坊私链入门
- 第 4 章 以太坊网络
- 第 5 章 geth v1.8.16 命令详解
- 第 6 章 Wallet
- 第 7 章 Token
- 第 8 章 智能合约语言 Solidity v0.5.0
- 第 9 章 Truffle v4.1.8 开发框架
- 第 10 章 web3.js - 1.0.0
- 第 11 章 web3j v3.4.0 - Jave Client
- 11.2. 启动以太坊
- 11.3. Maven pom.xml 文件
- 11.4. Java 与 Solidity 数据类型映射关系
- 11.5. 常量
- 11.6. 连接到服务器获取版本号
- 11.7. 获得以太坊状态信息
- 11.8. 单位转换
- 11.9. 账号管理
- 11.10. Credentials
- 11.11. 交易
- 11.12. 钱包
- 11.13. 智能合约
- 11.14. ERC20合约
- 11.15. Infura
- 11.16. 助记词
- 11.17. 过滤器 (Filter)
- 11.18. Subscription
- 11.19. 解锁账号
- 11.20. IBAN (International Bank Account Number)
- 11.21. Springboot with Ethereum (web3j)
- 第 12 章 web3.py - A python interface for interacting with the Ethereum blockchain and ecosystem.
- 第 14 章 Ethereum Developer APIs
- 第 15 章 infura
- 第 16 章 以太坊案例
- 第 17 章 FAQ
- 17.3. Error: authentication needed: password or unlock
- 17.4. 新增节点后不生效
- 17.5. Unhandled rejection Error: Returned error: The method personal_unlockAccount does not exist/is not available
- 17.6. Error: exceeds block gas limit
- 17.7. Migrations.sol:11:3: Warning: Defining constructors as functions with the same name as the contract is deprecated. Use "constructor(…) { … }" instead.
- 17.8. Exception in thread "main" rx.exceptions.OnErrorNotImplementedException: Invalid response received: okhttp3.internal.http.RealResponseBody@6c25e6c4
- 17.9. 旧版本 Remix(browser-solidity) 本地安装
- 第 18 章 Hyperledger Fabric v2.0.0
- 第 19 章 Hyperledger Fabric 运维
- 第 20 章 Chaincode 链码(智能合约)
- 第 21 章 Hyperledger Fabric Client SDK for Node.js
- 第 22 章 fabric-sdk-java
- 第 24 章 已知 Hyperledger 落地案例
- 第 25 章 Fabric Command
- 第 26 章 Fabric FAQ
- 第 27 章 IPFS(InterPlanetary File System,星际文件系统)
- 第 28 章 IPFS 命令
- 第 29 章 IPFS WebUI
- 第 30 章 IPFS 集群配置
- 第 31 章 IPFS API
- 第 32 章 IPFS Faq
- 第 33 章 EOS
- 第 34 章 EOS 安装
- 第 35 章 CLEOS
- 第 36 章 智能合约开发
- 第 37 章 EOS Dapp 开发
- 第 38 章 FAQ
- 第 39 章 BaaS (Blockchain as a Service) 平台
- 第 40 章 BitCoin
- 第 41 章 其他区块链相关
- 附录 1. 附录
1.19. BIP39协议:使用助记词生成确定性钱包
1.19. 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.19.1. 摘要
这个BIP描述了使用助记码或者助记句子(简称助记词)--一组便于记忆的单词来生成确定性钱包。
这个BIP由两部分构成:生成助记词和把生成的助记词转化成一个二进制种子。这个种子后面会更急类似于BIP32的方法生成确定性钱包。
1.19.2. 动机
与处理原始的二进制或者十六进制的钱包种子相比,在人机交互过程中助记词是更胜一筹的。这些助记单词可以被写在纸上或者通过电话说出来。
本指南旨在通过人类可读的转录来传输计算机生成的随机性。并不是将用户创建的句子(也称为脑钱包)处理到钱包种子中的方法。
1.19.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.19.4. 单词表
理想的单词列表具有以下特点:
智能选词
单词列表以这种方式创建:输入前四个字母来就足以明确地标识这个单词;
避免相似的单词
"build" and "built", "woman" and "women", or "quick" and "quickly" 这样的词对,不仅使记忆困难,而且更容易出错,更难猜到;
排序的单词列表
排序的单词列表允许更有效地查找代码字(即,实现可以使用二分搜索而不是线性搜索)
这也允许使用字典树(前缀树),例如用于更好的压缩
单词表可以包含本土字符,但必须使用规范化形式兼容性分解(NFKD)以UTF-8编码。
1.19.5. 从助记词到种子
用户可以决定用密码保护他们的助词。如果密码不存在,则使用空字符串“”代替。
要通过助记词创建一个二进制种子,我们使用助记符作为密码(UTF-8 NFKD)和字符串“mnemonic”+ passphrase 作为盐(再次以UTF-8 NFKD)来调用PBKDF2函数。迭代计数设置为2048,HMAC-SHA512用作伪随机函数。派生密钥的长度为512位(= 64字节)。
该种子可以随后用于使用BIP-0032或类似方法产生确定性钱包。
助记词转换为二进制种子完全独立于生成这个助记词。这导致相当简单的代码; 助记词结构没有约束,客户可以自由地实现自己的单词列表,甚至是整个助记词的生成器,允许字典列表中的输入错误检测或其他用途的灵活性。
虽然使用的助记词可能不是通过“生成助记词”部分中描述的算法生成的,但这是不建议的,软件必须使用单词表计算助记词的校验和,如果无效则发出警告。
所描述的方法还提供似乎可信的可否认性,因为每个密码短语产生一个有效的种子(因此产生确定性钱包),但是只有正确的那一个才能使所需的钱包可用。
1.19.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.19.7. 开发库
1.19.7.1. Node.js
https://www.npmjs.com/package/bip39
1.19.7.2. Python
https://github.com/trezor/python-mnemonic
1.19.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.19.8. Netkiller 助记词词库
HD Wallet 采用 2048 个单词,或者汉字作为助记词,这些词库对外公开,很多钱包仅仅使用path第一个地址并且没有加密。如果你知道某个用户的助记词中的11各词的排列顺序,那么我们就可以通过穷举方法,算出所有地址的私钥,如果碰巧找到了已经在使用的地址。就可以将里面的ETH全部转走。
为了增加 HD Wallet 的安全,我做了一个词库,这个词库不对外公开,并且使用的汉字均是不常用汉字。只能复制粘贴,几乎很难使用输入法输入该汉字。
同时path 还做了分层,和索引地址。分层采用时间维度,索引采用随机数, Seed 做加密处理。助记词共 15 个汉字。
效果如下
汉字助记词:欈 戀 髎 響 麢 戵 邎 蠢 鶖 躒 蠈 鰘 譥 趱 巆 地址:0x4949225eab0121d1e0b0eeb286a12b04ff596471 私钥:b5ce4ac958fbdcd385d6ae850c1870c6da7b990981363c25036a31ba06be6636 汉字助记词:霼 彎 曤 纀 鸇 鷔 鶹 纚 鱱 讁 艣 鼴 黭 纒 贛 地址:0x430097d16819108068a7af22a116285e54bc3e6b 私钥:3b78431a43a2c69e861870f0eff1d54d3965247ca5e588a9f907904f9ea5b822 汉字助记词:聾 鱦 骥 鬘 鰕 蘲 韃 鏻 雤 鑀 瓤 蘣 壥 躠 罋 地址:0x641fd58728cf08bc8795d41cfd3885a4f1c8dced 私钥:b7c2ff2a39e3a534e6e89288b05b4a283b10b34b2dfca2b336676729c7a68ad1 汉字助记词:轕 鶼 瀝 钁 麝 鸑 灙 纞 躐 嚹 櫞 鱁 贑 癠 躤 地址:0xae6ad7cf3e31556bc7262e25fba2ebad9954d08b 私钥:c989fe5c108b0bd33e5731919e09c30c639a4ff29fb4e66fe3052975855181f6 汉字助记词:鰵 鐗 鱇 彏 鱞 鷮 鼯 矃 曟 鬙 衢 斅 櫜 鸒 襨 地址:0x7fc6bca55c51ab3b4266d8f67d63c196ac874d93 私钥:53e755075653a64867f885e702ca0a2612bdd13ec2bed0df647bf568a639bc46
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论