区块链是比特币的底层技术,但不能等同于比特币。区块链作为继互联网之后的新技术浪潮,本身是无辜的,炒币只是区块链最初级的玩法。看完这篇文章,我们可以更好地理解什么是区块链,从而远离保守主义和狭隘主义。
我们首先需要厘清“去中心化”和“分布式账本”这两个概念。去中心化是相对于“去中心化”而言的。以PG二买夹克和熊本熊借钱为例,我们来看看中心化系统和去中心化系统的区别。
网上购买夹克的整个过程都依赖支付宝,因此买卖过程是中心化的。不管是PG TWO还是卖家,在这一点上,我们只能完全信任支付宝和背后的马云。在更大的范围内,中心化系统得到了资金雄厚、技术实力雄厚的机构和企业的背书。
集中制具有管理高效的优点,但缺点也很明显。仍然以支付宝为例,所有的交易记录和账本都保存在支付宝的服务器上。假设有一天所有相关服务器不幸被坏人破坏,那么PG TWO的付款(或者卖家还没有收到的外套钱),以及其他买卖双方的资金,甚至是你我所有的钱在余额宝里,会消失在这个网络世界,一尘不染。
我应该和谁谈谈?哪怕我气呼呼地和支付宝对着干:“我余额宝还有5万!”但是中央账本已经全部销毁,谁能证明我的话是真的?如果拿不到有效的证据,最后只能强忍着泪水,与这一笔钱说再见。
想象一下,如果全网有很多记账节点,可以共同记录支付宝上的每一笔交易、转账、提现,这意味着所有的支付宝账户在全球都有很多备份;即使服务器被黑了,同样的账本Replicas 也很好的保存在其他节点上。在区块链的世界里,不需要大企业做信用背书。
区块链是分布式账本
因此,我们也可以说:作为一种分布式账本,区块链是一种建立信任的工具。从字面上理解,“分布式”就是分布在不同的地方,各个节点各自独立工作。我们先把问题简单化,以借钱为例,谈谈分布式账本的工作原理。
贷款日
约定还款日
1 皮卡丘借给熊本熊10块钱。
2皮卡丘和熊本熊分别在账本上记下:“皮卡丘熊本熊:10日元”
4 区块链上的其他节点对交易信息进行验证,确认后记录在各自的账本中。
在第2步中,借款人熊本熊为了买零食,在自己的账本上虚报了5日元怎么办?背债并不容易,因为接下来皮卡丘会将“皮卡丘熊本熊:10日元”的交易信息广播给全网节点,然后由各个节点进行验证。一旦经过验证的信息被记录在区块链上,就很难被篡改,除非——熊本熊有一台超过全网总算力51%的超级计算机(这个问题会在文末提到) .
那为什么是皮卡丘直播而不是熊本熊直播呢?节点协助记账的目的是防止债务人不兑现等损害信任的情况;一般来说,谁借钱,谁最后可能遭受财产损失,谁就播。
当约定的还款日到来时,如果熊本熊食言说他没有借钱,皮卡丘可以使用区块链与他对质账本上的交易信息。
了解了去中心化的分布式账本之后,我们继续探索区块链技术中的两个密码学概念:哈希函数和非对称加密。当然,颠覆性的区块链技术远不止这些,但是入门区块链需要我们先掌握这两个概念。
只有先了解了哈希函数和非对称加密,后面加上相关定义来解释区块链的运行原理,大家才不会一头雾水。
1)哈希函数
哈希也可以写成散列。哈希函数属于密码学范畴,用于验证交易信息是否被篡改。哈希函数有以下特点(不懂的请跳过本段):
1 若明文A对应的hash值为H(A),则可以通过A计算出H(A),通过H可以计算出H(A)
(A)无法逆推出A;
2 如果明文A ≠ 明文B,那么,H(A) ≠ H(B);
3 如果对明文A做了可以忽略不计的篡改,那么,计算出的哈希值与原H(A)完全不一样。
上文中,明文好比我们登录知乎时输入的账号、密码,它们是可以看懂的一串字符。而哈希值是一个长度固定、由数字和字母组成的字符串。根据以上特征,下方的例子能帮助你理解:
借助Hash计算工具,我输入明文123456,得到相应的哈希值(按SHA256):
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
目前,人类还没有办法逆推这个乱七八糟的字符串;也就是说,任何人都无法推算出这个哈希值对应明文123456。
接着我在明文框输入:1234567;虽然只增加了一个7,得到的哈希值却完全不一样了:8bb0cf6eb9b17d0f7d22b456f121257dc1254e1f01665370476383ea776df414
如果你亲自尝试,3秒钟就能明白以上内容,百度“哈希计算工具” :输入一串明文(连“我爱你”也可以加密哦),关注第三列SHA256的结果即可;再改动其中一个字符,对比两次出现的哈希值结果。
2)非对称加密
这是相对于对称加密来说的。对称加密指你有一把密钥,通过密钥可以加密一段信息;想要破解这个信息,只有拿到你手中这把密钥。从始至终加密、解密用的是同一把密钥,因此称“对称加密”。
而在区块链世界里,每个人都拥有两把独一无二的密钥:公钥和私钥。
公钥:可以简单理解为银行卡号,这是可以给别人看的;
私钥:相当于银行卡密码,必须拼死保密,只能自己知道。
再记2条规则:
2 私钥加密,公钥解密(加密、解密不是同一把密钥,因此称“非对称加密”);
3)无法篡改的交易数据
仍然以“比卡丘借给熊本熊10块钱”为例,我们来看看比卡丘具体是怎样向熊本熊的地址打钱的。
1 比卡丘对明文 “比卡丘 → 熊本熊:10円” 进行哈希加密,得到一个64位的字符串;
2 比卡丘用自己的私钥对这个字符串再次加密,获得另一个字符串,这叫做“数字签名”;
3 比卡丘把以下交易信息打包发给熊本熊,并广播给全网记账节点:此次交易明文、比卡丘的公钥和数字签名;
5 熊本熊和其他节点对明文进行哈希计算,得到哈希值字符串H(A);
6 熊本熊和其他节点用比卡丘的公钥解密数字签名,得到字符串H(B);
7 熊本熊和其他节点验证 H(A)= H(B),交易信息为真;
8 交易完成。
比卡丘的公钥能够解开私钥加密过的数字签名,证明了这个公钥和私钥是一对,而且都属于比卡丘,这条交易信息是比卡丘创建的:也就是说,熊本熊欠的是比卡丘的钱,而不是可达鸭还是其他谁的钱;而字符串 H(A)= H(B),则说明在区块链网络中传递时,交易信息未被篡改。
进行下一节前,我们总结一下,在公开、复杂的区块链网络中,哈希函数和非对称加密:
1 确保了交易记录没有被篡改
2 确保了交易记录由正确的人发起
区块链上的区块
区块链是由挖矿产生的区块按照时间顺序连接起来的,本身是一个可以不断增长的账本数据库。挖矿是指通过大量计算争夺记账权,只要找到合适的哈希值,就能抢在其他人前面拿到记账权,挖到区块。
由于系统的初始设定,不同区块链产生区块的速度不一样。比如比特币区块链大概每10分钟挖出一个区块,而以太坊区块链的出块时间约14秒。
每个区块包含这段时间内产生的所有交易记录,如一个新挖出的比特币区块就包含了前10分钟内的交易信息。除此之外,还包含时间戳和前一个区块的哈希值,等等(关于区块的组成,我们在后续文章再详细了解,这里先把握基础知识)。
这是很聪明的设计:每诞生一个新的区块,就会被盖上相应的时间戳,新产生的区块按照区块挖出的时间顺序连接到链条上去。这样,区块链无限延长,账本数据库也能无限扩大、容纳无穷尽的交易信息。
更令人拍案叫绝的是,新区块里的每一笔交易数据,都由相应的交易发起方进行数字签名,链上所有人都可以用交易发起方的公钥(上文说过,公钥是公开的)验证该数字签名的真实性。
此外,之前挖出的区块里的交易数据将永久记录在区块链上,几乎无法篡改。一个区块内含众多交易信息,然而根据哈希函数的特征,就算你只对其中一条交易数据移动一个小数点,生成的哈希值都会完全不一样,整个区块及其包含的所有交易信息都会变成无效数据。
另一方面,篡改数据难于上青天,成本极高。有意者必须足够财大气粗,并且拥有至少全网51%的算力。而要达到这样的计算能力,知乎李占亮同学表示:矿机成本+电费+其他,成本约5.5亿RMB。
综上, 在这样一个充满不信任感、危机四伏的网络环境里,区块链或许是当前解决信任问题的最佳方案(之一)。
总结
区块链的核心理念:
1 账本分布存储于全网的节点上,某个节点账本的破坏,不会影响任何其他节点正常运作;
2 各节点均可参与记账、共同维护区块链数据库;
3 各节点相互监督,构建trustless(免信任的)系统。
至此,我们已经讲了区块链70%的基础知识。内容有点超载,建议大家先消化。区块链网络上的陌生人出于什么承认区块的有效性?他们为什么愿意苦哈哈地帮助记账?剩下30%(包括共识机制和奖励机制等)将放在下篇中具体讲解。