今天来说一下区块链-比特币中的一个概念,并且在iOS中将它实现。
首先介绍一下什么是BIP,BIP全称是Bitcoin Improvement Proposals,是用来提出Bitcoin的新功能或改进措施的文件。可以由任何人提出,经过审核后会公布在bitcoin/bips中。
其中BIP32、BIP39和BID44又是HD wallet中使用的核心概念。
BIP-39 介绍
HD wallet具有管理多个密钥和地址的机制,我们可以使用一个随机字符串seed通过BIP32或BIP44协议创建一个HD wallet,但是一串字符串的记忆成本太高,而且摘抄下来也会很麻烦。所以BIP39协议应运而生,他是可以使用12-24单字(可以是英文、中文、日文等等语言)来帮助用户更好的保存seed。一般我们使用长度为12个的英文单词来生成BIP39的内容,这串单词被称为mnemonic code,中文名叫助记词。
BIP-39 词典
可以在bitcoin/bips下的bip-0039中来获取助记词字典,现在已经支持简体中文、繁体中文、英文、法文、意大利文、日文、韩文、西班牙文每种2048个词来生成助记词。
BIP-39 生成助记词流程
助记词钱包是通过BIP-39中定义的标准化过程自动生成的,钱包从熵源开始,增加校验和,然后将熵映射到字典列表中。
- 1.创建一个128-256位的随机序列(熵)
- 2.提出SHA256哈希的前几位(熵长/32),就可以创建一个随机序列的校验和。
- 3.将校验和添加到随机序列的末尾。
- 4.将序列划分为包含11位的不同部分。
- 5.将每个包含11位部分的值与一个预先定义的2048个单词的字典做对应。
- 6.生成的有顺序的单词组就是助记词。
熵(bits) | 校验和(bits) | 熵+校验和(bits) | 助记词长度(单词个数) |
---|---|---|---|
128 | 4 | 132 | 12 |
160 | 5 | 165 | 15 |
192 | 6 | 198 | 18 |
224 | 7 | 231 | 21 |
256 | 8 | 264 | 24 |
使用iOS代码生成BIP-39 助记词
引入库
首先肯定是引入iOS中哈希需要用到的库
|
|
生成随机熵
我们可以使用SecRandomCopyBytes()
函数来生成一个随机的NSData比特组
|
|
生成助记词
生成好随机的熵之后,我们就可以通过随机熵的内容根据256哈希计算需要使用的单词列,然后在单词表中查找出需要的单词来。
|
|
需要的支持
其中我们需要几个辅助性操作:
字符串转换为16进制
|
|
16进制转换为比特数组
|
|
16进制字符串转换为NSData
|
|
调用
OK,这些关键的内容都写好之后,只需要调用最开始的生成随机字符的函数,指定好长度和助记词语言就可以根据BIP-39生成助记词了。
|
|
Demo
Demo地址在这里