在讲区块链的工作原理前,链马给大家搞清楚区块链的几个核心概念。
01
区块
区块作为区块链中的基本结构单元,是由包含元数据的区块头和包含交易数据的区块主体构成。
区块头包含三组元数据:
1、用来链接前面的区块、索引自父区块哈希值的数据;
2、挖矿难度、Nonce(随机数,用于工作量证明算法的计数器)、时间戳;
3、能够总结并快速归纳校验区块中所有交易数据的Merkle(默克尔)树根数据。
整个系统每10分钟就能创造一个区块,包含的内容是整个网络这个时间段发生的所有交易,并且每个区块都包含了前一个区块的ID,使得每个区块都能找到前一个区块的节点,形成一条能够倒推的数据链。
整个区块链从诞生之初到运行至此,只有一条、唯一一条主区块链。
02
哈希算法
哈希算法,是保证这个数据链条中信息不被篡改的单向密码机制。
其工作原理是:在接收一段明文后,以不可逆转的方式将其转化为一段长度较短、位数固定的散列数据。
两个特点:
1、加密过程不可逆,意味着无法通过输出的散列数据倒推出原本的明文是什么;
2、任何输入信息的变化,都会引起最终输出数据的变化;
目前区块链中采用SHA–256(安全散列算法)进行区块加密,这种算法的输入长度为256位,输出的是一串长度为32字节的随机散列数据。
区块链的哈希值能够唯一而准确的识别一个区块,区块中的任何数据篡改,则计算出的散列数据就会发生变化,说明数据发生篡改。
03
公钥和私钥
在做区块链交易时,我们经常听到两个名词——公钥和私钥,这就是所谓的不对称加密方式,对应的是以前对称加密方式中的用户名与密码。
公钥,在加密过程中,通过加密算法和公钥,对明文进行加密,获得密文;
私钥,在解密过程中,通过解密算法和私钥,对密文进行解密,获得明文;
在比特币的系统中,私钥本质上是32个字节组成的数组,公钥和地址的生成都依赖私钥,有了私钥就能生成公钥和地址,就能够花费对应地址上面的比特币。私钥花费比特币的方式就是对这个私钥所对应的未花费的交易进行签名。
在区块链中,如何证明自己是真的小明问题。
假设在区块链中有两个人,分别是小明与小红,小明想向小红证明自己是真的小明,怎么办呢?
小明只要用私钥对文件进行签名并发送给小红,小红再用公钥对文件进行签名验证。如果验证成功,那么就证明文件是小明加密过的,因为私钥只有小明有。
因为在信息传递过程中,公钥和私钥的加密与解密都是不成对出现的,确保整个分布式网络点对点信息传递的安全性。
信息发送者:用私钥对信息进行签名,使用信息接收方的公钥对信息加密。
信息接收方:用信息发送者的公钥验证信息发送者的身份,使用私钥对加密信息解密。
04
时间戳
区块链中的时间戳从区块生成的一刻起就存在于区块之中,它对应的是每一次交易记录的认证,证明交易记录的真实性。
时间戳是直接写在区块链中的,而区块链中已经生成的区块不可篡改,因为一旦篡改,生成的哈希值就会变化,从而变成一个无效的数据。每一个时间戳会将前一个时间戳也纳入其随机哈希值中,这一过程不断重复,依次相连,最后会生成一个完整的链条。
05
Merkle树结构
区块链利用Merkle树的数据结构存放所有叶子节点的值,并以此为基础生成一个统一的哈希值。
Merkle树的叶子节点存储的是数据信息的哈希值,非叶子的节点存储的是对其下面所有叶子节点的组合进行哈希计算后得出的哈希值。
同样地,区块中任意一个数据的变更都会导致Merkle树结构发生变化,在交易信息验证比对的过程中,Merkle树结构能够大大减少数据的计算量,毕竟,我们只需验证Merkle树结构生成的统一哈希值就可以了。
那么,区块链究竟是如何工作的呢?
我们假设A和B之间要发起一笔交易,A先发起一个请求——我要创建一个新的区块,这个区块就会被广播给网络里的所有用户,所有用户验证同意后该区块就被添加到主链上。
这条链上拥有永久和透明可查的交易记录。全球一本账,每个人都可以查找。
区块链技术实际上是一个分布式数据库,在这个数据库中记账不是由个人或者某个中心化的主体来控制的,而是由所有节点共同维护、共同记账的。所有的单一节点都无法篡改它。
如果你想篡改一个记录,你需要同时控制整个网络超过51%的节点或计算能力才可以,而区块链中的节点无限多且无时无刻都在增加新的节点,这基本上是不可能完成的事情,而且篡改的成本非常高,几乎任何人都承担不起。
在无数次记账之后,区块链已经变成了一个可信赖、超容量的公共账本。
好了,今天的内容就这样了,明天早上10点,我们继续第五讲《区块链,骨子里的技术问题》,不见不散!
领取专属 10元无门槛券
私享最新 技术干货