主页 > 苹果imtoken怎么下载 > 比特币私钥?公钥?地址?神秘的三角恋?

比特币私钥?公钥?地址?神秘的三角恋?

苹果imtoken怎么下载 2024-01-26 05:09:54

大家好,我叫Seabook,也可以叫我海叔。我是澳大利亚迪肯大学的博士生。我的主要研究方向是区块链底层算法。从今天开始比特币钱包私钥有几位数,给大家带来一系列区块链干货,主要关注区块链技术。希望大家喜欢,一起学习比特币钱包私钥有几位数,一起成长。

为了更好地解释区块链和比特币,我们已经完成了区块链的基础知识。有兴趣的同学可以去以下文章观看:

从今天开始,我们将进入比特币的世界,这是区块链中第一个也是最成功的应用,比特币。文章将一如既往地从技术角度分析比特币背后的设计思想、密码学和数学在区块链背后的作用等,让大家更好地了解比特币和区块链技术。

谈到比特币,我们需要做的第一件事就是为自己创建一个钱包。海叔用得最多的比特币钱包是面包钱包和Blockchain.com钱包。这两个钱包背后的公司都是在区块链领域经营多年,拥有可观的用户积累和强大的经济实力做后盾。

下载钱包后,在注册的第一步,钱包会随机生成一个比特币钱包地址(类似于我们日常的银行账户)。有了这个地址后,我们就可以接受比特币并发送比特币了。

让我们找到一个比特币钱包地址,我们来看看:

1JSKC7opDsTCLUUcanHG5FUkijeZTLJyZA

但说到比特币钱包地址是如何计算的,可能很少有人能说清楚。

接下来,海叔会通过实际计算为大家讲解比特币钱包地址是怎么来的,公钥和私钥是怎么来的,以及它们之间的关系。

前面在干货区块链基础中,我们提到了非对称加密和常用的非对称加密算法RSA。让我们简要回顾一下:

非对称加密的特点:

比特币的私钥和公钥实际上是非对称加密中对应的私钥和公钥。比特币的非对称加密是基于椭圆加密原理(与RSA算法的实现有本质区别)。如果可以计算出公钥,就会从公钥中通过一系列数字哈希运算得到比特币钱包地址。关于 RSA 和椭圆加密背后的本质,如果有机会,我们会在以后的分享中详细介绍。

然后我们可以梳理出一个上下文:私钥->公钥->比特币钱包地址(如上图所示)。需要注意的是,这是一个单向的过程,也是一个不可逆的过程。

从比特币私钥获取我们用于日常转账的比特币钱包地址需要几个步骤。中间使用ECC(椭圆曲线)原理从私钥生成公钥,并使用SHA256、RIPEMD160和BASE58编码生成地址。.

下面,我们用一个实际案例来模拟整个过程:

1. 生成随机私钥

私钥是一个随机数,随机选择一个 32 字节的数字。这个数字的范围是1~0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间的一个数字,为​​了方便下面的计算,我们随机生成一个有效的私钥:(这个私钥的上限关键是由于椭圆曲线的限制)

a966eb6058f8ec9f47074a2faadd3dab42e2c60ed05bc34d39d6c0e1d32b8bdf

2. 椭圆曲线计算公钥

生成私钥后,我们使用椭圆曲线加密算法(ECDSA-secp256k1)计算出私钥对应的未压缩公钥。生成的公钥共有65个字节,其中一个为0x04 ,其中 32 个 1 字节为 X 坐标,其他 32 个字节为 Y 坐标:(未压缩的公钥已弃用/废弃)

0x04 //Uncompressesd
0x3cba1f4d12d1ce0bced725373769b2262c6daa97be6a0588cfec8ce1a5f0bd09 //P.X
0x2f56b5492adbfc570b15644c74cc8a4874ed20dfe47e5dce2e08601d6f11f5a4 //P.Y

压缩公钥——因为椭圆曲线是上下对称的,也就是我们可以通过y2=x3+ax+b的公式计算出PX来计算Y,所以我们把只存储PX的公钥称为压缩公钥. 压缩后的公钥可以减少一半的区块链存储空间。

y 可以是正数或负数。我们使用前缀 0x02 表示 y 为正数,使用负数表示 0x03。

所以可以使用上述未压缩的公钥

 0x023cba1f4d12d1ce0bced725373769b2262c6daa97be6a0588cfec8ce1a5f0bd09

3. 计算公钥的 SHA-256 哈希

我们使用上面的压缩公钥,

023cba1f4d12d1ce0bced725373769b2262c6daa97be6a0588cfec8ce1a5f0bd09

对齐SHA-256哈希计算,得到结果:

8eb001a42122826648e66005a549fc4b4511a7ad3fc378221aa1c73c5efe77ef

4. 计算 RIPEMD-160 (Hash160) 哈希值

取上一步的结果,进行RIPEMD-160计算,得到结果:

3a38d44d6a0c8d0bb84e0232cc632b7e48c72e0e

5. 添加地址版本号(比特币主网版本号“0x00”)

取上一步的结果,在前面加上16进制的00,即:

003a38d44d6a0c8d0bb84e0232cc632b7e48c72e0e

6. 计算 SHA-256 哈希

取上一步的结果,进行SHA-256计算,可以得到:

7a92f146ebaa4a408907e5284e4f57a99491223c52c8d26a149f7393d2161502

然后,对上述结果再次计算 SHA-256 哈希值,得到:

 7095f452512f93ea668bf1d4023f7f21f176851049db2e81914aaa795ebb7aad

7. 将这 4 个字节添加到第 5 步的结果中

取上一步结果的前 4 个字节 7095f452(8 位十六进制)

作为校验位,在第五步的结果之后加载这4个字节,这就是比特币地址的十六进制形式:

003a38d44d6a0c8d0bb84e0232cc632b7e48c72e0e7095f452

校验位的目的是保证人为错误输入了错误的地址,可以实现纠错功能。

8. 用Base58编码转换地址

Base58编码的原因如下:

参考下面的代码表:

将上一步的结果进行Base58编码后,我们终于得到了我们梦寐以求的地址。

16JrGhLx5bcBSA34kew9V6Mufa4aXhFe9X

这是我们经常看到的传统比特币钱包地址。

最后,海叔简单的画了一张图,展示了动态生成的全过程。

最后,欢迎大家与海叔交流: