基于GPU实现的AES加密(二)

时间:2013-07-22

  3 AES 在GPU 上的实现

  了解了可编程GPU 流水线及AES 算背景后,就可以开始着手设计该算法。如图2,是AES 加密算法的流程。图中大方框内的内容就是GPU 代替CPU 实现的步骤。首先考虑输入问题。明文是应用程序的输入,这可以通过二维纹理的形式存入GPU 的纹理缓存,以供GPU 使用。其实每一个Round 就是渲染,每次渲染是由四个Pass 组成,这四个Pass 分别是SubBytes,ShiftRows,MixColumns,AddRoundKey.优化后将SubBytes 和ShiftRows 合并为一个Pass .

  3. 1 初始化阶段

  在初始化阶段,需要用CPU 来扩展密钥,生成十组新的密钥,用于每Round 中的AddRoundKey.

  然后需要将输入数据( 明文) InPutData [ Width]

  [Height][4],绑定到一张二维纹理。输入数据的大小是Width*Height*4 个字节。由于明文存储在二维纹理中,所以需要快速准确地用纹理坐标中找到对应的数据。通过如下的Draw 函数能实现该功能,纹理坐标= (顶点坐标+1. 0) /2.由于需要将每个Pass 的结果输出到纹理缓存,所以需要分别创建四张二维纹理及四个帧缓冲区,并一一绑定 .

  

  3. 2  SubBytes 操作

  SubBytes 操作使用一个非线性的称为S-box 的替换表,独立地代替字节,如图3 所示。S-box 是提前已计算好的一个统一的表,所以可以直接预先存储在GPU 内存中,在对应的Shader(SubBytes)中声明。

  

  3. 3 ShiftRows 操作

  ShiftRows 操作循环地移动体的三行,从而有效地让行数据变得不规则,如图4 所示。其实此时可以做一个简单的优化, 就是把SubBytes 操作和ShiftRows 操作融合到一个Pass 里 .

  

  3. 4 MixColumns 操作

  MixColumns 操作的目的是使每一列的数据变得不规则,如图5 所示。该操作通过对每一个列向量执行矩阵乘操作来完成,如公式(2)所示。因为乘法是在AES 的一个有限域上操作,所以不能使用一般的乘操作。

  

  这个有限域的闭包在一个字节的范围内。其程序清单如下:

  

  3. 5 AddRoundKey 操作

  这个操作是很简单的。就是用当前轮的密钥与体对应的每个字节进行异或操作。

  4 性能对比

  有了一个在基于GPU 的AES 实现,现在就可以测量一下该方法的性能。这里忽略了解密,因为在AES算法中,加密和解密的性能是相同的。性能对比如表1 所示。批块大小是指,每次被送往GPU 中的数据量。

  测试的机器配置如下:

  (1)CPU:Intel(R) XeOn(R) W3520 2. 67GHZ

  (2)内存:4GB

  (3)显卡: GTX 470 显存:1GB

  (4)系统:Windows7 x64 旗舰版

  

  5 结束语

  从表1 可知,当批块小于4MB 时,基于GPU 的AES 加密方法显着地提高了加密速度。当批块大小为4MB 时,加密速度大约是基于CPU 加密的40 倍。当批块过大时,由于纹理大小的限制加密速度显着降低。

  此时可以把明文分割为4MB 的批块,同时使用多张二维纹理进行加密。

上一篇:基于GPU实现的AES加密(一)
下一篇:一种应用于PD的高限流保护调节电路

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料