主页 > 华为怎么下载imtoken > 【深度】区块链技术的六大核心算法,你知道多少?

【深度】区块链技术的六大核心算法,你知道多少?

华为怎么下载imtoken 2023-12-22 05:10:22

随着比特币和莱特币矿机的相继出现,大家已经意识到,没有算法不能开发矿机。通过改进算法,不可能完全杜绝矿机和矿池的出现。

区块链核心算法一:拜占庭协议

拜占庭的故事大概是这样的:拜占庭帝国拥有巨额财富区块链的核心技术包括,周边的10个邻居已经存在了很长时间,但是拜占庭的城墙高大坚不可摧,没有一个邻居可以成功入侵。单个邻居的任何入侵都将失败,并且本身可能会被其他 9 个邻居入侵。拜占庭帝国的防御能力如此之强,以至于周边十国至少有一半同时进攻,才有可能突破。但是,如果一个或几个邻居自己答应一起进攻,但实际过程却是背叛,那么入侵者就可以全军覆没。所以双方都谨慎行事,不敢轻易相信邻国。这就是拜占庭将军问题。

在这个分布式网络中:每个将军都有一个与其他将军实时同步的消息账本。账本中每个将军的签名可以验证身份。如果有任何消息不一致,您可以知道消息不一致是哪些将军。虽然消息不一致,但只要过半数的人同意出击,少数服从多数,就可以达成共识。

因此,在分布式系统中,虽然有坏人,但坏人可以做任何事(不受协议限制),比如不响应、发送错误信息、向不同节点发送不同的决策、不同的坏节点联合起来做坏事等等。但是,只要大多数人都是好人,完全有可能以去中心化的方式达成共识。

区块链核心算法2:非对称加密技术

在上述拜占庭协议中,如果10位将军中的几位同时发送消息,必然会造成系统混乱。结果,攻击时间计划不同,动作难以一致。任何人都可以发起攻击性信息,但谁发送呢?其实只需要增加一个成本,即:在一段时间内只有一个节点可以传播信息。当一个节点发送统一的攻击消息时,每个节点都必须对来自发起者的消息进行签名和密封,以确认自己的身份。

在今天看来,非对称加密技术可以彻底解决这个签名问题。非对称加密算法的加密和解密使用两个不同的密钥。这两个密钥就是我们常说的“公钥”和“私钥”。公钥和私钥通常成对出现。如果消息是用公钥加密的,则需要公钥对应的私钥才能解密;类似地,如果消息是用私钥加密的,则需要私钥对应的公钥才能解密。

区块链核心算法3:容错

我们假设在这个网络中,消息可能会丢失、损坏、延迟、重复发送,以及接收和发送的顺序不一致。此外,节点的行为可以是任意的:可以随时加入和离开网络、丢弃消息、伪造消息、停止工作等,并可能发生各种人为或非人为的故障。我们的算法为由共识节点组成的共识系统提供容错性,包括安全性和可用性,适用于任何网络环境。

区块链核心算法4:Paxos算法(一致性算法)

Paxos 算法解决的问题是分布式系统如何就某个值(分辨率)达成共识。一个典型的场景是,在分布式数据库系统中,如果每个节点的初始状态是一致的,并且每个节点执行相同的操作序列,那么它们最终可以得到一致的状态。为了保证每个节点执行相同的命令序列,需要对每条指令执行“一致性算法”,以保证每个节点看到的指令是一致的。一个通用的共识算法可以应用在很多场景中,是分布式计算中的一个重要问题。节点通信有两种模型:共享内存和消息传递。 Paxos 算法是一种基于消息传递模型的共识算法。 706878

区块链核心算法五:共识机制

区块链共识算法主要是工作量证明和权益证明。以比特币为例,其实从技术角度看,PoW可以看成是一个重复的Hashcash,而工作量证明的产生在概率上是一个随机的过程。挖矿一种新的加密货币,在生成区块时,必须征得所有参与者的同意,并且矿工必须获得区块中所有数据的PoW工作证明。同时,矿工还要不时观察和调整这项工作的难度,因为网络要求是平均每10分钟出块一次。

区块链核心算法6:分布式存储

分布式存储是一种数据存储技术,通过网络使用每台机器上的磁盘空间,并将这些分布式存储资源存储起来,构成一个虚拟存储设备,数据存储在网络的各个角落。因此,分布式存储技术并不是将完整的数据存储在每台计算机上,而是将数据切分后存储在不同的计算机上。这就像存放 100 个鸡蛋,不是在同一个篮子里,而是在不同的地方,加起来就是 100 个鸡蛋。

算法进化之路

算法进化

