比特币与区块链的关系:比特币采用区块链技术,但是区块链并不等同于比特币

大话运营 大运营,话天下 257 0

作者:maxdeath
来源:知乎

首先要搞清一个问题——比特币是区块链,但是区块链并不是比特币。

于是,在区块链的这个问题回答里,提到“矿工”,“挖矿”,“最长链”,“分叉”等等词的,其实都不准确。

写一点上个月讲课的内容——个人觉得大部分的回答,包括google搜出来的或者wiki的,都不能很好地解释区块链是个什么东西。因为讲比特币的人很多,懂比特币的人也很多,但是具体到区块链,现在并没有一个很清楚的定义说什么是区块链,基本上所有的介绍里都是这样的:

比特币——〉区块链是比特币的底层技术。

或者

比特币——〉比特币是一种区块链。

具体到什么是区块链的问题,目前没有看到很好的定义和介绍,更多的是大而化之地讲区块链的意义在哪里的空泛文章,要不然就是一水的矿工和挖矿。所以我来从纯理论角度说一下我个人对区块链的定义:

1,区块链是一个放在非安全环境中的分布式数据库(系统)。

2,区块链采用密码学的方法来保证已有数据不可能被篡改。

3,区块链采用共识算法来对于新增数据达成共识。

具有以上三个性质的系统,就是区块链。

一,区块链是一个放在非安全环境中的分布式数据库(系统)。

这里的要点有两个:(1)分布式,(2)非安全环境。

首先,这是一个分布式的,去中心化的系统。所以,有一个中心服务器或者节点的,不是区块链。节点都是安全的,无恶意的,那这不是区块链。同理,从应用的角度讲,如果你的应用必须要使用中心节点(例如要用超级计算机做深度学习)或者没必要考虑节点不安全的情况(例如某个安全的工厂里的传感器),那么并不需要考虑区块链技术。

至于后面的词“数据库”,目前大部分成熟的区块链都是数据库,例如比特币就是一个分布式账本,而账本其实就是数据。然后,根据数据的格式,又可以分三种——

1,数据是完全不相关的,只是达成的共识,没有有效无效之分;

2,数据有某些逻辑结构,例如账本中,一笔交易实际上除了金额,还有输入和输出,连接到之前的交易,这些数据需要通过逻辑验证(例如交易中,节点需要验证输入的交易是否有效);

3,数据拥有图灵完备的逻辑,而验证的时候需要通过节点使用算力运算,每笔交易可以有不同的输出和状态,每个节点要做的不仅仅是验证交易的真实性和输入的正确性,还要根据交易里的逻辑读入数值,进行验算然后再验证结果。

比特币的系统就是第二种,又叫分布式账本;以太坊是第三种。第三种可以支持智能合约。

用比特币举例的话,1,它是一个完全去中心化的系统,2,它放在一个非安全的环境,它并不要求所有使用比特币的人都没有恶意。


二,区块链采用密码学的方法来保证已有数据不可能被篡改。

这个是误解最多的部分,因为很多人一提到区块链就只觉得是这个。诚然,这部分很重要,而且确实区块链也因此得名,但这只是区块链的定义的一部分。

这个部分的两个核心要点是:(1)密码学哈希函数,(2)非对称加密。

两个都是密码学的基础概念,网上都有非常清晰的定义,我只简单说下:

(密码学)哈希函数:一个函数Y=H(X),有如下性质:1,有X可以很容易算出Y;2,有Y不可能算出X;3,有Y不可能找到另一个X'使得H(X')=Y;3.5,如果X和X'相差很小,H(X)和H(X')则完全不相关。

这东西主要用于验证信息完整性——在一个信息后面放上这个信息的哈希值,这个值很小,例如256bit,而且计算方便。收到信息之后收信人再算一遍哈希值,对比两者就知道这条信息是否被篡改过了。如果被篡改过,哪怕只有一bit,整个哈希值也会截然不同。而根据哈希函数的性质,没有人能够伪造出另一个消息具有同样的哈希值,也就是说篡改过的数据完全不可能通过哈希校验。

非对称加密:这东西很好理解——对称加密就是有个密钥,可以理解成保险箱钥匙,你把消息加密变成密文,没有人能看懂这是啥,然后同一把钥匙解密成原来的消息。

非对称加密就是有两把钥匙,一把叫公钥,一把叫私钥,用其中一把加密的话,只能用另一把解密,反之亦然。另一个重要的性质是,给你密文,明文和其中一把钥匙,你还是解不出来另一把钥匙是啥。原理基本上是基于一些困难数学问题,例如因数分解和离散对数,常用的有RSA,Diffie-Hellman和ECC(椭圆曲线),比特币用的是椭圆曲线。

非对称加密除了和对称加密一样用于信息加密之外,还有另一个用途,就是身份验证。因为通常情况我们假设一对公私钥,公钥是公开的,而私钥只有本人有,于是一个人如果有对应的私钥,我们就可以认定他是本人。其中一个重要的应用就是数字签名——某个消息后面,发信人对这个消息做哈希运算,然后用私钥加密。接着收信人首先对消息进行哈希运算,接着用相应的公钥解密数字签名,再对比两个哈希值,如果相同,就代表这个消息是本人发出的而且没有被篡改过。


以上是基础知识,至于区块链怎么实现的,很简单:

交易(数据)写在区块里。

第一个区块叫创世区块,写啥都行。

从第二个区块开始,每个区块的第一部分有前一区块的哈希值。

此外,区块里的每一笔交易(数据),都有发起人的数字签名来保证真实性和合法性。于是,先前区块里的任何数据都不可被篡改,原因见上。


到这为止有人可能会问:为什么要弄个链啊?直接所有数据加个哈希值不就行了?

因为——这个数据库并不是静止的啊。

数据库的数据是会增加的,而每次增加的数据,就是一个区块,于是这些生成时间不同的区块,就以这种形式链在一起了。

标签: 比特币

大话运营

抱歉,评论功能暂时关闭!