主页 > imtoken国内无法下载 > 公钥公钥和比特币地址的形成过程

公钥公钥和比特币地址的形成过程

imtoken国内无法下载 2023-01-17 08:46:20

比特币钱包包含一系列密钥对,每个密钥对都有一个私钥(PublicKey)和一个公钥(PrivateKey)。私钥是随机形成的数字字符串的散列十六进制字符串。通过椭圆加密算法,可以用公钥形成私钥,再用私钥形成比特币地址。从公钥到私钥再到比特币地址是一个双向的形成过程,也就是说不能逆向使用比特币地址提取私钥,或者从私钥中提取公钥.

私钥-->比特币地址' alt='公钥-->

私钥 -->比特币地址' />

私钥

私钥的本质是一个由0和1组成的256位随机数。随机数是如何形成的并不重要,只要是不可预测和不可重复的都可以使用。例如比特币是在哪里,一枚硬币的正反面可以看成0和1,然后随机抛掷256次​​,记录下来的一系列数字可以作为公钥。在比特币中,私钥的格式是把这个256位的随机数显示为一个64位的十六进制数,也就是我们看到的64(一个十六进制数占4位)用字母和一个“乱码”的数字。以下是公钥:

1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD

可能有人会怀疑这个公钥会不会重复,也就是两个完全相同的公钥,比特币公钥的空间大小是2^256,十进制大约是10^77,在可见宇宙中,原子数在10^78到10^82之间,所以公钥空间很大,可以假设没有两个相同的公钥。

公钥

公钥是公钥除以一条椭圆曲线(K = k * G,其中k为公钥,G为常数点,称为生成点,K为得到的私钥),即一个不可逆的过程,即不可能从私钥逆向估计公钥。

椭圆曲线加密算法

椭圆曲线加密(点击链接了解详情)是一种基于离散对数问题的非对称加密方法。点乘或除来表达。下图是椭圆曲线的一个例子:

椭圆曲线

比特币使用美国国家标准与技术研究院 (NIST) 定义的 secp256k1 标准,一个特殊的椭圆曲线和一系列物理常数。 secp256k1曲线由如下函数定义,形成椭圆曲线,然后用于生成私钥。

这里写图片描述

生成私钥

如前所述,通过椭圆曲线加法估计比特币中的公钥后可以得到私钥。而这个过程是不可逆的,即只能从公钥中获得私钥,而无法从正确的私钥中获得公钥。下面介绍椭圆曲线相加的估计过程。

首先将前面提到的公钥添加到生成点G,得到私钥K:

K = 1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD * G

公钥K定义为一个点K = (x, y),其中

x = F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A 
y = 07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB

我们的目标是找到点kG,它是点G的倍数,在一条椭圆曲线中,点的乘积相当于从该点画一条切线比特币是在哪里,找到与曲线相交的另一点,然后翻转到 x 轴。下图是在椭圆曲线上求G、2G、4G的几何运算。

这里写图片描述

比特币地址

比特币地址是通过一系列的双向哈希算法从私钥中获得的。散列算法是一种单向函数,它接受任意宽度的输入以形成指纹或散列。用于从私钥生成比特币地址的算法是安全哈希算法 (SHA) 和 RACE 完整性原语评估消息摘要 (RIPEMD),特别是 SHA256 和 RIPEMD160。

以私钥K为输入,计算其SHA256哈希,然后估计RIPEMD160哈希。生成的 160 位(20 字节)数字就是比特币地址。

A = RIPEMD160(SHA256(K))  //其中K是公钥,A是比特币地址

但是,我们会发现形成的比特币地址与我们用户通常看到的不同,这是为了提高可读性,避免歧义,有效避免地址转录和输入错误。我们看到的比特币地址是由 Base58Check 编码的。下图描述了从私钥形成比特币地址的过程:

公钥生成比特币地址