- 密碼學教程
- 密碼學 - 首頁
- 密碼學 - 起源
- 密碼學 - 歷史
- 密碼學 - 原理
- 密碼學 - 應用
- 密碼學 - 優點與缺點
- 密碼學 - 現代密碼學
- 密碼學 - 傳統密碼
- 密碼學 - 加密的需求
- 密碼學 - 雙重強度加密
- 密碼系統
- 密碼系統
- 密碼系統 - 組成部分
- 密碼系統的攻擊
- 密碼系統 - 彩虹表攻擊
- 密碼系統 - 字典攻擊
- 密碼系統 - 暴力攻擊
- 密碼系統 - 密碼分析技術
- 密碼學的型別
- 密碼系統 - 型別
- 公鑰加密
- 現代對稱金鑰加密
- 密碼學雜湊函式
- 金鑰管理
- 密碼系統 - 金鑰生成
- 密碼系統 - 金鑰儲存
- 密碼系統 - 金鑰分發
- 密碼系統 - 金鑰撤銷
- 分組密碼
- 密碼系統 - 流密碼
- 密碼學 - 分組密碼
- 密碼學 - Feistel分組密碼
- 分組密碼的工作模式
- 分組密碼的工作模式
- 電子密碼本 (ECB) 模式
- 密碼分組連結 (CBC) 模式
- 密碼反饋 (CFB) 模式
- 輸出反饋 (OFB) 模式
- 計數器 (CTR) 模式
- 古典密碼
- 密碼學 - 反向密碼
- 密碼學 - 凱撒密碼
- 密碼學 - ROT13 演算法
- 密碼學 - 置換密碼
- 密碼學 - 加密置換密碼
- 密碼學 - 解密置換密碼
- 密碼學 - 乘法密碼
- 密碼學 - 仿射密碼
- 密碼學 - 簡單替換密碼
- 密碼學 - 簡單替換密碼的加密
- 密碼學 - 簡單替換密碼的解密
- 密碼學 - 維吉尼亞密碼
- 密碼學 - 維吉尼亞密碼的實現
- 現代密碼
- Base64 編碼和解碼
- 密碼學 - XOR 加密
- 替換技術
- 密碼學 - 單表替換密碼
- 密碼學 - 單表替換密碼的破解
- 密碼學 - 多表替換密碼
- 密碼學 - Playfair 密碼
- 密碼學 - Hill 密碼
- 多表替換密碼
- 密碼學 - 一次性密碼本密碼
- 一次性密碼本密碼的實現
- 密碼學 - 置換技術
- 密碼學 - 柵欄密碼
- 密碼學 - 列置換密碼
- 密碼學 -隱寫術
- 對稱演算法
- 密碼學 - 資料加密
- 密碼學 - 加密演算法
- 密碼學 - 資料加密標準 (DES)
- 密碼學 - 三重 DES
- 密碼學 - 雙重 DES
- 高階加密標準 (AES)
- 密碼學 - AES 結構
- 密碼學 - AES 變換函式
- 密碼學 - 位元組替換變換
- 密碼學 - 移行變換
- 密碼學 - 列混淆變換
- 密碼學 - 輪金鑰加變換
- 密碼學 - AES 金鑰擴充套件演算法
- 密碼學 - Blowfish 演算法
- 密碼學 - SHA 演算法
- 密碼學 - RC4 演算法
- 密碼學 - Camellia 加密演算法
- 密碼學 - ChaCha20 加密演算法
- 密碼學 - CAST5 加密演算法
- 密碼學 - SEED 加密演算法
- 密碼學 - SM4 加密演算法
- IDEA - 國際資料加密演算法
- 公鑰(非對稱)密碼演算法
- 密碼學 - RSA 演算法
- 密碼學 - RSA 加密
- 密碼學 - RSA 解密
- 密碼學 - 建立 RSA 金鑰
- 密碼學 - 破解 RSA 密碼
- 密碼學 - ECDSA 演算法
- 密碼學 - DSA 演算法
- 密碼學 - Diffie-Hellman 演算法
- 密碼學中的資料完整性
- 密碼學中的資料完整性
- 訊息認證
- 密碼學數字簽名
- 公鑰基礎設施 (PKI)
- 雜湊演算法
- 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 的比較
- 密碼學與密碼學的比較
- 密碼學 - 密碼學 vs 密碼分析
- 密碼學 - 古典密碼學與量子密碼學的比較
- 密碼學與隱寫術的比較
- 密碼學與加密的比較
- 密碼學與網路安全的比較
- 密碼學 - 流密碼與分組密碼的比較
- 密碼學 - AES 與 DES 密碼的比較
- 密碼學 - 對稱加密與非對稱加密的比較
- 密碼學有用資源
- 密碼學 - 快速指南
- 密碼學 - 討論
密碼學 - 移行變換
AES 中對稱加密方法的一個線性單元是移行變換。它是一種轉置運算,其中狀態的行被多次重複移動。此函式的目的是透過隨機排列每個 128 位塊中的位來提供跨多個輪次的位擴散。
由於這種變換,狀態行按如下方式移動:第一行保持不變,第二行向左移動一個位元組,第三行向左移動兩個位元組,最後一行向左移動三個位元組。
沒有移行階段的 AES 比 AES 更強;它們在輪次中的值幾乎沒有變化。這歸因於較差的加密質量。
AES 演算法中最困難的部分是線性密碼分析和差分密碼分析,其中兩種方法的常用方法都可以用來解決 Rijndael。
根據對抵抗差分和線性密碼分析的抵抗力的分析,認為任意未知和金鑰相關的替換和置換變換是增強分組密碼抵抗差分和線性攻擊能力的一個良好因素,因為這些攻擊需要已知的變換。
它是如何工作的?
高階加密標準 (AES) 演算法的組成部分之一是移行變換。它是資料加密過程中的一個步驟。AES 狀態是位元組網格,在此階段,行被迴圈移動。讓我們簡化它 -
- 狀態矩陣 - 資料由 AES 演算法排列成狀態矩陣,這是一個位元組網格。通常,此矩陣中有四行四列。
- 移行步驟 - 在此階段,狀態矩陣中每一行的位元組都向左移動。第一行沒有移動。第二行向左移動了一個位置,第三行向左移動了兩個位置,第四行向左移動了三個位置。由於此移動是迴圈進行的,因此從一行一端移出的位元組將被放回另一端。
示例 - 讓我們使用以下狀態矩陣為例 -
0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F 0x10
移行階段之後,它變成 -
0x01 0x02 0x03 0x04 0x06 0x07 0x08 0x05 0x0B 0x0C 0x09 0x0A 0x10 0x0D 0x0E 0x0F
如您所見,每一行都向左移動了特定數量的位置。
- 目的 - 移行階段透過將擴散包含到加密過程中來增加識別資料中模式的難度。
使用 Python 實現
程式碼中定義的 shift_rows 函式用於在高階加密標準 (AES) 演算法的上下文中實現移行變換。shift_rows 函式以狀態矩陣作為輸入,執行移行變換,並輸出更改後的狀態矩陣。
示例
def shift_rows(state):
for i in range(1, 4):
state[i] = state[i][i:] + state[i][:i]
return state
# function execution
state_matrix = [
[0x01, 0x02, 0x03, 0x04],
[0x05, 0x06, 0x07, 0x08],
[0x09, 0x0A, 0x0B, 0x0C],
[0x0D, 0x0E, 0x0F, 0x10]
]
shifted_state = shift_rows(state_matrix)
for row in shifted_state:
print(' '.join(format(x, '02X') for x in row))
以下是上述示例的輸出 -
輸入/輸出
01 02 03 04 06 07 08 05 0B 0C 09 0A 10 0D 0E 0F
使用 Java 實現
這段 Java 程式碼展示瞭如何在 AES 加密演算法的上下文中應用移行變換,方法是更改狀態矩陣。它還提供了更改的有效實現。請參見下面的程式碼 -
示例
// AES Class for shiftrows transformation
public class AES {
public static byte[][] shiftRows(byte[][] state) {
for (int i = 1; i < 4; i++) {
byte[] temp = new byte[4];
for (int j = 0; j < 4; j++) {
temp[j] = state[i][(j - i + 4) % 4];
}
state[i] = temp;
}
return state;
}
// Main function
public static void main(String[] args) {
byte[][] stateMatrix = {
{0x01, 0x02, 0x03, 0x04},
{0x05, 0x06, 0x07, 0x08},
{0x09, 0x0A, 0x0B, 0x0C},
{0x0D, 0x0E, 0x0F, 0x10}
};
byte[][] shiftedState = shiftRows(stateMatrix);
for (byte[] row : shiftedState) {
for (byte b : row) {
System.out.print(String.format("%02X ", b));
}
System.out.println();
}
}
}
以下是上述示例的輸出 -
輸入/輸出
01 02 03 04 08 05 06 07 0B 0C 09 0A 0E 0F 10 0D
使用 C++ 實現
這段 C++ 程式碼演示了移行變換,這是 AES 加密過程中的一個重要階段。C++ 向量和 std::rotate 函式用於執行迴圈左移。以下是使用 C++ 的實現 -
示例
#include <iostream>
#include <vector>
#include <algorithm> // Include the algorithm header
std::vector<std::vector<int>> shiftRows(std::vector<std::vector<int>> state) {
for (int i = 1; i < 4; i++) {
std::rotate(state[i].begin(), state[i].begin() + i, state[i].end());
}
return state;
}
int main() {
std::vector<std::vector<int>> stateMatrix = {
{0x01, 0x02, 0x03, 0x04},
{0x05, 0x06, 0x07, 0x08},
{0x09, 0x0A, 0x0B, 0x0C},
{0x0D, 0x0E, 0x0F, 0x10}
};
auto shiftedState = shiftRows(stateMatrix);
for (const auto& row : shiftedState) {
for (int val : row) {
std::cout << std::hex << val << " ";
}
std::cout << std::endl;
}
return 0;
}
以下是上述示例的輸出 -
輸入/輸出
1 2 3 4 6 7 8 5 b c 9 a 10 d e f
總結
本章介紹了移行變換,這是稱為高階加密標準 (AES) 的對稱加密過程中的一個重要階段。AES 加密中的移行變換需要迴圈移動狀態矩陣的行。本章還包括使用 Python、Java 和 C++ 的移行變換的實現,演示瞭如何使用各種程式語言和方法在 AES 加密的上下文中應用它。