学习区块链随笔(四)

区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成一种链式数据结构,并以密码学的方式保证不可篡改和不可伪造的分布式账本。

广义来讲区块链技术是利用块链式结构来验证和存储数据,利用分布式节点共识算法来生成和更新数据,利用密码学的方式保证数据传输和访问的安全性,利用由自动化脚本代码组成的智能合约来编译和操作数据的一种全新的分布式基础架构与计算范式。

区块时链式结构的基本数据单元,聚合了所有交易的相关信息,主要包含区块头和区块主体两部分。区块头主要由父区块哈希值,时间戳,默克尔树根等信息组成;区块主体一般包含一串交易的列表。每个区块中的区块头所保存的父区块哈希值,便唯一地指定了该区块的父区块,在区块间构成了连接关系,从而组成了区块链的基本数据结构。

哈希算法即散列算法的直接音译,把任意长度的输入通过一定的计算,生成一个固定长度的字符串,输出的字符中称为该输入的哈希值。

哈希算法要具备正向快速,输入敏感,逆向困难强碰撞等特征。

1.正向快速,普通电脑SHA256算法,一秒钟可以做2000万次运算。

2.输入敏感,输入信息做任何微小改动,哈希值也会天壤之别。在网络传输中,可以在发送数据的同时,发送该内容的哈希值,接收方收到数据后,只要将数据再次进行哈希运算对比输出与接收的哈希值,就可以判断数据是否损坏。

3.逆向困难,要求无法在段时间内根据哈希值计算出原始输入信息。

4.强对抗碰撞性,不同的输入很难产生相同的哈希输出。当然由于哈希位数有限,即输出有限,而输入有限,所以不存在永远不发生碰撞的哈希算法,优秀的哈希算法要保证找到碰撞输入的代价远大于收益。

每个区块头包含了上一个区块的数据哈希值,这些哈希层层嵌套,最终将所有区块串联起来,形成区块链。区块链包含了该链诞生以来的所有交易,要篡改一笔交易,意味着它之后的所有区块的父区块哈希全部都要改一遍,需要大量运算,如果想篡改数据,必须靠伪造交易链实现,即保证在正确的区块产生之前能快速的运算出伪造的区块。同时在比特币为代表的区块链系统要求连续产生一定数量的区块之后,交易才会得到确认。即要保证连续伪造多个区块,只要网络中节点足够多,连续伪造的区块运算速度超过其他节点,几乎是不可能实现的。

另一种可行的篡改区块链的方式是某一利益方拥有全网超过50%的算力,利用区块链少数服从多数的特点,篡改历史交易,然后在区块链网络中只要有足够的节点参与,控制网络中50%的算力也是不可能做到的。即是某一利益方拥有全网超过50%的算力,那已经是既得利益者,肯定会坚定的维护区块链网络的稳定性。

通过哈希构建默克尔树,实现内容改变的快速检测

默克尔树本质上是一种哈希树,在区块链中默克尔树就是当前区块所有交易的一个哈希值,但是这个哈希值并不是直接将所有交易内容计算得到哈希,而是一个哈希二叉树。首先对每笔交易计算哈希值,然后在进行两两分组,对这两个哈希值再次计算得到一个新的哈希值,两个旧的哈希值就作为新哈希值的叶子节点。如果哈希值数量为单数,则对最后一个哈希值再次计算哈希值即可,然后重复上述计算过程,直至最后只剩一个哈希值,作为默克尔树的根,最终形成一个二叉树的结构。

在区块链中我们只需要保留对自己有用的交易信息,删除或者在其他设备备份其余交易信息,如果需要验证交易内容,只需要验证默克尔树即可。若根验证不通过,则验证两个叶子节点,再验证其中哈希验证不通过节点的叶子节点,最终准确识别被篡改的交易。

默克尔树应用广泛,如BT下载,数据一般会分成很多个小块,以保证快速下载。在下载前,先下载流文件的一个默克尔树,下载完成后再生成默克尔树,进行校验。如果不通过,则可以通过默克尔树,快速定位损坏的数据块,重新下载即可。

数字签名

1.作用,区块链网络中包含大量的节点,不同节点的权限不同。区块链主要使用数字签名来实现权限控制,识别交易发起者的合法身份,防止恶意节点冒充。

2.效力:数字签名也称为电子签名,是通过一定算法实现的类似于传统物理签名的效果。包含欧盟美国中国的20个国家和地区认可数字签名的法律效力。标准定义:附加在数据单元上的一些数据,或是对数据单元所做的密码变换,这种数据和变换允许数据单元的接收者用以确认数据单元来源和数据单元的完整性,并保护数据防止被人进行伪造。

数字签名原理:在密码学领域,一套数字签名算法,一般包含签名和验签两种运算,数据经过签名后,非常容易验证完整性,并且不可抵赖。数字签名通常采用非对称加密算法,即每一个节点需要一堆私钥,公钥秘钥对。所谓私钥即只有本人才可以拥有的秘钥,签名时需要使用私钥。不同的私钥对同一段数据的签名是完全不同的。数字签名一般作为额外信息附加在原消息中,一次证明消息发送者的身份。公钥即所有人都可以获取的秘钥,验签时需要使用公钥,因此公钥人人可获取,所有节点均可以校验身份的合法性。

数字签名流程如下:

1.发送方对原始数据通过哈希算法计算摘要,使用非对称秘钥对中的私钥对数字摘要进行加密,这个加密的数据就是数字签名。

2.数字签名与原始数据一起发送给验证签名的任何一方,验证数字签名的流程如下:

     (1)首先签名的验证方一定要持有发送方的公钥

     (2)在接收到数字签名与原始数据后,首先使用公钥对数据签名进行解密,得到原始摘要值。

     (3)然后再对原始数据通过同样的哈希算法计算摘要值,进而对比解密得到的摘要值与重新计算的摘要值是否相同,如果相同则签名验证通过。

数字签名在区块链中的用法,在区块链网络中,每个节点都拥有一份公私钥对,节点发送交易时,先用私钥对交易内容进行签名,并将签名附加在交易中。其它节点收到广播后,首先对交易中附加的数字签名进行验证。完成消息完整性校验及消息发送者身份合法性校验后,该交易才会触发后续处理流程。

猜你喜欢

转载自blog.csdn.net/u010145988/article/details/104455202