什么是哈希算法?

2021-12-01 1639

散列是指從可變大小的輸入生成固定大小的輸出的過程。這是通過使用稱為散列函數(shù)(作為散列算法實(shí)現(xiàn))的數(shù)學(xué)公式來完成的。

盡管并非所有哈希函數(shù)都涉及密碼學(xué)的使用 ,但所謂的密碼哈希函數(shù)是加密貨幣的核心。多虧了它們,區(qū)塊鏈和其他分布式系統(tǒng)能夠?qū)崿F(xiàn)顯著水平的 數(shù)據(jù)完整性和安全性。

傳統(tǒng)和加密散列函數(shù)都是確定性的。確定性意味著只要輸入不變,散列算法將始終產(chǎn)生相同的輸出(也稱為摘要或散列)。

通常,加密貨幣的散列算法被設(shè)計(jì)為單向函數(shù),這意味著如果沒有大量的計(jì)算時(shí)間和資源,它們就無(wú)法輕易恢復(fù)。換句話說,從輸入創(chuàng)建輸出非常容易,但在相反的方向(僅從輸出生成輸入)相對(duì)困難。一般來說,越難找到輸入,哈希算法被認(rèn)為越安全。


哈希函數(shù)是如何工作的?

不同的散列函數(shù)將產(chǎn)生不同大小的輸出,但每種散列算法可能的輸出大小始終是恒定的。例如,SHA-256 算法只能生成 256 位的輸出,而 SHA-1 將始終生成 160 位的摘要。

為了說明這一點(diǎn),讓我們通過 SHA-256 哈希算法(比特幣中使用的算法)運(yùn)行“Bitcoin”和“bitcoin”這兩個(gè)詞。

SHA-256

輸入

輸出(256 位)

Bitcoin

b4056df6691f8dc72e56302ddad345d65fead3ead9299609a826e2344eb63aa4

bitcoin

6b88c087247aa2f07ee1c5956b8e1a9f4c7f892a70e324f1bb3d161e05ca107b


請(qǐng)注意,微小的更改(第一個(gè)字母的大小寫)會(huì)導(dǎo)致完全不同的哈希值。但由于我們使用 SHA-256,輸出將始終具有 256 位(或 64 個(gè)字符)的固定大小 - 無(wú)論輸入大小如何。此外,無(wú)論我們通過算法運(yùn)行這兩個(gè)單詞多少次,兩個(gè)輸出都將保持不變。

相反,如果我們通過 SHA-1 哈希算法運(yùn)行相同的輸入,我們將得到以下結(jié)果:

SHA-1

輸入

輸出(160 位)

Bitcoin

42bd6b9eeb1da01504fefe014e16415246c0f66f

bitcoin

ed1b8d80793e70c0608e8a8508a8dd80f6aa56f9


值得注意的是,首字母縮略詞 SHA 代表安全哈希算法。它指的是一組加密哈希函數(shù),包括 SHA-0 和 SHA-1 算法以及 SHA-2 和 SHA-3 組。SHA-256 是 SHA-2 組的一部分,還有 SHA-512 和其他變體。目前,只有 SHA-2 和 SHA-3 組被認(rèn)為是安全的。


為什么它們很重要?

傳統(tǒng)的哈希函數(shù)具有廣泛的用例,包括數(shù)據(jù)庫(kù)查找、大文件分析和數(shù)據(jù)管理。另一方面,加密散列函數(shù)廣泛用于信息安全應(yīng)用,例如消息認(rèn)證和數(shù)字指紋。就比特幣而言,加密哈希函數(shù)是挖礦過程的重要組成部分, 也在新地址和密鑰的生成中發(fā)揮作用。

散列的真正威力在于處理大量信息時(shí)。例如,可以通過哈希函數(shù)運(yùn)行一個(gè)大文件或數(shù)據(jù)集,然后使用其輸出來快速驗(yàn)證數(shù)據(jù)的準(zhǔn)確性和完整性。由于散列函數(shù)的確定性,這是可能的:輸入將始終產(chǎn)生簡(jiǎn)化的、壓縮的輸出(散列)。這種技術(shù)消除了存儲(chǔ)和“記住”大量數(shù)據(jù)的需要。

