2017-02-18 5 views
2

私はAESにいくつかの仕事をしていると私は正確には、暗号化は10ラウンドで行われている場合など、復号9.主にこの1で行われ、擬似コードの多くを見てきた:なぜAES復号化ではAES暗号化よりもラウンドが少なくなるのですか?

http://people.eku.edu/styere/Encrypt/JS-AES.html

これは正常ですか?私は行方不明のものがありますか?それは実際に復号化の10ラウンドですが、私は間違ったコードを読んでいるのですか?

+0

おそらく[暗号化](http://crypto.stackexchange.com)で最もよく尋ねられるかもしれませんが、この部分はコーディングについてです。 – zaph

+0

Stack Overflowはプログラミングと開発に関する質問のサイトです。この質問は、プログラミングや開発に関するものではないので、話題にはならないようです。ヘルプセンターの[ここではどのトピックを参照できますか](http://stackoverflow.com/help/on-topic)を参照してください。おそらく、[暗号化スタックエクスチェンジ](http://crypto.stackexchange.com/)や[情報セキュリティスタックエクスチェンジ](http://security.stackexchange.com/)の方が良いかもしれません。 – jww

答えて

4

実際の質問は、これらのサイトが暗号のいくつかの厄介なJavaScriptバージョンを公開している理由です。

これはFIPS 197から公式NISTの擬似コードです:

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 

InvCipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)]) 
begin 
    byte state[4,Nb] 
    state = in 
    AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1]) 
    for round = Nr-1 step -1 downto 1 
     InvShiftRows(state) 
     InvSubBytes(state) 
     AddRoundKey(state, w[round*Nb, (round+1)*Nb-1]) 
     InvMixColumns(state) end for 
    InvShiftRows(state) 
    InvSubBytes(state) 
    AddRoundKey(state, w[0, Nb-1]) 
    out = state 
end 

、バン、なくなっては差があります。あなたが指摘したサイトは、暗号化ルーチンで間違いを犯しました。taking it up to 11

コードを検索する場合は、のテストベクトルは、オリジナルまたはオリジナルのドキュメントと仕様を使用してください。

+0

ありがとう!また、チップのおかげで! 擬似コードを正しいものにしたAESにいくつかの隠された細部があるかどうか心配していました。 もう一度おねがいします! –