我正试图了解不同哈希函数(目前是SHA)的基本功能,甚至在观看了斯坦福大学的视频之后,我也陷入了困境。
哈希的一种方法是使用带有David函数和SHACAL-2块密码的Merkel-Damg rd构造。
据我所知,MD是将消息分成由64位块组成的链,其中包含前面的块值或IV (由哈希函数或自定义的salt键定义的初始向量)。块值或IV以及当前块值和一些x位键是在经过SHACAL-2函数之后,然后是新的密码。
这是正确的吗?如果是: SHACAL函数内部会发生什么?什么是数学?
我发现了这个,但它并没有真正回答我的问题:沙-256中的沙卡
发布于 2021-01-12 11:13:11
MD结构使用压缩函数 C (图中的F),因此它有两个输入。

第一个h_{-1} = IV和最后一个H = h_{2^k-1}是散列值。

压缩函数可以使用块密码,其中给块密码的消息是先前的哈希值,密钥是消息。h_i = E_{m}(h_{i-1})
关于使用分组密码进行压缩函数的第一种描述存在于默克尔的论文载于第11页中。这种构造是完全不安全的,因为现有的分组密码直接链接,可以证明它有\mathcal{O}(2^{n/2})的第二预图像电阻,而不是\mathcal{O}(2^{n})。
我们不希望相关密钥攻击存在于一些块密码中,比如AES和DES。这不会造成加密问题,因为密钥是随机选择的,但是相关密钥可以用来攻击哈希函数。Mannik和Preenel对此进行了广泛讨论。
由于对压缩函数[1]的碰撞攻击,我们需要大量的输入,因此需要处理更多的轮。因此,设计者为MD结构创建了一种新的分组密码,而不是使用现有的。对于SHA-1,它被称为SHACAL,对于SHA-2,它被称为SHACAL-2.
分割值取决于压缩函数,MD5,SHA-1,和SHA256使用512位消息块,SHA512使用1024位消息块.将消息填充为块大小的倍数,并在最后对消息大小进行编码。
例如,NIST FIPS 180-4上的SHA-512填充。
假设消息的长度M是\ell位。将位
1追加到消息的末尾,然后是k零位,其中k是方程\ell + 1 + k \equiv 896 \bmod 1024的最小、非负解,然后追加128位块,该块等于用二进制表示形式表示的数字\ell。
对任意块大小b和d-bit编码的消息大小进行形式化处理( 64用于SHA-1和SHA256,128用于SHA512。
因此,设计准则是有一个多轮分组密码,SHACAL有80圈,SHA-256有64圈,SHA512有80圈,而圆函数保持简单。
并使用分组密码作为戴维斯-迈耶来创建单向压缩函数.
例如,SHA256的数学是

按位旋转对SHA-512使用不同的常量。给出的数字为SHA-256。
红色\boxplus表示c = a + b \mod 2^{32},即模加法。
正如我们所看到的,CPU可以处理的简单操作,轻圆功能,有一些退化的不平衡的Feistel结构。
我们从微加密算法中了解到,即使是简单的回合,在32轮之后也是安全的。
https://crypto.stackexchange.com/questions/87484
复制相似问题