什麼是 SHA 加密?SHA-1 與 SHA-2 比較
SHA 加密(安全哈希演算法)是一組密碼雜湊函數,用於為數碼簽署、數碼證書及加密貨幣提供安全的數據雜湊功能。SHA-1 雖然過往應用廣泛,現時已被確認存在安全弱點,由安全性更強的 SHA-2 取代,後者包括 SHA-256、SHA-512 等版本。更新的變體 SHA-3 採用先進結構,進一步提升安全性。SHA 加密是 TLS/SSL 協定、安全通訊及現代數碼安全框架不可或缺的組成部分。請務必為項目選用合適的 SHA 演算法,以確保充分的安全防護。
什麼是 SHA 加密?
安全哈希演算法(SHA)是由美國國家標準與技術研究院(NIST)發布的一組密碼雜湊函數,屬於美國聯邦資訊處理標準(FIPS)。SHA 加密可用於多種場景,包括數據雜湊、數碼證書檔案處理,以及比特幣等加密貨幣中的其他密碼學用途。這些雜湊演算法為現代互聯網基礎設施的核心安全提供支援。
你最常接觸到的 SHA 函數族是 SHA-1 和 SHA-2:
SHA-1是一種 160 位元雜湊函數,由 MD5 演算法的相關研究發展而來。SHA-1 雜湊最初由美國國家安全局(NSA)設計,作為其數碼簽署演算法的組成部分。但後續研究發現 SHA-1 存在密碼學弱點,2010 年之後,該標準不再獲准用於絕大多數密碼學場景。由於 SHA-1 已無法符合現行網絡安全標準,SHA-2 已成為應用最廣泛的 SHA 函數。
SHA-2是在發現針對 SHA-1 的低成本暴力破解攻擊後不久開發的。它是由兩個結構相似、區塊大小不同的雜湊函數組成的函數族,即 SHA-256 和 SHA-512。SHA-256 和 SHA-512 的核心區別在於字長:SHA-256 使用 32 位元組字,而 SHA-512 使用 64 位元組字。這兩個標準還有各自的修改版本,包括 SHA-224、SHA-384、SHA-512/224 和 SHA-512/256。現時最常用的 SHA 函數是 SHA-256,在當前的電腦處理能力下,它能提供充足的安全防護。SHA-2 採用 Merkle–Damgård 結構,搭配 Davies–Meyer 壓縮函數。
除了這些較為知名的類型外,你可能還會接觸到另外兩個 SHA 變體族:SHA-0 和 SHA-3:
SHA-0是現時我們對 1993 年以 SHA 演算法為名發布的 160 位元(即 20 位元組)雜湊函數基礎版本的稱呼。該雜湊函數發布後不久,就因發現重大缺陷而停止使用;在對底層理論進一步完善後,SHA-1 正式面世。
SHA-3是現時增長速度最快的 SHA 加密技術。它與其他 SHA 演算法的區別在於採用了新開發的 Keccak 雜湊函數。它支援的雜湊長度與 SHA-2 相同,但兩者存在顯著結構差異。SHA-3 的獨特之處在於其整體結構基於廣泛的隨機函數生成機制,一般支援所有隨機排列,因此可以吸收(即輸入)任意長度的數據,再擠出(即輸出)處理後的數據。這種機制生成的輸出具備有效的偽隨機性,理論上安全性更高。
SHA-1 與 SHA-2 的區別是什麼?
SHA-1 和 SHA-2 的區別在於,對於任何給定輸入,其生成的訊息摘要(雜湊後的內容)的「長度」即「位元數」不同。摘要的位元數越多,透過暴力破解手段攻破的難度就越高——正是這類攻擊推動了 SHA 演算法從 SHA-1 迭代升級。對於相同輸入,SHA-2 生成 256 位元摘要,而 SHA-1 函數生成 160 位元摘要。由於這一差異,SHA-1 的安全性較弱,有機會為兩個不同的數據值生成相同的摘要;而 SHA-2 可為每個數據值生成唯一摘要,因為它的組合數量極大(256 位元函數共有 2^256 種可能的組合)。
SHA 加密有哪些應用場景?
SHA 廣泛應用於各類安全協定及應用中,包括傳輸層安全(TLS)、安全通訊端層(SSL)、數碼簽署、S/MIME 電郵證書、PGP 和 IPsec。美國部分政府應用出於保護敏感數據的需要,會透過法例強制要求使用這類加密。此外,Google、Microsoft、Mozilla 等瀏覽器廠商已開始推薦使用 SHA-3,停止使用 SHA-1 演算法。
SHA 最重要的用途之一,是在 SSL/TLS 協定中作為數碼簽署的雜湊演算法使用。
SSL 和 TLS 是密碼學協定,用於在互聯網上為客戶端與伺服器建立安全通訊通道。TLS/SSL 證書屬於一類X.509 證書,用於向瀏覽器驗證伺服器的身份。
部署此類證書的目的不僅是提供身份認證,還要確認客戶端瀏覽器所通訊的遠端伺服器的真實身份。證書中包含Web伺服器的相關資訊,以及與之關聯的密鑰檔案。證書若要被正常接受、在無任何安全錯誤的前提下建立SSL/TLS會話,必須包含對應的DNS資訊且處於有效期內。
SHA加密是如何運作的?
顧名思義,SHA是一種哈希演算法。任意數據經過該演算法處理後,都會生成一個唯一的哈希值,無法被其他任何數據重現。生成的數碼簽署同樣具備唯一性,因為它由數據本身計算出的哈希值生成。在實際通訊場景中會使用對稱加密技術,即用於哈希計算或加密數據的同一密鑰也會被用於解密,這一機制使得公開密碼匙可以公開披露,同時不會危及私密密碼匙的安全。
大多數哈希演算法都基於最初的MD4哈希演算法開發,因此具備相似的運作邏輯。
任意類型哈希運算的基礎流程為:先將輸入內容(即原始訊息)轉換為二進制格式,再通過一系列基於標準晶體管與匯流排基礎運算的簡單函數處理,這類運算包括AND(與)、XOR(異或)、NOT(非)、Rotate(循環移位)、OR(或)。最終得到的哈希值是具備唯一性但無實際語義的十六進制值。哈希計算需要執行這些簡單運算,這也是人們可以設計專用集成電路(ASIC)來優化哈希運算性能的原因之一。
針對SHA-256哈希運算,專門設計的新型芯片可以提升從輸入內容生成哈希值的速度。在比特幣挖礦場景中,這意味着每秒可完成更多哈希計算,從而提升獲得挖礦獎勵的概率。
SHA是安全的嗎?
SHA-1(安全哈希算法1)誕生於1995年,自2005年起就已被證實存在漏洞存在理論攻擊風險。美國國家標準與技術研究院自2010年起禁止美國聯邦機構使用SHA-1,數碼證書頒發機構(CA)則自2016年1月1日起不得簽發採用SHA-1簽名的證書,不過存在部分豁免情形。
儘管各方已採取措施在部分領域逐步淘汰SHA-1的使用,該演算法仍在多個場景中被廣泛使用,包括以下場景的校驗:
- 信用卡交易
- 電子文檔
- 電郵PGP/GPG簽名
- 開源軟件倉庫
- 備份檔案
- 軟件更新
這些豁免場景帶來了更高的暴露風險,因此業界施加了很大壓力,推動相關場景最終遷移至安全性更高的標準。包括Google Chrome在內的多款瀏覽器已開始向訪問者提示所有採用SHA-1簽名的證書為不安全證書。
從定義層面來看,SHA系列演算法是安全的,但隨着新版本迭代推出,各版本對應的安全等級也在逐步提升。如前所述,SHA-0的已知漏洞多於SHA-1,而SHA-1的已知漏洞又多於SHA-2。隨着敏感數據攻防雙方的對抗持續升級,這一趨勢未來仍將延續。
我應該使用哪種SHA演算法?
為了保障用戶的數據加密安全,您應始終選擇最適配當前項目的SHA演算法。目前最常用的是SHA-2系列演算法,但其他SHA版本也有各自適用的場景。並非所有SHA證書都能兼容每一類伺服器,因此除了解自身業務場景的需求,掌握所用設備的兼容情況,對搭建安全環境至關重要。
常見伺服器兼容SHA-2數碼證書所需的產品版本如下:
- Apache Server:2.0.63及以上版本
- IBM HTTP Server:8.5(隨Domino 9捆綁提供)
- Java 架構產品:Java 1.4.2 或以上版本
- Mozilla:採用 NSS 的產品 3.8 或以上版本
- Oracle WebLogic:10.3.1+
如前文所述,SHA-256 是目前應用最廣泛的 SHA 算法。不過隨着電腦處理能力提升,SHA-256 將會日漸容易受到攻擊,情況與其前代算法類似。緊貼安全哈希算法(Secure Hash Algorithms)的最新發展,是妥善加密數據、避免暴露風險的最佳做法。
既然您已對 SHA 加密有更深入的認識,歡迎立即聯絡我們,進一步了解我們的產品如何為您的網站提供防護,協助抵禦安全威脅。