区块链与哈希函数

这篇具有很好参考价值的文章主要介绍了区块链与哈希函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

哈希函数

定义

性质

发展

常见攻击方法

1.穷举攻击

2.生日攻击

3.其他攻击

构造方法

1.利用对称密码体制来设计哈希函数

2.直接设计哈希函数

​编辑

常用哈希函数简介

1.SHA-256算法

​编辑

2.Keccak算法

3.SM3算法

哈希函数在区块链中的应用

1.以太坊用户地址的生成

2.默克尔哈希树

3. 挖矿难度的设置

4. 数字签名

5. 软件发布


哈希函数

定义

哈希函数:是一公开函数。用于将任意长的消息M映射为较短的、固定长度的值H(M),又称为散列函数、杂凑函数。我们称函数值H(M)为哈希值、杂凑值、杂凑码、信息摘要。

杂凑值是信息中所有比特的函数,因此提供了一种错误检测能力,即改变信息中任何一个比特或几个比特都会使杂凑值改变

区块链哈希函数,区块链创新大赛,区块链

性质

前三条实用性要求,后三条安全性要求

  • H 可以作用于任意一个长度的数据块(实际上不是任意的,比如SHA-1要求不超过2^64)
  • H 产生一个固定长度的输出(比如SHA-1的输出是160比特,SHA-256的输出是256比特)
  • 对任意给定的x,H(x)计算相对容易,无论是软件还是硬件实现
  • 单向性(抗原像)(one-way):对于任意给定的消息,计算其哈希值容易。但是,对于给定的哈希值H,要找到M使得H(M)=H在计算上是不可行的。即给定消息可以产生一个哈希值,而给定哈希值不可能产生对应的消息;否则, 设传送数据 C =< M,H(M||K)>,K是密钥。攻击者可以截获C,求出哈希函数的逆,从而得出H^-1(C),然后从M 和M‖K即可得出K
    • 区块链哈希函数,区块链创新大赛,区块链
  • 弱抗碰撞(抗二次原像)(Weakly Collision-Free):对于给定的消息x,要发现另一个消息y,满足H(x)=H(y)在计算上是不可行的。是保证一个给定的消息的哈希值不能找到与之相同的另外的消息,即防止伪造。否则,攻击者可以劫获报文M及其哈希值H(M),并找出另一报文M',使得H(M)=H(M')。这样攻击者可以用M'去冒充M。
  • 强抗碰撞(Strongly Collision-Free):找任意一对不同的消息x、y,使H(x)=H(y)在计算上是不可行的。是对已知的生日攻击方法的防御能力,强抗碰撞自然包含弱抗碰撞。(?)

区块链哈希函数,区块链创新大赛,区块链

 图:哈希函数强碰撞性示意图

发展

 区块链哈希函数,区块链创新大赛,区块链

 图:哈希函数结构示意图

  • 1978年,Merkle和Damagad设计MD迭代结构
  • 1993年,来学嘉和Messay改进加强MD结构;
  • 在90年代初 MIT Laboratory for Computer Science和RSA数据安全公司的Rivest设计了散列算法MD族,MD代表消息摘要.
  • MD族中的MD2、MD4和MD5都产生一个 128位的信息摘要
  • MD2(1989年)
  • MD4(1990年)
  • MD5(1991年):由美国密码学家罗纳德ꞏ李维斯特(Ronald Linn Rivest)设计,经MD2、MD3和 MD4发展而来,输出的是128位固定长度的字符串.
  • RIPEMD-128/160/320:国际著名密码学家Hans Dobbertin的在1996年攻破了MD4算法的同时, 也对MD5的安全性产生了质疑,从而促使他设计了一个类MD5的RIPEMD-160. 在结构上, RIPEMD-160可以视为两个并行的类MD5算法,这使得RIPEMD-160的安全性大大提高.
  • 值得注意得是,MD4, MD5已经在2004年8月Crypto2004 上,被我国密码学者王小云等破 译,即在有效的时间内找到了它们的大量碰撞
  • SHA-0:正式称作为SHA,这个版本在发行后不久被指出存在弱点
  • SHA-1:是NIS于1994年发布的,它于MD4与MD5算法非常相似,被认为是MD4和MD5的后继者
  • SHA-2:实际上分为SHA-224、SHA-256、SHA384、SHA-512算法

区块链哈希函数,区块链创新大赛,区块链

 图:SHA系列哈希函数相关参数比较

区块链哈希函数,区块链创新大赛,区块链

图:哈希函数碰撞攻击复杂度示意图(单位:年)

常见攻击方法

1.穷举攻击

(a)原像攻击和第二原像攻击(Preimage or Second Preimage attack)

  • 对于给定的哈希值h,试图找到满足H(x)=h的x
  • 对于m位的哈希值,穷举规模大约是2^m

(b)碰撞攻击(Collision Resistance)

  • 找到两个信息x不等于y,满足H(x) = H(y)
  • 对于m位的哈希值,平均预计在2^m/2次尝试后就找到两个具有相同哈希值的数据

(c)因此对于m位的哈希值,抗穷举攻击的强度为2^m/2:

  • 目前128比特已经不够,需要160比特甚至更多

2.生日攻击

情景:考虑教室有30位同学,定义函数 H: {张三,李四,ꞏꞏꞏꞏꞏꞏ|在教室里的同学}→{1,2, ꞏꞏꞏꞏꞏꞏ,365}, 如果有两个同学的生日相同,则称为一个“碰撞”. 直观看来,产生碰撞的可能性较小. 但是, 对于30个人的人群,这个事情发生的可能性大约为1/2.当人数增加时,这个可能性就增大. 这 个事实与我们的直观相悖, 称为”生日悖论”.

生日悖论是指在不少于 23 个人中至少有两人生日相同的概率大于 50%。例如在一个 30 人的小学班级中,存在两人生日相同的概率为 70%。对于 60 人的大班,这种概率要大于 99%。从引起逻辑矛盾的角度来说,生日悖论是一种 “佯谬”。但这个数学事实十分反直觉,故称之为一个悖论。生日悖论的数学理论被应用于设计密码学攻击方法——生日攻击。

区块链哈希函数,区块链创新大赛,区块链

生日悖论普遍的应用于检测哈希函数:N 位长度的哈希表可能发生碰撞测试次数不是 2N 次而是只有 2N/2 次。这一结论被应用到破解密码哈希函数 (cryptographic hash function) 的 “生日攻击” 中。 

总结:对于n位的哈希值,只要尝试2^n/2次,就至少存在一对x和x',使得H(x)和H(x')相同

3.其他攻击

  • 利用算法的某种特性进行攻击
  • 哈希函数的迭代结构:将消息分组后分别进行处理
  • 密码分析的攻击集中于压缩函数 f 的碰撞

构造方法

1.利用对称密码体制来设计哈希函数

分组密码的工作模式是:根据不同的数据格式和安全性要求, 以一个具体的分组密码算 法为基础构造一个分组密码系统的方法.基于分组的对称密码算法比如DES/AES算法只是描述 如何根据秘钥对一段固定长度(分组块)的数据进行加密,对于比较长的数据,分组密码工作模 式描述了如何重复应用某种算法安全地转换大于块的数据量.

简单的说就是,DES/AES算法描述怎么加密一个数据块,分组密码工作模式描述了如果 重复加密比较长的多个数据块. 常见的分组密码工作模式有五种:电码本( Electronic Code Book, ECB)模式、密文分组链接(Cipher Block Chaining,CBC)模式、密文反馈(Cipher Feed Back , CFB)模式、输出反馈(Output Feed Back ,OFB)模式和计数器(Counter, CTR)模式

(1)ECB工作模式

加密:输入的是当前明文分组

解密:每一个密文分组分别解密

公式:,

区块链哈希函数,区块链创新大赛,区块链

 (2)CBC工作模式

加密:输入是当前铭文分组和前一次密文分组的异或

解密:每一个密文分组被解密后,再与前一个密文分组异或得明文

公式:区块链哈希函数,区块链创新大赛,区块链

 区块链哈希函数,区块链创新大赛,区块链

 (3)CFB工作模式

  •  加密算法的输入是64比特移位寄存器,其 初值为某个初始向量IV.
  • 加密算法输出的最左(最高有效位)j比特与 明文的第一个单元P1进行异或,产生出密 文的第1个单元C1,并传送该单元.
  • 然后将移位寄存器的内容左移j位并将C1送 入移位寄存器最右边(最低有效位)j位.
  • 这一过程继续到明文的所有单元都被加密 为止.

 区块链哈希函数,区块链创新大赛,区块链

 (4)OFB工作模式

  • 工作模式类似CFB
  • 不同:OFB模式是将加密算法的输出反馈到移位寄存器;CFB模式中是将密文单元反馈到移位寄存器

区块链哈希函数,区块链创新大赛,区块链

 (5)CTR工作模式

加密:输入是当前明文分组和计数器密文分组的异或

解密:每一个密文分组被解密后,再与计数器密文分组异或得到明文

公式:区块链哈希函数,区块链创新大赛,区块链

 区块链哈希函数,区块链创新大赛,区块链

