主页 > imtoken钱包官网苹果版 > 比特币源代码研究重点

比特币源代码研究重点

imtoken钱包官网苹果版 2023-04-13 07:24:27

这是我第五次学习记录,抽空写点东西。 欢迎来到拍砖。

先说私钥、公钥和地址的关系

莱特币和比特币是通用货币吗_比特币开源代码查询_比特币是一串代码吗

图片来自简书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

方建强,区块链研究院源码学习班