“算法”这个词目前国内用户使用比较模糊,有时指的是共识机制,比如POW算法、POS算法;有时指特定的 Hash 算法,如 SHA256、SCRYPT。应该说,这是早期外文资料翻译概念模糊造成的错误,后来人们纷纷效仿。共识机制(过去通常称为Proof,现在经常使用Consensus)和算法(Algorithm)在英文资料中语义清晰,不能混淆。两者都是区块链技术体系中的重要支柱。

所以当我们说“X币使用Y算法”时,其实是指使用了哪种Hash算法,隐含的前提是该币使用了POW证明方式。只有在POW下讨论选择哪种算法才有意义,算法的各种复杂设计更能体现其有用性。为什么呢,中本聪在设计比特币的时候其实在很多地方都用到了Hash函数,比如计算区块ID、计算交易ID、构建代币地址等。我们说的算法具体是指使用哪个Hash函数来计算区块ID。所谓算法创新,就是在这个地方努力。另外,其他任何用到Hash函数的地方,对计算难度没有要求,应该使用可以快速计算的算法,尤其是计算交易ID的时候,否则会影响区块链同步速度。因此,如果选择POS方法,也应该使用易于计算的算法来计算块ID。

哈希函数

如前所述,我们常说的POW算法本质上是一个Hash函数。 Hash函数是一个很神奇的东西。毫不夸张地说,他为中本聪成就了半个世界。学习比特币应该从学习哈希函数开始。了解了Hash函数,再学习比特币的原理,你会事半功倍,否则你会觉得处处都是。混乱,难以启蒙。而中本聪也将Hash函数的所有特性发挥的淋漓尽致:

已经设计了很多Hash函数并被广泛使用,但是Hash函数一般安全寿命不长。被认为是安全的算法往往在可以长期使用之前就被攻击成功。新的更安全的算法层出不穷,每一种被公认为安全可靠的算法都有自己严格的审核流程。 在币圈里,我们常说某个币发明了某种算法。事实上,它主要使用那些经过认证的安全算法,单独或组合使用。

SHA256

SHA(Secure Hash Algorithm,翻译为Secure Hash Algorithm)由美国国家安全局(NSA)设计,美国国家标准与技术研究院(NIST)发布。系列密码哈希函数,经历了SHA-0、SHA-1、SHA-2、SHA-3系列的发展。 2007年,NSA正式宣布将在全球范围内征集新一代(SHA-3)算法设计)。 2012年,评选结果公布。 Keccak 算法最终胜出,成为唯一官方标准的 SHA-3 算法,不过还有四种算法。与此同时,他们进入了第三轮选拔,分别是:BLAKE、GrøSTL、JH和SKEIN。这些算法实际上是非常安全的,并且已经被各种山寨币审查和频繁使用。

比特币使用SHA256算法,该算法属于SHA-2系列。当中本聪发明比特币 (2008)) 时,它被公认为最安全和最先进的算法之一。除了地址生成中的一个环节外,使用了REPID-160算法。 SHA256 用于比特币系统中需要哈希运算的任何地方。随着比特币被更多人了解,大家开始疑惑中本聪为何选择SHA256,同时对SHA256的安全性发表了各种意见,SHA256受到了应有的质疑。到目前为止,没有公开的证据表明SHA256存在漏洞,SHA256仍然坚决抵制比特币安全的大旗。当然,每个人心里都知道,没有永远安全的算法,SHA256迟早会被取代。中本聪本人也解释了算法升级的必要性和过程。

脚本

后来,随着显卡挖矿和矿池的出现,社区开始担心矿池会导致算力集中,这违背了中本聪原本“一个CPU,一票”的设计理念。那段时间,中心化的焦虑非常严重,讨论非常激烈,比特币一次次被“扼杀”。直到现在,针对矿池是否违反去中心化原则的争论仍在继续。

不管怎样,有人把矛头指向了SHA256,认为该算法太容易导致矿工和矿池的出现,并试图找到更难的算法。

恰逢其时,使用 SCRYPT 算法的莱特币诞生了。据说SCRYPT是由著名黑客开发的,由于没有得到严格的安全审查和SHA系列等全面安全的演示,一直没有被广泛使用。与SHA256算法相比,SCRYPT占用内存大,计算时间长,并行计算难度大,硬件要求高。显然,SCRYPT算法对矿机的抵抗力更强。莱特币还将出块时间更改为 2.5 分钟。在那个山寨币还很稀少的年代,莱特币就靠这两项创新取得了巨大的成功,并长期稳居山寨币第一的位置。

后来有人在SCRYPT的基础上稍作修改,形成了Scrypt-N算法。改进思路都是一样的,都是追求更大的内存消耗和计算时间,以有效防范ASIC矿机。

很快,莱特币的成功催生了各种各样的算法创新,从2012年到2014年,算法创新一直是社区讨论的热门话题,每一个使用创新算法的货币出现,都能掀起波澜。

