想要学习区块链的相关知识,区块链的核心概念——区块、哈希算法、公钥和私钥、时间戳等是必须要弄懂的。区块链由多个相连的区块构成,所以我们先从了解区块的概念开始!
一、区块
区块的结构图
先看上面的区块的结构图。在区块链中交易数据是以电子化形式永久存在的,形成数据存储的单元被称为区块。区块链的数据结构其实有两部分组成,分别是区块头和区块体。你可以这样理解,区块体就是区块的主体,主体里是各种交易数据,区块头里就是其他杂七杂八的东西,由版本号、难度值、时间戳等等组成,它包含了每个区块自身的身份识别信息。打个简单的比方,赞比社区的主体信息是什么?就是赞比社区论坛里各种类型的帖子,包括精华帖和普通帖。所以区块体就是赞比社区各种帖子里的内容。那区块头是什么?“ 赞比社区是国内首家集线上与线下于一体的区块链交流社区,为所有区块链技术爱好者提供开放性的区块链交流论坛,分享实时信息、传播普及区块链知识等”,即赞比社区的介绍、头衔等一些杂七杂八的信息就是区块头。
区块头,包括三个部分:
区块头三部分
①父区块哈希值,也就是上一个区块的哈希地址。我们知道区块链是按顺序一个个排列形成的区块链条,就像真实账本一样,每一页都有有一个页码,通过页码你就能找到你想找的内容;而区块链中,通过父区块哈希值就可以找到了上一区块结算后的信息。②挖矿难度、时间戳和随机数。挖矿难度是根据网络的算力来调整挖矿的时间;随机数是用于工作量证明算法的计数器;时间戳是记录每一个区块的创建时间,这个后面会详细讲述。③Merkle(默克尔)树根。能够总结并快速归纳校验区块中所有交易数据的Merkle(默克尔)树根数据。相对比较难懂,这个后面会详细讲述。而区块体则十分简单,就是一个区块中所有的交易记录,比如比特币系统的每一个区块主体大概是2500笔交易记录,交易记录就是转账信息。接下来讲一讲创世区块。
创世区块
什么是创世区块呢?在区块链网络的数据结构里,第一个最早被构建出来的区块被称为创世区块。它拥有一个唯一的ID标识号,除了创世区块以外,每个后续建立的区块都会包含两个ID,一个是该区块自身的ID号,另外一个是前面区块的ID号。第一个创世区块因为没有前后关系,所以就有且只有一个ID号。区块每隔一定的时间就会自动生成,比如比特币网络规定每十分钟会生成一个新的区块,以太坊平均大概在每15秒就会产生一个新的区块,EOS因为他做了大量的改进和优化,现在出块的时间,就是产生新的区块的时间是达到了逆天的0.5秒。生成后的区块通过ID号之间的前后指向关系,所有区块按顺序相连就构成了区块链。二、哈希算法
哈希算法
哈希算法是一种加密算法,简单地说,就是如果有些内容你如果不想让别人看到,你可能就会想到对这些内容加密,哈希算法就是其中一种。其中,加密前的信息被称作明文,加密后的信息被称为密文;复杂地说,哈希算法是区块链中保证交易信息不被篡改的单向密码机制。哈希算法接收一段明文后,以一种不可逆的方式将其转化为一个长度较短、位数固定的散列数据。哈希算法有两个特点:①加密的明文单向不可逆转!怎么理解呢?假如我们要加密的内容是:国庆快乐!那么加密后的密文就变为ABCD。当别人看到ABCD时,他无法通过ABCD推出你想表达的意思是:国庆快乐!②明文一旦发生变化,输出的加密内容即散列数据就会跟着变化。这个就好比我们一开始想传输:I love you,它加密后为ABC。后面传输的内容改成了:I hate you,那么内容就会变成ADF。哈希算法是区块链系统里一种安全保密的算法,能确保我们要传输的内容被加密而不被窃取。哈希算法的作用:防止区块信息被篡改哈希值是对每个区块中所有的交易记录进行加密后压缩成的一串数字和字母组成的散列的字符串。区块链的哈希值能够唯一而准确地标识一个区块,区块链中任意节点都可以通过简单的哈希计算获得这个区块的哈希值,如果计算出的哈希值没有变化也就意味着区块中的信息没有被篡改,相反就说明区块中的信息被促难改了。这一点在区块链中很有用,是一种有效防止区块信息被篡改的手段!,三、公钥(yue)和私钥(yue)公钥和私钥跟我们的资产息息相关。首先,公钥和私钥是成对出现的。我们用电子邮件加密的模型来简单介绍一下:公钥就是给大家用的,你可以通过电子邮件发布,可以通过网站让别人下载,公钥其实是用来加密/验章的。私钥就是自己的,必须非常小心保存,最好加上密码,私钥用来解密/签章,私钥由个人拥有。第二,目前很多人都进行了区块链的投资,这必然使用区块链上的钱包。钱包有三个要素:地址、公钥和私钥。地址是表示通过这个地址就能找到“安晴”的钱包,也就是ID;公钥则是表示表示“安晴”的钱包一种可以公开的钥匙,拿来和私钥匹配做验证的;而私钥,则是不可公开,主要起到电子签名的作用,是为了证明钱包是“安晴”的。公钥和私钥是交易过程需要用到的钥匙。我们用一个交易流程来表示公钥和私钥的作用。例如下图所示:
小白想与小黑发起一个交易,首先她会在发起过程中把私钥保留在手上,公钥则公开给小黑看。在发起交易时,小白会对自己的交易记录用私钥对交易进行签名,证明这笔记录“确实”是她发起的。小黑拿到小白的交易单后,用小白的公钥进行解锁,就能解开小白的私钥,因此就能证明这个交易确实是小白发起的,从而进行无误的交易。在金融系统中,身份的确认是非常重要的。小白给小黑进行转1个比特币时,参与验证的人都需要验证这笔账是小白发起的,以便后期小白想赖账时,我们能够确认说小白自己已经对这笔交易是有确认的。因此私钥的存在,就是对一个人的身份做认证,证实每笔交易的真实性,以便校对时无法赖账。无论是哈希算法还是公钥、私钥的设计机制,其实都是为了确保区块链系统安全可靠,避免被篡改。四、时间戳简单地说,时间戳其实就是给区块盖个章,它记录的是本区块被创建的精确的时间,证实了每一个区块都是独一无二不可篡改的!
区块链中的时间戳从区块生成的一刻起就存在于区块之中,它对应的是每一次交易记录的认证,证明交易记录的真实性。时间戳是直接写在区块链中的,而区块链中已经生成的区块不可篡改,因为一旦篡改,生成的哈希值就会变化,从而变成一个无效的数据。每一个时间戳会将前一个时间戳也纳入其随机哈希值中,这一过程不断重复,依次相连,最后会生成一个完整的链条。五、Merkle(默克尔)树结构
上面的这张图是默克尔树。结合上面讲到的概念,区块的交易数据在这张图里就是最下层的数据,这时候这些数据叫叶子节点。我们把这些叶子节点首先进行一次哈希计算,然后通过哈希计算得到了四个哈希值。得到这四个哈希值以后我们进入第二轮,第二轮就是把四个哈希值两两合并进行哈希计算,就得到了下一轮的两个哈希值。接着重复这种两两合并的哈希计算,最后我们得到图中最上层的唯一哈希值——默克尔根。默克尔根最大的作用就是能够判断交易的数据是不是被篡改过。默克尔根是由区块主体中所有交易的哈希值逐级两两哈希计算剩下的最后的一个唯一值,所以默克尔根在这里有两个关键词:最终值、唯一值。默克尔根的主要作用就是用于验证,来检验一笔交易是否在这个区块中存在并判断交易的数据是否被篡改过!同样地,区块中任意一个数据的变更都会导致Merkle树结构发生变化,在交易信息验证比对的过程中,Merkle树结构能够大大减少数据的计算量,毕竟,我们只需验证Merkle树结构生成的统一哈希值——默克尔根就可以了。
-安晴