散列在區(qū)塊鏈技術(shù)的背景下特別有用。比特幣區(qū)塊鏈有幾個(gè)涉及散列的操作,其中大部分在挖掘過程中。事實(shí)上,幾乎所有的加密貨幣協(xié)議都依賴散列來將交易組鏈接和壓縮成塊,并在每個(gè)塊之間產(chǎn)生加密鏈接,從而有效地創(chuàng)建區(qū)塊鏈。


加密哈希函數(shù)

同樣,部署密碼技術(shù)的散列函數(shù)可以定義為密碼散列函數(shù)。一般來說,破解密碼哈希函數(shù)需要無(wú)數(shù)次的蠻力嘗試。對(duì)于“還原”加密哈希函數(shù)的人來說,他們需要通過反復(fù)試驗(yàn)來猜測(cè)輸入是什么,直到產(chǎn)生相應(yīng)的輸出。然而,也有可能不同的輸入產(chǎn)生完全相同的輸出,在這種情況下會(huì)發(fā)生“沖突”。

從技術(shù)上講,加密哈希函數(shù)需要遵循三個(gè)屬性才能被視為有效安全。我們可以將這些描述為抗碰撞性、抗原像性和抗二次原像性。

在討論每個(gè)屬性之前,讓我們用三個(gè)簡(jiǎn)短的句子總結(jié)它們的邏輯。

  • 抗沖突性:無(wú)法找到任何兩個(gè)不同的輸入產(chǎn)生與輸出相同的哈希值。

  • 原像阻力:無(wú)法“還原”散列函數(shù)(從給定的輸出中找到輸入)。

  • 第二原像阻力:無(wú)法找到與指定輸入相沖突的任何第二輸入。


抗碰撞

如前所述,當(dāng)不同的輸入產(chǎn)生完全相同的散列時(shí),就會(huì)發(fā)生沖突。因此,哈希函數(shù)被認(rèn)為是抗沖突的,直到有人發(fā)現(xiàn)沖突為止。請(qǐng)注意,任何散列函數(shù)都將始終存在沖突,因?yàn)榭赡艿妮斎胧菬o(wú)限的,而可能的輸出是有限的。

換句話說,當(dāng)發(fā)現(xiàn)碰撞的可能性非常低以至于需要數(shù)百萬(wàn)年的計(jì)算時(shí),哈希函數(shù)是抗碰撞的。因此,盡管沒有無(wú)沖突的哈希函數(shù),但其中一些函數(shù)足夠強(qiáng)大,可以被視為具有抵抗力(例如,SHA-256)。

在各種 SHA 算法中,SHA-0 和 SHA-1 組不再安全,因?yàn)橐呀?jīng)發(fā)現(xiàn)沖突。目前,SHA-2 和 SHA-3組被認(rèn)為是抗沖突的。


原像電阻

原像電阻的特性與單向函數(shù)的概念有關(guān)。當(dāng)有人找到生成特定輸出的輸入的可能性非常低時(shí),哈希函數(shù)被認(rèn)為是抗原像的。

請(qǐng)注意,此屬性與前一個(gè)屬性不同,因?yàn)楣粽邥?huì)試圖通過查看給定的輸出來猜測(cè)輸入是什么。另一方面,當(dāng)有人發(fā)現(xiàn)產(chǎn)生相同輸出的兩個(gè)不同輸入時(shí),就會(huì)發(fā)生沖突,但使用哪個(gè)輸入并不重要。

原像抗性的特性對(duì)于保護(hù)數(shù)據(jù)很有價(jià)值,因?yàn)橄⒌暮?jiǎn)單散列可以證明其真實(shí)性,而無(wú)需披露信息。在實(shí)踐中,許多服務(wù)提供商和 Web 應(yīng)用程序存儲(chǔ)和使用從密碼生成的哈希值,而不是明文密碼。


二次原像抗性

為簡(jiǎn)化起見,我們可以說第二原像電阻介于其他兩個(gè)屬性之間。當(dāng)有人能夠找到一個(gè)特定的輸入,該輸入生成與他們已經(jīng)知道的另一個(gè)輸入相同的輸出時(shí),就會(huì)發(fā)生二次原像攻擊。

換句話說,第二原像攻擊涉及尋找碰撞,但不是搜索生成相同散列的兩個(gè)隨機(jī)輸入,而是搜索生成由另一個(gè)特定輸入生成的相同散列的輸入。

