主页 > 海外版imtoken > 比特币私钥、公钥和地址的关系

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

海外版imtoken 2023-05-17 07:54:23

哈希函数

哈希函数,也称为哈希函数,给定一个输入x,它会计算出对应的输出H(x)。哈希函数的主要特点是:

输入x可以是任意长度的字符串,输出结果是H(x)的长度是固定的。计算 H(x) 的过程是高效的(对于一个长度为 n 的字符串 x,计算 H(x) 的时间复杂度应该是 O(n)。Victor Miller 单独提出。它的主要优点是在在某些情况下,它使用比其他算法(例如 RSA)更小的密钥,但提供相当或更高级别的安全性。

比特币使用基于 secp256k1 椭圆曲线数学的公钥加密算法。它包含一个私钥和一个公钥。私钥用于签署交易并将签名和原始数据发送到整个比特币网络。公钥被整个网络中的节点用来验证交易的有效性。签名算法保证交易由拥有对应私钥的人签发。

BASE58 编码

Base58是比特币独有的编码方式,主要用于生成比特币钱包地址

比特币交易公钥私钥

相对于Base64,Base58不使用数字“0”、大写“O”、大写“I”、小写“l”以及“+”和“/”符号

p>

比特币字母表:

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

门罗字母:

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

Ripple 使用的字母表:

比特币交易公钥私钥

rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz

私钥

其实是一个长度为256位的二进制数比特币交易公钥私钥,256位=1.15e+77

宇宙中的原子总数约为 10 的 80 次方。如果我们随机生成私钥2^256+1次,那么必然会生成之前出现过的私钥;即使从概率上看,如果我们生成私钥 2^130 次,有 99% 的机会得到私钥,但目前这种情况极为罕见。

公钥

使用椭圆曲线加密算法(ECDSA-secp256k1)计算私钥对应的未压缩公钥,这个过程是不可逆的。

公钥长度为65字节:

比特币交易公钥私钥

地址

公钥经过多次哈希处理,生成btc地址。

未压缩的公钥 密钥生成地址的过程:

对完整的公钥(header ID + X-integer + Y-integer)进行sha256()操作比特币交易公钥私钥,对结果进行ripemd160()操作,a的结果是长度为20bytes

在第一步得到的结果前加上Network ID Byte:

得到的b长度为21bytes

对第2步得到的结果做如下连续两次sha256()运算,然后只取运算结果的前4个字节作为校验和

比特币交易公钥私钥

将第3步得到的Checksum加到第2步b的末尾,得到c,长度为25bytes

将第4步生成的c用Base58编码得到地址

步骤图:

对于压缩后的公钥,在生成地址时,在步骤1中,只能取标识头+X-integer部分的公钥。

私钥、公钥和地址在比特币转账中的作用

发起比特币转账时,将私钥视为账户密码。填写账单后,需要使用私钥对账单内容进行签名,获取签名信息SIG,然后将SIG附加到账单上:

比特币交易公钥私钥

SIG = SIGN(TX_DETAIL, PRIVATE_KEY)

知道SIG和账单内容后无法推断出私钥。那么,有人拿到账单信息和SIG后,如何验证SIG确实是由该方地址对应的私钥签名的呢?

这是公钥的功能。公钥应附在账单上。别人拿到账单的时候,可以验证SIG是否合法

true = VALIDATE(TX_DETAIL, SIG, PUBLIC_KEY)

私钥->公钥->地址是单向不可逆过程,在签署交易信息时只暴露公钥,私钥是安全的:

关于btc交易和签名验证的原理和规则,可以搜索相关文献了解