我正在尝试使用nVidia CUDA在CTR模式下实现AES-256。我已经成功地编码了用于密钥扩展的CPU代码,现在我需要实现实际的AES-256算法。我的问题是如何生成这些表?我知道我需要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是明智的吗?
发布于 2013-03-22 05:00:21
T表是以矩阵形式对AES轮变换的直接描述。要构建它们,请参阅原始的Rijndael NIST proposal,第5.2.1节。
发布于 2015-07-11 16:18:38
如果任何人仍然感兴趣,可以在Go编程语言的标准库- http://golang.org/src/crypto/aes/const.go#L80中找到这些查找表
还有关于如何在同一个包的测试文件中生成表的说明。
https://stackoverflow.com/questions/15094722
复制相似问题