比特币系统里面如何验证某个比特币是谁的,谁拥有这个比特币。
我们还是先对标一下银行系统来理解这个问题。
银行系统
中心化银行中我们在刷卡的时候,需要提供银行卡号和密码,如果匹配,就可以进行支付。这时候如果出现盗刷怎么办呢。我们肯定是立刻报警,然后银行就会核对账户的所有者是不是我。银行核对的过程,需要借助开户时的我们提供的个人信息。
其实就是在开户的时候确定了账户的所有权,在确定了这个所有权之后,然后才是转账的操作。如果银行确定了某一笔支付不是本人操作的,则银行会撤销这笔记账
比特币系统
而在比特币系统里,是点对点的交易,在没有第三方的情况下,确定账号的所有权。账户是用一个地址来标示的,转账的过程实际上就是从一个地址转换到另外一个地址。账本上是不保存个人信息的。
我们先来看一下比特币账户长什么样子:
地址: 38wcvpVCE9G8Hv6oxys9PTruutYdsCrdSh
私钥: b86abcbae4d7c6246e43c23b5449d34653d2a6ddd835f93ce9518b5e
谁有了这个私钥,谁就能够使用这个地址进行支付,也就是拥有这个账户的所有权,所以私钥一定要保管好,如果泄漏了的话,比特币就有可能丢失,而不像银行系统里面可以重置或者找回。
但是如何在不泄漏私钥的情况下,来证明我们拥有某个地址的私钥?
我们要经历一下几步:
a.交易签名打包
这里就用到了非对称加密技术的加密技术,对交易进行签名,这个过程分为两部分:
- 对交易进行hash得到摘要
- 用私钥对摘要进行签名(这一步通常要求在一个安全的环境下,以免私钥被泄漏)
b.广播交易
生成签名以后,付款的节点就会在整个网络里进行广播,广播的内容包含交易的原始信息还有交易的签名信息,这个付款的节点告诉相邻的节点,他的交易信息和签名信息,请求其他节点进行验证;整个广播过程是一个循环的过程,当节点收到广播之后,验证通过之后,他会再次向已知节点继续广播。
c.验证交易
在节点收到广播以后,就会对交易信息和签名信息进行验证。
验证的过程是先把付款方地址生成公钥,用公钥和签名的信息判断这个摘要是不是交易信息的hash运算结果,如果是,则验证通过,将交易信息写入账本,继续广播,否则什么也不做。