type
Post
status
Published
date
Jul 4, 2019
slug
summary
tags
Web3
category
Web3
icon
password
Property
May 23, 2023 12:43 PM
转载自我的微信公众号——无常随心说。
要理解中本聪出的数学题,就不得不提一提密码学中的哈希函数
什么是哈希函数
不要被奇怪的名字吓到,说白了也就是一个函数,有些神奇性质的函数,哪些神奇性质呢?
- 输入可以是任意的信息,多长都行,一句话可以,一整本书也可以
- 但无论输入多长,输出都是一个固定长度的二进制串(类似10101011100这样的)
- 输入和输出是一一对应的
- 已知输入求输出很容易,已知输出求输入很难,也就是说,不可逆
- 输入值稍微改动一点点,输出值就会大变样,而且毫无规律可言
- 哈希函数的输出值通常被叫做哈希值或者摘要。
理解了哈希函数,让我们看看中本聪出的数学题是什么
共识算法——工作量证明(Proof of Work,PoW)
给一个区块添加一个随机数,然后将整个区块的信息进行哈希加密,得到一个哈希值。通过改变随机数的值使得这个哈希值的前30位都是0,谁先找到这个随机数,谁就得到记账权。
我们来分析一下这道题,讲哈希函数的性质时我们就说过,已知输出求输入很难,为什么呢?因为稍微改变一点输入,输出就会毫无规律的大幅度改变,如果硬要找的话,只有穷举这一个办法,也就是遍历随机数,一个一个地去试。所以呢,你的数学再好也没用,只能通过更快的计算机不停的尝试,直到把这个数字试出来,这就是为什么矿机往往需要很高级的CPU且耗电量巨大,解这个数学题的过程也就是我们俗称的挖矿。
咋一听,很是无趣,中本聪干嘛设计这么一道工作量大且无聊的问题为难这些矿工呢?然而,这却是区块链最核心的技术,共识算法——工作量证明。通过工作量证明比特币就满足了货币的另一个本质——共识。工作量证明使得比特币难以伪造——如果你修改了区块链上任意一点一点数据(哈希函数的性质)就要重做工作量证明,把这枯燥的工作重做一遍。
等等,说了这么多,你还没讲什么是区块呢?区块到底长什么样子啊?
[What]什么是区块?
区块就像图示的那样,我们来一条一条的讲解
- 块高度,意思就是这是区块链上的第几个块,也是一个区块的唯一ID
- 头哈希,就是用蓝红两色信息计算出来的哈希值
- 父哈希,即这个区块的上一个区块的头哈希,也就是上一个区块的哈希值
- Merkle根,要理解这个需要一些数据结构的知识,不过你知道应用这个可以快速进行对账就可以了。不知道之前验证交易记录合法性时有没有人觉得为了验证一条交易记录就查询整个区块链账本来核实账户余额有些太费时费力,Merkle数据结构就解决了这一问题。
- 时间戳,这个跟交易记录的时间戳作用一样,增强数据的不可伪造性。
- 难度,为了获得产生新区块的奖励,矿工们就会升级自己的矿机增加自己的计算力,相应的解出数学题的时间就会越来越短,那么怎么将新区块的产生速度维持在10分钟一个左右呢?答案就是提高难度,区块链网络会实时根据全网算力对数学题目的难度进行调整,而调整的难度就反应在这个值上
- Nonce,这个就是我们算数学题时用到的随机数。
- 交易信息,就是交易记录的集合。
仔细观察,你会发现每一个区块都与其前一个区块有关(父哈希),这种关联把这些区块连成了一个链,这就是区块链的由来。
现在我们已经了解区块链所有的技术细节,或许有些地方你还觉得不太明白,有些地方你觉得设计多余,有些地方你还存有疑问,不要紧,这些都会在下面我们尝试攻击区块链系统的过程中解决。
遇到问题,总结不可行的原因,寻找解决方案。这是整个人类不断前进的核心最小单位!
攻击区块链!
从交易记录入手
我是无常,我伪造记录“李四给无常转账10元”->失败,我没有李四的私钥进行签名,伪造的交易记录在节点验证时会被发现。
综上所述 数字签名保证了转账请求是由转账者发起的,也保证了转账信息完整且不可更改 加入的时间戳保证了交易记录不可伪造 区块链历史账本能确认转账者账户上是否有足够余额进行支付 Merkle数据结构保证了查询的效率
从恶意节点入手
在区块链的世界中,我们无需信任,那么最坏的情况就是所有人都是狡诈的魔鬼
那么我,无常,一个狡诈的魔鬼,现在还控制了一个能产生新区块的节点,我能发起什么样的诡计呢?
我伪造一条交易记录“李四给无常转账10元”,虽然我没有李四的签名,但数据的验证也是我做(我是节点嘛)所以我强行认为这条记录是合法的,并且我碰巧是全网最快一个解出数学题的节点,获得了记账权,然后我把新生成的区块添加到区块链上,是不是伪造的交易就生效了?可惜->失败,即使我获得了记账权,发布了新的区块,其他节点由于不信任我,还要对整个区块进行验证,包括父哈希、头哈希、时间戳和整个交易记录,这个过程中伪造的交易记录就会被揪出来
区块链技术大致就讲到这里了,大家还有什么疑问,可以直接在公众号留言,我都会看。评论功能暂时无法开启,因为文章数量和用户数量都还不够233
- Author:无常 Anitya
- URL:https://anitya.fun/article/d778b7e1-3d90-4fca-81ca-b1fae098b514
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts