万万哇 发表于 2024-6-21 14:35:14

0底子学习区块链技术——推演猜想

在《0底子学习区块链技术——入门》一文中,我们结合可视化工具,直观地感受了下区块的结构,以及链式的前后关系。
本文我们将抛弃之前的知识,从0开始思索和推演,区块链技术大概是如何构思出来的。
去中央

在一般的头脑中,我们在一个“中央”保存信息,如许即方便又高效。但是带来的问题是:篡改起来容易。因为只要攻克“中央”如许一个对象,就可以修改全部信息。(下图中:人脸表示用户,红色6角星表示攻击,红色方块表示被篡改的数据)
https://img-blog.csdnimg.cn/direct/671492a585c842d39e2e77852968e485.png
那怎么变得更加安全一点呢?一个质朴的想法就是——再加一个“中央”。
https://img-blog.csdnimg.cn/direct/3ab2f14ee99d4b9787e5d99e24e74972.png
如许攻击者需要攻克两个“中央”才能达到修改历史数据的目的。
按照这个思路,如何做到更加安全呢?对的,增加更多的“中央”。如许攻击者需要攻克更多的“中央”才能修改数据。
随着“中央”的增多,它们就越来越显得不那么“中央”了。因为每个“中央”都对等,没谁权重高,没谁权重低,于是丧失了“中央”这个概念。这就是“去中央化”。
防备篡改

如何防止篡改历史数据?现实上,“防止”是不太大概。我们唯一能做的就是“提高篡改本钱”。像上面增加“中央”数量一样,它并不能避免全部“中央”被攻克,只是提高了被攻克的难度。
那如何提高篡改本钱呢?一种质朴的想法是:给数据加密。但是数据加密需要秘钥,这个秘钥如果被偷窃,会导致整个方案,或者某个数据中央的数据全部被攻克。
https://img-blog.csdnimg.cn/direct/11077d7f7f23464b92495d3ff1f989bc.png
最关键的问题是:被篡改后,需要对比其他“中央”解密后的数据,才能感知该中央数据出现了问题。
https://img-blog.csdnimg.cn/direct/9f0555fda3ea4cc696cfe5c66ec7e57c.png
如何可以快速感知数据变更?那就是指纹计算。即我们对数据计算出一个唯一性指纹。一旦数据有任何变更,之前的指纹都会失效。
https://img-blog.csdnimg.cn/direct/3ebf7bf956a8491083d451d1a9ab80ae.png
如许如果篡改者修改了历史数据,历史数据所在的数据区域指纹就失效,这个时间篡改者就需要重新计算新的指纹。
在区块链技术中,指纹计算使用的Hash算法,有SHA-256等。不同算法算出来的数据(指纹)长度不一样,但是雷同算法算出的长度是一致的。需要说明的是,目前的hash算法都存在碰撞的大概性(即不同的数据,算出雷同的hash值),只是概率很低罢了。
付出代价

如果篡改者手速非常快,可以一下就算出Hash。那不就意味着我们这种方式很容易被攻克吗?怎么办?增加算法的难度。因为Hash算法不具备可预测性,也不可逆。我们只能使用“暴力”计算的方式。如许我可以提出一些规则,比如要求Hash出来的值需要符合某些条件。但是由于数据到Hash值存在一一对应的关系,如果要求Hash值改变,则需要原始数据也改变。于是我们就引入Nonce这个概念,它会成为原始数据的一部分,从而让Hash值可以随着它改变而改变。但是这种改变是不可预测的,即我们不知道Nonce为什么值时,算出的Hash符合某种规律。我们唯一能做的就是算出来,然后查看该值是否符合规律。
一种比较容易想到的规则,就是要求算出的的Hash值前面或者后面几位为0。
在《0底子学习区块链技术——入门》中,我们看到例子中有5种规则,现实规则会更复杂,要求的暴力计算时间也越长。
https://img-blog.csdnimg.cn/direct/7d38cac9e426482db64bed5072779c9b.png
方便存储

如果我们将数据保存到一个加密区域,则新增数据时需要解密原始数据,然后把新数据加入后再加密。
https://img-blog.csdnimg.cn/direct/11687a66bbb54cfc9ddce8327b1a8a88.png
这个过程略显繁琐。
有没有更简单的方式?可以一条数据加密一次,不和历史数据掺和到一起。但是在防备篡改这块,这个方案显得无能为力。
如许我们就又回到指纹的方案。
那么是对全部数据进行指纹?还是对单条数据进行指纹?(现实两者都不是)
如果对全部数据进行指纹计算,就碰面临一个“以有限对抗无限”的问题。因为随着数据量的增加,要将全部数据每次都计算一次,将变得越来越难以实现。比如现在比特币生意业务数据有几百G,如果每次有新的数据进来,都要对着几百G数据进行Hash,则机器资源斲丧会更大。
那么对单条数据进行指纹?这似乎只能在检查单个数据时,可以发现被篡改(因为数据的Hash因为数据被篡改而改变),但是不能快速发现整体数据都变得不可信了。
于是,基于一些计算机数据结构的思想,可以将数据通过链式关系关联起来。起到“铰链”作用的就是前一个区块的Hash。
https://img-blog.csdnimg.cn/direct/47cdfd582eb94866bd7b07544b0b8ac6.png#pic_center
如果链中某个区块数据变了,它的Hash也会改变,而它后面的区块的Pre hash还是指向原始值,如许区块链的链式关系就断开了,该链就出现问题了。
https://img-blog.csdnimg.cn/direct/8f935a7af7de49eea3ab21d32b7a5388.png#pic_center
https://img-blog.csdnimg.cn/direct/c19cbe8678d34e938c7d8605b53f1961.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 0底子学习区块链技术——推演猜想