主页 > 合法imtoken钱包下载 > 区块链技术10:如何存储和使用比特币
区块链技术10:如何存储和使用比特币
比特币钱包里有什么
比特币钱包只存储用户的公私密钥对的钥匙串。
区块链是去中心化的,没有银行等机构可以存储用户余额等信息。硬币只反映在交易中,所以比特币钱包里没有比特币。
钱包类型
非确定性钱包(Nondeterministic Wallet,也称为 Just a Bunch Of Keys,简称 JBOK Wallet):存储的密钥之间没有关联。
确定性钱包:存储的密钥由称为种子的主密钥生成。为了让用户更容易记住比特币是怎么使用的,种子被编码为一组单词(不限于英语),也称为助记符。
BIP 共同定义了一个确定性钱包的实现,称为分层确定性 (HD) 钱包。
高清钱包
助记符是如何生成的(BIP-39)
生成128位(到256位)的随机序列(熵);
提出随机序列经过SHA256生成序列的前几位(熵长/32)作为随机序列的校验和;
在随机序列的末尾添加校验和;
将校验和相加后的序列以 11 位为单位进行除法;
用 2048 个字的预定义词典替换每个 11 位;
得到助记词。
生成种子(BIP-39)
PBKDF2密钥扩展函数的第一个参数是第6步生成的助记词。
PBKDF2 密钥扩展函数的第二个参数是盐。由字符串常量“助记符”与可选的用户提供的密码字符串连接而成。
PBKDF2 使用 HMAC-SHA512 算法比特币是怎么使用的,使用 2048 个哈希来扩展助记符和盐参数,产生一个 512 位的值作为其最终输出。这个 512 位的值就是种子。
生成公私密钥对 (BIP-32)
使用 HMAC-SHA512 对种子进行哈希处理;
HMAC-SHA512采用SHA512哈希算法,以一条消息和一个密钥为输入,生成一个512位的消息摘要作为输出;
从种子计算主私钥时,种子作为输入消息,字符串“比特币种子”作为输入密钥,计算产生一个 512 位的输出。
将加密输出的512位结果分成左右两个256位;
剩下的 256 位作为主私钥,生成 264 位的主公钥;
右 256 位用作主链码。
主私钥用于产生后代子私钥和主公钥;
HD 协议使用 ECDSA 公钥函数 point()(椭圆曲线)从公钥生成私钥。
观点()
child_public_key==
点((parent_private_key + i)% p)==
parent_public_key + point(i)
1 child_public_key ==
2 点((parent_private_key + i)% p)==
3 parent_public_key + point(i)
如上所述,
子私钥的生成:子私钥=(父私钥+i)%p
公钥的生成:公钥=点(私钥)
同时,point() 满足以下特点:
子公钥 = 父公钥 + 点(i)
对于上面的通用键,i = index;
对于扩展密钥,i = 索引 + 父公钥 + 父链码;
对于强化的自密钥,i = 索引 + 父私钥 + 父链码。
概括
生成过程如下:
随机序列 -> 助记符
助记符 + 盐 -> 种子
种子 + 字符串“比特币种子” -> 主密钥 -> 主公钥
因此,助记词和用户密码需要存放在HD钱包中。
扩展密钥
为了切断兄弟之间的联系,需要增加一个新的计算参数,即扩展键。
———————————————
原文链接: