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