在AES规范(FIPS 197)中,AES加密例程的伪代码(称为Cipher,第15页,图5)如下:
id_token
要解密,规范说您可以简单地撤消Cipher中的所有步骤,即以与加密中执行的方式相反的顺序应用逆操作。
如:
refresh_token
其中roundkey [x]是在该轮加密中使用的圆键。
但是,这与规范中反向密码的伪代码不匹配:
Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])
begin
byte state[4,Nb]
state = in
AddRoundKey(state, w[0, Nb-1])
for round = 1 step 1 to Nr–1
SubBytes(state)
ShiftRows(state)
MixColumns(state)
AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])
end for
SubBytes(state)
ShiftRows(state)
AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])
out = state
end
所以我的问题是,如何呈现的逆(图12.第21页)等同于'直接撤消'这样它仍然可以工作,它如何比直接撤销更好?'解密方法?
答案 0 :(得分:1)
没有进入Nr * Nb,(Nr + 1)* Nb-1等的细节,这两个序列对我来说是一样的。我们假设你只有两个圆环。以下是与规范序列并排的序列:
AddRoundKey AddRoundKey
invShiftRows
invSubBytes InvShiftRows
InvSubBytes
AddRoundKey AddRoundKey
invMixColumns InvMixColumns
invShiftRows
invSubBytes InvShiftRows
InvSubBytes
AddRoundKey AddRoundKey
invMixColumns InvMixColumns
invShiftRows
invSubBytes InvShiftRows
InvSubBytes
AddRoundKey AddRoundKey
一切都是以相同的顺序 - 它应该产生相同的结果。我不能说一种方式比另一种更好。 (好吧,除了你的以外更容易阅读。)