主页 > 最新imtoken官网下载 > 哈希算法SHA-512的基本概念和特点分析
哈希算法SHA-512的基本概念和特点分析
这是为了让您对哈希算法的执行过程中实际发生的事情有一个基本的了解。我正在使用 SHA-512 算法来帮助解释哈希函数的内部工作原理。
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 位可以使用。
«图片:原始消息»
填充位
接收输入消息并为其添加一些填充位以使其达到所需的长度。用于填充的位只是带有前导'1'的'0'位(100,000…000)。另外,根据算法,即使是1也需要填充。所以填充只能是1 .
总大小应等于 128 位,而不是 1024 的倍数,因为目标是将消息大小格式化为 1024 位的倍数(N x 1024)。
《图片:味精+pad》
限制大小的消息
然后,追加算法的原始消息 这个大小值需要用 128 位表示,这是 SHA-512 对其输入消息有限制的唯一原因。
由于原始消息的大小需要以 128 位表示,因此消息大小可以达到 (2¹²⁹1) 位,同时考虑到必要的单个填充,其最大大小将是 (2¹²⁹ 2) 位。尽管存在此限制,但实际上并没有造成问题,因为实际限制是如此之高(2¹²⁹2 = 680564733841876926926749214863536422910 位)。
<图片:msg+pad+size>
message with padding size,即已经附加了填充位和消息的大小,剩下的就是完全格式化的SHA-512算法输入。
2.哈希值缓冲区初始化:
该算法的工作方式是使用前一个块的结果处理消息中的每个 1024 位块。现在这对第一个 1024 位块产生了问题,它不能使用任何以前处理的结果。这个问题可以通过使用第一个块的默认值来启动进程来解决。(看倒数第二个图像)。
由于每个中间结果都需要用于处理下一个块,因此需要将其存储在某个地方以备后用。这将由哈希值缓冲区完成,该缓冲区还将保存 SHA-512 整个处理阶段的最后一个哈希值摘要作为这些“中间”结果 A 中的最后一个。
因此区块链中的哈希值是什么意思,用于启动每个 1024 位块的链式处理的默认值也在处理开始时存储在哈希值缓冲区中。实际使用的值无所谓,但是对于感兴趣的人来说,使用的值是取前8个素数(2,3,5)的平方根小数部分的前64位得到的, 7, 11, 13, 17, 19))。这些值称为初始向量 (IV)。
为什么有 8 个素数而不是 9?因为哈希缓冲区实际上由 8 个子部分(寄存器)组成,用于存储它们。
《图:四》
哈希缓冲区和初始化向量值
3. 消息处理:
消息处理是在格式化的输入上执行的,一次取一个 1024 位块。实际的处理是通过使用两件事来完成的:1024 位块和之前处理的结果。
SHA-512 算法的这一部分由几个“轮”和一个加法运算组成。
"pic: 格式化输入1024位块;n, H.n-1) = H.n"
所以,使用“Message Sequence Occurrence”将消息块(1024 位)扩展为“Words”。准确地说是 80 个字,每个 64 位大小。
回合
消息处理阶段的主要部分可以被认为是回合。每轮需要 3 样东西:一个单词、上一轮的输出和 SHA-512 常数。第一个字没有前一轮使用它的输出,所以它使用前一个消息处理阶段的最终输出用于前一个 1024 位块。对于格式化输入的第一块(1024位)的第一轮,使用初始向量(IV)。
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 哈希算法工作原理的简要概述。我将进一步详细说明是什么使哈希函数有效地不可逆(单向),以及这如何有助于数字安全。