5种工作模式的比较 

  • ECB模式,简单、高速,但最弱、易受重发攻击,一般不推荐.
  • CBC模式适用于文件加密,比ECB模式慢.安全性加强. 当有少量错误时,不会造成同步错误.
  • OFB模式和CFB模式较CBC模式慢许多. 每次迭代只有少数比特完成加密. 若可以容忍少量错 误扩展,则可换来恢复同步能力,此时用CFB或OFB模式. 在字符为单元的流密码中多选 CFB模式.
  • CTR模式用于高速同步系统,不容忍差错传播.

下面利用对称密码来构造哈希函数,我们规定:

区块链哈希函数,区块链创新大赛,区块链

1.1基于分组密码的CBC工作模式杂凑函数

区块链哈希函数,区块链创新大赛,区块链

1.2基于分组密码的CFB工作模式杂凑函数

 区块链哈希函数,区块链创新大赛,区块链

 总结:上述两种基于分组密码的杂凑函数中,K可以公开,称为不带密钥的哈希函数;k也可以不公开,称为带密钥的哈希函数(MAC)。在K公开的情况下,上述两种构造杂凑函数的方法是不安全的,容易找到碰撞。这是为什么呢?

2.直接设计哈希函数

  • Merkle在1989年提出迭代型哈希函数的一般结构;(另外一个工作是默克尔哈希树)
  • Ron Rivest在1990年利用这种结构提出MD4;(另外一个工作是RSA算法)
  • 这种结构在几乎所有的哈希函数中使用,具体做法为:
    • 把所有消息M分成一些固定长度的 块Yi;
    • 最后一块padding并使其包含消息 M的长度;
    • 设定初始值CV0;
    • 循环执行压缩函数f,CVi=f(CVi - 1||Yi -1);
    • 最后一个CVi为哈希值

区块链哈希函数,区块链创新大赛,区块链

  •  算法中重复使用一个压缩函数f ;
  • f 的输入有两项,一项是上一轮输出的n比特值CVi-1,称为链接变量,另一项是算法在本轮 的b比特输入分组Yi-1 ;
  • f 的输出为n比特值CVi,CVi又作为下一轮的输入;
  • 算法开始时还需对链接变量指定一个初值IV,最后一轮输出的链接变量CVL即为最终产生的 杂凑值;
  • 通常有b>n,因此称函数f为压缩函数.
  • 算法可表达如下:CV0=IV= n比特长的初值;
  • CVi=f(CVi-1,Yi-1);1≤i≤L;
  • H(M)=CVL
  • 算法的核心技术是设计难以找到碰撞的压缩函数f,而敌手对算法的攻击重点是f 的内部结构;
  • f 和分组密码一样是由若干轮处理过程组成;
  • 对f 的分析需要找出f 的碰撞.由于f 是压缩函数,其碰撞是不可避免的,因此在设计f 时就应 保证找出其碰撞在计算上是困难的

常用哈希函数简介

1.SHA-256算法

概况

  • SHA系列标准哈希函数是由美国标准与技术研究所(National Institute of Standards and Technology,NIST)组织制定的.
  • 1993年公布了SHA-0 (FIPS PUB 180),后发现不安全.
  • 1995年又公布了SHA-1(FIPS PUB 180--1).
  • 2002年又公布了SHA-2( FIPS PUB 180--2),包括 3种算法:SHA-256, SHA-384, SHA-512.
  • 2005年王小云院士给出一种攻击SHA-1的方法,用 2^69操作找到一个强碰撞,以前认为是 2^80.
  • 2017 年 2 月23日,谷歌宣布找到SHA-1碰撞的算法,需要耗费110 块GPU一年的运算量

区块链哈希函数,区块链创新大赛,区块链

图:SHA系列哈希函数的参数比较

注意:所有的长度以比特为单位;安全性是指对输出长度为n比特哈希函数的生日攻击产生碰撞的工作量大约为2^n/2

 算法描述

  • 输入数据长度为k比特,1 <= k <= (2^64) -1
  • 输出哈希值的长度为256比特

(1)常量与函数:SHA-256算法使用以下常数与函数:

①常量 初始值IV = 0x6a09e667 bb67ae85 3c6ef372 a54ff53a 510e527f 9b05688c 1f83d9ab 5be0cd19,这 些初值是对自然数中前 8个质数(2,3,5,7,11,13,17,19)的平方根的小数部分取前32比特而来.

举个例子来说, 2小数部分约为0.414213562373095048,而0.414213562373095048 ≈ 6 ∗16−1 +a ∗16−2+0 ∗16−3 +9 ∗16−4 +...于是,质数 2 的平方根的小数部分取前32比特就对应出0x6a09e667. 另外,SHA-256还用到了64个常数: K0, K1, …, K63 =

