比特币私钥、公钥和钱包地址的关系比特币交易涉及到很多密码学知识:公钥、私钥、哈希、对称加密、非对称加密、签名等等。那么哪些需要用户谨慎保管不能公开,哪些需要用户公开呢?先说钱包地址的生成。
第1代钱包地址。首先,使用随机数生成器生成一个“私钥”。一般来说,这是一个256位的数字。有了这一串数字,就可以操作对应“钱包地址”里的比特币,所以一定要安全存放。
2.SECP256K1算法对“私钥”进行处理,生成“公钥”。SECP256K1是一种椭圆曲线算法。当私钥已知时,可以计算公钥,但当公钥已知时,私钥不能反过来计算。这是保证比特币安全性的算法基础。
3.和SHA256一样,RIPEMD160也是一种哈希算法。“公钥散列”可以从“公钥”中计算出来,但反过来是不可行的。
4.将一个字节的地址版本号连接到“公钥哈希”的头部(该字节对于比特币网络的pubkey地址为“0”),然后对其进行两次SHA256运算,将结果的前四个字节作为“公钥哈希”的校验值连接在其尾部。
5.用BASE58(比特币定制版)对上一步的结果进行编码,得到“钱包地址”。
比如1a 1 ZP 1 EP 5 qgefi 2 DMP TTL 5 slmv 7 div FNA
私钥、公钥和钱包地址的关系。上述五个步骤中,只有“BASE58编码”有对应的可逆算法(“BASE58解码”),其他算法都是不可逆的,所以这些数据之间的关系可以表示为:
你可以看到:
以上计算过程中的所有值都可以通过“私钥”获得。
“公钥哈希”和“钱包地址”可以通过互逆运算进行转换,所以是等价的。
使用“私钥”对交易进行签名。比特币钱包之间的转账是通过交易实现的。交易数据由被转移钱包的“私钥”所有者生成,也就是说有了“私钥”,钱包的比特币余额就可以花掉了。生成交易的过程如下:
1.交易的原始数据包括“转账金额”和“转入钱包地址”,但仅有这些是不够的,因为无法证明交易的生成者有权使用“转出钱包地址”的余额。因此,需要用“私钥”对原始数据进行签名。
2.生成“钱包公钥”。这个过程和第二步生成“钱包地址”一样。
3.在原始交易数据中添加“转出签名”和“转出公钥”,生成正式交易数据,这样就可以广播到比特币网络进行转账。
使用“公钥”验证签名。交易数据广播到比特币网络后,节点会检查交易数据,包括签名的验证。如果核对无误,则余额将成功从“钱包外”转入“钱包内”。
总结:如果一个钱包地址从未将余额发送给其他钱包地址,其公钥就不会在比特币网络上暴露。但是,公钥生成算法(SECP256K1)是不可逆的。即使公钥暴露,也几乎不会影响私钥的安全性(难度取决于私钥的生成算法)。
2.“私钥”用于生成“公钥”和“钱包地址”,还用于签署交易。拥有“私钥”就意味着拥有这个钱包余额的所有操作权限。所以保护好“私钥”是所有比特币钱包应用中最基本也是最重要的功能。
(作者:链社区,其内容来自开放平台“GetNo。”链条的;本文仅代表作者观点,不代表链家官方立场)