目录:https://blog.csdn.net/qq_40452317/article/details/89646633
摘自《精通比特币》
1、助记码词汇(BIP-39)
助记码词汇是英文单词序列代表(编码)用作种子对应所确定性钱包的随机数。 单词的序列足以重新创建种子,并且从 种子那里重新创造钱包以及所有私钥。
在首次创建钱包时,带有助记码的,运行确定性钱包的钱包的应用程序将会向使用者展示一个12至24个词的顺序。单词的顺序就是钱包的备份。它也可以被用来恢复以及重新创造应用程序相同或者兼容的钱包的**。助记码词汇可以让使用者复制钱包更容易一些,因为相比较随机数字顺序来说,它们更容易地被阅读和正确抄写。
助记词经常与“脑钱包”混淆。 他们不一样。主要区别在于脑钱包由用户选择 的单词组成,而助记符是由钱包随机创建的,并呈现给用户。 这个重要的区别使 助记词更加安全,因为人类猜测随机数还是无能为力。
BIP-39 定义了助记符码和种子的创建,为了清楚起见,该过程分为两部分:
1-6 步是创建助记词,7-9 步是从助记词到种子。
2、创建助记词
助记词是由钱包使用 BIP-39中定义的标准化过程自动生成的。 钱包从熵源开始, 增加校验和,然后将熵映射到单词列表:
- 1、创建一个 128 到 256 位的随机序列(熵)。
- 2、提出 SHA256 哈希前几位(熵长/32),就可以创造一个随机序列的校验和。
- 3、将校验和添加到随机序列的末尾。
- 4、将序列划分为包含 11 位的不同部分。
- 5、将每个包含 11 位部分的值与一个已经预先定义 2048 个单词的字典做对应。
- 6、生成的有顺序的单词组就是助记码。
3、从助记词生成种子
助记词表示长度为128至256位的熵。 通过使用**延伸函数PBKDF2,熵被用于导出较长的(512位)种子。将所得的种子用于构建确定性钱包并得到其**。
**延伸函数有两个参数:助记词和盐。其中盐的目的是增加构建能够进行暴力攻击的查找表的困难度。 在 BIP-39 标准中,盐具有另一目的,它允许引入密码短语(passphrase),作为保护种子的附加安全因素,我们将在BIP-39可选密码短语章节详细地描述。
创建助记词之后的 7-9 步是:
- 7、PBKDF2 **延伸函数的第一个参数是从步骤 6 生成的助记符。
- 8、PBKDF2 **延伸函数的第二个参数是盐。 由字符串常数“助记词”与可选的用 户提供的密码字符串连接组成。
- 9、PBKDF2 使用 HMAC-SHA512 算法,使用 2048 次哈希来延伸助记符和盐参数, 产生一个 512 位的值作为其最终输出。 这个 512 位的值就是种子。
**延伸函数,使用 2048 次哈希是一种非常有效的保护,可以防止对助记词或密码短语的暴力攻击。 它使得攻击尝试非常昂贵(从计算的角度),需要尝试超过几千个密码和助记符组合,而这样可能产生的种子的数量是巨大的 (2^512)。
4、BIP-39中的可选密码短语
BIP-39标准允许在推导种子时使用可选的密码短语。 如果没有使用密码短语,助记词是用由常量字符串“助记词”构成的盐进行延伸,从任何给定的助记词产生一个特定的512位种子。 如果使用密码短语,**延伸函数使用同样的助记词也会产生不同的种子。
事实上,给予一个单一的助记词,每一个可能的密码短语都会导致不同的种子。 基本上没有“错误”的密码短语, 所有密码短语都是有效的, 它们都会导致不同的种子,形成一大批可能未初始化的钱包。这批钱包非常之大 (2^512),使用暴力**或随机猜测基本不可能。
需要注意的是,使用密码短语也会引起丢失的风险:如果钱包所有者无行为能力或死亡,没有人知道密码,种子是无用的,所有存储 在钱包中的资金都将永远丢失。相反,如果所有者将密码短语与种子备份在相同 的地方,则违反了上述第二个因素的目的。
虽然密码是非常有用的,但它们只能与仔细计划的备份和恢复流程结合使用,考虑到所有者个人风险的可能性,应该 允许其家人恢复加密资产。
还有一个 BIP-39 生成器在独立的网页中实现,对于测试和实验非常有用。可以生成助记词、种子和扩展私钥。BIP-39 生成器可以离线使用:https://iancoleman.io/bip39/#chinese_simplified