比特币的密钥(yue)、公钥、和地址之间的概念理解

05/11/2018 08:02 上午 posted in  BlockChain

随机取32个字节的【秘钥】

---》椭圆加密算法 ----》【公钥】(压缩的话,只取前面的32位。)

-----》sha256 ----》哈希160 ---》生成【公钥哈希】

然后比特币程序会加上校验码(【公钥哈希】进行两次sha256后取前4个字节)和比特币主网版本号(0x00)形成 最终的【地址】

私钥 >> 公钥 >> 两个【公钥哈希】(压缩【公钥哈希】和非压缩【公钥哈希】)

1.从2个公钥哈希(两个或者任意一个都无法),无法推导出【公钥】。
2.但是从【公钥】 公钥哈希可以推导出 【公钥哈希】
3.【私钥】可以推导出 两个【公钥哈希】和【公钥】,但是反过来,无论是【公钥】还是【公钥哈希】都无法推导出【密钥】

交易的验证理解:

  1. 交易数据的签名只用密钥的拥有者可以生成(加密),而且这个签名加上公钥运算后(解密)可以得到交易数据(明文),只需要将得到的明文跟真实的明文做对比即可知道该交易是否为私钥拥有者发起。
  2. 而一个公钥有且仅有一个【公钥哈希】(即账户地址),我们可以通过公钥哈希算出需要被扣款的比特币地址。
  3. 一个公钥只能对应一个私钥,
  4. 一个私钥允许对多个公钥,这个类似于,一个人拥有多张银行卡,但椭圆算法不存在这种情况,也就是说一个秘钥只有一个公钥和他对应。
  5. 秘钥相同,公钥也相同,所以竟可能的把秘钥设计的复杂一点,避免被别人猜中你的秘钥。
  6. 由于地址是由【公钥】经过两次sha256算出来的,所以理论上不存在哈希碰撞,因此一个【比特币账号地址】只能由一个【公钥】推导出来,而公钥是唯一的,所以【地址也是唯一的】
  7. 可以理解为【秘钥】是唯一的和【椭圆算法】生成的【公钥】也是唯一的,而假定【公钥两次sha256生成的值】也是唯一,所以【地址】是唯一的。即,一个【秘钥】对应一个【公钥】对应一个【地址】

私钥(Private Key)

比特币的私钥是由64位十六进制的字符组成,长得像这样,比如:5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss。

私钥的生成方式是完全随机的,随机生成这样的字符串就会有16的64次方种可能,即:2的256次方,这个数字已经超过了宇宙中原子的个数,用“暴力破解”的方式逐一遍历可能的私钥,幻想能碰到一个有效的且有币的私钥,可以说是不可能,就算是量子计算机也没用。

目前已存在的比特币私钥仅仅只有几百万个,在理想的随机生成方式下(用密码学安全的随机数生成器),如果说你所生成的私钥恰好跟别人的私钥一样,这种概率也是几乎为0。

私钥的本质就是个随机数。只不过这个数字是固定长度的,且是16进制的表现形式。

地址

大家都知道,公钥跟私钥是成对的,公钥由私钥计算而来,地址则通过公钥进一步计算而来。要注意:地址不是公钥,不要混淆概念。总之,有了私钥,就可以推导出它的公钥以及地址,地址一般长这样:1GczaiHaFpmucRHRe88RXCAVZ6gTZAoS57(这是我的比特币地址,打赏可以转我比特币试试:)),一般长34位,由私钥可以根据算法推导出地址,但有地址不能逆推出私钥,这是比特币所使用的密码学的根基逻辑。

所以,地址可以随便公开,而私钥则万万不能公开。

助记词(Mnemonic Phrase)

由于私钥64位,长得太难看,没有可读性,而私钥的备份在电脑上复制起来容易,手抄下来就比较麻烦,但私钥保存在联网的电脑上毕竟不安全,有被其他人看到的风险,于是有了助记词工具,利用某种算法可以将64位私钥转换成十多个常见的英文单词,这些单词都来源于一个固定词库,根据一定算法得来。私钥与助记词之间的转换是互通的,助记词只是你的私钥的另一种外貌体现。

助记词一般会在你创建新钱包的时候出现一次,后面就再也不会出现了,所以创建新钱包时最好把助记词抄下来、甚至放到保险柜里,自己想办法备份。如果是屏幕截图或保存在电脑里,只要设备联网都有被第三只眼看见的风险。别人获取了你的助记词等于获取了私钥所对应的一切财富。

简而言之:助记词就等于私钥,私钥就是钱,都千万不能见光。