在AES规范(FIPS 197)中,为什么InvCipher与Cipher不同?

时间:2015-07-09 20:53:04

标签: algorithm encryption cryptography aes specifications

在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页)等同于'直接撤消'这样它仍然可以工作,它如何比直接撤销更好?'解密方法?

1 个答案:

答案 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

一切都是以相同的顺序 - 它应该产生相同的结果。我不能说一种方式比另一种更好。 (好吧,除了你的以外更容易阅读。)