比特币私钥、公钥、钱包地址的关系

目录

 

1、名词简介

1.1 Hash(散列函数)

1.2 椭圆加密算法(Elliptic curve cryptography,缩写为ECC)

1.3 Base58

2、生成钱包地址的步骤

3、私钥、公钥、钱包地址关系示意图


1、名词简介

1.1 Hash(散列函数)

1)含义:把任意长度的输入,通过散列算法变换成固定长度的输出,该输出就是散列值

2)特点:① 相同的输入,经过Hash运算,输出是相同的

                ② 对于具有强混淆特性的散列函数,输入的任何微小改变,经过Hash运算,输出是完全不同的

                ③很难通过输出逆推出输入

1.2 椭圆加密算法(Elliptic curve cryptography,缩写为ECC)

一种公钥加密体制,最初由Koblitz和Miller两人于1985年提出。

椭圆加密算法的数学基础是利用椭圆曲线上的有理点构成Abel加法群上椭圆离散对数的计算困难性。

1.3 Base58

Base58是用于Bitcoin中使用的一种独特的编码方式,主要用于产生Bitcoin的钱包地址。

相比Base64,Base58不使用数字"0",字母大写"O",字母大写"I",和字母小写"l",以及"+"和"/"符号。

2、生成钱包地址的步骤

  • 1)产生私钥

私钥是一个随机数,长度为256bits(32Bytes)

比如:6E83A5D10F2C386B52A29CAB245F6BA2E55D83249D3D2CD6332671FA226A3FF2

  • 2)计算公钥

通过椭圆加密算法(ECDSA-secp256k1)计算私钥对应的非对称公钥,该过程不可逆。

公钥的长度为65Bytes:头部标识1byte(0x04) + X坐标32bytes + Y坐标32bytes

比如:

公钥头部标识:0x04

公钥X坐标:82EEDC7536386DA2C5EDA428B231C7658814CA837F94FADE365D0EC6B0984621

公钥Y坐标:BA26EC5F2C0C8F016A32134589F7B9E97EECDFAC2EF12A91FA622B38A8752FFC

  • 3)计算公钥的Hash

拼接公钥地址(头部标识+X坐标+Y坐标),得到公钥标准地址:

0x0482EEDC7536386DA2C5EDA428B231C7658814CA837F94FADE365D0EC6B0984621BA26EC5F2C0C8F016A32134589F7B9E97EECDFAC2EF12A91FA622B38A8752FFC。

对公钥标准地址进行SHA-256Hash计算,得到3030adf9a7a7ed8ebc0463e82cb9fd4c631cf352623d2b409bb6e0fba62fad2a

该过程不可逆。

  • 4)对第3步得到的公钥Hash,再次Hash

对3030adf9a7a7ed8ebc0463e82cb9fd4c631cf352623d2b409bb6e0fba62fad2a进行RIPEMD-160Hash计算,

得到2d83ac0cdcce244e0ae2b2663c90ee43334e83c7。该过程不可逆。

  • 5)对第4步得到的Hash值,添加版本号

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

002d83ac0cdcce244e0ae2b2663c90ee43334e83c7

  • 6)对第5步得到的Hash值,进行两次Hash

对002d83ac0cdcce244e0ae2b2663c90ee43334e83c7进行SHA-256Hash计算,

得到d69bfae91a2671fac73f331bfc81e81a05fc9cba043fc198c551ee4a2985beb8。

对d69bfae91a2671fac73f331bfc81e81a05fc9cba043fc198c551ee4a2985beb8进行SHA-256Hash计算,

得到8f904ae8b04892d862da3999159492417b61897a7d1f0f70740abfda6752618a。该过程不可逆。

  • 7)获取第6步结果的前4个字节

获取8f904ae8b04892d862da3999159492417b61897a7d1f0f70740abfda6752618a的前4个字节,

得到8f904ae8。

  • 8)拼接第5步得到的Hash值

作为校验位,把第7步得到的4个字节加在第5步结果的前面,

得到8f904ae8002d83ac0cdcce244e0ae2b2663c90ee43334e83c7。

  • 9)用Base58编码变换第8步的结果,得到钱包地址

对8f904ae8002d83ac0cdcce244e0ae2b2663c90ee43334e83c7进行Base58编码,

得到hJgGfRCCTpmVhStRoYWJyVygMrRW4ZWcYvNJvTwGBRSUhecPrDf6fbzLCXM2zBSYQxZL。该过程可逆。

3、私钥、公钥、钱包地址关系示意图

比特币私钥、公钥、钱包地址的关系