美文网首页
区块链钱包技术原理

区块链钱包技术原理

作者: 一钱科技 | 来源:发表于2019-10-08 09:16 被阅读0次

    区块链的技术原理:

    • 钱包助记词生成种子(Seed),种子生成私钥。私钥推导出公钥,公钥节选部分生成钱包地址。
    • 同时钱包也提供了keystore,它也是私钥加密后的文件,可以配合正常的密码使用,便捷了用户的钱包使用。
    生成助记词

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

    规定熵的位数必须是 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为例)
    • 比特币私钥使用SHA-256生成的32字节(256位)的随机数,有效私钥的范围取决于比特币使用的spcp256k1椭圆曲线数字签名标准;
    • 在私钥的前面加上版本号,后面添加压缩标志和附加校验码,所谓附加校验码,就是对私钥经过2次SHA-256运算,取两次哈希结果的前四字节),然后再对其进行Base58编码,就可以得到我们常见的WIF(Wallet import Format)格式的私钥。
    • 私钥经过椭圆曲线乘法运算,可以得到公钥。公钥是椭圆曲线上的点,并具有x和y坐标。公钥有两种形式:压缩的与非压缩的。早期比特币均使用非压缩公钥,现在大部分客户端默认使用压缩公钥。

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

    单向推导
    • 公钥产生后,将公钥通过SHA256哈希算法处理得到32字节的哈希值;后对得到的哈希值通过RIPEMD-160算法来得到20字节的哈希值 ——Hash160
    • 把版本号[2]+Hash160组成的21字节数组进行双次SHA256哈希运算,得到的哈希值的头4个字节作为校验和,放置21字节数组的末尾。
    • 对组成25位数组进行Base58编码,最后得到地址。
      下图以非压缩格式的65字节公钥示意上述过程:


      公钥
    keystore、密码

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

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

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

    【参考文献】

    区块链钱包的工作原理


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

    相关文章

      网友评论

          本文标题:区块链钱包技术原理

          本文链接:https://www.haomeiwen.com/subject/vdafyctx.html