因此,任何抗碰撞的哈希函數(shù)也能抗第二原像攻擊,因?yàn)楹笳呖偸且馕吨鲎?。然而,人們?nèi)匀豢梢詫?duì)抗碰撞函數(shù)執(zhí)行原像攻擊,因?yàn)樗馕吨鴱膯蝹€(gè)輸出中找到單個(gè)輸入。


礦業(yè)

比特幣挖礦有很多步驟 涉及哈希函數(shù),例如檢查余額、鏈接交易輸入和輸出,以及對(duì)區(qū)塊內(nèi)的交易進(jìn)行哈希處理以形成 默克爾樹。但比特幣區(qū)塊鏈安全的主要原因之一 是礦工需要執(zhí)行無(wú)數(shù)的散列操作,以便最終為下一個(gè)區(qū)塊找到有效的解決方案。

具體來說,礦工在為其候選塊創(chuàng)建哈希值時(shí)必須嘗試幾種不同的輸入。本質(zhì)上,如果他們生成以一定數(shù)量的零開頭的輸出哈希,他們將只能驗(yàn)證他們的塊。零的數(shù)量決定了挖礦難度,它根據(jù)網(wǎng)絡(luò)的哈希率而變化。

在這種情況下,哈希率表示在比特幣挖礦中投入了多少計(jì)算機(jī)能力。如果網(wǎng)絡(luò)的哈希率增加,比特幣協(xié)議會(huì)自動(dòng)調(diào)整挖礦難度,使挖出一個(gè)區(qū)塊所需的平均時(shí)間保持在接近 10 分鐘。相反,如果幾個(gè)礦工決定停止挖礦,導(dǎo)致算力大幅下降,則會(huì)調(diào)整挖礦難度,使其更容易挖礦(直到平均出塊時(shí)間回到10分鐘)。

請(qǐng)注意,礦工不必發(fā)現(xiàn)沖突,因?yàn)樗麄兛梢陨啥鄠€(gè)散列作為有效輸出(從一定數(shù)量的零開始)。所以對(duì)于某個(gè)區(qū)塊有幾種可能的解決方案,礦工只需要找到其中一種——根據(jù)挖礦難度確定的閾值。

由于比特幣挖礦是一項(xiàng)成本密集型任務(wù),礦工沒有理由欺騙系統(tǒng),因?yàn)檫@會(huì)導(dǎo)致重大的經(jīng)濟(jì)損失。加入?yún)^(qū)塊鏈的礦工越多,它就變得越大越強(qiáng)大。(國(guó)內(nèi)禁止參與挖礦)


結(jié)束語(yǔ)

毫無(wú)疑問,哈希函數(shù)是計(jì)算機(jī)科學(xué)中必不可少的工具,尤其是在處理大量數(shù)據(jù)時(shí)。當(dāng)與密碼學(xué)結(jié)合時(shí),散列算法可以非常通用,以多種不同的方式提供安全性和身份驗(yàn)證。因此,加密哈希函數(shù)對(duì)幾乎所有加密貨幣網(wǎng)絡(luò)都至關(guān)重要,因此了解它們的屬性和工作機(jī)制對(duì)于任何對(duì)區(qū)塊鏈技術(shù)感興趣的人肯定會(huì)有所幫助。



牛人(Niuren.com)】,讓企業(yè)數(shù)字化轉(zhuǎn)型成本下降50%。“產(chǎn)品原型”是企業(yè)數(shù)字化項(xiàng)目需求管理、項(xiàng)目開發(fā)、運(yùn)維迭代的起點(diǎn)與管理杠桿,牛人平臺(tái)為企業(yè)用戶提供數(shù)字化產(chǎn)品原型設(shè)計(jì)服務(wù)的P2B(Professioner to Business)擔(dān)保交易服務(wù)。企業(yè)在牛人平臺(tái)發(fā)布項(xiàng)目需求,產(chǎn)品經(jīng)理在牛人平臺(tái)進(jìn)行認(rèn)證審核后,為企業(yè)提供產(chǎn)品原型設(shè)計(jì)服務(wù)。牛人平臺(tái)承擔(dān)起企業(yè)用戶與產(chǎn)品經(jīng)理之間的服務(wù)交易的撮合、擔(dān)保、以及質(zhì)量監(jiān)理服務(wù)。



最新文章排行榜