Blake算法的流程

Posted Robin_Aim

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Blake算法的流程相关的知识,希望对你有一定的参考价值。

关于Blake算法的网上介绍已经有一部分了,但是关于Blake的流程层面的介绍还是不多的,所以这篇文章的主要目的是介绍Blake的流程,之后会分享代码出来。
声明!本文是为了帮助新手理解Blake算法的,本文不包含代码,需要代码的请关注我,过几天就发出来(其实网上其他博主的代码已经写的挺好的了呢)

前言

BLAKE也需要两个主要的计算过程:预处理过程、和 轮循环计算。
和SHA不同的是,BLAKE不需要对变量进行初始化;
轮循环计算过程,需要把 计数器值、盐值、常量输入消息加入轮循环计算中,按照压缩计算法进行计算,每一轮生成的状态变量用于下一轮循环计算,

BLAKE有四组输入数据和一组常量:
初始哈希值H[8];输入信息块M;盐值S[4];计数器T[2];常量C;

1. 预处理过程

前三步和SHA2的算法一样,只有变量初始化

  1. 信息填充;
  2. 分割消息块;
  3. 变量初始化:⊕表示异或运算

    通过公式计算出16个V,
    其中,计数器T的选取原则是:当最后一个消息块不包含输入消息的比特数时,则计数器为0;前面计数器的值为相应消息块中包含原始消息块中比特数的累加。
    比如:输入消息为600bit,填充之后是1024bit,分割成两个512bit的消息块,此时计数器的值为t0=512,t1=600。 如此可以保证即使两组不同长度的输入消息,再经过填充之后的长度相等,仍可以有不同的计数器值。
    盐值S—自定义的,一般选取固定的;
    常量C—自定义的,一般选取固定的;

2. 循环压缩计算

16个变量V,作为14轮循环压缩的输入,每一轮的循环压缩表示为:

第r轮的第i个G功能函数的计算规则如下:

其中“+”表示模加运算,“>>>”表示有循环移位,σ是输入的16个消息字或者常量的第几个消息字,可以根据表格进行置换:

置换规则中r最大是10,后四轮的规则是当前循环数 mod 10 所得,如:第13轮的置换规则是σ13 mod 10=σ3

3. 最后

经过14轮循环压缩得到16个变量,V0—V15,运算之后得到最终哈希值:

其中:0≤i≤7 , j= i mod 4,h_i^r表示第r轮哈希值的第i个字。

如果觉得本文有用的话,请点个赞啊!
之后会分享出来Blake2和Blake3的相关代码,可以直接烧录到单片机中的那种,记得点赞啊!

以上是关于Blake算法的流程的主要内容,如果未能解决你的问题,请参考以下文章

Blake算法的流程

Blake算法的流程

BLAKE 哈希函数 及 ChaCha20流密码

Python中hashlib模块的使用

Blake Belladonna人物介绍

生成blake2b哈希时崩溃