区块链钱包技术原理

2019-10-08  本文已影响0人  一钱科技

区块链的技术原理:

生成助记词

  私钥一般太难记忆,使用不方便,所以为简化操作同时保证安全,就出现了助记词的方法。一般情况下,助记词由一些单词组成,只要按照顺序输入,也能打开钱包。

规定熵的位数必须是 32 的整数倍,所以熵的长度取值位128 到 256 之间取 32 的整数倍的值,分别为 128, 160, 192, 224, 256;

校验和的长度为熵的长度/32 位, 所以校验和长度可为 4,5,6,7,8 位;

助记词库有 2048 个词,用 11 位可全部定位词库中所有的词,作为词的索引,故一个词用 11 位表示,助记词的个数可为 (熵+校验和)/11,值为 12,15,18,21,24

助记词规则

 1. 生成一个长度为 128~256 位(bits)的随机序列(熵);
 2. 取熵哈希后的前n位作为校验和(n= 熵长度/32);
 3. 随机序列+校验和;
 4. 把步骤3得到的结果每 11位切割;
 5. 步骤4得到的每11位字节匹配词库的一个词;
 6. 步骤5得到的结果就是助记词串;


生成助记词
通过助记词生成种子

  助记词由长度为128 到 256 位的随机序列(熵)匹配词库而来,随后采用PBKDF2 function 推导出更长的种子(seed)。生成的种子被用来生成构建 deterministic Wallet 和推导钱包密钥。
  在密码学中,Key stretching技术被用来增强弱密钥的安全性,增加了暴力破解 (Brute-force attack) 对每个可能密钥尝试攻破的时间,增强了攻击难度。各种编程语言原生库都提供了 key stretching 的实现。PBKDF2(Password-Based Key Derivation Function 2)是常用的 key stretching 算法中的一种。基本原理是通过一个为随机函数(例如HMAC 函数),把明文和盐值作为输入参数,然后重复进行运算最终产生密钥。

  为了从助记词中生成二进制种子,BIP39 采用 PBKDF2 函数推算种子,其参数如下:

  7. 助记词句子作为密码;
  8. "mnemonic" + passphrase 作为盐;
  9. 2048 作为重复计算的次数+HMAC-SHA512 作为随机算法,最终得到BIP32 种子,512 位(64 字节)是期望得到的密钥长度;

  DK = PBKDF2(PRF, Password, Salt, c, dkLen)

助记词生成种子
从根种子生成主密钥 (master key) 和主链码 (master chain code)
种子生成密钥

  上图中根种子通过不可逆HMAC-SHA512算法推算出512位的哈希串,左256位是Master Private key(m),右256位是master chain code,通过m结合推导公钥的椭圆曲线算法能推导出与之对应的264位master public Key (M)。chain code作为推导下级密钥的熵。

私钥、公钥和地址产生的方式(以BTC为例)

  从私钥推导出公钥、再从公钥推导出公钥哈希都是单向的,也就是采用不可逆算法。

单向推导
keystore、密码

  用户最好的体验仍然会是密码方式,所以钱包还提供了keystore让用户导出保存,这个Keystore也是私钥经过加密过后的一个文件,需要你自己设置的密码才能打开文件。这样的好处是就算keystore文件被盗,只要你额外设置的密码够长够随机,那么短时间内私钥也不会泄露,有充足的时间转移地址里面的加密货币到其他地址。Keystore会存储在使用的设备里,这样每次登陆只用输入相应密码即可。

远程过程调用(RemoteProcedure Call, RPC)

列出主流项目相关的 RPC 接口以及开源钱包项目,以供参考。

【参考文献】

区块链钱包的工作原理


  声明:转载此文是出于学习和传递更多信息的目的。若有来源标注错误或侵犯了您的合法权益,请作者与我联系,将及时更正、删除,谢谢。

上一篇 下一篇

猜你喜欢

热点阅读