Home > 应用 > 3分钟带你彻底读懂区块链的数据结构
应用

3分钟带你彻底读懂区块链的数据结构

我相信很多的朋友,曾经尝试参与并购买类似比特币这样的加密货币的时候,对于这些区块链产品的了解并不比第一段视频里的大叔的认识更高明一些。

但是即便如此,也有很多人在一无所知的情况下,就对市场上各类莫名其妙的加密货币开始购买。

为了避免这种盲目跟风的情况,也为了相对科学的来说明一下区块链的概念,咱们按照第二个视频所称述的线索来大体介绍一下,区块链是基于密码学的分布式数据库,具体到比特币上,就是一个分布式的加密账本。它具有两个特点:分别是:“去中心化,即去中介化”与“防伪或说不可被篡改性”。

以上是比特币白皮书的原文首页的截图,想看更具体的内容,朋友们可以在https://bitcoin.org/bitcoin.pdf,这个网址中查看。

姑且抛去其他的问题不谈,我们先关注一下题目中peer这个单词:

在百度百科中,pee的中文意思是“同辈、同等的人”,在计算机上,peer称之为“节点”。

这里展示的是在互联网上的平等,不仅仅是存储技术上实现的一个互助组织,而是实现了交易人与交易人之间的平等问题。在这套互联网的平等交易体系中,每一个交易者根据自己的计算能力(简称算力),来进行交易者的区分。

因为,如果仅仅是账号注册的话,任何一个人都有可能注册出上百上千个虚假账号。就如同几年前出现的那种微博刷关注度的情况,那时候很多的所谓“大V”,几百万的粉丝账号,存在着大量的僵尸粉,并没有真实反映一个账号的被关注度。

算力与注册不同在于,注册是一次性操作,即便有些操作可以通过某个脚本使得该账号体现出一定的活力来,但仍然存在造假的可能性。而算力要体现出持续不断的操作能力,这种造假要付出的成本比账号注册造假要高得多,因此在一定程度上可以视为某个单独个体的象征。

但是算力如何体现呢?我们首先要介绍一下本篇的第一个数学概念:离散散列函数,也被称之为哈希函数。

哈希(Hash)函数,H(x)的定义中,有以下三个定义:

被输入的自变量x,可以为任意大小的字符串

被输出的哈希值H(x),应为固定长度的二进制数

哈希函数的计算,要求计算时间短而有效,对于n位字符串的哈希值计算复杂度应为O(n)

目前存在的各类公认的哈希函数有:MD4、MD5、SHA-1、SHA-2、SHA-3、RIPEMD160等等,比特币中采用的哈希函数为SHA256和RIPEMD160。

对于一个优秀的哈希函数,应该具备如下三种安全特性:

碰撞性:即很难找到不同的 x 和 y ,满足 H(x) = H(y)

不可逆性:即如已知H(x),则很难反求出 x 的值

谜题友好:即对于任意的 x 与 dx,H(x)与H(x+dx)在值域范围内随机分布

因为哈希函数定义的原因,定义域中的自变量数量是一个大小为阿列夫零的无穷大,而值域因为长度固定(比如说256位),值域数量只能是2^256这样的一个有限值。

虽然这个有限值已经很大,但跟无穷大相比,和零也没有什么区别,所以如果计算2^256+1个不同的任意大小的字符串,必然也就是说100%存在2个不同的字符串生成同一个哈希值的情况,这种情况称之为“碰撞”。

所以,防碰撞性就是要求这种碰撞情况很难被找到,当前的算法中MD5已经于2005年被山东大学王小云教授破解(现在已经是清华大学长江学者特聘教授,并于2017年正式成为中科院院士)

不可逆性不必多说,可以实现匿名和加密。

而谜题友好的特性,要体现的是对定义域中的某个字符串,即使仅仅作出微小改变,获得的不同的哈希值之间的差别也是一个随机大小,即对于一个256位长度的二进制数,既可能从256个0变成256个1,也可能仅仅是个加一操作甚至是一个发生碰撞的操作。

哈希函数的防碰撞性,使得任意一个文件的哈希函数,可以作为该文件的“信息摘要”,从而简单验证一段数据文件是否发生篡改,这也是区块链防篡改性的数学基础之一。

而谜题友好的特性,则是“获得10分钟记账权,并获得最新区块的记录权需要解决的一个数学问题”的基础。我们以SHA256为例,每获取10分钟记账权要解决的数学问题如下图所示:

我们在计算的时候,前一个区块k的哈希值以及其他的一些在区块k+1中的其他确定值之后,再附加上一个随机值nonce,将这个整体值作为求哈希值的自变量x,如果算出的哈希值小于等于某个数2^t,只要确定这个数,那我们计算出这个数值的概率对于网络上每个独立运算的节点都是相同的,只有更大算力的节点才会在更短的时间内解决这个问题。

