主页 > imtoken安卓最新版 > 比特币源代码研究重点
比特币源代码研究重点
这是我第五次学习记录,抽空写点东西。 欢迎来到拍砖。
先说私钥、公钥和地址的关系
图片来自简书App
私钥乘以椭圆曲线得到公钥,公钥哈希得到公钥哈希,生成比特币地址。 但是公钥不能从地址中推导出来,私钥也不能从公钥中推导出来,所以如果私钥没有泄露,基本是安全的,公钥可以公开。
私钥
1. 重要:一旦私钥丢失或被盗,将失去对钱包的控制权比特币是一串代码吗,资产将无法找回,因此您必须妥善保管私钥,如使用离线钱包。
2、取值范围:比特币私钥是一个256位的二进制数,由256个0或1的数字组成,转为十进制,其取值范围为[0, 1.158x10^77-1],接近到宇宙中的原子个数(10^80),所以私钥相同的概率几乎为零,不能重复,也无法被爆破搜索破解。
3.为私钥生成一个随机数
一定要使用密码安全的伪随机数生成器(CSPRNG)来生成随机数,需要满足以下条件:
1)随机性:没有统计偏差,完全乱序
2)不可预测性:不可能从过去的序列中推断出下一个会出现的数字
3)不可重现性:除非序列被保存,否则相同的序列无法重现
满足以上条件就是一个安全、有效、有用的随机数。
那么随机数是如何产生的呢? 接下来我们要看源码,它是如何实现的。
图 1 (src/random.cpp)
在生成私钥之前,需要获取一个强随机字节数,代码实现在src/random.cpp-getstrongrandbytes
先定义一个SHA512,定义生成两个强随机内容:
1)、打开
2)、os(操作系统本身)
私钥的获取通过两种方式同时进行,从而获得强随机数,增强安全性。 然后得到随机数种子(Randaddseedperfmon) 下图是CPU的性能指标比特币是一串代码吗,为了满足随机数的条件,增加安全性。
图 2 (src/random.cpp)
4、生成私钥MakeNewKey
通过以上步骤得到一个强随机数,从而得到一个非常安全的私钥值。 图3是私钥的循环生成过程:首先得到一个强随机字节数; 然后通过椭圆曲线验证私钥直到有效为止
取值范围 (0, 1.158x10^77-1)
图 3
最后说一下私钥的代码定义
“An encapsulated private key”(图4)封装的私钥定义了3个变量:
1) Fvalid:描述私钥是否有效,通过椭圆曲线方程验证。
2) fCompressed:私钥对应的公钥是否压缩。
3)Keydata:私钥数据(包含256位,32字节)
图 4
方建强,区块链研究院源码学习班