区块链技术10:如何存储和使用比特币

区块链技术10:如何存储和使用比特币

均为个人笔记,欢迎纠错
课程链接

比特币钱包中有什么

  • 比特币钱包只保存用户公私钥对的 密钥链
  • 区块链是去中心化的,没有类似银行等可以保存用户余额等信息的机构,钱币只体现在交易中,因此比特币钱包中没有比特币

钱包的种类

  • 非确定性钱包(Nondeterministic Wallet, 也称 Just a Bunch Of Keys,简称 JBOK 钱包):所保存的密钥间无联系。
  • 确定性钱包(Deterministic Wallet):所保存的密钥均由一个主密钥产生,该主密钥被称为种子。为便于用户记忆,种子被编码为一组单词(不限于英语),这些单词也称为助记词
    • BIP 共同定义了一种确定性钱包的实现,这种钱包被称为分层确定性(HD,Hierarchical Deterministic)钱包 。

HD钱包

助记词是如何生成的(BIP-39)

  • 生成一个 128 位(到 256 位)的随机序列(熵);
  • 提出该随机序列经 SHA256 后产生序列的前几位(熵长/32)作为该随机序列的校验和;
  • 将校验和添加到随机序列的末尾;
  • 将添加校验和后的序列以 11 位为单位进行划分;
  • 将每个 11 位与预先定义的包含 2048 个单词的词库比对进行替换;
  • 得到助记词。

生成种子(BIP-39)

  • PBKDF2 密钥延伸函数的第一个参数是从步骤 6 生成的助记符
  • PBKDF2 密钥延伸函数的第二个参数是盐。 由字符串常数“助记词”与可选的用户提供的密码字符串连接组成。
  • PBKDF2 使用 HMAC-SHA512 算法,使用 2048 次哈希来延伸助记符和盐参数,产生一个 512位 的值作为其最终输出。 这个 512 位的值就是种子。

生成公私钥对 (BIP-32)

  • 使用 HMAC-SHA512 对种子进行哈希加密;
    • HMAC-SHA512 使用 SHA512 哈希算法,以一个消息和一个密钥作为输入,生成 512 位的消息摘要作为输出;
    • 从种子计算主私钥时,种子作为输入的消息,字符串“Bitcoin seed”作为输入的密钥,计算产生 512 位的输出。
  • 将加密输出的 512 位结果划分为左右两个 256 位;
  • 左 256 位作为主私钥,由它生成 264 位的主公钥;
  • 右 256 位作为主链码。
    • 主私钥用于生产后代子私钥和主公钥;
    • HD 协议使用 ECDSA 公钥函数 point()(椭圆曲线)由公钥生成私钥。

point()

child_public_key ==
point( (parent_private_key + i) % p ) == 
parent_public_key + point(i) 

       
对上面解释,
子私钥的生成:子私钥 = (父私钥 + i) % p
公钥的生成:公钥 = point(私钥)
同时,point() 满足如下特性:
子公钥 = 父公钥 + point(i)
       
对于上述一般密钥, i = 索引;
对于扩展密钥, i = 索引 + 父公钥 + 父链码;
对于强化自密钥, i = 索引 + 父私钥 + 父链码。

小结

       生成过程如下:

  • 随机序列 -> 助记词
  • 助记词 + salt -> 种子
  • 种子 + 字符串“Bitcoin seed” -> 主密钥 -> 主公钥

       因此 HD 钱包中需保存助记符和用户密语。

扩展密钥

       为了切断兄弟姐妹间的联系,需加入新的计算参数,这就是扩展密钥。

猜你喜欢

转载自blog.csdn.net/m_pNext/article/details/109482025
今日推荐