初识 - 交易的认证

  如果我想要转出比特币给你,首先我要将交易意向告知给比特币网络中所有的节点,让他们来认证这项交易。这些节点需要证明的有两点:第一是我有足够的比特币去完成交易,第二是我没有将这些比特币用到与别人的交易之中。验证这两点没有问题后,这些节点还需要校对公钥和签名。一旦这项交易被认证,那这项交易的信息就会被添加到一个区块之中,区块和区块相连,就成了区块链。想要篡改一项交易,那就需要篡改之后所有的区块,而这基本上是不可能的。

  

比特币的交易

  其次-公钥与私钥

  交易的逻辑很简单,那具体又是怎么进行的呢?

  首先,我们的比特币不会真正的放在比特币钱包中,放在钱包里的是我们的比特币地址,地址里含有我们所有的交易历史以及余额。

  我们需要通过随机数生成一串32字节的数,这就是我们的“私钥”。随后我们可通过椭圆曲线加密算法生成私钥所对应的“公钥”。公钥由65个字节组成,公钥再经过一系列的加密处理就会得到我们的钱包地址。

  公钥和私钥之间相互关联,其中公钥是完全公开的,私钥则需隐秘保管。虽然公钥是由私钥推算而来,但是公钥没办法逆推出私钥来,因为私钥生成公钥的加密算法是不可逆的,这就是所谓的非对称密钥密码系统。

  每次交易时,我们把私钥和一些交易信息(包括转账数额和转入的钱包地址)一起输入电脑端或者手机端的比特币软件。收到这些信息后,程序就会产生一个“签名”(必须要有私钥才能产生“签名”),这个签名会和生成的转出公钥一起被加入交易数据包之中,并扩散到比特币的网络上寻求认证。网络上的节点可通过公钥中记载的交易历史来认证交易,因为所有的交易在比特币的账簿上都是公开的。这个设计的精妙之处就在于程序会用交易数据中的公钥对签名进行解密和校验,而只有对应的公钥才可以解密由私钥生成的签名。如果验证失败则说明公钥和私钥并不是相对应的一组。在这个过程中,我们既认证了私钥的正确性,又不需要知道私钥的确切字符串。私钥的保密性是任何钱包最基本也是最重要的应用,因为掌握了私钥就可以对一个钱包的余额进行操作。

  终章 - 哈希值和区块

  当我的交易被正式认证后,这条交易信息就会和其他的交易信息一起被打包到一个区块之中。

  我们首先来了解一下“哈希值”的概念。哈希值即是哈希函数的输出值。哈希函数通过复杂的数学算法将任何数量的字母和数字转换成64位的字符串,甚至我们这一整篇文章都可以被精简到64位的哈希值。哈希值的输出不是随机的,而且只要改动输入值中的一个标点符号都会得到完全不同的结果。也因为这个特性,区块链可以有效率的识别交易中的任何篡改行为。哈希值是不可逆的函数,一个哈希值可能对应着多数个输入值,因此通过哈希值来反推输入值也是基本上不可能的。

  通常认为,想要篡改区块链中的数据就需要掌握51%以上的算力。而每个区块中都含有代表了上一个区块的哈希值,所以如果上一个区块有任何略微的改动,那现区块上的记录就会大相庭径。因此如果想要篡改任意区块上的数据,那就要将后续区块的哈希值都做出调整。而在进行篡改的过程中,可能会不断有新的区块加入到这个链中,进一步增加需要完成的工作量,因此我们认为区块链具有不可篡改的特性。