主页 > imtoken钱包手机安卓版下载 > 由浅入深理解区块链:(8)私钥和公钥推导出位地址串的原理

由浅入深理解区块链:(8)私钥和公钥推导出位地址串的原理

比特币的私钥可以唯一推导出一个公钥,那么如何得到私钥呢,我们可以依次抛一元硬币256次,然后依次记录这256次的优劣,例如( Positive, positive, negative, reverse...), 正面标记为1,反面标记为0,所以得到二进制序列(110100...),所以一串256位的二进制密钥也可以以这种方式生产。 其实在现实中,生成私钥的随机数是可以由计算机生成的。 这种计算机模拟产生的随机数称为伪随机数。 通常,一串随机字符串是由密码安全的伪随机数生成器生成的。 ,然后对随机字符串进行单向哈希,生成一个256位二进制的字符串。 如果二进制值在1~n之间(n=1.158*1077略小于2256,生成的私钥要避开那些正规的暂定二进制数),则生成私钥,否则生成私钥新的随机数。

私钥生成后,可以据此推导出它的公钥(椭圆曲线密码学,后面会讲到),然后用SHA-256中的公钥对它的比特币地址进行哈希处理。 请记住,这个过程是不可逆的。

这种只能从一个方向推导的加密方式也称为非对称加密。 这种加密方式多用于对信息进行数字签名,即发送方首先将自己的公钥广播给网络上的各个节点。 ,然后发送方用私钥加密要发送的信息发送到网络上,其他人可以用公钥解密,但是一旦文件被修改,肯定会被发现,而且它具有数字签名的唯一性和不可靠性。 可变性。

比特币的密钥_比特币密钥破解_比特币密钥被盗

具有讽刺意味的是,密钥加密并不是比特币区块链的重要组成部分,因为交易信息本身在通过区块链时并未加密。 比特币交易信息在加入区块链后广播到每个节点,然后你可以在每个节点中找到你的比特币地址的交易记录,但每条交易记录都需要比特币私钥进行确认。 可以正常进行。

私钥存储在钱包中。 请记住,钱包中存储的不是比特币的数量,而是私钥(或私钥-公钥对)。 钱包是密钥管理软件。 可以直接在钱包里看到私钥,但一般看到后的密钥也是BaseBase58编码的,原来是Base64编码衍生出来的,意思是每6位二进制数,10个数字和大小写英文字母和两个特殊字符'+','/'是一对一编码的,但是后面是一些容易混淆的字符,数字0,字母O,小写字母l比特币的密钥,大写字母I,还有'+','/',那就剩下了58 个映射字符。 它被称为 Base-58。

比特币密钥被盗_比特币密钥破解_比特币的密钥

接下来,让我们看一下将公钥推导为比特币地址的过程。

首先,公钥被单向散列,SHA-256 散列被加密生成一个 256 位的二进制数。 然后,对二进制数进行RIPEMD-169散列,生成160位的二进制数(双散列加密一 方面,有利于将公钥统一为公开式,两者均为160位。另一方面另一方面,加密变成单向哈希值,公钥可以单向推导成160二进制数。有利于维护安全)

比特币的密钥_比特币密钥被盗_比特币密钥破解

然后对160位的二进制数进行两次SHA-256哈希计算得到256位,取256位的前4个字节(即32位)放在160位的后面(为什么要这样做,因为提取出来的四个字节后面是位校验作为验证码),然后在这24个字节的头部放上版本号(0开头的版本号代表比特币地址,1开头的版本号代表私有key address),它构成了版本-数据-校验的组合,我们可以计算出版本号的字节数

比特地址的字符有34个,换算成比特就有34*6=204比特(版本+数据+校验)

比特币的密钥_比特币密钥被盗_比特币密钥破解

接着用总比特数减去数据和校验的比特数=204-160-32=12bite 所以版本号有12位二进制数

比特币的密钥_比特币密钥被盗_比特币密钥破解

然后对这个组合进行Base58编码,可以输出一个由数字、大小写字母组成的34个字符的字符串。 过程如下:

是这里吗? 当然不是。 还需要检查得到的位地址串是否正确,所以需要进行Base58逆解码比特币的密钥,然后将数据部分和尾部4字节校验码分开。 进行双重哈希,将哈希值的前四个字节与校验码进行比较。 如果一致,则说明位地址串符合规范。 否则,丢弃该字符串并重新生成公钥。