区块链加密货币详解

目录

什么是区块链?

什么是哈希函数?

特点

种类

SHA2_256

区块链如何记账?

普通账本

链接账本

区块链账本

什么是采矿?

概念

如何命中?

为什么需要哈希函数?



什么是区块链?

我们先来看定义:

区块:永久存储数据信息的载体单位

链:用金属环节连套而成的索子

区块链:一种安全共享的去中心化的数据账本

从定义中我们可以大概看出来,区块是区块链中的基本信息单位(就像原子一样),多个区块通过连接起来,形成一个名字叫区块链的账本。

所以,我们可以这样比喻,区块链是账本,区块是账本中的一行,链是某种将多个行连接起来的方式。

那么如何将多个行连接起来方便查找和读取呢,最简单的就是给每一行顺序编号,这样每一行就通过编号连接起来成为一个账本中的一部分了。账本最重要的就是安全性,顺序编号之后某个人就不可能再插入一个新行了(电子表格除外)。

但是,如果某个人想要修改(而非删减或增加)某一行的内容,那么他只需要找到对应的行号,然后修改这一行中的部分内容,修改后行号没有变化,所以他的修改不会被人发现,这个账本就不安全了。

如果账本可以被修改,那么你的存款,贷款都可以被他人修改,后果可想而知。

所以,想要实现一种安全的账本,必须要有一种安全的链,区块链由此诞生。


什么是哈希函数?

 从上面账本中的例子我们可以看到,如果想要保证账本修改后能被发现,那么我们需要:

将一行内容备份到另一个账本,跟另一个账本比对信息就能确认原账本是否被修改。

但,如何保证备份账本不被修改?给备份账本再增加一个备份账本1?这就陷入了没有止境的递归 了。

所以,我们需要一种机制——让账本的每一行信息,都包含有以前所有行的信息。

你可能立马会意识到,第二行就包含了两行信息,第一百行包含了一百行信息,最后一行包含了整个账本的信息。

那么,也出现了一个物理问题,一行能写下多行的信息吗。还出现了一个哲学问题,如果一行写下了一本书的信息,这一行还能叫一行吗,一片海还是一滴水吗?

所以,很明显,我们需要一种信息压缩机制,将以前所有的账本信息压缩到能在最新的一行中存储。

压缩种类效果特点缺点
可恢复压缩消息<->摘要可以恢复原始信息,但摘要和信息的体积直接相关,信息越大,摘要越大摘要越来越大
不可恢复压缩消息  ->摘要无法恢复原始信息,但提取了原始信息特征耗时长,实现难度大

注:其实严格来说,这并不是一种压缩,而是一种信息特征提取

现在我们来看哈希函数:

是否能明白为什么区块链大部分选择哈希函数了。

特点

哈希函数特点很多,我按照自己方式总结几个:

特点解释
输入长度不固定,但输出长度固定即提取信息的特征
由输出难以逆推输入由特征无法恢复信息
难以找到输出相同的不同输入不同信息特征不同
输入同,输出同;输入不同,输出极大不同相似信息特征不相似

 下面是一些例子:

在线加密解密OSCHINA.NET在线工具,ostools为开发设计人员提供在线工具,提供jsbin在线 CSS、JS 调试,在线 Java API文档,在线 PHP API文档,在线 Node.js API文档,Less CSS编译器,MarkDown编译器等其他在线工具icon-default.png?t=N7T8https://tool.oschina.net/encrypt?type=2

如果你在以上网站输入和图片相同的信息,你就会得到相同的输出,这就是哈希函数的一个特点——不论你用何种方式执行哈希函数,对于相同的输入总是能得到相同的输出。

种类

哈希算法种类丰富,但区块链主要用SHA2和SHA3,SHA2_256和SHA2_512只是输出的宽度不同,但原理相同。

SHA2_256

SHA家族的算法原理类似,基本流程包括:

信息分块→各块拆分→顺序压缩(加密循环)→输出结果

对于不同长度的输入信息,只是顺序压缩的执行次数不同。 

有兴趣的同学可以研究图中细节,或阅读SHA256算法原理详解_随煜而安的博客-CSDN博客


区块链如何记账?

好了,现在我们知道哈希函数SHA2_256,现在如何实现难以被修改的记账?

普通账本

我们先假设存在如下表格的简单账本

信息(原始)备注
1
2
3

现在假设有人篡改且所有账本第二信息

信息(原始)备注
1
5
3

 此时如果没有别的记忆,无人能发现修改

链接账本

