手动推导计算AES中的s盒的输出

本文介绍了手动推导AES加密算法中S盒输出的过程,包括求多项式乘法逆和仿射变换。通过示例详细阐述了如何计算输入“02”“02”的S盒输出,验证了计算结果与S盒查表得到的“77”“77”一致,为理解AES的字节替换步骤提供了详细步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

手动推导计算AES中的s盒的输出

初衷

为了解决一道密码学课后作业:

在AES中,对于字节 “00” 和 “01” 计算S盒的输出。

百度查了很久,很多都是浅尝则之,没有具体说明S盒计算的具体过程和方法,要么就是说直接使用S盒求出,搞的我很崩溃,本身也是半吊子。后来在这篇文章的帮助下,顺利找到了解决方法。


很明显,如果通过查表的方式,很容易就可以得出 63 “ 63 ” 7C “ 7 C ” 这两个输出。但是这道题不能这么做,需要手动计算S盒的输出。

算法过程简介

AES加密算法涉及4种操作:

  • 字节替代(SubBytes)
  • 行移位(ShiftRows)
  • 列混淆(MixColumns)
  • 轮密钥加(AddRoundKey).

其中第一步字节替换,即SubBytes,它是作用在状态中每个字节上的一种非线性字节变换,这个变换(或称S_box
)按以下两步进行:
- 把字节的值用它的乘法逆来代替,其中 “00” 的逆就是它自己;
- 把经上一步处理后的字节值再进行如下定义的仿射变换:

仿射变换

因此第一步需要求多项式的乘法逆

又二进制多项式 b(x) b ( x ) 的乘法逆为满足

a(x)b(x)=1modm(x)(1) (1) a ( x ) b ( x ) = 1 m o d m ( x )

的二进制多项式 a(x) a ( x ) ,其中 a(x)=b1(x) a ( x ) = b − 1 ( x )

计算过程

1. 求乘法逆(Multiplicative Inverse)

在RJNDAEL中的不可约多项式为:

m(x)=x8+x4+x3+x+1(17) (17) m ( x ) = x 8 + x 4 + x 3 + x + 1

假设我们要求 a(x) a ( x ) 的逆,对 a(x) a ( x ) m(x) m ( x ) 使用扩展欧几里得算法可以得到形如
b(x)a(x)+s(x)m(x)=1(18) (18) b ( x ) ∗ a ( x ) + s ( x ) ∗ m ( x ) = 1

的等式,即等价于
b(x)a(x)=1(modm(x))(19) (19) b ( x ) ∗ a ( x ) = 1 ( m o d m ( x ) )

其中
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值