哈希算法SHA-512基本概念和性质分析
对哈希算法执行时实际发生的情况有基本的了解。我将使用 SHA-512 算法来解释 Kongfz 函数的内部工作原理。
SHA-512是一种哈希算法,可对给定数据执行哈希函数。
哈希算法广泛应用于网络安全、数字证书甚至区块链等领域。由于哈希算法在数字安全和密码学中发挥着如此重要的作用,因此这里对哈希算法(称为 SHA-512)进行了易于理解的概述,并提供了一些基本且简单的数学和图表。它是 SHA-2 哈希算法系列的一部分,其中包括 SHA-256,哈希算法也用于比特币区块链。
在解释 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》
![]()
填充位
接受输入消息并向其添加一些填充位以使其达到所需的长度。用于填充的位只是“0”位,前面有“1”(100,000...000)。另外,该算法即使是1也需要填充。所以填充只能是1。
总大小应该是128位,而不是1024的倍数,因为目标是将消息大小格式化为倍数1024 位 (N x 1024)。
《pic:msg + pad》
![]()
具有限制大小的消息
然后添加算法的原始消息大小。此大小值必须以 128 位表示,这是 SHA-512 对输入消息有任何限制的唯一原因。
由于消息的原始大小必须用 128 位表示,因此消息的大小最多可达 (2^2⁹1) 位,同时考虑到所需的单个填充,其最大大小为 (2^2⁹2) 位。尽管存在此限制,但它实际上不会造成任何问题,因为实际限制如此之高(2^2⁹2 = 680564733841876926926749214863536422910 位)。
《pic:msg + pad + size》
![]()
添加了填充字母,即填充位和消息大小,留下完全格式化的 SHA-512 算法输入。
![]()
2。哈希值缓冲区初始化:
该算法的工作原理是使用前一个块的结果处理每个消息的 1024 位块。现在,这给第一个 1024 位块带来了问题,它无法使用之前处理的结果。这个问题可以通过使用第一个块的默认值来启动进程来解决。 (参见倒数第二张图片)。
由于每个中间结果都需要处理下一个块,因此必须将其保存在某处以供以后使用。这是由哈希值缓冲区完成的,它还保存整个 SHA-512 处理步骤的哈希值的最新摘要,作为最终的“中间结果”。
因此,在处理开始时,用于启动每个1024位块的链式处理的默认值也存储在哈希值缓冲区中。实际使用价值并不重要,但对于那些感兴趣的人来说,使用价值是通过将前 8 个素数(2、3、5、7、11、13、17)开平方根得到的。 64 位小数,19) 有点了。这些值称为初始化向量(IV)。
为什么素数是8个而不是9个?因为哈希值缓冲区实际上由8个子部分(寄存器)组成,用于存储它们。
《pic:IV》
![]()
哈希缓冲区和初始化向量值
3。消息处理:
消息处理是对格式化输入执行的,一次处理一个 1024 位块。实际处理是使用两件事完成的:1024 位块和先前处理的结果。
SHA-512 算法的这一部分由多个“轮次”和加法运算组成。
《pic:格式化输入1024位块;n, ) = 》
![]()
因此利用消息序列的出现将消息块(1024位)扩展为“Words”。确切地说是 80 个字,每个字的大小为 64 位。
轮次
消息处理阶段的主要部分可以被认为是轮次。每轮需要 3 个东西:一个单词、上一轮的输出和 SHA-512 常量。第一个字没有可以使用的前一轮输出,因此它使用前一个 1024 位块的前一个消息处理步骤的最终输出。初始化向量 (IV) 用于第一轮格式化输入第一个块(1024 位)。
SHA-512 常量是给定值,每轮消息处理阶段都有一个值。同样,这些并不是很重要,但对于那些感兴趣的人来说,它们是前 80 个素数的立方根分数的前 64 位。为什么是80个质数?由于有 80 轮,所以每一轮都需要一个常数。
当 Round 函数接受这 3 件事时,它会处理它们并产生 512 位输出。重复80轮。在第 80 轮之后,将其输出简单地添加到前一个消息处理步骤的结果中,以获得本次消息处理迭代的最终结果。
![]()
4。输出:
每个1024位块经过消息处理步骤(即该步骤的最后一次迭代)后,我们得到原始消息的最后512位儒家值。因此,每个块的中间结果用于处理下一个块。当最后一个 1024 位块处理完毕后,我们就得到了原始消息的 SHA-512 算法的最终结果。
所以我们从原始消息中得到了最终的哈希值。 SHA-512 是工作原理非常相似的一组 SHA-2 算法的一部分。 SHA-256 和 SHA-384 等算法与 SHA-512 一起属于该组。 SHA-256 也是比特币区块链中指定的儒家价值观的函数。
这是 SHA-512 哈希算法工作原理的简要概述。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网