我正在尝试使用nVidia CUDA在CTR模式下实现AES-256。我已经成功编码了用于 key 扩展的CPU代码,现在我需要实现实际的AES-256算法。根据Wikipedia的介绍,我已经看过一些代码,尤其是this PDF(第9页),AES回合可以实现为一系列表查找。我的问题是如何生成这些表?我知道我需要4 KB来存储这些表,这不是问题。我花了整整一天的时间试图找到这些表,但没有成功。我张贴的PDF链接提到查找表T0,T1,T2和T3,但我不知道它们是什么。它还提到了圆键4、5、6和7,但是我也不明白这些索引指的是什么。
我最了解如何生成这些查找表的方法是this project。在代码内部,有一条注释,内容为:
Te0[x] = S [x].[02, 01, 01, 03];
Te1[x] = S [x].[03, 02, 01, 01];
Te2[x] = S [x].[01, 03, 02, 01];
Te3[x] = S [x].[01, 01, 03, 02];
但是,我不完全确定我知道该表示法的含义(是矩阵乘法还是其他?)。我唯一认识到的是混合列零件常数矩阵以及S-box矩阵。
[编辑]现在有人指出了-查找实现实际上如何会变慢?在这里没有查找表的情况下实现AES是否明智?
最佳答案
T表是矩阵形式的AES回合变换的简单描述。要构建它们,请参见原始的Rijndael NIST proposal,第5.2.1节。
关于c++ - 生成AES(AES-256)查找表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15094722/