- 在线时间
- 490 小时
- 最后登录
- 2024-2-3
- 注册时间
- 2013-2-28
- 听众数
- 117
- 收听数
- 46
- 能力
- 268 分
- 体力
- 39235 点
- 威望
- 1340 点
- 阅读权限
- 255
- 积分
- 31237
- 相册
- 2
- 日志
- 0
- 记录
- 0
- 帖子
- 1388
- 主题
- 937
- 精华
- 0
- 分享
- 0
- 好友
- 111
升级   0% TA的每日心情 | 衰 2020-10-25 11:55 |
|---|
签到天数: 264 天 [LV.8]以坛为家I
- 自我介绍
- 内蒙古大学计算机学院
 群组: 2013年数学建模国赛备 |
AES每一个圈变换由以下三个层组成:+ d3 l7 m, P, \/ ?9 R* `' s+ Q9 }
非线性层——进行Subbyte变换;
2 u+ m2 l1 ~' L线行混合层——进行ShiftRow和MixColumn运算;
$ g9 Q0 s0 ~, N1 }1 v% c8 k密钥加层——进行AddRoundKey运算。
1 W; b" { I# {2 L: J- N) x! k① Subbyte变换是作用在状态中每个字节上的一种非线性字节转换,可以通过计算出来的S盒进行映射。
7 d9 J. K9 G% U- \* |" O② ShiftRow是一个字节换位。它将状态中的行按照不同的偏移量进行循环移位,而这个偏移量也是根据Nb的不同而选择的[3]。3 p. Q! Z3 Z: A& M0 @0 Y! q* l
③ 在MixColumn变换中,把状态中的每一列看作GF(28)上的多项式a(x)与固定多项式c(x)相乘的结果。 b(x)=c(x)*a(x)的系数这样计算:
- J: a, V$ G& ]+ Z. E. B! i1 k% y+ X# H0 G: N" i: u
*运算不是普通的乘法运算,而是特殊的运算,即 b(x)=c(x)·a(x)(mod x4+1) 对于这个运算 b0=02。a0+03。a1+a2+a3 令xtime(a0)=02。a0
: P! c$ p1 t( k# R5 s8 X$ ]( n. z; m2 A) g p
其中,符号“。”表示模一个八次不可约多项式的同余乘法[3]。
0 @7 C& l, ~, W. E+ t3 f' n: A
6 b, s+ V% ?7 }. i; h/ \
5 t) D2 k2 l# _+ z. L- N4 p" q$ t2 C% [, ~8 i6 h
对于逆变化,其矩阵C要改变成相应的D,即b(x)=d(x)*a(x)。
5 l8 v' ]: q& f* s4 E④ 密钥加层运算(addround)是将圈密钥状态中的对应字节按位“异或”。
: z+ |- X- U5 K" {& y. G- p⑤ 根据线性变化的性质[1],解密运算是加密变化的逆变化。这里不再详细叙述。
1 b1 i0 x3 E+ a/ g. q& O二、轮变化
9 C4 h6 g; a9 [0 P8 M& A" Z
( K4 o J Y; J7 S. L对不同的分组长度,其对应的轮变化次数是不同的,如表1所列。
: ?: i9 g& G8 d+ L6 A$ N, ~. R9 v3 H1 v* ^. h L l# n) R
1 C9 q7 P5 R- g. E7 o( f
" a0 x! D3 B- t; ?1 I
三、密钥扩展 ( a& v: k- Y+ L) q
" k9 W% s* |* a4 v
AES算法利用外部输入密钥K(密钥串的字数为Nk),通过密钥的扩展程序得到共计4(Nr+1)字的扩展密钥。它涉及如下三个模块:1 R. d* d: i2 c
+ ]) h6 a! @; N7 Z- ?
① 位置变换(rotword)——把一个4字节的序列[A,B,C,D]变化成[B,C,D,A];' q5 W, a6 \2 ~' ^4 S: w U
( Z9 _- H8 }* ], D: |% p1 Q0 Z② S盒变换(subword)——对一个4字节进行S盒代替;
( ]4 o+ ?- R, T1 V( { w# a
& P% I9 {) [$ I* L/ f③ 变换Rcon——Rcon表示32位比特字[xi-1,00,00,00]。
6 a% s. y* T8 r
! Q' i' c9 z! N8 m* x' G. B7 p这里的x是(02),如 Rcon[1]=[01000000];Rcon[2]=[02000000];Rcon[3]=[04000000]……
0 m5 h" j2 n% v' L1 r8 X2 B( X0 ]- h
扩展密钥的生成:扩展密钥的前Nk个字就是外部密钥K;以后的字W[[i]]等于它前一个字W[[i-1]]与前第Nk个字W[[i-Nk]]的“异或”,即W[[i]]=W[[i-1]]W[[i- Nk]]。但是若i为Nk的倍数,则W[i]=W[i-Nk]Subword(Rotword(W[[i-1]]))Rcon[i/Nk]。; L4 k2 ?- {+ E/ S# n. B- ~: c' ?
4 ^: t5 z4 o; _: P( |AES的加密与解密流程。
7 r c+ }6 f. _7 z5 ~$ J a$ a; M6 v9 Z+ Y+ T
|
|