信息摘要算法之七:SHA在区块链中的应用

摘要:
这与区块链的技术要求和SHA算法的特性直接相关。此外,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在区块链中的应用第1张

免责声明:文章转载自《信息摘要算法之七:SHA在区块链中的应用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇dbus开源分布式文件系统比较下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

AAC头部格式,RTP打包格式

一共有2种AAC头格式,一种是StreamMuxConfig,另一种是AudioSpecificConfig 1、AudioSpecificConfig 读写header的代码参考    ffmpeg libavcodecaacenc.c put_audio_specific_config()     ffmpeg libavcodecmpeg4audi...

FISCO-BCOS平台共识

FISCO-BCOS 应用于区块链的多节点并行拜占庭容错共识算法 看了下微众平台的wiki共识知识 学习下 ()内是自己的思考  参考: https://github.com/FISCO-BCOS/Wiki/tree/master/ 问题与动机:PBFT是一种可用的拜占庭容错算法,但是由于该算法的三个阶段是串行执行,存在共识效率低的问题 提出的算法内容:...

MessageDigest简单介绍

本文博客原文 參考文章:http://blog.sina.com.cn/s/blog_4f36423201000c1e.html 一、概述 java.security.MessageDigest类用于为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。简单点说就是用于生成散列码。信息摘要是安全的单向哈希函数,它接收随意...

【腾讯Bugly干货分享】Android 新一代多渠道打包神器

关于作者: 李涛,腾讯Android工程师,14年加入腾讯SNG增值产品部,期间主要负责手Q动漫、企鹅电竞等项目的功能开发和技术优化。业务时间喜欢折腾新技术,写一些技术文章,个人技术博客:www.ltlovezh.com 。 ApkChannelPackage是一种快速多渠道打包工具,同时支持基于V1和V2签名进行渠道打包。插件本身会自动检测Apk使用的签...

“链”接产业 “数”造智能 ——京东云技术沙龙区块链专场活动在津举行

在刚刚结束的京东云技术沙龙-天津站活动中,京东云邀请了内外部区块链领域的核心专家,为大家带来了精彩的分享,通过理论介绍、技术剖析、案例分享、交流答疑等环节,揭秘了区块链的底层技术实现原理、中层产品架构构成、上层技术应用实践。获得了在场与参会者的一致好评! 11月29日,京东云区块链技术沙龙首次走进天津,走进京东云(天津)创新中心,本期活动在中共天津市河西...

Python Flask如何开发以太坊智能合约

将数据存储在数据库中是任何软件应用程序不可或缺的一部分。无论如何控制该数据库都有一个该数据的主控。区块链技术将数据存储到区块链网络内的区块中。因此,只要某个节点与网络同步,它们就会获得区块中数据的副本。因此,该技术中没有特定的数据主控。 在本教程中,我们将编写一份智能合约(我将进一步解释),以便在区块链上保留用户数据。我们将使用python web3(we...