区块链哈希函数,区块链创新大赛,区块链

和 8个初始值类似,这些常量是对自然数中前64个质数(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97…) 的立方根的小数部分取前32比特而来

 ②函数 SHA-256用到了以下函数:

区块链哈希函数,区块链创新大赛,区块链

 其中: ∧表示按位“与”; ¬ 表示按位“补”;⊕表示按位“异或”; ROTR i (x )表示循环右移 i比特; SHR i (x )表示右移 i比特;

(2) 算法描述 ①填充

  • 对数据填充的目的是使填充后的数据长度为512的整数倍.因为迭代压缩是对512位数据块进 行的,如果数据的长度不是512的整数倍,最后一块数据将是短块,这将无法处理.
  • 设消息 m长度为 l比特.首先将比特“1”添加到 m的末尾,再添加 k个“0”,其中, k是满足下式 的最小非负整数 l +1+ k = 448 mod 512
  • 然后再添加一个64位比特串,该比特串是长度 l的二进制表示.填充后的消息 m 的比特长度一 定为512的倍数.

以信息“abc”为例显示补位的过程.a, b, c对应的ASCII码分别是97, 98, 99;于是原始信息 的二进制编码为:01100001 01100010 01100011.

① 补一个“1” : 0110000101100010 01100011 1

② 补423个“0”:01100001 01100010 01100011 10000000 00000000 … 00000000

③ 补比特长度24 (64位表示 ),得到512比特的数据:

 区块链哈希函数,区块链创新大赛,区块链

 ②消息分块 将填充后的消息 m′按512比特分成 n组: m′= M(0)||M(1)|| ꞏ ꞏ ꞏ || M(n-1),其中: n = ( l+ k+65)/512.

区块链哈希函数,区块链创新大赛,区块链

 ③消息扩展

  • 对一个消息分组M(t) 迭代压缩之前,首先进行消息扩展
    •  将16个字的消息分组 M t 扩展生成如下的64个字,供压缩函数使用 W0,W1,…,W63;
    •  消息扩展把原消息位打乱,隐蔽原消息位之间的关联,增强了安全性;
  • 消息扩展的步骤如下:

区块链哈希函数,区块链创新大赛,区块链

 ④压缩函数

  • 压缩函数是SHA-256的核心
  • 令 a, b, c, d, e, f, g, h为字寄存器, T1, T2为中间变量.
  • 压缩函数: V(t+1)= CF( V(t) ,M(t)), 0 ≤ t ≤ n -1.
  • 压缩函数CF的压缩处理:内层迭代
    • ① FOR t = 0 TO 63
    • ② CF= F( T1 , T2 , a, b, c, d, e, f, g, h,M(t) )
    • ③ END FOR

区块链哈希函数,区块链创新大赛,区块链

 图:SHA-256算法的压缩函数工作流程示意图

⑤基本压缩函数

基本压缩函数的流程如右边公式所述.

说明:

  • a, b, c, d, e, f, g, h为字寄存器, T1, T2为中间 变量;
  • +运算为mod 232 算术加运算;
  • 字的存储为大端(big-endian)格式.即,左边为 高有效位,右边为低有效位

区块链哈希函数,区块链创新大赛,区块链

 下图是SHA-256算法的基本压缩函数示意图

区块链哈希函数,区块链创新大赛,区块链

 ⑥SHA-256工作全过程

区块链哈希函数,区块链创新大赛,区块链

 安全性

  • 专业机构设计,经过充分测试和论证;
  • 安全性可满足应用的安全需求;
  • 学者已开展对SHA-256的安全分析 (如缩减轮的分析 ),尚未发现本质的缺陷

程序设计

  • typedef.h:定义数据类型;
  • sha256.h:定义SHA-256算法相 关功能函数、数据接口声明;
  • sha256.c:实现SHA-256算法相 关功能函数;
  • sha256_test.h:定义测试函数、 数据接口声明;
  • Sha256_test.c:实现测试功能函 数;
  • main.c:实现main函数,测试程 序的正确性、性能等.

区块链哈希函数,区块链创新大赛,区块链

2.Keccak算法

