专用芯片技术中的基于专用芯片技术中的基于GPU实现的实现的AES加密(二)加密(二)
3 AES 在GPU 上的实现 了解了可编程GPU 流水线及AES 算背景后,就可以开始着手设计该算法。如图2,
是AES 加密算法的流程。图中大方框内的内容就是GPU 代替CPU 实现的步骤。首先考虑输入问题。明文是应
用程序的输入,这可以通过二维纹理的形式存入GPU 的纹理缓存,以供GPU 使用。其实每一个Round 就是一
次渲染,每次渲染是由四个Pass 组成,这四个Pass 分别是SubBytes,ShiftRows,MixColumns,AddRoundKey.优
化后将SubBytes 和ShiftRows 合并为一个Pass . 3. 1 初始化阶段 在初始化阶段,需
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)中声明。