SHA-3(Secure Hash Algorithm 3)是美國國家標準與技術研究院(NIST)于 2015 年發布的新一代密碼哈希算法標準,其核心基于比利時密碼學家團隊設計的Keccak 算法。SHA-3 的誕生旨在應對 SHA-1 和 SHA-2 系列算法可能面臨的未來安全威脅(如量子計算攻擊),并引入了全新的海綿結構(Sponge Construction),顯著提升了安全性和靈活性。
1?算法基本特性
參數 | 說明 |
輸出長度 | 支持 224、256、384、512 位(對應 SHA3-224/SHA3-256/SHA3-384/SHA3-512) |
狀態大小 | 固定為 1600 位(5×5 的 64 位矩陣) |
比特率(r) | 不同輸出長度對應不同的消息塊大小:1152、1088、832、576 位 |
容量(c) | 安全冗余位:448、512、768、1024 位(c = 1600 - r) |
置換輪數 | 24 輪(每輪包含 5 個核心操作) |
抗攻擊特性 | 對長度擴展攻擊免疫,理論抗碰撞強度為 22??次運算(SHA3-512) |
并行能力 | 高度并行,適合硬件加速 |
2?核心設計原理:海綿結構
SHA-3 采用海綿結構替代傳統的 Merkle-Damg?rd 結構,其核心思想是通過 “吸收→置換→擠壓” 流程處理任意長度的輸入:
2.1 吸收階段(Absorbing)
- 將輸入消息分塊(每塊長度為 r),依次與狀態矩陣的前 r 位異或。
- 每異或一個消息塊后,應用Keccak-f 置換函數(24 輪復雜變換),將消息特征擴散到整個狀態矩陣。
2.2 擠壓階段(Squeezing)
- 從狀態矩陣的前 r 位提取輸出,生成所需長度的哈希值。
- 若輸出長度超過 r,重復應用 Keccak-f 置換并繼續提取,直至滿足需求。
2.3 與Merkle-Damg?rd 的區別
- 抗長度擴展攻擊:海綿結構通過容量 c 隔離消息塊間的關聯性,避免攻擊者通過追加數據偽造哈希值。
- 靈活性:可生成任意長度輸出(如 SHAKE128/SHAKE256 等擴展函數)。
3?詳細流程解析
3.1. 消息填充(Pad10*1 規則)
- 步驟 1:在消息末尾添加二進制串 “011”(0x06)。
- 步驟 2:補 0 直到總長度滿足?(原始長度 + 3 + k) ≡ 0 mod r。
- 步驟 3:將最后一個字節的最高位置 1(即添加 “1”)。
示例:若原始消息為 575 位(SHA3-512 的 r=576 位),填充后變為 577 位(575+3+0+1),需拆分為兩個塊(576+1 位,但實際填充會補 0 至 576 位,最后一位補 1)。
3.2 狀態初始化
- 狀態矩陣初始化為全 0 的 5×5×64 位立方體。
3.3 吸收階段
- 分塊處理:將填充后的消息按 r 位分塊,依次與狀態矩陣的前 r 位異或。
- Keccak-f 置換:每異或一個塊后,執行 24 輪置換,包括以下步驟:
- θ(Theta):列間異或與循環移位,實現線性擴散。
- ρ(Rho):對每個元素進行特定偏移量的循環右移。
- π(Pi):行內元素位置置換,增強混淆。
- χ(Chi):非線性變換(位級異或與取反),引入不可逆性。
- ι(Iota):添加輪常數,打破對稱性。
3.4 擠壓階段
- 從狀態矩陣的前 r 位提取輸出,若需要更多位,重復以下操作:
- 應用 Keccak-f 置換。
- 繼續提取 r 位,直至總長度達標。
4 Keccak-f 置換函數詳解
Keccak-f 是 SHA-3 的核心變換,每輪包含五個步驟:
4.1 θ 步驟(列擴散)
- 計算列異或:對每列 5 個元素求和,再與相鄰列異或。
- 循環移位:將結果循環右移 1 位,再次異或回原列。
4.2 ρ 步驟(元素旋轉)
每個元素按預設的偏移量(如第 (x,y) 元素旋轉 (x+1)(y+1) 位)進行循環右移。
4.3 π 步驟(行置換)
行內元素按固定置換表重新排列(如第 x 行的元素 y 移動到位置 (2x+3y) mod 5)。
4.4 χ 步驟(非線性變換)
對每行元素進行位級運算:
s[x][y] = s[x][y] ^ ((~s[x+1][y]) & s[x+2][y])
(其中 x+1、x+2 取模 5)
4.5 ι 步驟(輪常數注入)
與輪常數(RC [r])異或,RC [r] 由 LFSR 生成,每輪不同。
5 算法特點
安全性:
抗碰撞性:512 位輸出的理論抗碰撞強度為 22??次運算。
抗量子攻擊:海綿結構和復雜置換設計使其對 Grover 算法等量子攻擊具有更強抵抗力12。
靈活性:
支持任意輸出長度(如 SHAKE128 可生成 1KB 哈希值)。
兼容多種應用場景(哈希、消息認證碼、偽隨機數生成)。
高效性:
硬件實現簡單,支持并行計算,現代 CPU(如 Intel AVX2)可通過指令集優化加速。
6 應用場景
數據完整性校驗:
大型文件傳輸(如備份、分布式存儲)中校驗數據一致性。
密碼學協議:
TLS 1.3 協議中用于密鑰派生和消息認證1。
零知識證明、數字簽名等場景。
區塊鏈技術:
以太坊 2.0 采用 SHA3-256 生成賬戶地址和區塊哈希。
抗量子特性為未來區塊鏈安全提供保障12。
密碼存儲:
加鹽哈希存儲用戶密碼,防止彩虹表攻擊。
7?與 Keccak 的關系
SHA-3 是 Keccak 算法的標準化實例,但存在以下差異:
填充規則:SHA-3 使用 Pad10*1,而 Keccak 支持多種填充方式。
參數固定:SHA-3 的狀態大小固定為 1600 位,而 Keccak 允許自定義參數。
8?未來挑戰與應對
盡管 SHA-3 目前被認為是安全的,但其長期安全性仍需關注:
量子計算威脅:Grover 算法可將 SHA-3 的碰撞攻擊復雜度降低至√(2?12) = 22??次運算,與現有安全級別相當。
新型攻擊手段:需持續關注密碼分析進展,如差分攻擊、線性攻擊的變種。