风险提示:请理性看待区块链,树立正确的货币观念和投资理念,不要盲目跟风投资,本站内容不构成投资建议,请谨慎对待。 免责声明:本站所发布文章仅代表个人观点,与CoinVoice官方立场无关

硬核丨一文读懂区块链中的哈希函数是如何构造的

加密谷Live
2020年09月20日

硬核丨一文读懂区块链中的哈希函数是如何构造的

基于数学难题的构造方法

硬核丨一文读懂区块链中的哈希函数是如何构造的

MASH-1 (Modular Arithmetic Secure Hash) 是一个基于 RSA 算法的哈希算法,在 1995 年提出,入选国际标准 ISO/IEC 10118-4;MASH-2 是 MASH-1 的改进,把第四步中的 2 换成了 28+1;由于涉及模乘 / 平方运算,计算速度慢,非常不实用。

硬核丨一文读懂区块链中的哈希函数是如何构造的

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

硬核丨一文读懂区块链中的哈希函数是如何构造的

分组密码的工作模式是:根据不同的数据格式和安全性要求, 以一个具体的分组密码算法为基础构造一个分组密码系统的方法。

基于分组的对称密码算法比如 DES/AES 算法只是描述如何根据秘钥对一段固定长度 (分组块) 的数据进行加密,对于比较长的数据,分组密码工作模式描述了如何重复应用某种算法安全地转换大于块的数据量。

简单的说就是,DES/AES 算法描述怎么加密一个数据块,分组密码工作模式模式了如果重复加密比较长的多个数据块。常见的分组密码工作模式有五种:

  • 电码本 ( Electronic Code Book,ECB) 模式

  • 密文分组链接 (Cipher Block Chaining,CBC) 模式

  • 密文反馈 (Cipher Feed Back ,CFB) 模式

  • 输出反馈 (Output Feed Back ,OFB) 模式

  • 计数器 (Counter, CTR) 模式

ECB 工作模式

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

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

具体公式为:

硬核丨一文读懂区块链中的哈希函数是如何构造的

硬核丨一文读懂区块链中的哈希函数是如何构造的

ECB 工作模式示意图

CBC 工作模式

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

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

具体公式为:

硬核丨一文读懂区块链中的哈希函数是如何构造的

硬核丨一文读懂区块链中的哈希函数是如何构造的

CBC 工作模式示意图

CFB 工作模式

  • 加密算法的输入是 64 比特移位寄存器,其初值为某个初始向量 IV。

  • 加密算法输出的最左 (最高有效位)j 比特与明文的第一个单元 P1 进行异或,产生出密文的第 1 个单元 C1,并传送该单元。

  • 然后将移位寄存器的内容左移 j 位并将 C1 送入移位寄存器最右边 (最低有效位)j 位。

  • 这一过程继续到明文的所有单元都被加密为止。

硬核丨一文读懂区块链中的哈希函数是如何构造的

CFB 工作模式示意图

OFB 工作模式

OFB 模式的结构类似于 CFB

不同之处:

  • OFB 模式是将加密算法的输出反馈到移位寄存器

  • CFB 模式中是将密文单元反馈到移位寄存器

硬核丨一文读懂区块链中的哈希函数是如何构造的

OFB 工作模式示意图

CTR 工作模式

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

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

具体公式为:

硬核丨一文读懂区块链中的哈希函数是如何构造的

硬核丨一文读懂区块链中的哈希函数是如何构造的

CTR 工作模式示意图

工作模式比较

  • ECB 模式,简单、高速,但最弱、易受重发攻击,一般不推荐。

  • CBC 模式适用于文件加密,比 ECB 模式慢,安全性加强。当有少量错误时,不会造成同步错误。

  • OFB 模式和 CFB 模式较 CBC 模式慢许多。每次迭代只有少数比特完成加密。若可以容忍少量错误扩展,则可换来恢复同步能力,此时用 CFB 或 OFB 模式。在字符为单元的流密码中多选 CFB 模式。

  • CTR 模式用于高速同步系统,不容忍差错传播。

硬核丨一文读懂区块链中的哈希函数是如何构造的

直接设计哈希函数

硬核丨一文读懂区块链中的哈希函数是如何构造的

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 时就应保证找出其碰撞在计算上是困难的

硬核丨一文读懂区块链中的哈希函数是如何构造的

硬核丨一文读懂区块链中的哈希函数是如何构造的

硬核丨一文读懂区块链中的哈希函数是如何构造的


声明:本内容为作者独立观点,不代表 CoinVoice 立场,且不构成投资建议,请谨慎对待,如需报道或加入交流群,请联系微信:VOICE-V。

评论0条

加密谷Live

简介:分享区块链领域专业、前沿、有趣的内容

专栏

更多>>