这就是一个类似于泊松过程的计数问题,因为最长的链条被记录为有效链条,因此这也就是51%算力攻击的数学基础。

然而仅有以上的数学内容,仅仅确保了P2P网络是以算力为独立个体的划分标准,并不能实现网络上每个个体之间的交易安全性。为此,我们需要介绍另外一个数学工具,也就是密码学中的非对称加密技术。

图中,有两把锁,一把蓝色的用来给锁上锁,这种操作在密码学中称之为加密;另一把红色的用来把锁打开,这种操作在密码学中称之为解密。

而且加密用的锁无法进行解密,解密用的锁无法用来加密,这种加密技术就称之为非对称加密技术。

目前比较成熟的经典的非对称加密算法有RSA和ECC(椭圆曲线加密)这两类,比特币中采用的就是后者。这一技术的应用场景为对称加密算法的密钥传递与数字签名技术。

Alice自己保有自己的加密用的蓝色密钥,在需要传递信息的时候用自己的加密密钥进行加密。并且把解密用的红色密钥公开给所有人,让任何一个人都可以解开Alice用自己的蓝色加密秘钥加密过的信息。

这样就可以确保该信息的加密确实是由Alice操作的,因此该加密操作可以算是Alice对该信息进行的一个签名,以向所有其他人承诺自己是这个操作的执行者。因为用其他人的加密秘钥加密后的信息,Alice的红色公钥是无法正确解密的。因此,我们可以这样记录一个交易:

我们如果要记录一段交易是用来证实财产持有者0按照交易数据内容将财产转移给财产持有者1,我们可以讲持有者1的公钥与交易数据及前一个交易的数据一起求得一个哈希值,并且将该哈希值用持有者0的私钥加密后得到一段持有者0对这个交易认可的签名。

这样,持有者1的公钥、交易数据、哈希值、持有者0对哈希值的签名,四段数据共同构成里一个数据段,整体作为一段交易的记录。这也是整体区块链作为加密账本上的一段数据记录。如果我们要进行下一个交易,如何记录呢?

因为“交易1”已经证实财产持有者由持有者0转移到持有者1,生成的下一步交易,“交易2”需要证实的是财产持有者由持有者1转移到持有者2的过程。

因此,类似的需要:持有者2的公钥、交易数据、交易1与前两个数据生成的哈希值、以及对这段哈希值由持有者1的私钥加密过后的持有者1的签名共同构成。

证实交易2成立的方式,一方面是对交易1与交易2中的前两段数据共同求哈希所得的确实是交易2中记录的哈希,另一方面,需要交易2中的加密信息可以被交易1中持有者1的公钥解密得到的明文与交易2中的哈希完全一致。依次确保了交易的连续性和可验证性。

这样的一系列交易数据,共同构成了区块链上的数据。从而构成了一个不可被篡改性加密账本,随时记录着最后的交易中财产的持有者。

这样的数据在P2P网络的每一个节点上被加以记录,就构成了一个分布式的加密账本。为了确保账本的完整性,我们采用哈希指针构成的区块链的记录方式来减小需要在每个节点上存储的空间。

数据结构中的普通指针,是在指针中传入数据在内存中的地址,而哈希指针是除了内存地址外仍然保留了指向数据的哈希值。因为在P2P网络中,数据是以该数据的公钥来证实其身份的,也就是说在P2P网络的公钥即身份中,公钥指向的就是该数据的地址。这样,数据的公钥与哈希值一起构成了一段数据的哈希指针。

这样一段段由哈希指针构成的链式数据结构,就被称作区块链,其中每个区块的数据都是由每十分钟算出满足条件的nonce的记录者负责记录出的交易数据。这些数据以哈希指针构成的二叉树数据结构(又称作默克尔树)来验证数据的完整性。

这样只需要记录每个区块前一个区块的公钥地址及哈希值、本区块的记录时间戳、记录数据的整体默克尔树的哈希值等信息,就可以将全部信息以不可篡改的方式记录下来。

以上的内容就是如何以数学生成一个不可篡改的分布式加密账本的方法。并且随着全球算力总量的增加,要保证平均每十分钟生成一个新的区块的方法,只需要调整算力难度值2t就可以。

并且每五年计算出新的区块来就减少一半的比特币奖励的方式,使得比特币的发行总量既可以随着时间的增加而增加,也可以确保比特币的稀缺性,从而避免了货币发行中通货膨胀的问题。

比特币可以说是第一个以数学方式,确保每一个节点的平等。如果想要更多的比特币,可以通过一方面增加算力来增加自己记账权从而获得一部分比特币,也可以通过另一方面使得自己的算力达到比特币交易环境中整体算力的51%,从而进行双重花费的骗局来获得。

