這是為了讓您對哈希算法執(zhí)行過程中實際發(fā)生的事情有一個基本的了解。我使用SHA-512算法是為了幫助解釋哈希函數(shù)的內(nèi)部工作。
SHA-512是一種哈希算法,它對給定的數(shù)據(jù)執(zhí)行哈希函數(shù)。
哈希算法被廣泛應用于網(wǎng)絡安全、數(shù)字證書甚至區(qū)塊鏈等領(lǐng)域。由于哈希算法在數(shù)字安全和密碼學中扮演著如此重要的角色,對于稱為SHA-512的哈希算法來說,這是一個易于理解的演練,包括一些基本和簡單的數(shù)學知識以及一些圖表。它是一組稱為SHA-2的哈希算法的一部分,其中包括SHA-256,也用于比特幣區(qū)塊鏈的哈希算法。
在開始解釋SHA-512之前,我認為有一個關(guān)于哈希值函數(shù)的特性的基本概念是很有用的。
哈希函數(shù)
哈希函數(shù)將一些數(shù)據(jù)作為輸入,并為輸入數(shù)據(jù)生成固定長度的輸出(稱為哈希摘要)。然而,這個輸出應該滿足一些有用的條件。
1. 均勻分布: 由于輸出哈希摘要的長度是固定的,輸入大小可能會有所不同,因此很明顯,對于不同的輸入值,將會得到一些輸出值。即使是這樣,哈希函數(shù)也應該是這樣的:對于任何輸入值,每個可能的輸出值都應該是等可能的。也就是說,對于任何給定的輸入值,每個可能的輸出都有相同的可能性產(chǎn)生。
2. 固定長度: 這應該是不言自明的。輸出值都應該是固定長度的。例如,哈希函數(shù)的輸出大小可以是20個字符,也可以是12個字符,等等。SHA-512的輸出大小可以是512位。
3. 意見沖突: 簡單地說,這意味著不存在任何不可能找到兩個不同的輸入哈希函數(shù),導致相同的輸出(哈希摘要)。
這是關(guān)于哈希函數(shù)的簡單介紹?,F(xiàn)在讓我們看看SHA-512。
哈希算法- SHA-512
所以SHA-512分幾個階段工作。這些階段如下:
· 輸入格式
· 哈希緩沖初始化
· 消息處理
· 輸出
讓我們一個一個看。
1. 輸入格式:
SHA-512實際上不能散列任何大小的消息輸入,即它有輸入大小限制。這個限制是由它的結(jié)構(gòu)決定的,你可以在后面看到。整個格式化的信息基本上有三個部分:原始消息、填充位、原始消息的大小。它們的組合大小應該是1024位的整數(shù)倍。這是因為格式化的消息將被處理為每個1024位的塊,因此每個塊應該有1024位可以使用。
《pic: original message》
填充位
接收輸入消息并向其添加一些填充位,以使其達到所需的長度。用于填充的位只是帶有前導“1”(100,000…000)的“0”位。另外,根據(jù)算法,即使是1,也需要進行填充。所以一個內(nèi)邊距只能是1。
總大小應該等于128位,而不是1024的倍數(shù),因為目標是將格式化的消息大小作為1024位的倍數(shù)(N x 1024)。
《pic:msg + pad》
帶有極限大小的消息
然后,附加算法的原始消息的大小。這個大小值需要用128位表示,這是SHA-512對其輸入消息有限制的唯一原因。
自原始消息的大小需要用128位表示,消息大小可以最多(212?1)位,也考慮到必要的單一填充,它最大的大小將(212?2)位。盡管這個極限存在,它實際上并不造成問題,因為實際的限制是如此之高(212?2 = 680564733841876926926749214863536422910位)。
《pic:msg + pad + size》
帶有填充大小的消息,即填充位和消息的大小已被追加,剩下的是完全格式化的SHA-512算法輸入。
2. 哈希值值緩沖初始化:
該算法的工作方式是使用前一個塊的結(jié)果處理來自消息的每個1024位的塊。現(xiàn)在,這給前1024位塊帶來了一個問題,它不能使用任何以前處理的結(jié)果。這個問題可以通過使用第一個塊的默認值來解決,以便啟動該進程。(看一下倒數(shù)第二張圖)。
由于每個中間結(jié)果都需要用于處理下一個塊,因此需要將其存儲在某個地方以供以后使用。這將由哈希值值緩沖區(qū)來完成,它還將保存SHA-512整個處理階段的最后一個哈希值值摘要,作為這些“中間”結(jié)果的最后一個。
因此,用于啟動每個1024位塊的鏈處理的默認值也存儲在處理開始時的哈希值值緩沖區(qū)中。實際使用的值無關(guān)緊要,但是對于感興趣的人來說,使用的值是通過取前8個素數(shù)(2,3,5,7,11,13,17,19)平方根的小數(shù)部分的前64位得到的。這些值稱為初始向量(IV)。
為什么是8個質(zhì)數(shù)而不是9個?因為哈希值緩沖區(qū)實際上由8個子部分(寄存器)組成,用于存儲它們。
《pic:IV》
哈希緩沖區(qū)和初始化向量值
3. 消息處理:
消息處理是在格式化的輸入上進行的,每次取一個1024位的塊。實際的處理是通過使用兩個東西來進行的:1024位塊和前一個處理的結(jié)果。
SHA-512算法的這一部分包括幾個“回合”和一個加法運算。
《pic:格式化輸入1024位塊;n, H.n-1) = H.n 》
因此,使用“消息序列發(fā)生”將消息塊(1024位)擴展為“Words”。準確地說,是80個單詞,每個單詞的大小為64位。
Rounds
消息處理階段的主要部分可以認為是Rounds。每個輪需要3個東西:一個單詞、上一輪的輸出和SHA-512常量。第一Word沒有可以使用其輸出的前一輪,因此它對前一個1024位塊使用前一個消息處理階段的最終輸出。對于格式化輸入的第一個塊(1024位)的第一輪,使用初始向量(IV)。
SHA-512常量是預先確定的值,每個常量用于消息處理階段的每個輪。同樣,這些不是很重要,但是對那些感興趣的人來說,它們是前80個素數(shù)的立方根的小數(shù)部分的前64位。為什么是80個素數(shù)?因為有80輪,每輪都需要一個常數(shù)。
一旦Round函數(shù)接受這3個東西,它就對它們進行處理,并給出512位的輸出。重復80輪。在第80輪之后,它的輸出被簡單地添加到前一個消息處理階段的結(jié)果中,以獲得此消息處理迭代的最終結(jié)果。
4. 輸出:
在1024位的每個塊通過消息處理階段(即該階段的最后一次迭代)之后,我們將得到原始消息的最后512位哈希值值。因此,每個塊的中間結(jié)果都用于處理下一個塊。當最后的1024位塊完成處理后,我們就得到了原始消息的SHA-512算法的最終結(jié)果。
因此,我們從原始消息中獲得最終的哈希值。SHA-512是一組哈希算法的一部分,它們的工作方式非常類似,稱為SHA-2。SHA-256和SHA-384等算法與SHA-512一起屬于這一組。SHA-256也是比特幣區(qū)塊鏈中指定的哈希值函數(shù)。
這是SHA-512哈希算法工作原理的簡要概述。我打算進一步詳細說明是什么使得哈希函數(shù)實際上是不可逆的(單向的),以及這對數(shù)字安全有什么幫助。