如果我们在每一行存储前面的信息,做成一个串联的账本

信息(原始)备注
10
21
32

现在假设有人篡改第二行

信息(原始)备注
10
51
32

其他人通过检验第三行的信息就能推断出账本第二行被人修改了 。

如果需要篡改账本,且需要篡改所有账本第二+第三行的信息,虽然链接起来了,但只是相邻行的链接。如果要防止多行一起篡改,还需要分布式链接账本,但分布式账本需要每个人存一份,但如果数据在传输或记录过程中出错呢?由谁决定哪个数据是正确的呢?

区块链账本

现在我将上表的前一行信息+备注通过SHA2_256加密(可以在在线加密网站得到和我同样的结果),得到下表:

第一行备注=SHA_256(0)

其中最后一个2是第二行信息。

第二行备注=SHA_256(5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e92)

其中最后一个2是第二行信息。

第三行备注=SHA_256(9bedabceae9404008ff254faed3441d4ec4379584b65399a18b0d24e23bebe213)

其中最后一个3是第三行信息。

信息(原始)备注
15feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9
29bedabceae9404008ff254faed3441d4ec4379584b65399a18b0d24e23bebe21
3aa5522adbe0f0f7be76995152a84736addf4c4b50b09d2e384cb8c1ee8ae4eb5

所以区块链账本有什么区别?

第二行的哈希值包含了第一行的信息,

第二行的哈希值包含了第一行的信息+第二行信息,

第三行的哈希值包含了第二行的备注+第三行信息

所以,每一行都包含了前面所有行的信息。

现在假设有人篡改第二行

信息(原始)备注
15feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9
5a12b6c77955ba11b7ee9f2502060a6261e6a0c87356178825859f4e08accfa50
316e947d9a2e165e2147e3b1967c373c8bb6a5d6cc88b3255cc28c369cd852699

 那么从第二行生成的HASH值就大变样了,因为第三行中包含了前面所有行,如果这个账本有1000行,那么篡改者还需要修改另外998行,且保证所有节点的账本都被修改完成,这个任务几乎不可能完成。

这么多账本,如果传输出错了,如何确认谁对谁错呢?

记账人(矿工)将当前行(区块)打包输出哈希值并全网发布,每个节点通过哈希函数执行一次,如果哈希值相同,则验证成功,本地存储新的一行(区块)。如果矿工篡改,传输错误,则在正常节点上验证不成功,正常节点不会记录此新交易(区块)。

这就是区块链账本的不可篡改性。


什么是采矿?

概念

由于比特币是第一种区块链加密货币,我们以比特币为例,先看定义:

定义1:是一种获得比特币的方式,简单来讲就是全网矿工一起来做一道题目,谁先做出来,谁就会得到比特币奖励

所以挖矿就是解题,具体解什么题呢,就是上面的哈希算法。

但是,哈希算法不是不可解的吗,确实如此。那么如何解题呢?你应该听说过暴力穷举吧?

挖矿就是给定一个哈希函数的输出,你不断尝试不同的输入,将其代入到哈希函数中,看看能否得到相同的输出。

注:真实挖矿为了降低难度,给定的目标输出是一个范围,矿工只需要找到范围内输出对应的输入值。

既然挖矿是暴力计算哈希函数,那么高效的挖矿方式就是算的快(高频率),算的多(并行化),由于芯片频率早就已经见顶,所以并行化就是高效挖矿的唯一手段了。

所以你从下面的图看为什么显卡GPU更适合挖矿(绿色是计算单元)

为什么需要哈希函数?

我们知道挖矿,但我们并不知道加密货币需要挖矿,那么我们先看挖矿的另一种定义:

定义2:争夺记账的权利,然后获得比特币奖励。

所以,挖矿其实是争取记账的权利,为什么要争取记账的权利?

因为区块链项目是分布式的、去中心化的,没有中心节点指挥着其它节点“有序”的出块。既然没人指挥,就需要在每次出块时有一种所有节点都认可的确权机制:出块的人必须满足某个要求,并且其它节点可以验证这个满足条件。这种确权机制被称之为共识。

但是为什么需要有人打包区块,因为交易信息传播需要时间,每个人打包的信息可能不一样,但是区块链中的某个区块必须是确定唯一的,所以才需要要通过某种方式选中一个节点负责打包区块。

所以,挖矿是打包区块模拟考试,证明旷工有能力运算哈希函数执行区块打包的任务,挖矿的难度是区块链中的一种记账人选择机制。

以上为个人学习总结,如有错误,欢迎讨论。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值