对不起,大家,这篇文章对作者来说实在是太有意义和含金量了,作者想把它设置为关注博主才能见全文,请大家理解!如果觉得还是看不懂,抱歉耽误大家的时间,就请取消关注!!!
挖矿前述文章请见网络安全之网站常见的攻击方式_Joy T的博客-CSDN博客
建议先看一下先前文章的挖矿内容,下面我们仔细讲一下挖矿到底是个什么东西!
区块链和挖矿的基础理解
区块链技术允许在网络上存储不可更改的交易记录。为了保持交易数据的完整性和不可更改性,区块链网络使用了一种称为“工作量证明”(Proof of Work, PoW)的共识算法。在这个过程中,网络的参与者(矿工)必须解决复杂数学问题来提交一个新的区块。读者可以留一个疑问:什么是工作量证明?
为什么作者重点标注不可更改呢?因为,从区块链攻击者的角度看,他们获利的方式就是更改区块链内容!通过修改区块,攻击者可以进行非法的双重支付。双重支付攻击的目的是利用区块链网络的漏洞,使攻击者能够多次使用同一笔资金,购买多个商品或者交易所套利,从而为他们带来不正当的利益。所以,区块链的核心要点就是保证其不可篡改性。
至于区块链中的区块信息能否读取呢?答案是可以,区块的所有内容都是不透明的。因为区块就是从“普罗大众”的矿工中产生,就是他们找到了有效区块,所以肯定提前知道区块的交易信息。所以,攻击者知道区块信息不难,知道了也没多大用。即使攻击者有三千亿的交易账单,他也用不到!但是如果要修改信息,妈呀,就和修改某人的房产证的名字一样可怕,而区块链保证的就是不让攻击者修改交易信息!
攻击区块链违法,禁止尝试,本文绝对反对非法攻击行为!
挖矿实际上就是一种利用计算机硬件完成复杂数学问题(哈希函数)以验证和记录数字货币网络中的交易的过程。
读者可以留一些疑问:什么是数学问题?和哈希函数有什么关系?怎么通过这个数学问题验证货币交易过程?
工作量证明(PoW)
到底什么是工作量证明?
想象一下你在做一个难题,这个难题需要你进行很多次尝试和计算才能找到答案。但是一旦你找到了答案,其他人可以很容易地检查你的答案是否正确。这就是工作量证明机制的基本原理。
工作量证明的基本过程
- 出题:网络给出一个难题(这个难题与哈希值和前一个区块的信息有关)。
- 做题:
- 矿工(网络的参与者)需要不停地尝试不同的答案,进行大量的计算来解决这个难题。
- 这个过程很难,消耗大量的时间和计算资源。
- 检查答案:
- 一旦矿工找到了一个答案,他们会将答案发送到网络上。
- 其他参与者可以很快地检查这个答案是否正确。
- 如果答案正确,新的一个区块就被添加到区块链上,矿工作为他们的努力获得一些奖励(例如比特币)。
重点:开锁故事和作者-大师的对话!
网络出的难题!验证这个网络具有安全性!以下故事是本篇的核心要点!!!是作者干涸的大脑中浓缩出的一点精华!
现在有一段交易信息被一把锁保护,锁厂说,第一个破解这把锁的人,会得到“开锁大师”的称号以及锁厂的巨额奖赏。我们想为了锁厂的奖励去开这把锁,而这个交易信息,却有可能如上文所说被坏蛋篡改!所以锁厂要验证他们锁的强大保护能力!
现在的问题是:这个锁几乎无法通过算法、机制、钥匙去破解,只能不断试密码,一直猜答案。经过不懈努力,我们花了10年终于试出了密码。再经过各路开锁人士和锁厂的验证,最后得出结论:我们真的把这把锁解开了!而且是第一个解开这把锁的人!
于是,我们获得了锁厂的赏识与奖励。同时,我们的岁月也随着贪婪的汩汩欲望而流逝殆尽。这段开锁的故事,本质上就是反映了挖矿的思想与流程!
1. 首先这表明:这个锁是真安全!解了10年才解开。而这个锁厂,就可以看作是区块链中的网络。是网络给我们出的难题,也是锁厂给我们这把难开的锁。我们用岁月验证了这把锁的安全性,计算机用算力和岁月同样验证了区块链中网络的安全性!
2. 然后,对于“开锁大师”的称号和奖赏,虽然在挖矿中没有称号,但是只要挖到了答案,就能得到虚拟货币的奖赏。
3. 而对于这段交易信息,就是对应区块链中的区块。区块中包含最重要的信息就是货币交易信息,这个交易信息被网络这把锁保护着。
这个世界坏人很多,想要攻击篡改交易信息的人也很多,他们为了利益可能动用很多资源去计算哈希值并希望得到网络的认可,进而替换虚假的非法区块链。网络有责任保护每一份交易信息不被篡改!
从较为功利的角度看,我们这样的正义之人拿到交易信息是没有用的,我们不会使用非法手段篡改交易信息,在乎的就只是锁厂开锁的奖励,是一种正确、诚信、合法的渠道。通过这样的类比解释,读者是不是能够稍微串起来了呢?
得知此事的部分读者心想,我也有计算机,也有算力,那我也要挖矿!于是关掉CSDN,带着笔记本跑去矿场,遇到了正在挖矿的作者和资深的开锁大师。
作者从未违法,同时对于区块攻防有一定的兴趣,为了更好地防御,作者想知道攻击者到底是如何攻击的。作者问大师:大师,现在大家都在猜区块A的哈希值,它的交易信息每一个矿工手里都有一份,如果攻击者对这个信息做修改,比如加上他“多买了一堆的东西”的虚假信息(实际上只买了一个东西,但是可以凭借交易信息找商家索取利益),然后碰巧他是第一个算出答案的人,这样他不就可以把修改过的信息作为区块传上去了吗?
大师笑了笑,说:傻孩子,这样能成功的话,区块链系统哪有什么信誉可言呢?攻击者在传递他的区块之前,必须要发布到整个网络,得到各路诚实人马的验证与认可,才能确认他的区块可以被放在区块链上。他修改的那些小九九,诚信的大家伙都能发现,除了他之外的所有人的区块信息都是正确、一致的。当他广播这个新区块给网络时,其他节点在验证新区块的合法性时会发现这个不匹配,最终会拒绝接受他篡改过的区块。
作者想了想,有道理,攻击者的修改块需要经过诚信的大家的认证啊!那么,会不会有坏人在经过认证后再次攻击修改区块呢?所以又问:那大师,攻击者就传递正确的区块,区块被放到区块链之后,他再根据他之前正确算得的哈希值骗过大家,再去修改区块可不可以啊?
大师答:你小汁!首先我想让你明确一点,攻击者至少需要拥有超过整个网络50%的计算力资源才有可能成功执行攻击。这在大型、活跃的区块链网络(如比特币)中是不现实的,因为所需的计算资源和成本极高。
其次,我想让你明白,如果攻击者是第一个算出哈希值的人,在得到大家的验证、将区块放到区块链上之后,他算出的哈希值就已经和他放的区块一对一绑定在一起了!而且只要区块中的交易信息被略微修改一丝丝,它的哈希值会发生巨大变动!即使他之前已经求出哈希值,但那是正确区块对应的哈希值,倘若他要修改区块的内容并将新的区块替换到原本区块的位置,他就需要重新计算这个区块的哈希值,否则他得不到网络的认可。
但是,你知道这有多难吗?如果只有他一个人试图修改区块信息,他首先需要计算新区块(你修改后的区块)的哈希值。然而,其他人已经开始计算下一个区块的哈希值了,他必须计算的比他们快才有可能修改成功,只要其他人计算出了新的哈希值并在区块链上补充了新的区块,他要修改原本区块(现在是倒数第二个区块)的难度就翻了一倍。因为每一个区块都包含前一个区块的哈希值作为其组成部分。如果攻击者想要修改区块链中的一个早期区块,他不仅要更改那个特定区块的哈希值,而且还要更改所有后续区块的哈希值,
假设他修改了第10个区块,并重新计算了该区块的哈希值,那么第11个区块中包含的前一个区块的哈希值(即第10个区块的哈希值)现在就是错误的。因此,他需要重新计算第11个区块的哈希值,以便它包含新的第10个区块的哈希值。但这又会导致第12个区块的前一个区块哈希值变得无效,因此第12个区块也需要被修改,以此类推,无限套娃。
攻击者要更改存在的块不是简单地更改你想要更改的那一个区块就行。如果只更改一个区块,它的哈希值也求出来了,也替换上去了,但这样就很明显,链条会断,哈希值变了就跟后面的区块连不上了。明眼人一看某人的链条突然断裂,就知道他在试图攻击整个区块链,不会将他的区块链作为当前正确的链。所以,那些违法的坏蛋在更改的时候需要保证不被人发现,也就是说,必须要和上面套娃的步骤一样攻击修改整个区块链。这是很难的,区块链有足够的能力去防御坏人的进攻!
其中,大师提到的内容涉及到区块链的重要特点:
在区块链中,每一个新的区块都包含前一个区块的哈希值作为其组成部分。这样,所有的区块都通过哈希值链接在一起,形成了一个连续的链条。这种设计确保了:一旦一个区块被加入到区块链中,任何之后加入的区块都与其有关联。而每一个区块蕴含着重要的交易信息,这些交易信息一经安全性验证,就能够放在区块链中。区块链网络是去中心化的,由许多独立的节点组成。这意味着没有单一的失败点,攻击者不能仅通过攻击或控制一个中心节点来破坏整个网络,安全性大大滴!攻击者没法做到擒贼先擒王!
攻击区块链违法,禁止尝试,本文绝对反对非法攻击行为!
通过这种方式,如果有人试图修改已经确认的交易信息,他们不仅需要解决与修改的区块相对应的难题,还需要解决该区块之后所有区块的难题,这在实践中是不可能完成的。
此外,大师补充道:当前的区块链啊,为了抵御非法修改可是下足了功夫!从非法攻击的角度来看:为了成功地修改第10个区块而不被其他网络参与者察觉,攻击者不仅需要重新计算第10个区块及其后面所有区块的哈希值,还要确保这些新的区块比原始区块更早地被网络的大多数节点接受。除非他控制了网络上超过50%的计算能力,否则你很难得到网络的大多数认可,这种认可至少需要保证你修改后的版本的链更长呢!
什么叫保证攻击者版本的链更长?
在许多区块链网络中,当存在两个或多个版本的链时(例如,因为有人试图修改过去的交易),网络会选择工作量证明最大的链,也就是最长的链作为“真实”的链。这通常被认为是网络上计算能力的多数所达成的共识。(这就是区块链以工作量证明作为共识算法)
如果攻击者想要他们的修改得到网络的认可,他不仅需要修改目标区块,还需要为该区块以及所有后续区块重新进行工作量证明,以确保他们的版本的链更长。这样,当他将其广播到网络时,其他节点会看到攻击者的链比现有的链长,因此可能会选择攻击者的链作为主链。简单总结,就是你比所有人牛逼,你的计算能力超过所有人的能力之和,这在结果层面体现在:你算的巨快,超过所有矿工的进度,求得的链也要比当前进度的系统区块链更长,大家就更倾向于以你为准,包括网络本身。你算的那么快,不以你为准,那矿工和网络岂不是在算你已经算好的区块的哈希值了吗?这活是血亏的鸭!
但是,这需要大量的计算资源。实际上,要成功地进行此类攻击,攻击者通常需要控制网络上超过50%的计算能力,这样他才能比其他参与者更快地添加块,从而确保他的链最长。这被称为“51%攻击”。
同时,作者又查看了当年中本聪大神(区块链创作之人)的论文,论文中提到:
作者真是佩服区块链的设计者,随后问大师:大师,那这些头铁的攻击者到底是怎么修改这个区块的啊?这种违法乱纪行为真的应该大力清除!
大师答:我告诉你,但是你了解一下就好,千万不要干违法乱纪的事情!
获取数据:首先,攻击者需要从区块链网络获取他们想要修改的区块的内容。
使用工具进行修改:然后,他们可以使用软件工具来修改区块中的某些内容。这可以是简单的文本编辑器(因为区块数据通常是以明文或JSON格式存储的)或专门为区块链分析设计的工具。
重新计算哈希值和工作量证明:一旦内容被修改,区块的哈希值就会改变。为了让他们的修改被网络认可,攻击者需要确保他们版本的链比原始链更长(即包含更多的工作量证明)。
作者:明白,大师!我终于知道为什么这个叫51%攻击了,因为只要能产生有效攻击的攻击者,其掌握的算力资源至少要大于整个计算资源的50%,51%的含义就是如此,可以理解为一个前提条件。
大师答:少年,你理解了,但是我还是要提醒你一句:其实,在区块链中,一个交易或区块被认为是“确认”的并不是基于时间,而是基于它后面的区块数量。例如,在比特币中,一个区块在被添加到链上后,通常需要有6个后续的区块被挖出来,也就是说这个区块后面还要再跟六个区块,这个区块才被认为是充分确认的。所以,对于那些重要的、充分确认的区块,几乎没有可能再修改了!
攻击区块链违法,禁止尝试,本文绝对反对非法攻击行为!
为什么要选择哈希函数作为解决问题的途径?
既然读者从开锁故事中大致理解挖矿的流程,也能理解数学问题(锁)为什么能够验证网络(锁厂)的安全性,还能知道区块链为什么很难被恶意矿工攻击。那么,对于第一部分留下的疑问,我们还需要细致地研究这把“锁”(数学问题)及其背后的逻辑,最终明白为什么当初要选择哈希函数作为开锁(验证网络安全)的途径!
当我们谈论“难题”(锁)时,实际上是指找到一个数字(或一串数字和字母,这就是开锁的密码),它与之前区块的数据一同输入到哈希函数中时,输出的哈希值满足一定的条件(满足某一条件时锁被成功打开),以确保区块链的安全性和交易的不可篡改性。据此,得到问题的定义:
问题的定义:数学问题主要涉及找到一个输入值(或一组输入值),使得通过一个哈希函数计算得到的输出值满足某个条件。
哈希函数的作用:
1. 不可逆性:哈希函数是单向的,可以快速且容易地计算输出值,但从输出值反向计算输入值几乎是不可能的。这意味着矿工必须通过试错的方式来找到一个满足条件的输入值。这就是开锁必须只能试密码的原因,也可以理解为这是锁厂的锁牛逼的原因,就是因为这个锁来自于哈希函数。
2. 易验证性:对于相同的输入,哈希函数总是产生相同的输出。这使得其他网络节点可以轻易验证一个区块的有效性,只需使用区块的哈希值和相应的输入值进行验证。另外,哈希函数可以快速地计算输出值,使得网络节点可以高效地进行验证。
那么矿工具体是怎么解题(试锁的密码)的呢?(了解)
矿工通过不断改变一个被称为“nonce”的数字来解题。他们将这个数字与区块的其他数据一起输入到哈希函数中,然后检查输出的哈希值是否满足网络规定的条件。
攻击区块链违法,禁止尝试,本文绝对反对非法攻击行为!
挖矿流程
1. 交易的生成
- 用户在区块链网络上进行交易(例如,Alice 将1个xx币发送给Bob)。
- 这个交易被广播到网络,并被放入一个交易池中。
2. 选择交易并放到新的区块中
- 挖矿的计算机(也称为“矿工”)从交易池中选择未经确认的交易,然后将选定的交易和其他数据(如时间戳和前一个区块的哈希值)合并在一起,放到新的区块中,形成一个区块的候选者。
- 注意,这只是一个区块的候选者,绝大多数时间内,矿工面对的都是自己手中的区块候选者,因为还没有找到哈希值,没有得到网络认可呢!肯定是候选者啊!(但是它本身的数据结构确实是区块,只不过还不够资格放到区块链中)
- 挖矿者还需在这个新的区块中包含一个特殊的交易,称为“coinbase”交易,作为给自己挖矿的奖励。相当于开锁的时候提前写了一封信,信中说明自己的信息以及开锁后应得的奖励,一旦成为第一个开锁并得到验证的人,这封信就能传达到锁厂,锁厂就会接见你,并且给予你“开锁大师”的称号和巨额奖励!
3. 开始计算哈希
- 这个候选区块被输入到一个哈希函数中。哈希函数是一种将输入数据转换成一串固定长度的数字的函数。比特币使用的是SHA-256哈希函数。
- 如下图所示,要经过两次SHA-256函数才能获得新的HASH值,输入的字符串包含整个前块头部(哈希值)、交易账单、时间戳和矿工拿来修改尝试的随机数。
- 挖矿者不断改变区块候选中的一个值(称为“nonce”),以便每次都产生一个不同的哈希输出。也就是下图原理的随机数!
4. 满足条件的哈希
- 挖矿者的目标是找到一个哈希输出,该输出的值小于网络当前规定的目标值,即要求至少前n位必须是0。目标值是根据网络的总计算能力动态调整的,确保大约每10分钟就能找到一个有效的区块(在比特币网络上)。动态调整就是为了达到一定程度的破解困难度。
- 当挖矿者找到一个满足条件的哈希时,它就成功地“挖到”了一个新的区块。
显而易见,要求前n位为0的位数越多,解题难度越大。如何动态调整呢?先统计分析所有矿机的计算速度总和(次/秒),然后再算10分钟一共能计算多少次哈希值。算出次数后近似转化成形式,此时n就是目标哈希值约定的位数。
假设哈希目标值需要保证前50位为0,则计算出一个符合要求的哈希值的概率为。那么10分钟计算次数约为,二者相乘,正好得出1,表示:按照一般概率来讲,平均10分钟就能计算出一个哈希值!
所以,动态调整的根本依据在于当前所有矿机的计算能力之和!
4.1 如果长时间挖不到矿或短时间内挖到大量矿呢?
- 长时间挖不到矿:
- 如果一个矿工长时间挖不到矿,他可能会面临经济损失,因为挖矿需要消耗大量的电力和硬件成本。
- 这可能会导致一些小的或不够效率的矿工退出挖矿市场。
- 短时间内挖到大量矿:
- 如果短时间内挖到大量矿,矿工将获得大量的奖励。
- 但这种情况可能会导致加密货币的通货膨胀,因为新的货币被快速地引入到市场。
- 为了平衡这种情况,如上所述,大多数加密货币网络都有动态调整难度的机制。比如,在比特币网络中,如果每个区块被快速地挖出,网络将自动增加挖矿难度。
5. 区块的广播
- 挖矿者将新的区块广播到网络,其他节点验证区块的有效性。
- 如果区块有效,其他节点将它添加到他们的区块链副本中,并开始在这个新区块上构建下一个区块。
- 挖矿者得到的区块奖励(一定数量的新生成的加密货币)和交易费用作为奖励。
总之,挖矿的过程包括从交易池中选择交易,尝试创建一个新的区块(通过不断改变nonce来找到一个特定的哈希值),并将找到的新区块广播到网络。成功的挖矿者将获得新生成的加密货币和交易费用作为奖励。这个过程同时也确保了加密货币网络的安全和去中心化。
不是吧,这都拿不下你?应该不会太难理解的对叭……
攻击区块链违法,禁止尝试,本文绝对反对非法攻击行为!
作者自身的想法
在学习过程中,作者的脑瓜子迸发出了一个问题:
挖矿是不是也可以视为攻击必不可少的前置过程?
挖矿本质上是不是就是模拟攻击?
作者认为:挖矿本质上就是模拟攻击,只要挖矿得到答案的速度稳定在一定的时间段内,再通过区块链自身特性,就能够保证区块不可被轻易击破,就能保证整个区块链的安全性。
如果我们从一个特定的角度来看,挖矿确实可以视为证明修改区块链的困难程度的过程,从而增强对网络的信任。读者想一想,挖矿是不是确实模拟了攻击区块链所需的计算工作量?
攻击区块链就是要在修改特定内容之后,挖出尽可能多的哈希值,最终通过区块链替换实现攻击。
1. 对于非法的攻击行为来说,“工作量证明”机制确保了任何想要对链进行恶意修改的攻击者都需要支付巨大的计算和经济成本。这样,网络的安全性就得到了保障。
2. 同时,对于合法的挖矿行为,同样存在工作量机制,同样需要支付巨大的计算和经济成本。
但是,尽管挖矿过程与攻击在计算上可能相似(都涉及寻找特定的哈希值),我们还是要明确,它们的动机和目标是完全不同的:
挖矿:矿工为了获得区块奖励和交易费,他们支持和维护网络,确认和验证交易。他们的工作是建设性的,确保交易被正确地记录。
攻击:攻击者的目的是欺诈和获得非法利益,例如双重支付或篡改历史交易。他们的行为是破坏性的。我们千万不能有攻击的想法哦!
正因为矿工的努力增加了对区块链篡改的计算难度,所以他们获得了奖励。这种奖励机制激励他们继续支持网络,进一步提高其安全性。
总结
从某种角度来看,挖矿确实可以看作是模拟攻击的过程,因为它展示了篡改区块链所需的计算难度。但它们的目的和结果是不同的。挖矿是为了支持和维护区块链网络,而攻击则是为了获得非法利益。通过维持一定的挖矿难度,我们确实可以增加区块链的安全性,使其不容易受到攻击。(其实不一定对,因为这个是作者自己的想法)
后续对于区块链的进一步复习扩展,请见文章简单理解区块链_Joy T的博客-CSDN博客
攻击区块链违法,禁止尝试,本文绝对反对非法攻击行为!