信息摘要算法之七:SHA在区块链中的应用
最近几年比特币的火爆带动了人们对区块链技术的研究。当然我们在这里并不讨论区块链技术本身,而是讨论一下区块链中的SHA算法的应用。对于SHA系列算法我们已经在前面作了说明,在这里也不再重复。
1、区块链中的SHA
区块链中用到了SHA,可是究竟什么地方使用到了SHA算法呢?为了解决这个问题,我们必须先来了解下区块链的组成结构。每个区块都包括了一个被称为魔法数的常数、区块的大小、区块头、区块所包含的交易数量及部分或所有的近期新交易。区块的具体结构如下所示:
数据项 |
描述 |
长度 |
Magic no(魔法数) |
总是0xD9B4BEF9 |
4字节 |
Blocksize(区块大小) |
到区块结束的字节长度 |
4字节 |
Blockheader(区块头) |
包含6个数据项 |
80字节 |
Transaction counter(交易数量) |
正整数VI=VarInt |
1-9字节 |
Transactions(交易) |
交易列表(非空) |
<Transaction counter>-许多交易 |
从上表中我们似乎并没有发现SHA的踪影。上表中除了区块头,其他部分的含义都是非常明确的。所以接下来我们就需要中点看一下区块头,看看它究竟是什么含义。事实上,在每个区块中,对整个区块链起决定作用的是区块头。既然如此,拿去块头又有哪些内容呢?其具体的结构如下:
数据项 |
目的 |
更新时间 |
大小(字节) |
Version(版本) |
区块版本号 |
更新软件后,它指定了一个新的版本号 |
4 |
hashPrevBlock(前一区块的Hash) |
前一区块的256位Hash值 |
新的区块进来时 |
32 |
hashMerkleRoot Merkle(根节点Hash值) |
基于一个区块中所有交易的256位Hash值 |
接受一个交易时 |
32 |
Time(时间戳) |
从1970-01-01 00:00 UTC开始到现在,以秒为单位的当前时间戳 |
每几秒就更新 |
4 |
Bits(当前目标的Hash值) |
压缩格式的当前目标Hash值 |
当挖矿难度调整时 |
4 |
Nonce(随机数) |
从0开始的32位随机数 |
产生Hash时(每次产生Hash随机数时都要增长) |
4 |
如上表所示,在这个区块头的结构中,我们终于看到了SHA的踪影,就是hash值,它就是通过SHA算法计算得到的。
2、区块链如何使用SHA
在上一节,我们明白了SHA在区块中的位置,那么在区块链中究竟是如何使用SHA的呢?我们再看一看前面区块头的格式,有两个256位的Hash值:hashPrevBlock(前一区块的Hash)和hashMerkleRoot Merkle(区块体的Hash值),这两个Hash值是如何我得到的呢?
前一区块的Hash值采用的计算公式为:前一区块的Hash值=SHA256(前一区块的区块头);而区块体的Hash值采用的计算公式为:区块体的Hash值=SHA256(本区块的区块体)。
由上面两个计算公式我们不难推断,一个区块不但与自身的内容有关,同时也与前一个区块的内容有关。也就是说一个区块的内容不但影响自身,而且对后续的区块都有影响。因为任何内容的变化,都会导致本区块Hash值的变化,从而导致区块头的变化。而区块头的变化就会导致后续区块的区块头的变化出现连锁反应。
3、区块链为何使用SHA
前面我们已经说明了区块链中如何使用Hash值,接下来我们来说一说为何要使用SHA。这与区块链的技术要求以及SHA算法的特性有直接的关系。
首先,区块链本身要保证每一条都是独一无二。因为绝不能出现两条一样的数据,而SHA256极低的碰撞概率正好能够保证这一点。每个区块的Hash之都是唯一的正好可以用来标识该区块。
其次,区块链要保证每条记录的安全性,而SHA算法可以保证哪怕只有微不足道的差别,也能产生大相径庭的结果。结合区块链的结构,当任意区块发生变化时,都会影响后续的所有区块,所以如果想要修改某个区块的内容,就必须修改后许所有区块的内容,而这几乎是不可能的,从而保证了区块数据的安全。
再者,SHA的结果长度是固定的,而与具体的原文内容无关,这样可以保证区块链中每个区块的格式以及用来标识区块的区块头的大小是完全一致的,但却绝对不会重复。
综上所述,区块链使用SHA算法是一种技术上的必然选择,即使不采用SHA也必是与SHA具有相似特性的其它算法。
欢迎关注:
信息摘要算法之七:SHA在区块链中的应用的更多相关文章
- 区块链中的密码学(-)区块链中运用最广的散列算法-SHA256算法分析与实现
在很多技术人员的眼中,区块链并不是一种新的技术,而是过去很多年计算机技术的组合运用.而在这个方方面面技术的运用上,基于密码学的加密算法可以说是区块链各种特点得以表现的根本,一旦目前使用的加密算法被证实 ...
- VRF在区块链中的应用
最近区块链领域流行了一种"怪病",许多区块链项目或者设计方案都加入了一个叫做VRFs的算法.那么, (1) 什么是VRFs? (2) VRFs在区块链中解决了什么问题? 本文旨在介 ...
- Merkle tree在区块链中的应用
上篇博文我们转载了一篇<Merkle Tree(默克尔树)算法解析>,那么大家是不是会有疑问,学习这个算法之后,我们改怎么去应用,区块链中又是如何应用的?今天这篇博客就以Merkle tr ...
- 区块链中的密码学(四)- Merkle树和SPV节点
什么是Merkle Tree? Merkle Tree 的命名来自于美国密码学家Ralph C. Merkle ,关于他的个人资料:传送门https://en.wikipedia.org/wiki/R ...
- 【以太坊开发】区块链中的预言机:Oraclize原理介绍
智能合约的作用很多,但是很多数据还是要基于互联网,那么如何在合约中获取互联网中的数据?Oraclize就是为了这个目的而诞生的. 工作原理: 智能合约通过对Oraclize发布一个合约之间的调用请求来 ...
- 区块链中的密码学(二)-RSA算法分析和实现
密码学领域中,加密算法主要分为对称加密和非对称加密,随着信息时代安全性要求越来越高,对称加密因为其易被破解的原因逐渐被舍弃.而RSA算法是目前密码学世界中比较流行的非对称加密算法,命名是根据其发明者R ...
- iFace安全专家揭秘:存放在区块链钱包中的比特币,其实已经早就不属于你……
自MoreToken钱包跑路之后,2019年3月以来陆续多个钱包.交易所跑路,造成了大量用户账户被盗,仅MoreToken钱包用户损失总价值就达12.2亿人民币,用户损失惨重.为什么这么多钱包.交易所 ...
- 区块链学习7:超级账本项目Fabric中的背书、背书节点、背书策略、背书签名
☞ ░ 前往老猿Python博文目录 ░ 在Hyperledger Fabric区块链中,有背书节点进行背书,Hyperledger Fabric 使用背书策略来定义哪些节点需要执行交易. Hyper ...
- 50行Python代码构建小型区块链
本文介绍了如何使用python构建一个小型的区块链技术,使用Python2实现,代码不到50行. Although some think blockchain is a solution waitin ...
随机推荐
- labelImg 工具
安装anaconda, 在anaconda prompt 下 执行 pyrcc4 -o resources.py resources.qrc python labelImg.py
- (15)DeleteColumnsMakeSortedIII
一.问题描述 给定一个字符串形的数组,求最小的删除数目,使得删除后的字符串是字典型有序的. 二.思路Code package algorithm; /** * Created by adrian.wu ...
- 登录mysql时的一些命令
清屏: cls 只要输入cls然后回车运行命令,可以清屏. 查看版本号: mysql -V 注意:V一定要大写,如果不大写就错了... 登录: mysql -u用户名 -p密码 -P端口号 -h数据库 ...
- HDFS笔记(一)
1. HDFS 是什么? Hadoop分布式文件系统(Distributed File System)-HDFS(Hadoop Distributed File System) 2. HDFS 架构 ...
- Maven配置 和创建一个Maven项目
Maven的好处: maven的两大核心: **依赖管理:对jar包管理过程 **项目构建:项目在编码完成后,对项目进行编译.测试.打包.部署等一系列的操作都通过命令来实现 maven项目的生命周期( ...
- Gulp简明使用教程
Glup用自动化构建工具增强你的工作流程! 同类型的软件还有Grunt.关于两者的区别可以参考这篇文章Grunt VS Gulp 安装: $ npm install gulp -g $ npm ins ...
- vue 中通过 ajax 获取数据时,如何避免绑定的数据中出现 property of undefined 错误
参考链接:https://segmentfault.com/q/1010000008264089?_ea=1597485
- Light oj 1281 - New Traffic System 多状态最短路
题目大意:有向图,新计划的地铁,有k个计划新路,利用现有的铁路.k条新路和限定只能用d条新路,找出从0到n-1的最短路径 题目思路:用dist[u][use],储存使用use条新路,到达节点u的最短路 ...
- 【Math for ML】向量微积分(Vector Calculus)
I. 向量梯度 假设有一个映射函数为\(f:R^n→R^m\)和一个向量\(x=[x_1,...,x_n]^T∈R^n\),那么对应的函数值的向量为\(f(x)=[f_1(x),...,f_m(x)] ...
- 阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义
分层领域模型规约: DO( Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象. DTO( Data Transfer Object):数据传输对象,Service或Ma ...