拼接算法

重排和组合是最常用的创新发明方法。很快,有些人对使用单个 Hash 函数不满意了。 2013年7月,Quark发布,率先使用多轮Hash算法。看似高大上,其实很简单,就是对输入数据计算9次hash函数。 ,上一轮运算的结果作为下一轮运算的输入。这9轮Hash一共使用了6种加密算法,分别是BLAKE、BMW、GROESTL、JH、KECCAK和SKEIN,都是公认的安全Hash算法,并且已经有了现成的实现代码。

这个多轮Hash一出现,就给人一种直观安全有力的感觉,追随者数不胜数。达世币(DASH,原名Darkcoin,Darkcoin,),今天价格依然坚挺,率先使用11种加密算法(BLAKE、BMW、GROESTL、JH、KECCAK、SKEIN、LUFFA、CUBEHASH、SHAVITE) , SIMD, ECHO),美其名曰X11,随后开发了X13、X15系列。

S系列算法其实是一系列思想。只要其中一个算法被破解,整个算法就被破解。它就像一条链子,环环相扣。只要其中一个环节断了,整个链条就会断掉。一分为二。

并行算法

有人串联,有人并联,Heavycoin(HVC)率先尝试。 HVC现在在该国是未知的。在当时还是很有名的。首次实现链上游戏。作者是俄罗斯人。可惜他英年早逝,在币圈引起了不小的遗憾。

HVC算法细节:

首先对输入数据进行一次HEFTY1(一种Hash算法)运算,得到结果d1

以d1为输入,依次进行SHA256、KECCAK512、GROESTL512、BLAKE512运算,分别得到输出d2、d3、d4、d5

分别提取d2-d5的前64位,经过混淆处理后形成最终的256位Hash结果,作为区块ID。

HEFTY1 第一轮哈希的原因是 HEFTY1 的计算难度极大,对矿机的抗性远优于 SCRYPT。但是,和 SCRYPT 一样,安全性并没有得到官方组织的证明,因此以下四种安全算法已被认可以增强安全性。

比较串联和并联的方法,虽然Quark、X11、X13等使用了多种HASH函数,但这些算法只是简单地将多种HASH函数串联起来。由于桶效应,整体防碰撞性能由最弱的算法支持。任何Hash函数都会遇到碰撞攻击,会危及货币系统的安全。

HVC 从上述每个算法中提取 64 位,并将它们融合到最终结果中。实际上,四种算法是并联的。其中一种算法被破解,只有 64 位被破解。只有算法同时被破解,货币体系的安全才会受到损害。

比特币只使用一种哈希算法。如果以后证明SHA256不再安全,虽然这个算法可以改,但考虑到“硬分叉比猛虎还猛”的现状,届时动荡是不可避免的,但如果使用并行算法,一个和平的硬可以实现分叉过渡时间。

金币

在有人在算法探索的道路上如火如荼的同时,另一部分人的声音也很刺耳,那就是指责POW浪费能源(POS机制已经完成)。战俘党虽然大力为其辩护,但也承认其消耗能量的事实。这一指责开辟了另一条探索途径,即如果能找到一种算法,既能维护区块链的安全性,又能以其他方式产生价值,那就完美了。

这条探索之路上最激动人心的成就来自Sunny King(之前开发过Peercoin)发明的Primecoin。质数硬币算法的核心思想是在做哈希运算的同时找到大的质数。质数现在广泛应用于各个领域,但人类对它们的理解仍然有限。素数不仅在数轴上很少见(相对于偶数),而且分布不规则。在数轴上寻找素数只能是盲目检测,这就是 POW 的特点。

POW 还有一个要求是易于验证,这是人类经过数百年探索实现的。 Prime 硬币使用两种方法进行测试。首先进行Fermat检验,通过后进行Euler-Lagrange-Lifchitz检验。如果测试通过,则认为a是质数。需要指出的是,这种方法并不能保证通过的测试100%都是素数,但这并不影响系统的运行,即使测试结果是错误的,只要每个节点都认为是一个素数。

Prime Coin其实是在寻找素数链——Kamper链,具体有三种Kamper质链:第一类Kamper链、第二类Kamper链和双Kamper链。

以第一类为例,规则是:素数链中的每个数都是前一个数的两倍减一,例如:

1531、3061、6121、12241、24481

序列中的下一个数字是48961(24481*2-1)不是质数,所以这条堪萨斯链的长度是5,质数币的目标是探索更长的堪萨斯链(以上三类都可以使用)。

现在最重要的问题是,如何使用戛纳链来验证一个区块是否合格?素数币的具体实现如下:

计算中本聪区块头的Hash,hashBlockHeader = SHA256(BlockHeader)

