-->

左耳听风_065_64_区块链技术细节哈希算法

你好,我是陈浩网名左耳朵house.这节课呢我们来讲哈希算法对于计算机来说呢,区块链就像一个单向链表,一个数据块中呢保存着三个信息。

那第一个呢是真正的数据,那第二个呢是自己的地址或者ID.那第三个呢是前一个数据块的地址。

那这样的话通过追溯前一个块的地址,把所有的数据块存成了一条链。

所以呢我们就叫它blockchain.就像文中这幅图表示的一样,每个数据块地址的编码呢使用了计算机上的一个算法。

那计算机的圈内人士啊,把这个算法叫做secure hash,有人把它音译成安全哈希,有人人它音译成安全散列。

那在计算机应用中呢,哈希算法主要有这么几个功能。

那第一个呢是用来生成唯一标志一个数据块的ID.那这个ID呢几乎不能重复。

那第二个呢是用来做数据的特征码,只要数据中一个比特位出现更改,那么整个哈希值啊就完全不一样。

而且啊数据上也保证了,我们无法通过哈希值反推归个原数据。

于是呢很多公司在互联网上发布信息或者软件的时候,都会带上一个check csome.呃,也就是校验码。

你只要把整个文件的数据传入到这个特定的哈希算法中,啊,就会得到一串很长的字符串。

那如果和官方发布的check some的字符串不一样,那么就说明信息或者文件内容啊被人更改或者信息残缺了。

因此呢也被应用在数字签名之中。

在计算机世界里啊有两个很著名的哈希算法,一个叫MD五,另一个呢叫杀兔。

那区块链啊用的是杀二五六。

这个算法我们来看一个事例。

那对于陈浩这两个字儿的拼音,那这个信息计算MD五值啊就得到了九八二四DF八三b等等等等这么一个十六进制的数。

那如果对陈浩这个拼音做一个字符的修改,比如将字母o改成数字零,那么计算出来的MD五值啊,就变成了d五二幺CE零六啊等等等等。

我们可以看到啊,这就和之前的MD五值啊就完全不一样了。

于是呢我们就可以利用哈希算法的这个特性,对数据啊做数字签名。

也就是说呢,我将数据和他的签名一起发布。

那这样呢就可以让收到方来验证数据有没有被修改。

我们再来看文中前面那个区块链的图。

那对于第一块数据呢,我们把它的数据集和前数据块的哈希值,五个零a六CBA一起做哈希啊,得到了本区块的地址,五个零c七ABFA.然后呢,下一个区块可把自己的数据五个零c七ABFA啊一起做哈希,得到五个零八ACBED这个哈希值啊,如此往复下去。

因为被哈希的数据中啊,只要有一个比特被修改了,那整个哈希就完全不一样了。

那根据这个特性呢,我们知道如果前置数据块中的数据修改了,那么它的哈希值啊就会完全不一样。

于就是说你的ID或者地址就变了。

于是呢别人就找不到这个数据块了,所以呢你还要去修改别人数据块中指向你的地址。

但是别人数据块中指向你的地址变了啊,也会导致他自己的地址啊随之变化。

因为他用你的地址生成了自己的地址,那这样一来呢,你就需要把其他人的地址啊全部改掉。

那在这样的连锁反应之下呢,你想要偷偷修改一个比特的难度一下子就提高很多。

所以在区块链的世界里,越老的区块越安全也越不容易被人篡改。

那越新的区块呢越不完全也越容易啊被人篡改。

那接着呢我来简单介绍一下比特币中区块链的一些细节。

那在文中呢,我给你展示了区块链的协议格式。

那其中的version previous block、 cash、 mercer、 root,还有timestamp,还有difficulty target和nounce.这六个数据字段是区块链的区块数据协议头。

那后面的数据呢是交易数据,分别是本块中的交易笔数h占交易数节,那最多呢不能超过EMB.那为什么是EMMB呢?后面会说,那下面呢我来说一下区块头中的那个字段的含义。

Version呢是当前区块链协议的版本号占四个字节。

那那如果升级了呢,这个版本号会变previous block. Cash呢是前面个区块的的哈希址址,占三十二个。

字节mcroroot这个字段呢可可以简单理解为啊是后面交易信息的版希值占三十二个。

字节time stamp呢是区块链生成的时间,那这个时间啊不能早于前面十一个区块的中位时间啊,不能晚于网络协调时间。

也就是说你所连接的所有节点时间的中位数,它占四个字节。

那beans呢也就是上图中的difficulty target,它表明了当前的哈希生成的难度,它占了四个磁器,最后是死。

它呢是一个随机值,用于找到满足某个条件的哈希值啊,也占四个字节。

那对这六个字段进行哈希计算,就可以得到本区块的哈希值啊,也就是它的ID或者地址。

那他的哈希方式呢是对区块头做两次上二二五六的哈希求值。

当然呢事想并没有这么简单,比特币对这个哈希值啊是有要求的那它的要求啊是那个bes字段来控制的。

然后呢你可以调整nounce这个三十二位整形的值,来找到符合条件的哈希值,所以我们把这个事情就叫做挖矿。

那在下一讲中呢,我们会详细讲一下这个事儿。

前面说到过啊,我们可以简单的将murrer root理解为交易的哈希值。