概况

  • 能够直接替代SHA-2.这要求SHA--3必须也能够产生224,256,384,512比特的哈希值.
  • 保持SHA-2的在线处理能力. 这要求SHA-33必须能处理小的数据块 ( 如512 或1024比特).
  • 安全性:能够抵抗原像和碰撞攻击的能力,能够抵抗已有的或潜在的对于SHA-2的攻击.
  • 效率:可在各种硬件平台上的实现,且是高效的和存储节省的.
  • 灵活性:可设置可选参数以提供安全性与效率折中的选择,便于并行计算等
  • 2008 年10 月有64 个算法正式向NIST提交了方案,经过初步评价,共有51个算法进入第 一轮评估,主要对算法的安全性、消耗、和实现特点等进行分析;
  • 2009 年 7 月24日宣布,其中14个算法通过第一轮评审进入第二轮;
  • 2010 年12 月 9日宣布,其中 5个算法(JH、Grstl、Blake、Keccak 和Skein)通过第二轮评审进 入第三轮.
  • 2012 年10 月 2 日NIST公布了最终的优胜者.它就是由意法半导体公司 的Guido Bertoai Bertoai、 Jean Daemen Daemen、Gilles Van Assche Assche 与恩智半导体公司 的Micha Michaëël Peeters 联合设计的Keccak算法.
  • SHA-3成为NIST的新哈希函数标准算法(FIPS PUB 180--5).
  • Keccak算法的分析与实现详见:https://keccak.team/index.html
  • SHA-3的结构仍属于Merkle提出的迭代型哈希函数结构.
  • 最大的创新点是采用了一种被称为海绵结构的新的迭代结构. 海绵结构又称为海绵函数.
  • 在海绵函数中,输入数据被分为固定长度的数据分组.每个分组逐次作为迭代的输入,同时 上轮迭代的输出也反馈至下轮的迭代中,最终产生输出哈希值.
  • 海绵函数允许输入长度和输出长度都可变,具有灵活的性.
  • 海绵函数能够用于设计哈希函数 (固定输出长度 )、伪随机数发生器,以及其他密码函数.

Keccak算法描述

  • 输入数据没有长度限制;
  • 输出哈希值的比特长度分为:224,256,384,512.

(1) 符号与函数 Keccak算法使用以下符号与函数:

①符号

  • r:比特率 (比特 rate),其值为每个输入块的长度.
  • c:容量(capacity),其长度为输出长度的两倍.
  • b:向量的长度, b = r + c,而 b的值依赖于指数 I,即 b=25 * 2^l

区块链哈希函数,区块链创新大赛,区块链

图:Keccak算法的参数定义 

②函数 Keccak算法用到了以下 5个函数: θ(theta)、ρ(rho)、π(pi)、χ(chi)、ι(iota)

区块链哈希函数,区块链创新大赛,区块链

 (2) 算法描述

Keccak算法 对数据进行填充,然后迭代压缩生成哈希值.

①填充

对数据填充的目的是使填充后的数据长度为 r的整数倍.因为迭代压缩是对 r位数据块进行 的,如果数据的长度不是 r的整数倍,最后一块数据将是短块,这将无法处理.

  • 设消息 m长度为 l比特.首先将比特“1”添加到 m的末尾,再添加 k个“0”,其中, k是满足下式 的最小非负整数: l +1+ k = r-1 mod r ;
  • 然后再添加比特“1”添加到末尾. 填充后的消息 m 的比特长度一定为 r的倍数

以算法Keccak-256,信息“abc”为例显示补位的过程. a, b, c对应的ASCII码分别是97, 98, 99;于是原始信息的二进制编码为:01100001 01100010 01100011.此时 r = 1088.

  • 补一个“1” : 0110000101100010 01100011 1
  • 补1062个“0”:01100001 01100010 01100011 10000000 00000000 … 00000000
  • 补一个“1” ,得到1088比特的数据

②整体描述

Keccak算法采用海绵结构(Sponge Construction),在预处理(padding并分成大小相同的块 ) 后,海绵结构主要分成两部分:

  • 吸入阶段(Absorbing Phase):将块 xi传入算法并处理.
  • 挤出阶段(Squeezing Phase):产生一个固定长度的输出.

Keccak算法的整体运算结构如下图

区块链哈希函数,区块链创新大赛,区块链

 ③吸入与挤出阶段

给定输入串 x ,首先对 x 做padding,使其长度能被 r整除,将padding后分割成长度为 r的块, 即 x =x 0|| x1|| x 2||...|| xt-1 .然后执行以下吸入阶段和挤出阶段:

  1. 初始化一个长度为 r + c 比特的全零向量.
  2. 输入块 xi,将 xi和向量的前 r个比特做异或运算,然后输入到 f 函数中处理.
  3. 重复上一步,直至处理完 x中的每个块.
  4. 输出长为 r的块作为y 0,并将向量输入到 f 函数中处理,输出 y1,以此类推.得到的哈希序列 即为y = y 0 || y1|| y 2 ||...|| y u .在Keccak-224/256/384/512中,只需要在y 0中取出 前224/ 256/ 384/ 512位即可

