美文网首页
比特币源码研读(23)-地址,密钥(1)

比特币源码研读(23)-地址,密钥(1)

作者: electroman | 来源:发表于2018-04-29 23:02 被阅读83次

比特币地址的生成过程

今天我们先看如何从操作系统获得随机数

获得随机数的文件是:random.h,random.cpp

其中GetStrongRandBytes函数为获得系统随机数的函数

比特币程序通过三种方法获得随机源:1 从OpenSSL中获得;2 从OS 中获得;3,从硬件中获得

其流程如下:

第一个随机源的获得

   // First source: OpenSSL's RNG

   RandAddSeedPerfmon();

   GetRandBytes(buf, 32);

   hasher.Write(buf, 32);

函数RandAddSeedPerfmon是从设备的dev/urandom中获得种子,如果是linux系统,则不需要执行这个函数

   GetRandBytes(buf, 32);函数实现如下:

void GetRandBytes(unsigned char* buf, intnum)

{

   if (RAND_bytes(buf, num) != 1) {

       RandFailure();

    }

}

其中RAND_bytes函数是获得一个随机数的函数

第二个随机源的获得

   // Second source: OS RNG

   GetOSRand(buf);  得到系统熵的32位数据

hasher.Write(buf,32);

第三个随机源的获得

   // Third source: HW RNG, if available.

   if (GetHWRand(buf)) {

       hasher.Write(buf, 32);

}

这个是可选项,如果能获得硬件随机源,则加入这个种子,提高随机性

合并随机源

   // Combine with and update state

    {

       std::unique_lock lock(cs_rng_state);

       hasher.Write(rng_state, sizeof(rng_state));

       hasher.Write((const unsigned char*)&rng_counter,sizeof(rng_counter));

       ++rng_counter;

       hasher.Finalize(buf);

       memcpy(rng_state, buf + 32, 32);

}

输出随机数

   // Produce output

   memcpy(out, buf, num);

   memory_cleanse(buf, 64);

区块链研习社比特币源码研读班  electroman

QYB地址:QVR2eUwbx43YMkWjbaAQCYdoDmpC1ohnRk

相关文章

  • 比特币源码研读(23)-地址,密钥(1)

    比特币地址的生成过程 今天我们先看如何从操作系统获得随机数 获得随机数的文件是:random.h,random.c...

  • 比特币源码研读

    forest21000版 比特币源码研读之一比特币源码研读之二比特币源码研读之三比特币源码研读之四比特币源码研读之...

  • 比特币源码研读----密钥和地址

    1、基本概念 比特币的所有权是通过数字密钥、比特币地址和数字签名来确定的。数字密钥实际上并不存储在网络中,而是由用...

  • 比特币源码研读之一

    作者:区块链研习比特币源码研读班 菜菜子 一、源码下载 本文比特币源码下载地址为:https://github.c...

  • 比特币源码研读一:椭圆曲线在比特币密码中的加密原理

    参加比特币源码研读班后首次写作,看到前辈black写的有关密钥,地址写的很好了,就选了他没有写的椭圆曲线,斗胆写这...

  • Mastering Bitcoin

    目录 1 介绍 2 比特币如何工作 3 比特币Client 4 密钥、地址、钱包 5 事务(交易) 6 比特币网络...

  • 比特币源码研读之十一

    比特币源码研读系列已经发表了十篇了,通过这十篇源码研读系列让我对比特币源码及比特币运行原理有了进一步的理解,也让我...

  • 比特币源码研读之一

    比特币源码研读之一——区块链研习社 《比特币源码研读班》 一看文件夹结构 和 github编译依赖,分析的依赖库 ...

  • 比特币源码研读之密钥篇

    这是我的第五篇研读记录,抽空写了点欢迎拍砖。 首先讲一下私钥、公钥、地址的关系 私钥通过椭圆曲线相乘推出公钥,公钥...

  • 《精通比特币》(4)

    第四章 密钥 地址 钱包 比特币的所有权是通过数字密钥,比特币地址和数学签名来确认的。数字密钥不是储存在网络中,而...

网友评论

      本文标题:比特币源码研读(23)-地址,密钥(1)

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