散列的含義是指從可變大小的輸入生成固定大小的輸出的過程。散列是通過使用稱為散列函數的數學公式完成的。
雖然並非所有散列函數都涉及使用密碼學,但所謂的密碼散列函數是加密貨幣的核心。區塊鍊和其他分佈式系統使用加密散列函數來實現顯著水平的數據完整性和安全性。
通常,加密貨幣的散列算法被設計為單向函數,這意味著如果沒有大量的計算時間和資源。換句話說,從輸入創建輸出很容易,但從輸出生成輸入相對困難。通過這樣做,這使得哈希函數非常安全,因為其他人無法從一個人的哈希值生成一個人的私鑰的真實值。
哈希函數是如何工作的?
既然我們知道了哈希在加密中的含義,讓我們來探討一下哈希函數是如何工作的。
不同的哈希函數會產生不同大小的輸出,但可能的每個散列算法的輸出大小始終是恆定的。例如,SHA-256 算法只能生成 256 位的輸出,而 SHA-1 將始終生成 160 位的摘要。
非常小的更改(例如將大寫字母更改為小寫字母)導致完全不同的哈希值。但由於我們使用的是 SHA-256,因此無論輸入大小如何,輸出都將始終具有 256 位(或 64 個字符)的固定大小。此外,無論我們通過算法運行這兩個詞多少次,兩個輸出都將保持不變。
為什麼哈希函數很重要?
哈希在處理大量信息時非常強大。例如,可以通過哈希函數運行一個大文件或數據集,然後使用其輸出來快速驗證數據的準確性和完整性。這是可能的,因為散列函數的確定性:輸入總是會產生一個簡化的、濃縮的輸出(散列)。這種技術消除了存儲大量數據的需要。
區塊鏈使用散列來壓縮和存儲大量信息。比特幣區塊鏈有幾個涉及散列的操作,其中大部分是在挖掘過程中。事實上,幾乎所有的加密貨幣協議都依賴散列來將交易組鏈接和壓縮成塊,並在每個塊之間產生加密鏈接,從而有效地創建區塊鏈。
加密散列函數
部署密碼技術的哈希函數可以定義為密碼哈希函數。一般來說,破解密碼散列函數需要無數次的蠻力嘗試。對於要“還原”加密哈希函數的人,他們需要通過反複試驗來猜測輸入是什麼,直到產生相應的輸出。但是,也有可能不同的輸入產生完全相同的輸出,在這種情況下會發生“衝突”。
從技術上講,加密哈希函數需要遵循三個屬性才能被認為是有效安全的。這些屬性是抗碰撞性、抗原像性和抗二次原像性。
抗碰撞性
如前所述,當不同的輸入產生完全相同時,就會發生碰撞哈希。因此,在有人發現衝突之前,哈希函數被認為是抗衝突的。任何哈希函數都不可避免地會發生衝突,因為可能的輸入是無限的,而可能的輸出是有限的。
因此,當發現衝突的可能性非常低以至於它會需要很長時間的計算。因此,儘管沒有無衝突的哈希函數,但其中一些函數足夠強大,可以被認為具有抵抗力(例如 SHA-256)。
在各種 SHA 算法中,SHA-0 和SHA-1 組不再安全,因為已發現衝突。目前,SHA-2和SHA-3組被認為是抗碰撞的。
抗原像性
抗原像性的性質與概念有關的單向函數。當某人找到生成特定輸出的輸入的可能性非常低時,哈希函數被認為是抗原像的。
原像抗性的屬性對於保護數據很有價值,因為消息的簡單哈希可以證明其真實性,無需透露信息。在實踐中,許多服務提供商和 Web 應用程序存儲和使用從密碼生成的哈希值,而不是明文密碼。
抗二次原像
為了簡化,我們可以說第二原像電阻介於其他兩個屬性之間。當某人能夠找到一個特定的輸入,該輸入與他們已經知道的另一個輸入產生相同的輸出時,就會發生第二原像攻擊。
換句話說,第二原像攻擊涉及找到碰撞,但是他們不是搜索生成相同哈希的兩個隨機輸入,而是搜索生成由另一個特定輸入生成的相同哈希的輸入。
因此,任何抗衝突的哈希函數也是抵抗第二原像攻擊,因為後者總是意味著碰撞。但是,仍然可以對抗碰撞函數執行原像攻擊,因為這意味著從單個輸出中找到單個輸入。
結論
散列含義是指從可變大小的輸入生成固定輸出。哈希在隱私和安全方面有很多用途,尤其是在加密貨幣和區塊鏈中。




















