人人都懂的私钥、公钥、地址

想象一个场景,你手里没有现金了。需要消费,在没有手机支付的情况下,此刻必须要跑到银行里面去取钱,你把银行卡插入ATM机。这个时候机器就会自动扫描你的银行卡,因为每个芯片都有个独一无二的代码,所以机器就会知道你的银行卡里面的余额,接下来就是让你输入密码。没有密码的话,任何人拿到卡片是取不了钱的。当你输入了密码之后,就可以把里面属于自己的钱取出来了。

这是我们的日常行为,其实我们刚刚这一系列动作,就完成了一次输入地址、公钥、输入私钥进行交易过程。

其实,在我们刚刚这个动作过程中,插入的银行卡,里面有唯一的芯片和银行卡上面那个独一无二的编号,其实就相当于我们的公钥。公钥一般由65个byte数组。

我们通常看到公钥:

04a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd5b8dec5235a0fa8722476c7709c02559e3aa73aa03918ba2d492eea75abea235

我们到哪家银行银行、哪个站点、用哪台ATM机取的款,就类似与我们的地址。而唯一不同的是,我们的钱包地址不是一个实体地址而是一个有计算机语言编写出来的一串代码:1QCXRuoxWo5Bya9NxHaVBAr BQYhatHJrU7

我们要进行交易要输入的密码,就好比我们的私钥,这个私钥是最机密的东西,一定要好好保存。就像我们的银行卡密码一样,不能被别人知道,就算别人知道了我们的公钥,也无法取走我们里面的钱。

一般我们看到的私钥是下面这样的一段字符串:5KYZdUEo39z3F PrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss

于是我们可以大概了解:

地址≈银行地址

公钥≈银行卡号+银行地址

私钥≈银行密码+银行卡号+银行地址

这个时候你可能会问:私钥不是应该直接≈银行卡密码?为什么是私钥≈银行密码+银行卡号+银行地址。而公钥≈银行卡号+银行地址,却不是公钥≈银行卡号?

这是因为区块链中私钥、公钥、和地址的是由密码学中一套加密算法决定的。

首先,我们的钱包,本质上是由私钥组成的,私钥本质上是随机数。由钱包随机生成。私钥长度小,安全性能高。

其次,公钥是由私钥生成的,通过椭圆曲线(ECPoint)生成。也就是说,由私钥是可以计算出公钥的,所以私钥相当于是即是银行密码,又是银行卡号。但是,由于密码学算法公钥是不能倒推得出私钥的。

再次,地址是通过公钥通过算法生成,通过公钥可以计算出唯一一个地址,同理地址并不能逆向推到出公钥。

那么我们就可以梳理出一个脉络了:

私钥 ➡️ 公钥 ➡️比特币钱包地址

总结

对于私钥,公钥和地址来说,公钥作为私钥到地址的中间桥梁,他在交易的验证是最关键的。

对于一个交易的验证,公钥的作用:公钥生成地址,验证发送交易的地址是否和该公钥生成的地址一致。

公钥验证私钥的签名,用来验证该交易是否使用了正确的私钥签名,私钥生成公钥是成对出现,公钥可以生成对应的唯一地址,这样就能确认了该地址发送的交易是否使用了对应的私钥。

最后

提醒一下私钥千万要自己保存好,现实生活中你的银行卡掉了可以去银行补办,你的钱不会丢,这是中心化的优势。

但是在区块链世界中,除了你自己,除了知道私钥的人,除此之外,没人能够帮你找回,钱永远无法再退回。因此,我们一定要安全保存好私钥。我们建议的方法是:

(1)在备份中修改单个字符,自己记住,确保绝对安全。

(2)手动抄内容,放置安全场所。并导入钱包看能不能成功,防止抄写错误。

(3)信息不要轻易在联网设备上进行传播,包括邮箱、QQ、微信等。

(4)使用硬钱包。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180312G1EL4B00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券