但采用后者的算力会使得整体比特币交易环境遭到破坏,从而使得该生态下的交易用计量单位丧失价值,因此以运筹学中解决囚徒困境的结论,参与该交易环境中的每一个节点都会尽可能使得自己的算力进行前者描述中的利用,而非使用后者来破坏整体环境。

在美剧《硅谷》的第五季第八集中就出现了旧有的货币持有者(风险投资商VC)对P2P网络实施51%攻击的一段描述。尽管不完全准确,也很有参考性:

其实这体现的是一种新的网络生态,或者说是一种新的节点与节点平等的社会生态,与旧有的满足马太效应的20%集中式中间商控制余下的80%一般劳动者的社会生态,之间的一种斗争模式。

在旧有的模式中,我们想要与陌生人进行一个交易,需要一个我们熟悉的中间人对这个陌生人担保或者叫“背书”,交易才能在信任建立了的基础上被操作。

就好比如果我们作为一个死肥宅要点个外卖,我们点外卖的人与外卖销售者之间,需要美团和银行这样的强大的中间商为我们背书,并且他们要从中收取作为中间商的背书费用,从而给交易增加了不可避免的这种经济学上的“信任成本”。

同样的,这些各大平台、中介机构、金融机构,他们通过这些收费来盈利,他们盈利要为国家交税。正如富兰克林说过的一句话,“In this world nothing can be said to be certain, except death and taxes(在这个世界上,只有死亡和交税是无法避免的)”。

因为这些机构想要正常运行,需要一个强大的国家在背后为这些注册在这些国家的每一家合法的公司背书,需要这个国家发行的法定货币作为交易载体(比如我们平时使用的就是人民币)。

只有在收取了这些税金,国家才能为运作这些个机构的公务人员发出工资,保障我们生活的正常进行,才能让每个巨有钱的“死肥宅”躺在家里享受一切“幸福而美好”的生活。

但在这种新的P2P网络中,我们不需要任何熟悉的中间人“背书”,数学为每一个网络节点上的陌生人之间进行背书,从而使得我们减少了大量的“背书”成本。这体现了一种未来可能存在的新的生存模式。

在未来的经济展望中,现在大量借用区块链概念的各种加密货币,实际上就是各种共识算法下的信任金融生态环境。这种环境下的加密货币,树立的是各种社会共识基础上的量化标准。

比特币的共识算法是PoW,算力作为独立个体是构成共识的前提;以太坊的PoS,实际上描述的就是现有的股份制度。正如同美元是美国思想与文化具现出的一般等价物,而人民币是中华人民共和国思想与文化具现出的一般等价物。

国与国之间的货币,仍然是在旧有的未被互联网连接的地域性经济的外在体现,而不同的共识算法代表的加密货币,则是在新的可被互联网连接的不分国籍的各个匿名但具有相同共识文化的人士之间的价值量化的外在体现。

然而,面对这种新的互联网浪潮与价值。正如鲁迅先生说过的“曾经富过的想要复古,还未富过的想要革命,正在富有的想要维持现状”。

旧有的势力,对于以比特币为代表的加密货币进行的打击是必然的。以算力为基础的衡量标准,虽然先进,但仍然可被利用,这正是当前算力集中化的一种表现。

与此同时,还有大量的加密货币,被制造出来时,制造者自己也不明白自己的货币究竟阐述的是哪一种共识机制。

仅仅是投机者借着区块链概念,进行各种各样的ICO,让大量类似咱们在开篇前那个认为区块链就是铁链的大叔一样的人们在盲目的跟风下购入大批仅仅是概念,但实际没有任何价值的XX币。这种跟风行为是极不健康的。

当前,我们对于区块链,需要的不是盲目跟风,而是深入的学习和研究。这其中涉及的不仅仅是计算机知识,更多的是数学、经济、政治、法律等等。

加密货币,仅仅是区块链1.0的产物;以太坊上的可编程的共识算法,则是依附于以太币的区块链2.0的新生事物;而各类不同情况下的不同共识产生的共识应用场景,才是未来的区块链3.0的网络平等生态环境。

目前,万门大学所提倡的尽最大可能去减少教育成本,所以,制作一个区块链3.0在教育场景下的区块链教育教学生态环境也是我们应该努力的方向!

但是,我们需要知道的是,当前的区块链仅仅是初步解决了共信的记录问题。

真正社会中人与人之间的问题是复杂而且多变的。

仅仅依赖记录,而没有警察、军队这些国家机器来支撑记录后的信任,这样的数学背书是无效的。如何去除更多的那些不得不实施的背书成本,这是我们未来的研究方向。

也许在当代,区块链以及加密货币并不能解决这些问题,但必须指出的是,它们的出现为我们指出了解决的方向与可能性。这正是区块链技术背后更为深层的社会意义!

http://xzh.i3geek.com
jp6754
ChainDAO管理员,不喜交流,无事退朝!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据