区块链哈希函数,区块链创新大赛,区块链

图:Kecca算法的吸入阶段和挤出阶段示意图

 ④压缩函数

  • 压缩函数 f 是Keccak算法的核心,它包含 nr轮.
  • nr的取值与我们之前计算 b时用到的指数 I ( b=25 * 25^l)有关, 具体地, nr =12+2* I.Keccak-224/256/384/512中,取 I=6, 因此 nr =24.
  • 在每一轮中,要以此执行五步,即 θ(theta)、ρ(rho)、π(pi)、 χ(chi)、ι(iota).
  • 在处理过程中,我们把 b=1600个比特排列成一个5*5* w 的三维数组,其中 w=2^I=64比特,如图所示:

区块链哈希函数,区块链创新大赛,区块链

图:Kecca算法的三维数组示意图 

区块链哈希函数,区块链创新大赛,区块链

图:Kecca算法的压缩函数结构示意图

(3) 安全性与性能

  • 安全性
    • 可以抵御对哈希函数的所有现有攻击.
    • 到目前为止,没有发现它有严重的安全弱点.
  • 灵活性:可选参数配置,能够适应哈希函数的各种应用.
  • 高效性:设计简单,软硬件实现方便.在效率方面,它是高效的.
  • 尚未广泛应用,需要经过实践检验

3.SM3算法

概况

  • SM3是我国商用密码管理局颁布的商用密码哈希函数
  • 用途广泛:
    • 商用密码应用中的辅助数字签名和验证
    • 消息认证码的生成与验证
    • 随机数的生成
  • SM3在结构上属于基本压缩函数迭代型的哈希函数.

SM3算法描述

  • 输入数据长度为 l比特,1≤ l ≤264-1;
  • 输出哈希值的长度为256比特.

(1) 常量与函数:SHA-256算法使用以下常数与函数:

①常量 初始值IV=7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aa e38dee4d b0fb0e4e.

区块链哈希函数,区块链创新大赛,区块链

 ②函数

布尔函数

区块链哈希函数,区块链创新大赛,区块链

置换函数

区块链哈希函数,区块链创新大赛,区块链

其中: ∧表示按位“与”; ∨表示按位“或” ; ¬ 表示按位“补”;⊕表示按位“异或”; <<<表示循环左移

 (2) 算法描述

①填充

  • 对数据填充的目的是使填充后的数据长度为512的整数倍.因为迭代压缩是对512位数据块进 行的,如果数据的长度不是512的整数倍,最后一块数据将是短块,这将无法处理.
  • 设消息 m长度为 l比特.首先将比特“1”添加到 m的末尾,再添加 k个“0”,其中, k是满足下式 的最小非负整数.l +1+ k = 448 mod 512
  • 然后再添加一个64位比特串,该比特串是长度 l的二进制表示.填充后的消息 m 的比特长度一 定为512的倍数

以信息“abc”为例显示补位的过程.a, b, c对应的ASCII码分别是97, 98, 99;于是原始信息 的二进制编码为:01100001 01100010 01100011.

  • 补一个“1” : 0110000101100010 01100011 1
  • 补423个“0”:01100001 01100010 01100011 10000000 00000000 … 00000000
  • 补比特长度24 (64位表示 ),得到512比特的数据

区块链哈希函数,区块链创新大赛,区块链

 ②消息扩展

  • 对一个消息分组 B(i)迭代压缩之前,首先进行消息扩展
    • 将16个字的消息分组 B(i)扩展生成如下的132个字,供压缩函数CF使用 W0,W1,…,W67,W′ 0, W′ 1,…,W′63
    • 消息扩展把原消息位打乱,隐蔽原消息位之间的关联,增强了安全性
  • 消息扩展的步骤如下:

区块链哈希函数,区块链创新大赛,区块链

 ③迭代压缩处理

  • 将填充后的消息 m′按512比特分组: m′= B^(0) B^(1) … B^(n−1),其中: n = ( l+ k+65)/512.
  • 对 m′按下列方式迭代压缩://外层迭代
    •  FOR i = 0 TO n-1
    • V ^(i+1)= CF^( V(i) ,B^(i) )
    • ENDFOR
    • 其中CF是压缩函数, V ^(0) 为256比特初始值IV,B^(i)为填充后的消息分组,
  • 迭代压缩的结果为 V^(n),它为消息 m的哈希值

