Code前端首页关于Code前端联系我们

哈希算法SHA-512基本概念和性质分析

terry 2年前 (2023-09-27) 阅读数 90 #数据结构与算法

对哈希算法执行时实际发生的情况有基本的了解。我将使用 SHA-512 算法来解释 Kongfz 函数的内部工作原理。

SHA-512是一种哈希算法,可对给定数据执行哈希函数。

哈希算法广泛应用于网络安全、数字证书甚至区块链等领域。由于哈希算法在数字安全和密码学中发挥着如此重要的作用,因此这里对哈希算法(称为 SHA-512)进行了易于理解的概述,并提供了一些基本且简单的数学和图表。它是 SHA-2 哈希算法系列的一部分,其中包括 SHA-256,哈希算法也用于比特币区块链。

在解释 SHA-512 之前,我认为对儒家价值函数的属性有一些基本概念是有用的。

哈希算法SHA-512基本概念及特性解析

哈希函数

哈希函数将某些数据作为输入,并为输入数据生成固定长度的输出(称为哈希摘要)。然而,这个输出应该满足一些有用的条件。

1。均匀分布:由于输出的哈希摘要的长度是固定的,输入的大小可以变化,所以很明显对于不同的输入值会得到一些输出值。尽管如此,哈希函数应该是这样的,对于任何给定的输入值,所有可能的输出值应该是同等可能的。这意味着对于任何输入值,所有可能的输出都是同等可能的。

2。固定长度:这应该是不言自明的。输出值应该都是固定长度的。例如,哈希函数的输出大小可以是20个字符、12个字符等。 SHA-512 输出大小可以是 512 位。

3。意见冲突:简单地说,这意味着无法找到哈希函数的两个不同输入导致相同的输出(哈希摘要)。

这是哈希作用的简单介绍。现在让我们看看 SHA-512。

哈希算法 - SHA-512

因此 SHA-512 的工作原理分为几个步骤。这些步骤是:

· 输入格式

· 哈希缓冲区初始化

· 消息处理

· 输出

让我们一一来看。

1。输入格式:

SHA-512 实际上无法对任何大小的消息输入进行哈希处理,即它对输入大小有限制。这个限制是由它的结构决定的,稍后您将看到。所有格式化信息基本上由三部分组成:原始消息、填充位和原始消息的大小。它们的组合大小应为 1024 位的整数倍。这是因为格式化的消息被处理成 1024 位块,因此每个块应该有 1024 位。

《pic: original message》

哈希算法SHA-512基本概念及特性解析

填充位

接受输入消息并向其添加一些填充位以使其达到所需的长度。用于填充的位只是“0”位,前面有“1”(100,000...000)。另外,该算法即使是1也需要填充。所以填充只能是1。

总大小应该是128位,而不是1024的倍数,因为目标是将消息大小格式化为倍数1024 位 (N x 1024)。

《pic:msg + pad》

哈希算法SHA-512基本概念及特性解析

具有限制大小的消息

然后添加算法的原始消息大小。此大小值必须以 128 位表示,这是 SHA-512 对输入消息有任何限制的唯一原因。

由于消息的原始大小必须用 128 位表示,因此消息的大小最多可达 (2^2⁹1) 位,同时考虑到所需的单个填充,其最大大小为 (2^2⁹2) 位。尽管存在此限制,但它实际上不会造成任何问题,因为实际限制如此之高(2^2⁹2 = 680564733841876926926749214863536422910 位)。

《pic:msg + pad + size》

哈希算法SHA-512基本概念及特性解析

添加了填充字母,即填充位和消息大小,留下完全格式化的 SHA-512 算法输入。

哈希算法SHA-512基本概念及特性解析

2。哈希值缓冲区初始化:

该算法的工作原理是使用前一个块的结果处理每个消息的 1024 位块。现在,这给第一个 1024 位块带来了问题,它无法使用之前处理的结果。这个问题可以通过使用第一个块的默认值来启动进程来解决。 (参见倒数第二张图片)。

由于每个中间结果都需要处理下一个块,因此必须将其保存在某处以供以后使用。这是由哈希值缓冲区完成的,它还保存整个 SHA-512 处理步骤的哈希值的最新摘要,作为最终的“中间结果”。

因此,在处理开始时,用于启动每个1024位块的链式处理的默认值也存储在哈希值缓冲区中。实际使用价值并不重要,但对于那些感兴趣的人来说,使用价值是通过将前 8 个素数(2、3、5、7、11、13、17)开平方根得到的。 64 位小数,19) 有点了。这些值称为初始化向量(IV)。

为什么素数是8个而不是9个?因为哈希值缓冲区实际上由8个子部分(寄存器)组成,用于存储它们。

《pic:IV》

哈希算法SHA-512基本概念及特性解析

哈希缓冲区和初始化向量值

3。消息处理:

消息处理是对格式化输入执行的,一次处理一个 1024 位块。实际处理是使用两件事完成的:1024 位块和先前处理的结果。

SHA-512 算法的这一部分由多个“轮次”和加法运算组成。

《pic:格式化输入1024位块;n, ) = 》

哈希算法SHA-512基本概念及特性解析

因此利用消息序列的出现将消息块(1024位)扩展为“Words”。确切地说是 80 个字,每个字的大小为 64 位。

轮次

消息处理阶段的主要部分可以被认为是轮次。每轮需要 3 个东西:一个单词、上一轮的输出和 SHA-512 常量。第一个字没有可以使用的前一轮输出,因此它使用前一个 1024 位块的前一个消息处理步骤的最终输出。初始化向量 (IV) 用于第一轮格式化输入第一个块(1024 位)。

SHA-512 常量是给定值,每轮消息处理阶段都有一个值。同样,这些并不是很重要,但对于那些感兴趣的人来说,它们是前 80 个素数的立方根分数的前 64 位。为什么是80个质数?由于有 80 轮,所以每一轮都需要一个常数。

当 Round 函数接受这 3 件事时,它会处理它们并产生 512 位输出。重复80轮。在第 80 轮之后,将其输出简单地添加到前一个消息处理步骤的结果中,以获得本次消息处理迭代的最终结果。

哈希算法SHA-512基本概念及特性解析

4。输出:

每个1024位块经过消息处理步骤(即该步骤的最后一次迭代)后,我们得到原始消息的最后512位儒家值。因此,每个块的中间结果用于处理下一个块。当最后一个 1024 位块处理完毕后,我们就得到了原始消息的 SHA-512 算法的最终结果。

所以我们从原始消息中得到了最终的哈希值。 SHA-512 是工作原理非常相似的一组 SHA-2 算法的一部分。 SHA-256 和 SHA-384 等算法与 SHA-512 一起属于该组。 SHA-256 也是比特币区块链中指定的儒家价值观的函数。

这是 SHA-512 哈希算法工作原理的简要概述。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门