那这里呢我们具体说一下比特币的mural root是怎么计算出来的。

首先呢我们知道比特币的每一笔交易呢会有三个字段,一个是转出方,一个是转入方,还有一个是金额。

那么我们就会对每个交易的这三个字段求哈希,然后呢把交易的哈希做两两合并,再求哈希啊,直到算出最后一个哈希值。

那这个呢就是我们的marker root,我在文中画了一个图啊,展示了一下这个过程。

那这个示意图中呢有四笔交易,a和b的哈希呢成了harsh ABC和d的哈希呢成了harsh CD.然后呢再做harsh AB,加上harsh CD的哈希啊,得到了harsh ABCD.那这个呢就是micro root整个过程啊就像一个二叉树一样。

文中有一个区块链的示意图,它来自比特币的白皮书啊,你可以看一看。

那为什么要这么做呢?为什么不是把所有的交易都放到一起做一次哈信呢?那这不是也可以让人无法篡改吗?那这样做的好处啊,是因为我们可以把交易数据啊分成了若干个组。

就像上面那个二叉树所表示的那样,我们可以不断的把这个数分成左边的分支和右边的分支。

因为它们啊都被计算过哈希值,所以呢就可以很快的校验其中的内容有没有被修改过。

那这么做呢至少带来三个好处。

一个是大量的交易数据呢可以被分成各种尺寸的小组,那这样有利于我们整合数据和校验数据。

那第二呢就是这样的开销,在存储和内存上并不大。

然而我们可以提高校验组数据的难易程度。

那第三呢就是在t to p的无中心化的网络之上,我们可以把大量的数据拆成一个一个的小数据片来传输。

那这样呢就可以提高网络的传输速度。

最后啊我们需要说一下,以太坊呢有三个不同的mcer root t因为以太坊要玩智能合约,所以需要更多的mker root.那一个呢是用来做交易哈希的marker root.那一个呢是用来做状态state.因为一个智能合同从初始状态走到最终状态,需要走若干步啊,也就是若干笔交易。

那每一步呢都会让合同的状态发生变化,所以我们需要保存合同的状态。

那还有一个是用来做交易数据的,呃,主要呢是用来记录一个智能合约之中啊,最终发生的交易信息。

在stack exchange上面有一个问题啊,有相应的说明,你可以打开文章中的链接啊,前往一看以太坊把它称作是mocroportrser tree.那具体的细节呢可以参看他官方的viko.那最后呢我们再来说比特币的交易模型,比特币区块中的交易数据呢啊其实也是一个链。

那为了讲清楚这个链呢,我们需要了解一下比特币交易中的两个术语,一个是input,一个是output啊,也就是交易的支出方和收入方。

那在比特币中啊,一个交易可以有多个output,也就是说我可以把一笔钱汇给多个人,但是一个output呢只能对应一个圆的input.那还有一个条件呢,就是output和input总数要吻合。

那这里呢我举个例子,那假设frired给了alice两个比特币,ted给了alice三个比特币。

那这个时候呢alice就有五个比特币了。

但是呢大比特币的世界里啊是没有余额的。

所以对于爱丽丝来说呢,它只有两个没有花出去的交易啊,一个是两个比特币,一个是三个比特币。

那这个呢在比特币中啊叫做UTXO.那此时呢如果alice想要转给报四个比特币,他会发现自己的两个交易中啊都不够,但是也不能拆开之前的那两个比特币交易,那么他呢就只能把交易二和交易三当做input,然后把自己和抱抱当成output.啊,bob分到四个,他自己分成一个,那这样的交易啊才平衡。

于是呢一笔交易可能会包含大量的input和output.因为比特币没有余额的概念,所以呢就需要通过多个input来凑。

然后呢,凹铺这边还需要给自己找零啊,给矿工小费。

那这样一来呢,在比特币交易中,你把钱给了我,我又给了张三。

那张三呢给了李四,就这么传递下去,形成了一个交易链。

因为还没有花出去啊,所以就成了UTXO.而系统计算你有没有钱可以汇出去的时候呢,只需要查看一下你的UTXO就可以了。

那具体呢你可以参考文中的示意图。

那UTXO啊因为没有账户和余额的概念,所以呢就可以并行的进行多余交易。

那假如说你有多个UTXO呢,你就可以进行多笔交易,而不需要并行锁。

然后呢,它有匿名性的特征,也就是说你可以隐藏自己的交易目的地,而且啊没有余额就意味着是没有状态的那要知道你有多少个比特币呢啊,只需要把UGXO的交易记录统计一下就可以知道了。

但是这个呢也让人比较费解,而且啊也不利于应用上的开发。

那以太坊呢就使用了余额的方式。

好了,我们来做个总结。

在这节课中呢,我先讲述了什么是区块链,以及它的核心原理是什么。

那随后呢我分享了比特币的哈希算法,还有murer root是如何计算出来的那最后呢我介绍了比特币的交易模型啊,希望能对你有帮助。

那这节课中的图片呢很多,所以你听完音频之后呢,一定要打开文章看一看啊,有助于你理解。

文末呢我给出了区块链技术系列文章的目录啊,希望你能在这个列表里啊找到自己感兴趣的内容。