生成AES (AES-256)查找表

Generating AES (AES-256) Lookup Tables

本文关键字:查找 AES-256 AES 生成      更新时间:2023-10-16

我正在尝试使用nVidia CUDA在CTR模式下实现AES-256。我已经成功地为密钥扩展编码了CPU代码,现在我需要实现实际的AES-256算法。根据维基百科,我看过的一些代码,特别是这个PDF(第9页),AES轮询可以实现为一系列的表查找。我的问题是如何生成这些表?我知道我需要4 KB来存储这些表,这不是问题。我花了一整天的时间找这些桌子,但没有找到。我发布的PDF链接提到查找表T0, T1, T2和T3,但我不知道这些是什么。它还提到了圆键4,5,6和7,但我也不明白这些索引指的是什么。

我最接近于弄清楚如何生成这些查找表是从这个项目。在代码内部,有一个注释说:

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盒矩阵。

[编辑]既然有人指出了这一点-查找实现如何实际上更慢?在这里实现没有查找表的AES是明智的吗?

T表是矩阵形式的AES轮询变换的直接描述。要构建它们,请参见Rijndael NIST的原始提案,第5.2.1节。

如果有人仍然感兴趣,可以在Go编程语言的标准库中找到这些查找表- http://golang.org/src/crypto/aes/const.go#L80

还有关于如何在同一包的测试文件中生成表的说明。