通过变换得到堪萨斯链的第一个数:originNum = hashBlockHeader * Multiplier

得到originNum后,可以测试计算出素数链长度的整数部分,小数部分的计算与堪萨斯链最后一个非素数的跨度有关。

每个block的乘数不同,计算过程与hashBlockHeader有关。 Prime Coin 修改了区块头,增加了一个字段(bnPrimeChainMultiplier)来存储乘数。但是,上面第一步计算hashBlockHeader的输入数据中并没有包含这个乘数,所以才特别指出中本聪的块头。

由于素数在数轴上分布不均,而且根据目前的知识,数越大,素数越稀有,找的难度不是线性增加的,耗时是不可预测的,但区块链需要稳定的区块生成。正因为如此,素数硬币算法一直没有流行起来,但这种探索也不是没有意义。使用 POW 工作负载的“幻想”并未停止,探索仍在进行中。继续。

以太币

以太坊(Ethereum)一开始就打算使用POS方式,但是由于POS设计的一些问题,开发团队决定在以太坊1.0阶段使用POW方式,预计在Serenity阶段转移到POS。

以太坊 POW 算法称为 Ethash。虽然只是一种过渡算法,但开发团队一点也不含糊。琐碎细节彰显智商”的设计风格。Ethash 是 Dagger-Hashimoto 改进算法的最新版本,是 Hashimoto 算法与 Dagger 算法相结合的新变体。Ethash 的设计有两个明确的目标:

捍卫矿机性能(ASIC-resistance),团队希望CPU也能参与挖矿获利。

轻客户端可验证性。

基于以上两个目标,开发团队最终发布的Ethash挖矿与CPU性能无关,而是与内存大小和内存带宽正相关。不过实现还是借鉴了SHA3的设计思路,只是使用的“SHA3_256”和“SHA3_512”与标准实现有很大的不同。

Ethash的基本流程如下:对于每个区块,首先计算一个种子(seed),它只与当前区块的信息有关;然后根据种子生成一个32M的随机数据集(Cache);接下来根据Cache生成一个1GB的数据集(DAG)。 DAG 可以理解为一个完整的搜索空间。挖矿过程是从 DAG 中随机选择元素(类似于比特币挖矿中寻找合适的 Nonce)区块链的核心技术包括,然后进行哈希运算。可以从Cache中快速计算出DAG指定位置的元素,然后进行hash。另外,Cache和DAG需要定期更新,每1000个区块,并且要求DAG的大小随时间线性增长,从1G开始,每年增加7G左右。

等哈希

Zcash 在中国拥有最新的发展势头。这种货币最大的特点就是利用零知识证明来实现私人交易。距离发布还有几天,但从社区讨论来看,各方矿工已经在磨刀了。 Zcash 在算法的选择上非常谨慎。综合考虑了SHA256D、SCRYPT、CUCKOO HASH、LYRA2等算法,最终选择了Equihash。

Equihash 算法由 Alex Biryukov 和 Dmitry Khovratovich 共同发明,其理论基础是著名的计算规律和密码学问题——广义生日悖论问题。 Equihash 是一种依赖于内存 (ARM) 的算法。机器的计算能力主要取决于它有多少内存。根据两位发明人的论文,该算法至少需要700M内存才能执行,并且1.8 GHz CPU计算30秒,经过Zcash项目优化后,目前每个挖矿线程需要1G内存,所以Zcash官方认为矿机(ASIC)很难在短时间内出现。此外,Zcash 官方还认为该算法相对公平,他们认为任何人或组织都很难偷偷优化算法,因为广义生日悖论是一个已经被广泛研究的问题。此外,Equihash 算法非常容易验证,这对于未来在受限设备上实现 Zcash 轻客户端非常重要。

Zcash 官方团队完全出于抵抗矿机性能的需要而选择了 Equihash。他们还在官方博客中承认,他们不确定 Equihash 一定是安全的,并表示如果发现 Equihash 有问题,或者找到了最优算法,Zcash 会改变 POW 算法。

总结

随着比特币和莱特币矿机的相继出现,大家已经意识到没有算法不能开发矿机,想要通过改进算法来彻底杜绝矿机和矿机。游泳池的外观是不可能的。另外,从近几年的发展来看,矿池并没有之前想象的那么可怕,甚至有人证明矿池并没有破坏去中心化。但除了安全性之外,POW 往往伴随着分发代币的功能。从这个角度来看,CPU算法更公平,用户门槛更低,这也是算法创新的驱动力。从 Ethash 和 Equihash 的设计来看,目前的算法创新还是基于对高内存消耗的追求。同时,社区在共识机制的探索上也取得了诸多成果。纵观当前区块链核心技术的整体发展,算法创新的热潮已经平息,但并未停止。比特币、区块链、算法探索还在路上。