对称加密算法 - Rijndael

Rijndael是AES/高级加密标准的其中一种实现,在安全、性能和效率上折中的加密方案。

AES-256加密

高级加密标准/AES是当今最常用和最安全的加密算法之一。

Rijndael

故事始于1997年,当时NIST(国家标准与技术研究院)开始寻找老化加密标准DES的继任者。

由比利时密码学家Daemen和Rijmen开发的“Rijndael”算法在安全性,性能和灵活性方面表现出色。

2001年正式宣布新的加密标准AES,该算法基于替换、置换和线性变换,每个都在16字节数据块上执行 - 称为块密码。

这些操作会重复好几轮。每轮期间,从加密密钥计算出唯一循环密钥,并合并到计算中。

基于AES块结构在密钥或明文块中,单个位的变化会导致完全不同的密文块 - 这是传统流密码最显著优势。

AES-128、AES-192和AES-256的区别是密钥长度:128、192或256位 - 与DES的56位密钥相比,有明显改进。

举例说明:

使用最先进的超级计算机破解128位AES密钥所需时间,比假定的宇宙年龄更长。

时至今日没有针对AES的实际攻击。AES仍然是全球政府、银行、高安全系统的首选加密标准。

Rijndael将明文分成多个等长的模块(128位),使用对称加密,对每组数据执行加密。

分组加密是非常重要的加密协议,从电子邮件到银行交易都有涉及。

所谓对称即加密和解密使用同一个密钥,也称单密钥加密。

AES在众多加密算法中是在整体安全性、性能和效率上折中的选择。

Rijndael算法支持不同大小的密钥和数据块。密钥大小和块大小可以是128、192或256位。

意味着128位密钥大约有3.4 x 1038个可能,192位密钥有6.2 x 1057个可能,256位密钥有1.1 x 1077个可能。

Rijndael加密算法

Rijndael加密过程分为四步由多轮运算构成:

1. 密钥扩展(KeyExpansion)。

2. 初始轮(Initial Round)。

3. 重复轮(Rounds),密钥/块为128位时为9轮,192位则为11轮,256位则为13轮。

每一轮包括:SubBytes、ShiftRows、MixColumns、AddRoundKey。

4. 最终轮(Final Round)。

最终轮没有MixColumns。

重复轮步骤

SubBytes:

对128位的数据块,进行替换操作(从一个由256个值构成的码表中,根据字节所在的索引位置对应)。

ShiftRows:

循环移位,以4个字节为一组,平移数据(每组平移字节数各不相同)。

MixColumns:

执行列转换矩阵运算。

AddRoundKey:

每列与密钥进行异或运算(XOR)。

Rijndael结构体现高度的模块化设计,应对攻击变化的能力,比过去的设计优雅很多。

Java AES示例