散列是指從可變大小的輸入創建固定大小的輸出的過程。這是通過使用稱爲哈希函數(作爲哈希算法實現)的數學公式來完成的。
雖然並非所有哈希函數都使用密碼學,但所謂的密碼哈希函數是數字貨幣的核心。感謝他們,區塊鏈和其他分佈式系統能夠達到顯着的數據完整性和安全性水平。
傳統哈希函數和加密哈希函數都是確定性的。確定性的含義是,只要輸入不改變,哈希算法將始終產生相同的輸出(也稱爲摘要或哈希)。
加密貨幣哈希算法通常被設計爲單向函數,這意味着如果沒有大量時間和計算資源,它們就無法輕易撤消。換句話說,從輸入獲得輸出非常容易,但做相反的事情(僅從輸出獲得輸入)相對困難。一般來說,找到輸入越困難,哈希算法就越安全。
哈希函數如何工作?
不同的哈希函數產生不同大小的輸出,但每個哈希算法可能的輸出大小始終是固定的。例如,SHA-256 只能生成 256 位的輸出,而 SHA-1 始終生成 160 位的摘要。
爲了說明這一點,讓我們通過 SHA-256 哈希算法(用於比特幣)運行單詞“Binance”和“binance”。
請注意,一個小的更改(以第一個字母的形式)會導致完全不同的哈希值。但由於我們使用 SHA-256,因此無論輸入大小如何,輸出始終具有 256 位(或 64 個字符)的固定大小。此外,我們通過算法運行這兩個單詞多少次並不重要,因爲兩個輸出將保持不變。
相反,如果我們通過 SHA-1 哈希算法運行相同的輸入,我們將得到以下結果:
值得注意的是,SHA 這個詞是 Secure Hash Algorithms 的縮寫。它是指一組加密哈希函數,其中包括 SHA-0 和 SHA-1 算法以及 SHA-2 和 SHA-3 組合。 SHA-256 是 SHA-2 套件的一部分,此外還有 SHA-512 和其他變體。目前只有 SHA-2 和 SHA-3 塊被認爲是安全的。
它爲什麼如此重要?
傳統的哈希函數具有廣泛的用例,包括數據庫搜索、大文件分析和數據管理。另一方面,加密哈希函數廣泛應用於信息安全應用,例如消息認證和數字指紋識別。對於比特幣來說,加密哈希是挖掘過程的重要組成部分,並且在生成新地址和密鑰方面也發揮着作用。
當處理大量信息時,分段的真正威力就會顯現出來。例如,可以通過哈希函數運行大型文件或數據集,然後使用其輸出快速驗證數據的準確性和完整性。這是可能的,因爲散列函數的確定性本質:輸入總是導致簡化、壓縮(散列)輸出。這項技術消除了存儲和記住大量數據的需要。
哈希在區塊鏈技術的背景下特別有用。比特幣區塊鏈包含許多包括哈希在內的操作,其中大部分是在挖掘過程中。事實上,幾乎所有加密貨幣協議都依賴哈希來鏈接交易集並將它們壓縮成塊。還可以在每個塊之間創建加密鏈接,從而有效地創建區塊鏈。
加密哈希函數
同樣,使用密碼技術的散列函數可以被定義爲密碼散列函數。破解加密哈希函數需要無數次暴力攻擊。爲了使哈希函數反轉,他們必須通過反覆試驗來猜測輸入是什麼,直到產生相應的輸出。但不同的輸入也有可能產生相同的輸出,在這種情況下就會發生“衝突”。
從技術上講,加密哈希函數需要遵循三個屬性才能被認爲是有效安全的。我們可以將這些屬性描述爲:抗碰撞性、抗原像性和抗第二原像性。
在討論每個屬性之前,讓我們用三個簡短的句子總結它們的推理。
抗衝突性:不可能找到任何兩個不同的輸入產生與輸出相同的哈希值。
原像抵抗:哈希函數不能“反轉”(從給定輸出中查找輸入)。
第二原像抵抗:找不到第二個輸入與另一個指定輸入發生衝突。
抗碰撞
如前所述,當不同的輸入產生完全相同的哈希值時,就會發生衝突。因此,哈希函數是抗衝突的,直到有人發現衝突爲止。請注意,任何哈希函數都始終存在衝突,因爲可能的輸入是無限的,而可能的輸出是有限的。
換句話說,當發現衝突的概率非常低以至於需要數百萬年的計算時,哈希函數就具有抗衝突性。因此,儘管不存在無碰撞哈希函數,但有些函數足夠強大,可以被認爲是具有抵抗力的(例如 SHA-256)。
在不同的 SHA 算法中,SHA-0 和 SHA-1 組合由於衝突而不再安全。 SHA-2 和 SHA-3 塊目前被認爲是抗碰撞的。
原像阻力
原像抗性與單向函數的概念有關。當有人找到產生特定輸出的輸入的可能性非常低時,哈希函數被認爲是抗原像的。
請記住,此功能與前一個功能不同,因爲攻擊者會嘗試通過查看某些輸出來猜測輸入是什麼。另一方面,當有人發現生成相同輸出的不同輸入但使用哪個輸入並不重要時,就會發生衝突。
原像抵抗在數據保護中很有價值,因爲消息的簡單散列可以證明其真實性,而無需透露任何信息。在實踐中,許多服務提供商和 Web 應用程序存儲和使用從密碼生成的哈希值,而不是純文本密碼。
抗第二原像性
爲簡單起見,我們可以說第二原像抵抗力介於其他先前屬性之間。當有人發現某個特定輸入生成與他們已知的另一個輸入相同的輸出時,就會發生第二原像攻擊。
換句話說,第二原像攻擊涉及發現衝突,但不是尋找兩個生成與輸出相同的哈希值的隨機輸入,而是尋找生成與另一個特定輸入生成的哈希值相同的哈希值的輸入。
因此,任何抗碰撞的哈希函數也能抵抗第二原像攻擊,因爲後者總是意味着碰撞。但攻擊者仍然可以對防碰撞功能進行早期攻擊,因爲它涉及從一個輸出找到一個輸入。
礦業
比特幣挖掘過程中有幾個步驟包含哈希函數,例如驗證餘額、將輸入和輸出鏈接到交易以及對塊內的交易進行哈希處理以形成 Merkle 樹。但比特幣區塊鏈安全的主要原因之一是礦工需要無數的哈希值才能找到下一個區塊的有效解決方案。
具體來說,礦工在爲其候選塊生成哈希值時必須嘗試幾個不同的輸入。本質上,如果他們生成以一定數量的零開頭的結果哈希,他們將只能驗證他們的塊。零的數量決定了挖掘的難度,並根據分配給網絡的哈希率而變化。
在這種情況下,哈希率代表了投資於挖掘比特幣的計算能力。如果網絡算力增加,比特幣協議將自動調整挖掘難度,使挖掘一個區塊的平均時間保持在接近 10 分鐘。另一方面,如果許多礦工決定停止挖礦,這將導致算力大幅下降,挖礦難度將會調整,從而有利於挖礦進程(直到平均區塊挖礦時間恢復到10分鐘)。
請注意,礦工不必發現衝突,因爲他們只能生成這麼多哈希作爲有效輸出(以一定數量的零開始)。因此,對於給定的區塊,有多種可能的解決方案,礦工不必根據挖礦難度確定的起點來找到其中一個。
由於比特幣挖礦非常昂貴,礦工沒有理由欺騙系統,因爲這將導致重大的經濟損失。加入區塊鏈的礦工越多,它就會變得越強大。
結論性想法
毫無疑問,哈希函數是計算機科學中必不可少的工具,尤其是在處理大量數據時。哈希算法與密碼學相結合可以發揮多種作用,以多種不同的方式提供安全性和身份驗證。因此,這種加密哈希函數對於幾乎所有加密貨幣網絡都極其重要。因此,瞭解其屬性和工作機制對於任何對區塊鏈技術感興趣的人來說絕對是有用的。
