AES 之Sub_Bytes&Mix_Columns(二)
本文最后更新于:2024年5月26日 晚上
Inv_Sub_Bytes(逆字节代换):
Inv_Sub_Bytes是AES算法中的一个步骤,它是Sub_Bytes的逆过程,用于解密过程中对数据进行逆变换。在AES算法中,Inv_Sub_Bytes操作对状态的每个字节使用逆S-Box的进行替换。
AES的S-Box是一个16x16的查找表,用于在加密过程中将每个字节映射到另一个字节。Inv_Sub_Bytes使用的是S-Box的逆查找表,即Inv_S盒,用于在解密过程中将每个字节映射回原始字节。
Inv_S盒:
1 |
|
步骤
Inv_Sub_Bytes操作的步骤如下:
- 对于状态的每个字节,将其作为Inv_S-Box的行索引和列索引。
- 使用Inv_S-Box查找对应的逆字节值。
- 用找到的逆字节值替换原状态中的字节。
代码实现:
1 |
|
这个操作对于确保AES算法的对称性和安全性至关重要,因为它确保了加密和解密过程是可逆的。
Inv_Mix_Columns(逆列混合):
Inv_Mix_Columns是AES(高级加密标准)算法中的另一个步骤,它是Mix_Columns的逆过程,用于解密过程中对数据进行逆变换。在AES算法中,Inv_Mix_Columns操作对状态的每个列进行逆变换,以恢复原始数据。
AES的Mix_Columns操作在加密过程中对每个列进行线性变换,而Inv_Mix_Columns则是在解密过程中进行逆变换。这个操作涉及到矩阵乘法,使用了一个固定的逆矩阵来对列进行变换。
步骤
Inv_Mix_Columns操作的步骤如下:
对于状态的每个列,将其视为一个4元素的向量。
使用固定的逆矩阵对每个列向量进行矩阵乘法。在AES中,这个逆矩阵是:
1
2
3
4
5
6Inverse_column_matrix = [
[0x0e, 0x0b, 0x0d, 0x09],
[0x09, 0x0e, 0x0b, 0x0d],
[0x0d, 0x09, 0x0e, 0x0b],
[0x0b, 0x0d, 0x09, 0x0e]
]其中,数字是十六进制表示的。这个矩阵与Mix_Columns操作中使用的矩阵互为逆矩阵。
将矩阵乘法的结果模上多项式( x^4 + 1 )(在GF(2^8)域中),以得到一个新的列向量。
用新的列向量替换原状态中的列。
这个操作确保了AES算法的扩散性,即使得明文和密文之间的相关性降低,从而提高了算法的安全性。在解密过程中,Inv_Mix_Columns操作与加密过程中的Mix_Columns操作相互抵消,从而恢复出原始明文。
1 |
|