正文
这就是比特币(以及其他数字货币)的原理:非对称加密保证了支付的可靠性。
由于支付的钱必须通过私钥取出,所以你是谁并不重要,重要的是谁拥有私钥。只有拥有了私钥,才能取出支付给你的钱。(事实上,真实的交易流程稍有不同,私钥保证的不是取出支付给你的钱,而是保证只有你能把这些属于你的钱支付出去,详见后文。)
二、比特币钱包
对于比特币来说,钱不是支付给个人的,而是支付给某一把私钥。这就是交易匿名性的根本原因,因为没有人知道,那些私钥背后的主人是谁。
所以,
比特币交易的第一件事,就是你必须拥有自己的公钥和私钥。
你去网上那些比特币交易所开户,它们会让你首先生成一个比特币钱包(wallet)。
这个钱包不是用来存放比特币,而是存放你的公钥和私钥。
软件会帮你生成这两把钥匙,然后放在钱包里面。
根据协议,公钥的长度是512位。这个长度不太方便传播,因此协议又规定,要为公钥生成一个160位的指纹。所谓指纹,就是一个比较短的、易于传播的哈希值。160位是二进制,写成十六进制,大约是26到35个字符,比如 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2。这个字符串就叫做钱包的地址,它是唯一的,即每个钱包的地址肯定都是不一样的。
你向别人收钱时,只要告诉对方你的钱包地址即可,对方向这个地址付款。由于你是这个地址的拥有者,所以你会收到这笔钱。
由于你是否拥有某个钱包地址,是由私钥证明的(具体的证明方法稍后介绍),所以一定要保护好私钥。这是极其重要的,如果你的私钥被偷了,你的比特币也就等于没了,因为他人可以冒用你的身份了,把钱包里面的钱都转走。
同样的,你向他人支付比特币,千万不能写错他人的钱包地址,否则你的比特币就支付到了另一个不同的人了。
三、交易过程
下面,我把整个流程串起来,看看比特币如何完成一笔交易。
一笔交易就是一个地址的比特币,转移到另一个地址。
由于比特币的交易记录全部都是公开的,哪个地址拥有多少比特币,都是可以查到的。因此,支付方是否拥有足够的比特币,完成这笔交易,这是可以轻易验证的。
问题出在怎么防止其他人,冒用你的名义申报交易。举例来说,有人申报了一笔交易:地址 A 向地址 B 支付10个比特币。我怎么知道这个申报是真的,申报人就是地址 A 的主人?
比特币协议规定,申报交易的时候,除了交易金额,转出比特币的一方还必须提供以下数据。
-
上一笔交易的 Hash(你从哪里得到这些比特币)
-
本次交易双方的地址
-
支付方的公钥
-
支付方的私钥生成的数字签名
验证这笔交易是否属实,需要三步。
第一步,找到上一笔交易,确认支付方的比特币来源。
第二步,算出支付方公钥的指纹,确认与支付方的地址一致,从而保证公钥属实。
第三步,使用公钥去解开数字签名,保证私钥属实。
经过上面三步,就可以认定这笔交易是真实的。