關於 SM4
SM4 是中國國家密碼管理局公佈的分組密碼演算法,塊大小 128 位,金鑰長度 128 位。SM4 被廣泛應用於國密標準生態,如 SM TLS/SSL、WAPI 無線區域網安全、電子政務與金融行業的合規加密等。
與 AES 的聯絡與區別
- 共同點:
- 都是 128 位分組密碼;支援常見模式(ECB/CBC 等)與標準填充(PKCS#5/7)。
- 在實現與使用方式上高度相似:需要金鑰(Key)、可選的初始化向量(IV)、選擇模式與填充後對明文分塊處理。
- 不同點:
- 標準與生態:AES 屬於國際標準(FIPS 197),全球通用;SM4 屬於中國國家密碼標準(GM/T 系列),用於滿足本地合規與監管要求。
- 金鑰長度:AES 支援 128/192/256 位;SM4 固定為 128 位。
- 效能與硬體支援:現代 CPU/GPU 對 AES 有更廣泛的硬體加速支援;SM4 的硬體加速支援正在逐步完善,視具體平臺而定。
- 合規性:在中國境內/面向中國業務場景,往往需要使用 SM4 以滿足“國密”合規;跨國/通用場景更常用 AES。
ECB 與 CBC 模式對比
| 專案 |
ECB |
CBC |
| 是否使用 IV |
否 |
是(16 位元組) |
| 錯誤傳播 |
無 |
有(塊級傳播) |
| 並行性 |
高(可並行) |
低(鏈式依賴) |
| 安全性 |
低(洩露資料結構) |
高(推薦) |
| 典型用途 |
隨機資料、測試 |
實際業務資料加密 |
- ECB:每個 16 位元組塊獨立加密,會洩露資料結構,不推薦用於結構化/重複性強的資料。
- CBC:使用隨機且不可複用的 16 位元組 IV,將相鄰塊連結,能有效掩蓋模式特徵,業務場景更安全可靠。
填充與對齊
- PKCS#5/PKCS#7:自動補齊至 16 位元組倍數,適用於絕大多數文本與二進位制資料。
- NoPadding:不做填充,明文/密文長度必須是 16 位元組的倍數;適用於已經對齊的資料或自定義協議。
使用建議
- 模式選擇:優先使用 CBC,避免 ECB 處理結構化資料。
- IV 管理:CBC 的 IV 必須是加密安全隨機數,且每次加密唯一且不可複用。
- 金鑰生成:使用安全隨機數生成 128 位金鑰;避免弱口令/可預測鍵值。
- 輸出格式:密文可用 HEX 或 Base64 表達;跨系統傳輸推薦 Base64。
- 合規考量:在中國境內或涉及國密合規的系統,優先使用 SM4;跨國或國際生態場景則以 AES 為主。