④压缩函数

  • 压缩函数是SM3的核心
  • 令A, B, C, D, E, F, G, H为字寄存器,SS1, SS2, TT1, TT2为中间变量.
  • 压缩函数: V^( i+1) = CF( V^(i) ,B^(i)), 0 ≤i ≤ n -1. 压缩函数CF的压缩处理://内层迭代
    • FOR j=0 TO 63
    • CF= F(SS1, SS2, TT1, TT2 , A, B, C, D, E, F, G, H ,Wj ,W′ j ) //基本压缩函数
    • ENDFOR

区块链哈希函数,区块链创新大赛,区块链

 图:SM3算法的迭代压缩流程示意图

⑤基本压缩函数 F

  1.  SS1 ←((A <<< 12) + E + ( Tj<<< j)) <<< 7
  2. SS2 ←SS1 ⊕(A <<< 12)
  3. TT1 ←FFj (A,B,C) + D + SS2 + Wj ’
  4. TT2 ←GGj (E,F,G ) + H + SS1 + Wj 5. D ← C
  5. C ← B <<< 9
  6. B ←A
  7. A ←TT1
  8. H ← G
  9. G ← F <<<19
  10. F ← E
  11. E ←P0( TT2

 注意:

  • A, B, C, D, E, F, G, H为字寄存器,SS1, SS2, TT1, TT2为中间变量;
  • +运算为mod 232 算术加运算;
  • 字的存储为大端(big-endian)格式.即, 左边为高有效位,右边为低有效位

区块链哈希函数,区块链创新大赛,区块链

 图:SM3算法的基本压缩函数示意图

⑥SM3工作全过程

区块链哈希函数,区块链创新大赛,区块链

 ⑦压缩函数的作用

  • 压缩函数是SM3安全的关键
  • 第一个作用是数据压缩.SM3的压缩函数CF把每一个512位的消息分组 B(i)压缩成256 位.经过各 数据分组之间的迭代处理后把l位的消息压缩成256位的哈希值.
  • 第二个作用是提供安全性.在SM3的压缩函数CF中,布尔函数FFj (X,Y,Z) 和GGj (X,Y,Z)是非线 性函数,经过循环迭代后提供混淆作 用.置换函数P0(X) 和P1(X)是线性函数,经过循环迭代 后提供扩散作用.加上压缩函数CF中的其它运算的共同作用,压缩函数CF具有很高的安全性, 从而确保SM3具有很高的安全性

⑶安全性

  • 专业机构设计,经过充分测试和论证;
  • 安全性可满足上述应用的安全需求;
  • 学者已开展对SM3的安全分析 (如缩减轮的分析 ),尚未发现本质的缺陷

哈希函数在区块链中的应用

1.以太坊用户地址的生成

第一步:生成私钥 (private key)

产生的 256比特随机数做为私钥(256比特 16进制 32字节 ): 18e14a7b 6a307f42 6a94f811 4701e7c8 e774e7f9 a47e2c20 35db29a2 06321725

第二步:生成公钥 (public key)

  1. 利用将私钥(32字节)和椭圆曲线ECDSA-secp256k1计算公钥(65字节)(前缀04||X公钥||Y公钥): 04 ||50863ad6 4a87ae8a 2fe83c1a f1a8403c b53f53e4 86d8511d ad8a0488 7e5b2352 || 2cd47024 3453a299 fa9e7723 7716103a bc11a1df 38855ed6 f2ee187e 9c582ba6
  2. 利用Keccak-256算法计算公钥的 哈希值(32bytes): fc12ad81 4631ba68 9f7abe67 1016f75c 54c607f0 82ae6b08 81fac0ab eda21781
  3. 取上一步结果取后20bytes即以太坊地址: 1016f75c54c607f082ae6b0881fac0abeda21781

第三步:输地址 (address):0x1016f75c54c607f082ae6b0881fac0abeda21781

2.默克尔哈希树

Merkle树_LEVI_104的博客-CSDN博客

3. 挖矿难度的设置

比特币难度是对挖矿困难程度的度量,即指:计算符合给定目标的一个哈希值的困难程度.

difficulty = difficulty_1_target / current_target difficulty_1_target

的长度为256比特, 前32位为0, 后面全部为1 ,一般显示为哈希值,

0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF difficulty_1_target表示btc网络最初的目标哈希. current_target是当前块的目标哈希,先经 过压缩然后存储在区块中,区块的哈希值必须小于给定的目标哈希值, 表示挖矿成功

4. 数字签名

比特币需要利用公钥进行加锁,利用私钥签名进行解锁,从而实现数字货币的交易. 解锁过程实 际上是利用ECDSA算法的产生数字签名. 给定交易信息 m,签名过程如下:

  1. 选择一个随机数 k;
  2. 计算点 R = k*G= (xR, yR ) ,计算 r = xR mod n;
  3. 利用私钥 d计算 s = k-1 * (( H( m) - d * r)) mod n;
  4. 输入签名 ( r, s)

5. 软件发布

区块链哈希函数,区块链创新大赛,区块链

 图:挖矿软件发布信息示意图文章来源地址https://www.toymoban.com/news/detail-799882.html

到了这里,关于区块链与哈希函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【区块链】——区块链与5G技术的结合

    区块链与5G技术的结合 哈尔滨工程大学 区块链技术课程 计算机学院 2019065212刘雅琪  2019065220王晰 发展历史 早在2016年,美国政府就开始对5G网络的无线电频率进行了分配,并在四座城市进行5G的先期试验。而2018年,韩国利用平昌冬季奥运会实现了5G首秀,通过对5G产业链的各

    2024年01月24日
    浏览(52)
  • 区块链与智能合约

    要想理解什么区块链,我们先来从本质上认识一下它 区块链:本质上是一个去中心化的分布式账本数据库,是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术方法。 没有基础的人可能理解起来有点困难,我们来解释一下里边的名词 分布式账本数据库:了解过

    2024年03月26日
    浏览(91)
  • 区块链与负载均衡

    完成区块链应用的搭建,除了要编写和部署智能合约,还需打通业务系统和链上智能合约的交互,但在实际场景中,底层区块链和业务应用端之间的对接,往往会存在一系列的问题: 1)目前区块链底层种类多样,应用对接的方式各不相同,业务应用端往往对接成本高,逻辑

    2024年02月01日
    浏览(45)
  • 区块链与智慧城市

      智慧城市的概念涵盖了城市领域的硬件、软件、管理、计算、数据分析等服务的集成。概括地说,就是利用信息通信技术(ICT)对城市运行各个环节的关键信息进行感知、整合、存储、处理、分析、预测和响应,从而提供智能响应和辅助决策。满足民生、环境保护、公共安

    2023年04月08日
    浏览(42)
  • 区块链与智能合约:合作的未来

    区块链技术和智能合约是两个彼此紧密相连的概念,它们共同构成了一个新兴的技术领域,具有广泛的应用前景。区块链技术是一种分布式、去中心化的数据存储和传输方式,它可以确保数据的完整性和安全性。智能合约则是一种自动执行的协议,它可以在区块链网络中实现

    2024年04月10日
    浏览(51)
  • 基于区块链与IPFS的数据共享系统之区块链部分设计

    本节对数据共享系统的区块链部分做一个简单的介绍,包括目录结构、文件作用、设计思路。 购买专栏前请认真阅读:《基于区块链与IPFS的数据共享系统》专栏简介 启动脚本为启动区块链网络以及IPFS容器,之后使用sed命令更换区块链浏览器、tape配置文件中的私钥。 这里解

    2024年02月15日
    浏览(41)
  • 正确认识区块链与元宇宙的关系

    近年来,要说目前投资界最为火热的项目有哪一些,元宇宙必须榜上有名,2021年更是被称为是元宇宙元年。其实,元宇宙的爆火并非偶然。无论是在投资界,还是在其他的行业,都能看到元宇宙的身影。“元宇宙+”,俨然成为了一个全新的风口。 经世链财经(shilian.com)了解,

    2023年04月14日
    浏览(39)
  • substrate轻松学2:区块链与substrate

    从2008年中本聪发布《比特币:一种点对点的电子现金系统》开始,区块链技术开始进入我们的世界,区块链防篡改、去信任等等概念更是被炒的热火朝天。那么什么是区块链,它能做什么?到底有没有前途?这不是我们这节要回答的问题(这个机灵是不是抖的很ok?😃)我们

    2024年02月04日
    浏览(37)
  • 区块链与物联网:新的业务模式

    物联网(Internet of Things,简称IoT)是指通过互联网实现物体之间的信息传递和交互,以实现智能化管理和控制的新兴技术。物联网的发展为各行业带来了革命性的变革,包括制造业、能源、医疗、交通等。 区块链技术则是一种分布式、去中心化的数据存储和交易方式,最著名的

    2024年04月22日
    浏览(44)
  • 区块链与元宇宙电商:重塑商业生态革命

    小编介绍:10年专注商业模式设计及软件开发,擅长企业生态商业模式,商业零售会员增长裂变模式策划、商业闭环模式设计及方案落地;扶持10余个电商平台做到营收过千万,数百个平台达到百万会员,欢迎咨询。 在当今数字化高速发展的时代,区块链与元宇宙电商正以前

    2024年01月16日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包