【问题标题】:AES decryption AlgorithmAES解密算法
【发布时间】:2011-03-27 02:16:40
【问题描述】:

我要长话短说。我想实现自己的 AES 加密/解密程序已经有一段时间了。加密程序运行良好,加密时没有任何错误或奇怪的输出(因为我已经将我的程序的输出与工作的商业程序的输出进行了比较,结果是相同的)。

维基百科是(是)我在这个实现中的指南,我在其中读到“一组反向循环用于使用相同的加密密钥将密文转换回原始明文。”

我实现了几个模块:

  1. 添加圆键
  2. 换行
  3. 子字节
  4. 混合柱

我还实现了上述模块的几个反向实现:

  1. 反向移位行
  2. 反转子字节
  3. 反向混合柱

注意:我没有实现反向轮密钥,因为它是用加密密钥对明文进行 XOR,XOR 的反向是 XOR 本身(如果我错了,请纠正我)

因此,我将这些模块按与加密相反的顺序放置,但我从来没有得到我的纯文本:

expandkey128(key);
rev_subbytes(data);  
rev_shiftrows(data);
addroundkey(data,key,10);

for(int i = 9; i>= 1; i--) { 
    rev_subbytes(data); 
    rev_shiftrows(data);
    rev_mixColum(data);
    addroundkey(data,key,i);
}

addroundkey(data,key,0);

// Please note that I also did from 0 to 10 ,
// instead of 10 to 0 and didn't workout

我还想,也许我不应该实现模块的反向模型,也许我必须使用那些我加密的模块,只能以相反的顺序;你猜怎么着?没用! :

expandkey128(key);
addroundkey(data,key,0);

for(int i = 1; i<= 9; i++) {
    subbytes(data); 
    shiftrows(data);
    mixColum(data);
    addroundkey(data,key,i);
}

subbytes(data);
shiftrows(data);
addroundkey(data,key,10);

那么问题来了:出了什么问题? ||如果您愿意,应用这些所谓的模块或功能的正确顺序是什么?

【问题讨论】:

  • 您是否正确计算了您的 s-box,因为您不能使用与加密相同的一个。 en.wikipedia.org/wiki/S-box 维基百科的英文版中缺少此评论。直接看一下规范:csrc.nist.gov/publications/fips/fips197/fips-197.pdf你已经计算了逆 s-box 来解密。
  • 是的,实际上在 rev_subbytes 我有 Rijndael 的反向 S-box
  • 那里有一个很棒的工具:cryptool.de 你可以手动进行任何转换。也许您必须调试每个步骤,也许该工具会帮助您验证每个步骤。

标签: cryptography aes


【解决方案1】:

您的操作顺序似乎错误。我想你想要这个:

expandkey128(key);

addroundkey(data,key,10);
rev_shiftrows(data);
rev_subbytes(data); 

for(int i = 9; i>= 1; i--) { 
    addroundkey(data,key,i);
    rev_mixColumn(data);
    rev_shiftrows(data);
    rev_subbytes(data); 
}

addroundkey(data,key,0);

有关更多详细信息,请参阅my stick figure explanation of AES 及其随附的参考实现。

警告:正如 Act 3, Scene 2there be dragons 在编写您自己的 AES 实现以供生产使用时所述。

【讨论】:

  • 我也不会为 aes 使用自己的实现。不错的协议;)
  • 好吧,我不会在任何地方使用它,只是为了好玩!我试过你的订单,但没有用,我还检查了链接 (csrc.nist.gov/publications/fips/fips197/fips-197.pdf),说不同的订单
  • 它适用于我的机器和我的实现:)。如果您有时间,请下载我的 C# 实现并逐步完成它,并将每个步骤与您的实现进行比较。请注意,我给出的顺序实际上与图 12 相同。我只是更喜欢我给出的顺序,以表明它正在反转所有内容。我进行了几次试验,将我的输出与 Rijndael 书中的逐轮输出进行比较,以确保我做对了。您的反函数之一可能只是有一个小错误。作为下一步,我建议您慢慢完成每一轮。
  • 感谢 Jeff 错误出现在我的 Inverse sBox 实现中,并且您放置语句的顺序完全正确,再次受到重视
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
  • 2011-10-08
  • 2021-05-19
  • 1970-01-01
  • 2021-08-07
  • 2014-03-30
相关资源
最近更新 更多