AES详解(一)

AES是经过多轮筛选后由NIST确立的高级数据加密标准,旨在取代DES。它以公开算法、强安全性、快速加解密和可扩展性为设计要求,适用于各种应用环境。AES的密钥和分组长度可变,且经过十多年的实际应用验证了其安全性。该标准已被广泛采用,并持续接受安全性考验。

一、背景

1.历史时间节点:

  • 1997年美国政府(NIST)向社会公开征集高级数据加密标准(AES);
    • 第一轮:1998年8月20日从应征的21个算法中选出15个算法。
    • 第二轮:1999年8月又选中其中5个算法。
    • 第三轮:2000年10月2日再选出1个算法。
  • 2001年11月26日NIST接受其作为标准。
  • 2001年12月4日正式公布为联邦标准:FIPS-

2.AES产生的背景

  1. 1984年12月里根总统下令由国家安全局(NSA)研制新密码标准,用来取代DES。

  2. 1991年新密码开始试用并且征求意见。

    1. 不公开算法,只提供芯片;
    2. 新密码设计成双刃剑,它是安全的,但是通过法律允许可以破译监听。
    3. 民众要求公开算法,并且去掉法律监督。
  3. 1994年颁布新密码标准(EES)。

  4. 1995年5月贝尔实验室的博士生M.Blaze在PC机上用45分钟攻击法律监督字段获得成功。

  5. 1995年七月美国政府放弃用EES加密标准。

  6. 1997年美国政府向社会公开征集AES。

  7. 从DES到AES,反映了美国商用密码政策的变化。

这说明

  • 商用密码应该坚持公开设计,公开算法的政策,这是商用密码的客观规律。
  • 群众的力量是伟大的。

3.AES的设计要求

  1. 安全性:可以抵抗目前所有已知的攻击;
  2. 实用性:适合各种应用环境,加解密速度快;
  3. 扩展性:分组长度和密钥长度可以扩展,可以适应社会对于保密性不断提高的需求。

4.整体特点

  1. 分组密码
    明文和明文长度128位,密钥长度可变(128/192/256等,现在选用128位)。

  2. 面向二进制的密码算法
    能够加解密任何形式的计算机数据。

  3. 不是对合运算。
    加解密使用不同的算法。

  4. 综合运用多种密码技术
    置换、选择、代数

  5. 整体结构
    S盒与P置换,基本轮函数迭代,迭代轮数可变(>=10)

5.应用

  1. 许多国际组织采用为标准
  2. 产品形式:各种软件和硬件形式
  3. 应用范围逐渐扩大

6.结论

  1. 十多年来的实际应用证明了AES是安全的。
  2. AES还要继续接收更加严峻的考验。
  3. 我们相信:经过全世界广泛分析的AES是不负众望的。
AES(高级加密标准)是种对称分组密码算法,广泛用于保护电子数据的安全性。其设计目标是高效、安全且易于实现,适用于多种硬件和软件环境。AES支持128、192和256位三种密钥长度,分别对应AES-128、AES-192和AES-256,加密数据块大小固定为128位(16字节)。 ### 加密原理 AES的加密过程由多个轮次(Rounds)组成,轮次的数量取决于密钥长度:AES-128使用10轮,AES-192使用12轮,AES-256使用14轮。每轮加密包括以下四个基本操作: 1. **SubBytes(字节替换)** 该步骤使用个称为S盒(Substitution Box)的非线性变换表对状态矩阵中的每个字节进行替换,以增加加密的非线性特性。S盒是基于有限域上的乘法逆元构造的,并经过仿射变换处理,以增强安全性。 2. **ShiftRows(行移位)** 该操作对状态矩阵的每行进行循环左移。第行不移动,第二行左移个字节,第三行左移两个字节,第四行左移三个字节。此操作增强了状态矩阵的扩散性。 3. **MixColumns(列混淆)** 该步骤对状态矩阵的每列进行线性变换,使用有限域GF(2⁸)上的矩阵乘法。每个列向量与固定多项式矩阵相乘,以确保每个字节的输出依赖于该列所有字节的输入,从而实现良好的扩散效果。 4. **AddRoundKey(轮密钥加)** 在此步骤中,当前状态与当前轮次的子密钥进行按位异或操作。子密钥通过密钥扩展算法从原始密钥生成。 初始轮仅执行AddRoundKey,最后轮省略MixColumns操作。 ### 密钥扩展 AES使用密钥扩展算法(Key Expansion)从原始密钥生成系列子密钥。该算法基于Rijndael密钥调度算法,利用循环移位、S盒替换和轮次常量(Rcon)生成后续的子密钥。 ### 解密过程 解密过程是加密的逆过程,依次执行Inverse ShiftRows、Inverse SubBytes、AddRoundKey和Inverse MixColumns操作,顺序与加密相反。 ### 实现示例(Python) 以下是个简化的AES-128加密实现(不包含完整S盒和密钥扩展逻辑): ```python def sub_bytes(state): # 使用S盒替换每个字节 s_box = [i for i in range(256)] # 示例S盒 return [[s_box[state[i][j]] for j in range(4)] for i in range(4)] def shift_rows(state): # 行移位操作 state[1] = state[1][1:] + state[1][:1] state[2] = state[2][2:] + state[2][:2] state[3] = state[3][3:] + state[3][:3] return state def mix_columns(state): # 列混淆操作(简化实现) return state def add_round_key(state, key_schedule, round): # 轮密钥加 round_key = key_schedule[round] for i in range(4): for j in range(4): state[i][j] ^= round_key[i][j] return state def aes_encrypt(plaintext, key_schedule): # 初始化状态矩阵 state = [[plaintext[i + 4*j] for j in range(4)] for i in range(4)] state = add_round_key(state, key_schedule, 0) # 执行多轮加密 for round in range(1, 10): state = sub_bytes(state) state = shift_rows(state) state = mix_columns(state) state = add_round_key(state, key_schedule, round) # 最后轮不执行MixColumns state = sub_bytes(state) state = shift_rows(state) state = add_round_key(state, key_schedule, 10) # 输出密文 ciphertext = bytes([state[i][j] for j in range(4) for i in range(4)]) return ciphertext ``` ### 总结 AES通过多轮SubBytes、ShiftRows、MixColumns和AddRoundKey操作,确保了加密过程的混淆和扩散特性,从而具备极高的安全性。其实现依赖于S盒、密钥扩展和有限域运算等核心组件。在实际应用中,AES广泛用于数据加密、安全通信和文件保护等领域。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旺旺的碎冰冰~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值