【区块链】比特币私钥、公钥、签名
在了解区块链的基础名词概念提到地址由字符和数字组成,但没有说明怎样产生的。银行卡号由银行核心系统生成,那比特币地址是通过什么生成的呢?看下图:
对于刚接触比特币的小白来说,看到这张图就蒙圈了,究竟什么是私钥、公钥,为什么生成个地址要这么麻烦吗?
现在请大家记住这句话:私钥通过椭圆曲线相乘生成公钥,使用公钥不能导推出私钥;公钥通过哈希函数生成比特币地址,地址也无法导推出公钥。
通过这么复杂算法才算出地址,那私钥和公钥只是为了生成地址吗?不是的,他们还有其他用途,我们先了解下私钥和公钥。
-
私钥
私钥是随机生成256位二进制数字,二进制是由0和1组成。把私钥换算成十进制,在1和n-1之间的任何数字,其中n是一个常数(n=1.158*1077,略小于2256)。生成一个相同私钥的概率是(1/(2256)),出现相同概率是微乎其微,可以忽略不计。
-
公钥
通过椭圆曲线算法可以从私钥计算得到公钥,这是不可逆转的过程:K = k * G 。其中k是私钥,G是被称为生成点的常数点,而K是所得公钥。
-
签名和验证
私钥和公钥成对出现,公钥是公开的,任何人都可以获取。私钥是保密的,只有拥有者才能使用。
数字签名:
用私钥加密信息产生的别人无法伪造的一段数字串。用公钥验证数字串,如果验证通过证明这个信息确实是由你发出的且未被篡改。
详细数字签名讲解请参考维基百科数字签名。由此知道,私钥证明能对该地址的比特币资产拥有权。
支付比特币时,在交易信息中需要提交交易者的公钥和签名。比特币网络的节点都可以通过所提交的公钥验证签名信息。
如果交易被验证有效,该节点将会将这笔交易传播到这个节点所连接的其他节点;同时,交易发起者会收到一条表示交易有效并被接受的返回信息。如果这笔交易被验证为无效,这个节点会拒绝接受这笔交易且同时返回给交易发起者一条表示交易被拒绝的信息。进行以下总结:
私钥可以生成公钥,还可以用于对交易进行签名。
公钥用于生成地址,还可以用于验证比特币交易。
一个私钥只能生成一个公钥,一个公钥只能生成一个地址。
-
比特币交易流程
如果结合前面两节内容:了解块链的基础名词概念和比特币记账方式,更加清晰比特币交易流程,如下图所示:
- 创建比特币交易
- 通过P2P方式把交易广播到比特币网络
- 网络节点对交易进行验证
- 把验证通过的交易传播到相邻的节点
- 把交易写入区块
现在已经讲解地址、挖矿、工作量证明、算力、区块、区块链等等的概念,不知大家还有印象吗?如果忘记请温习这些概念,因为后续很多地方都会用到这些概念。明天讲解下区块链有哪些特点。
参考书籍:《精通比特币》
区块链知识专题: