
- 密碼學教程
- 密碼學 - 首頁
- 密碼學 - 起源
- 密碼學 - 歷史
- 密碼學 - 原理
- 密碼學 - 應用
- 密碼學 - 優缺點
- 密碼學 - 現代
- 密碼學 - 傳統密碼
- 密碼學 - 加密的需求
- 密碼學 - 雙重強度加密
- 密碼系統
- 密碼系統
- 密碼系統 - 組成部分
- 密碼系統攻擊
- 密碼系統 - 彩虹表攻擊
- 密碼系統 - 字典攻擊
- 密碼系統 - 暴力破解攻擊
- 密碼系統 - 密碼分析技術
- 密碼學型別
- 密碼系統 - 型別
- 公鑰加密
- 現代對稱金鑰加密
- 密碼學雜湊函式
- 金鑰管理
- 密碼系統 - 金鑰生成
- 密碼系統 - 金鑰儲存
- 密碼系統 - 金鑰分發
- 密碼系統 - 金鑰撤銷
- 分組密碼
- 密碼系統 - 流密碼
- 密碼學 - 分組密碼
- 密碼學 - Feistel 分組密碼
- 分組密碼操作模式
- 分組密碼操作模式
- 電子密碼本 (ECB) 模式
- 密碼分組連結 (CBC) 模式
- 密碼反饋 (CFB) 模式
- 輸出反饋 (OFB) 模式
- 計數器 (CTR) 模式
- 經典密碼
- 密碼學 - 反向密碼
- 密碼學 - 凱撒密碼
- 密碼學 - ROT13 演算法
- 密碼學 - 換位密碼
- 密碼學 - 加密換位密碼
- 密碼學 - 解密換位密碼
- 密碼學 - 乘法密碼
- 密碼學 - 仿射密碼
- 密碼學 - 簡單替換密碼
- 密碼學 - 簡單替換密碼加密
- 密碼學 - 簡單替換密碼解密
- 密碼學 - 維吉尼亞密碼
- 密碼學 - 維吉尼亞密碼的實現
- 現代密碼
- Base64 編碼和解碼
- 密碼學 - XOR 加密
- 替換技術
- 密碼學 - 單表替換密碼
- 密碼學 - 單表替換密碼破解
- 密碼學 - 多表替換密碼
- 密碼學 - Playfair 密碼
- 密碼學 - 希爾密碼
- 多表替換密碼
- 密碼學 - 一次一密密碼
- 一次一密密碼的實現
- 密碼學 - 換位技術
- 密碼學 - 柵欄密碼
- 密碼學 - 列移位密碼
- 密碼學 - 隱寫術
- 對稱演算法
- 密碼學 - 資料加密
- 密碼學 - 加密演算法
- 密碼學 - 資料加密標準
- 密碼學 - 三重DES
- 密碼學 - 雙重DES
- 高階加密標準
- 密碼學 - AES 結構
- 密碼學 - AES 變換函式
- 密碼學 - 位元組替換變換
- 密碼學 - 行移位變換
- 密碼學 - 列混合變換
- 密碼學 - 輪金鑰加變換
- 密碼學 - AES 金鑰擴充套件演算法
- 密碼學 - Blowfish 演算法
- 密碼學 - SHA 演算法
- 密碼學 - RC4 演算法
- 密碼學 - Camellia 加密演算法
- 密碼學 - ChaCha20 加密演算法
- 密碼學 - CAST5 加密演算法
- 密碼學 - SEED 加密演算法
- 密碼學 - SM4 加密演算法
- IDEA - 國際資料加密演算法
- 公鑰(非對稱)密碼演算法
- 密碼學 - RSA 演算法
- 密碼學 - RSA 加密
- 密碼學 - RSA 解密
- 密碼學 - 建立 RSA 金鑰
- 密碼學 - RSA 密碼破解
- 密碼學 - ECDSA 演算法
- 密碼學 - DSA 演算法
- 密碼學 - Diffie-Hellman 演算法
- 密碼學中的資料完整性
- 密碼學中的資料完整性
- 訊息認證
- 密碼學數字簽名
- 公鑰基礎設施
- 雜湊
- MD5(訊息摘要演算法 5)
- SHA-1(安全雜湊演算法 1)
- SHA-256(安全雜湊演算法 256 位)
- SHA-512(安全雜湊演算法 512 位)
- SHA-3(安全雜湊演算法 3)
- 雜湊密碼
- Bcrypt 雜湊模組
- 現代密碼學
- 量子密碼學
- 後量子密碼學
- 密碼協議
- 密碼學 - SSL/TLS 協議
- 密碼學 - SSH 協議
- 密碼學 - IPsec 協議
- 密碼學 - PGP 協議
- 影像和檔案加密
- 密碼學 - 影像
- 密碼學 - 檔案
- 隱寫術 - 影像
- 檔案加密和解密
- 密碼學 - 檔案加密
- 密碼學 - 檔案解密
- 物聯網中的密碼學
- 物聯網安全挑戰、威脅和攻擊
- 物聯網安全加密技術
- 物聯網裝置通訊協議
- 常用密碼技術
- 自定義構建密碼演算法(混合密碼)
- 雲密碼學
- 量子密碼學
- 密碼學中的影像隱寫術
- DNA 密碼學
- 密碼學中的一次性密碼 (OTP) 演算法
- 區別
- 密碼學 - MD5 與 SHA1
- 密碼學 - RSA 與 DSA
- 密碼學 - RSA 與 Diffie-Hellman
- 密碼學與密碼學
- 密碼學 - 密碼學與密碼分析
- 密碼學 - 經典與量子
- 密碼學與隱寫術
- 密碼學與加密
- 密碼學與網路安全
- 密碼學 - 流密碼與分組密碼
- 密碼學 - AES 與 DES 密碼
- 密碼學 - 對稱與非對稱
- 密碼學有用資源
- 密碼學 - 快速指南
- 密碼學 - 討論
密碼學 - SM4 加密演算法
SM4 方法是第一個商業化的分組密碼演算法,由中國於 2006 年以 SMS4 的名稱釋出。SM4 方法用於中國無線區域網 WAPI(有線認證和隱私基礎設施)的國家標準。WAPI 成為中國的強制性國家標準。
從安全性和通訊效能的角度來看,WAPI 是通訊基礎設施的絕佳解決方案。本工作在乙太網加密系統中使用 SM4 演算法。
SM4 的結構
SM4 演算法表示標準的 Feistel 結構。SM4 演算法的輸入、輸出和金鑰均為 128 位。它們被分成四個部分,每個部分有 32 位,稱為字。SM4 演算法包含 32 輪相同的輪函式。加密和解密的結構相同。唯一執行的操作是異或、迴圈移位和 S 盒應用。用於解密的金鑰與用於加密的金鑰相同,但順序相反。
SM4 方法易於在軟體和硬體中實現。它還具有廣泛的應用。
一個新的使用 SM4 作為基本演算法的 f8 金鑰流生成器可以安全地用於 3G 通訊系統。SM4 演算法在 MicroBlaze 軟核的嵌入式處理器中以硬體和軟體的方式共同設計,以便在設計加密通訊裝置時提供靈活性。SMS4 演算法還在 Java 卡上進行了設計和實現。

金鑰和金鑰引數
加密金鑰長度為 128 位,表示為 MK=(MK0, MK1, MK2, MK3),其中 MKi(i=0, 1, 2, 3)} 是一個 32 位字。輪金鑰表示為 (rk0, rk1,...., rk31),其中每個 rki (i=0,..., 31)} 表示一個字。它是使用加密金鑰和以下引數生成的:
- FK=(FK0, FK1, FK2, FK3)
- CK=(CK0, CK1,..., CK31)
FKi 和 CKi 是用於生成輪金鑰的字。
輪函式
每個輪函式都基於前四個輪輸出計算。Xi,Xi+1,Xi+2,Xi+3 使得:
Xi+4 = Xi⊕ F(Xi+1oplus Xi + 2⊕ Xi + 3⊕ rki),其中 F 是一個由非線性變換、S 盒和線性變換 L 組成的替換函式。
S 盒
S 盒對於 8 位輸入和輸出是固定的,表示為 Sbox()。與 AES 一樣,S 盒使用 GF(28) 上的乘法逆元。仿射變換和多項式基與 AES 不同,但是由於仿射同構,它們可以使用 AES Rijndael S 盒快速計算。
它是如何工作的?
SM4 演算法對資料進行混淆,使其在沒有特殊金鑰的情況下無法理解。它使用 128 位塊進行操作,用於混淆和解混淆資料的金鑰也是 128 位。這些塊和金鑰被分成四個部分,每個部分有 32 位。
該方法透過在 32 個迴圈中混合和修改位來混淆資訊。這個過程對於混淆和解混淆都是相同的,但是解混淆的階段順序不同。
該方法只執行三件事:使用 XOR(類似於數字“或”運算)組合位、迴圈移位位以及使用稱為 S 盒的特定函式。
以下是一些關鍵術語:
- 字和位元組 - 它們只是用於描述位簇的術語。
- S 盒 - 它類似於秘密程式碼,將一組位轉換為另一組位。
- 基本操作 - 這些是演算法的核心函式,例如組合和移動位。
混淆金鑰或 MK 由四個部分組成。另一種型別的金鑰,稱為輪金鑰,由 MK 生成並在整個混淆過程中使用。這些金鑰有助於混合位。
輪函式是演算法的主要組成部分。它一次混淆 32 位,在每一輪中都使用金鑰。
混淆資訊後,我們可以反轉該過程以對其進行解混淆。
以下是其工作原理的簡要說明:
- 我們從明文(我們要保護的資訊)開始。
- 我們將其分成 128 位的塊。
- 我們使用金鑰和幾種其他方法對每個塊進行 32 次混淆。
- 我們得到混淆後的文字作為輸出。
- 要讀取文字,我們使用相同的步驟,但順序相反。
示例
假設我們有一個簡單的訊息,我們想用 SM4 方法對其進行加密。訊息是“HELLO”,金鑰是“KEY1234567890123”。以下是使用 SM4 加密它的方法。
將訊息和金鑰轉換為二進位制:
HELLO 變為
字母 | 二進位制 |
---|---|
H | 01001000 |
E | 01000101 |
L | 01001100 |
L | 01001100 |
L | 01001111 |
O
字母 | 二進位制 |
---|---|
KEY1234567890123 變為 | 01001011 |
E | 01000101 |
K | 01011001 |
1 | 00110001 |
2 | 00110010 |
3 | 00110011 |
4 | 00110100 |
5 | 00110101 |
6 | 00110110 |
7 | 00110111 |
8 | 00111000 |
9 | 00111001 |
0 | 00110000 |
1 | 00110001 |
2 | 00110010 |
3 | 00110011 |
Y
將訊息和金鑰分成塊:
訊息塊(128 位):
塊 1:01001000 01000101 01001100
塊 2:01001111(用零填充以生成 128 位)
- 每個金鑰塊包含 128 位。
- 塊 1:01001011 01000101 01011001 00110001。
- 塊 2:00110010 00110011 00110100 00110101。
- 塊 3:00110110 00110111 00111000 00111001。
塊 4:00110000 00110001, 00110010, 00110011。
加密每個塊 - 使用從金鑰塊接收的輪金鑰對每個訊息塊應用加密過程。
組合加密塊 - 組合加密塊以形成最終的加密訊息。