什麼是哈希值?
例如句子“那隻敏捷的棕色狐狸跳過了懶惰的狗,”通過一種稱爲CRC32的特定算法運行,將會產生結果“07606bb6”。而這個結果被稱爲HASH(哈希)。
SHA算法,是HASH算法的一種。SHA表示加密散列算法,用於網絡加密安全。一般情況下,電腦可以對hash進行識別、比較、或對文件和字符串進行數據計算。計算機會先對HASH進行計算,然後與原始文件進行校驗。HASH算法的重要特徵是其確定性。上述的列子,在任何一臺電腦使用任意的hash算法得出的結果都是一樣的。
散列算法的一個關鍵屬性是確定性。世界上任何理解您選擇的散列算法的計算機都可以在本地計算我們的例句的散列並得到相同的答案。
對於加密散列算法的最重要的因素是他們產生不可逆的和獨特的哈希值。不可逆性,數據一旦產生哈希值,那麼就不可能通過單一的哈希值解出原始的數據。獨特性,兩個不懂的數據是不能產生同樣的哈希值。
數字簽名
SSL / TLS協議是爲客戶端到服務端之間搭建一條安全的網絡數據傳輸通道。爲了簡單理解,很多人把SSL直接解析爲“加密”。但是,SSL還有另外重要的功能——身份驗證。SSL證書文件的任務之一是提供身份驗證所需的信息,具體而言,SSL證書將特定的公鑰連接到安全標識。
SSL / TLS協議是使用非對稱加密來確保安全連接。這意味着有兩個加密密鑰:一個用於加密的公鑰,另一個用於解密的私鑰。每個SSL證書都包含一個公鑰,客戶端可以使用該密鑰對數據進行加密,擁有SSL證書的所有者可以在其服務器上安全的存儲一個撕咬,然後對數據進行解密,安全查看數據內容。
認證對於SSL/TLS提供的安全特性非常重要。如果沒有可靠的方式驗證誰擁有加密密鑰,那麼數據加密就沒有意義了,因爲客戶端無法判斷哪一個服務端擁有安全的密鑰。如果將數據直接發給中間人的***者,那麼密鑰就沒有存在的意義。
數字簽名是SSL證書提供身份驗證的重要組成部分。頒發證書時,是由證書提供商(CA機構)進行數字簽名(如Symantec、GlobalSign、數安時代GDCA)。該簽名提供加密密鑰,CA簽署了SSL證書,證書沒有被修改或轉載。
非對稱密鑰將再次被使用,但是爲了簽名而不是加密。從數學角度來說,簽名涉及到數據和密鑰組合的方式。爲了讓計算機在安全的情況下響應迅速,安全創建和檢測簽名,CA機構會先在證書生成哈希值,這比簽署整個證書更有效率。
然後,數字簽名提供所需證書,證明所提供的證書是受信任CA頒發給相關網站的有效證書。
數字簽名是非常靈敏的,對文件的任何更改都會導致簽名改變。同一單詞的英文大小所產生的哈希值都是不同的,這就意味着其散列的結果簽名也是不一樣的。如果改變一千萬字節的文檔,將會產生完全不同的哈希。
數字簽名非常敏感——對文件的任何更改都會導致簽名改變。如果我們從上一節中引用我們的示例語句,並將其完全小寫(“快速的棕色狐狸跳過懶惰的狗”),得到的哈希將是完全不同的。這意味着該散列的結果簽名也會不同。甚至改變一個多千字節文件會導致完全不同的哈希。
這樣,***者就不可能更改合法的證書或僞造類似正確的欺詐性證書。不同的哈希值意味着其簽名是無效的,當客戶端訪問服務器是,計算機就會自動驗證SSL證書,一旦遇到無效的證書,就會觸發錯誤並阻止客戶端鏈接。
SHA-1和SHA-2
SHA代表安全散列算法,SHA-1和SHA-2是該算法的兩個不同版本。它們在構造(如何從原始數據創建結果散列)和簽名的位長方面都不同。您應該將SHA-2視爲SHA-1的繼承者,因爲它是一個整體改進。
首先,人們把重點放在比特長度上作爲重要的區別。SHA-1是160位散列。SHA-2實際上是哈希的“家族”,有各種長度,最受歡迎的是256位。
各種各樣的SHA-2哈希可能會引起一些混亂,因爲網站和作者以不同的方式表達它們。如果你看到“SHA-2”,“SHA-256”或“SHA-256位”,那些名稱指的是同一個東西。如果您看到“SHA-224”,“SHA-384”或“SHA-512”,則它們指的是SHA-2的備用位長度。您可能還會看到一些網站更明確,並寫出算法和比特長度,例如“SHA-2 384”。
SSL行業已選擇SHA作爲其數字簽名的哈希算法
從2011年到2015年,SHA-1是主要算法。一個的顯示SHA-1的弱點研究越來越多促使人民幣升值。事實上,谷歌甚至還提供了一個SHA-1碰撞(當兩個不同的數據創建相同的哈希值時)。因此,從2016年開始,SHA-2是新標準。如果您今天收到SSL / TLS證書,則必須至少使用該簽名。
有時您會看到使用SHA-2 384位的證書。您很少會看到224位變體,它不被批准用於公開信任的證書,或者是512位變體,它不受軟件廣泛支持。
SHA-2可能會使用至少五年。但是,可能會發現一些意外的算法***,這會導致早期轉換。
較大的位散列可以提供更高的安全性,因爲有更多可能的組合。請記住,加密哈希算法的一個重要功能是產生唯一的哈希值。同樣,如果兩個不同的值或文件可以產生相同的哈希,那麼您將創建我們稱之爲衝突的東西。
只要不發生衝突,就只能保證數字簽名的安全性。衝突非常危險,因爲它們允許兩個文件生成相同的簽名,因此,當計算機檢查簽名時,即使該文件從未實際簽名,它也可能看起來有效。
保持簽名安全
隨着時間的推移,對密碼學的***將得到改善,計算機處理能力將變得更低。這使得有效的SHA-2簽名在2020年的安全性低於2016年。因此,算法的選擇將比直接需要的更加強大,因此短期改進不會導致安全性的損害。特定的散列算法在十年內保持安全並不是不現實的。
世界各地的行業專家和安全研究人員正在不斷分析SHA-2和其他加密哈希算法,因此請放心,目前的SSL證書將在一段時間內具有可靠和安全的數字簽名。
這並不意味着密碼學家只會坐等並等到出現問題。SHA-2的繼任者,方便地命名爲SHA-3,已經完成。當需要進行另一次切換時,SSL行業可能會使用SHA-3作爲下一個選擇,或者它可能會採用完全不同的算法。
需要數年才能正確研究和審覈新的加密標準,然後開發支持它們的軟件。希望知道該行業始終至少領先一步是令人放心的。