我正在尝试使用nVidia CUDA在CTR模式下实现AES-256。我已经成功编写了用于密钥扩展的CPU代码,现在我需要实现实际的AES-256算法。根据维基百科,我见过的一些代码,特别是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盒矩阵。
[编辑]现在有人指出了 - 查找实现如何实际上更慢?在没有查找表的情况下实施AES是明智的吗?
答案 0 :(得分:2)
T表是矩阵形式的AES轮转换的直接描述。要构建它们,请参阅原始Rijndael NIST proposal,第5.2.1节。
答案 1 :(得分:1)
如果有人仍然感兴趣,可以在Go编程语言的标准库中找到这些查找表 - http://golang.org/src/crypto/aes/const.go#L80
还有关于如何在同一个包的测试文件中生成表的说明。