区块链学习的概念是什么

想知道更多区块链技术,请百度【链客区块链技术问答社区】

看区块链有一段时间了,开始真是一脸懵逼啊,各种搞不懂,现在渐渐清晰了一些。准备把所有的概念总结到本文中,大部分还是从网上或者书本上找的。会慢慢完善。
区块链
区块链是一个分布式的公共数据库,可以永久保存数字交易的记录。
换句话说,它是一个日志文件,存储所有的不可变的数字交易记录。这个分布式数据库不受中央管理员控制,而是由网络中的任何人共享和可见的复制数据库网络(意味着网络中的每个节点都存储其自己的区块链副本)。
区块链技术涉及的关键点包括:去中心化(Decentralized)、去信任(Trustless)、集体维护(Collectively maintain)、可靠数据库(ReliableDatabase)、时间戳(Time stamp)、非对称加密(AsymmetricCryptography)等。
区块
一个区块就是若干交易数据的集合,它会被标记上时间戳和之前一个区块的独特标记。区块头经过哈希运算后会生成一份工作量证明,从而验证区块中的交易。有效的区块经过全网络的共识后会被追加到主区块链中。
每一个“区块”包含最近交易的记录,除了存储新的交易数据,每一个新产生的区块同时还会储存上一个区块的散列值。这意味着最近的交易记录包含其中的整个交易记录。如此紧密缠绕的区块链很难被篡改——任何地方如果有任何一点点数据被改变,那么该笔交易的涉及的整个区块链便会崩溃,变得无效,此时作弊者的攻击也变得毫无意义。
每一个“区块”包含最近交易的记录,除了存储新的交易数据,每一个新产生的区块同时还会储存上一个区块的散列值。这意味着最近的交易记录包含其中的整个交易记录。如此紧密缠绕的区块链很难被篡改——任何地方如果有任何一点点数据被改变,那么该笔交易的涉及的整个区块链便会崩溃,变得无效,此时作弊者的攻击也变得毫无意义。
每一个区块都包含了上一个区块的哈希值(hash),从创始区块(genesis block)开始连接到当前区块,形成块链。每一个区块都确保按照时间顺序在上一个区块之后产生,否则前一个区块的哈希值是未知的。
比特币
“比特币”既可以指这种虚拟货币单位,也指比特币网络或者网络节点使用的比特币软件。
挖矿
在中本聪先生发布的比特币白皮书中说比特币的产生由挖矿者计算最优散列值计算得到,第一个计算得到这一散列值的也就是block的第一人将会获得比特币。(挖矿就是求解一个数学题)
工作量证明(Proof-of-Work)
顾名思义,即工作量的证明。通常来说只能从结果证明,因为监测工作过程通常是繁琐与低效的。
比特币在Block的生成过程中使用了POW机制,一个符合要求的Block Hash由N个前导零构成,零的个数取决于网络的难度值。要得到合理的Block Hash需要经过大量尝试计算,计算时间取决于机器的哈希运算速度。当某个节点提供出一个合理的Block Hash值,说明该节点确实经过了大量的尝试计算,当然,并不能得出计算次数的绝对值,因为寻找合理hash是一个概率事件。当节点拥有占全网n%的算力时,该节点即有n/100的概率找到Block Hash。
哈希函数
哈希函数(Hash Function),也称为散列函数,给定一个输入x,它会算出相应的输出H(x)。哈希函数的主要特征是:
输入x可以是任意长度的字符串
输出结果即H(x)的长度是固定的
计算H(x)的过程是高效的(对于长度为n的字符串x,计算出H(x)的时间复杂度应为O(n))
而对于比特币这种加密系统所使用的哈希函数,它需要另外具备以下的性质:
免碰撞,即不会出现输入x≠y,但是H(x)=H(y)
其实这个特点在理论上并不成立,即便是人类制造的所有计算机自宇宙诞生开始一直运算到今天,发现碰撞的几率也是极其小的。
隐匿性,也就是说,对于一个给定的输出结果H(x),想要逆推出输入x,在计算上是不可能的。
不存在比穷举更好的方法,可以使哈希结果H(x)落在特定的范围。
以上特点是比特币的工作量证明系统可以正常运行的基石。
SHA256
SHA是安全散列算法(Secure Hash Algorithm)的缩写,是一个密码散列函数家族。这一组函数是由美国国家安全局(NSA)设计,美国国家标准与技术研究院(NIST) 发布的,主要适用于数字签名标准。SHA256就是这个函数家族中的一个,是输出值为256位的哈希算法。到目前为止,还没有出现对SHA256算法的有效攻击。
比特币系统中使用的工作量证明函正是SHA256
Merkle默克尔树
默克尔树(又叫哈希树)是一种二叉树,由一个根节点、一组中间节点和一组叶节点组成。最下面的叶节点包含存储数据或其哈希值,每个中间节点是它的两个孩子节点内容的哈希值,根节点也是由它的两个子节点内容的哈希值组成。
进一步的,默克尔树可以推广到多叉树的情形。
默克尔树的特点是,底层数据的任何变动,都会传递到其父亲节点,一直到树根。
默克尔树的典型应用场景包括:
快速比较大量数据:当两个默克尔树根相同时,则意味着所代表的数据必然相同。
快速定位修改:例如上例中,如果 D1 中数据被修改,会影响到 N1,N4 和 Root。因此,沿着 Root –> N4 –> N1,可以快速定位到发生改变的 D1;
零知识证明:例如如何证明某个数据(D0……D3)中包括给定内容 D0,很简单,构造一个默克尔树,公布 N0,N1,N4,Root,D0 拥有者可以很容易检测 D0 存在,但不知道其它内容。

猜你喜欢

转载自blog.csdn.net/weixin_44172023/article/details/86503767