本文共 1479 字,大约阅读时间需要 4 分钟。
Hash函数是一种将任意长度的输入映射为固定长度的输出的函数。其常见的数学表示为:
[ h: \mathbb{Z}^* \rightarrow \mathbb{Z}_2^n ]
其中,(\mathbb{Z}_2^*)表示非零整数集合,(\mathbb{Z}_2^n)表示一个由n个二进制位组成的固定长度输出。
Hash函数需要具备以下几个关键特性:
已知Hash函数的输出为(y),则找到满足(h(x) = y)的输入(x),通常需要(2^n)次尝试。
已知消息(M)及其Hash值(h(M)),需要找到另一个消息(M'),使得(h(M') = h(M)),通常需要(2^n)次尝试。
找到两个不同的输入(x_1)和(x_2)((x_1 \neq x_2)),使得(h(x_1) = h(x_2)),通常需要(2^{n/2})次尝试。
Random Oracle是一种将任意长度的消息映射为无限长度的输出字符串的随机化函数。其输入参数为((M, l)),其中:
输出为长度为(l)的随机均匀分布的字符串,且输出具有自洽性(相同输入必定输出相同结果)。
Random Oracle的主要特点是没有内部碰撞,并且在安全性上接近于随机函数。
Merkle-Damgård构造是最早的多次哈希函数构造方法之一。其基本思想是通过多次哈希运算来增强安全性。该方法分为以下几个步骤:
这种构造方式通过多次哈希层来提高抵抗性,例如,2nd pre-image resistance和collision resistance。
Sponge构造是一种基于可扩展输出函数(XOF)的构造方法。其核心是通过一个排列函数(f)将输入数据进行吸收和压缩,生成固定长度的输出。
Sponge函数由两个阶段组成:
Sponge函数的安全性依赖于排列函数(f)的设计,其中:
Duplex构造是一种结合Sponge构造和其他哈希函数的方法,旨在同时增强安全性和性能。其核心思想是通过双向处理数据,使得哈希函数既能在吸收阶段提高安全性,又能在压缩阶段提供高效率的输出。
这种构造方法在多个安全性场景下表现优异,例如预防前映像攻击和数据泄露。
转载地址:http://bemx.baihongyu.com/