目录
基于 GPU 的 AES 并行算法实现 1
1 引 言 2
GPU(Graphics Processing Unit,图形处理器),是最近发展起来的具有并行计算性能的单片多核处理器。设计之初, 它是用做图像和图形相关运算工作的微处理器,采用单指令多线程(Sin- gle Instruction Multiple Threads)的体系结构,可实现密集的并行计算,满足 AES 高强度的加解密需求。NVIDIA 公司提出了统一计算设备架构CUDA(Compute Unified Device Architecture) ,是一种通用并行计算平台和编程模型,为编程人员提供了使用 GPU 进行异构编程的通用编程接口,降低了 GPU 的使用门槛,极大地方便了计算机从业者使用 GPU 来实现高性能的计算。 2
2 AES 算法实现 2
由于篇幅问题,不展示状态矩阵变换操作函数具体的实现代码,可以在源代码目录下找到对应的源文件。 4
解密过程如下所示: 4
2.2.2 不同模式的加解密函数 4
输入参数 buf 为所需要加密的明文,length 指明明文长度。 4
此外,还需定义密钥结构体 AES_ctx,用于保存轮密钥和初始化向量,并定义实现密钥拓展的函数 KeyExpansion,如下所示: 4
在解密时,ECB 模式对每个密文分组分别进行解密,CBC 模式从最后一个密文分组链式向前 4
3 AES 算法并行化 5
3.1 可并行性分析 5
3.2 并行程序设计 5
ECB 加密模式的 Kernel 函数如下: 6
在主机端 CTR 模式加密过程中,每个明文分组使用 IV 加密完毕后使 IV 递增 1,以供下一个明文分组的加密使用,在 CTR 模式的 Kernel 函数中,CUDA 线程根据当前分组在所有分组中的序号,加上加密过程初始时刻的 IV,构成当前分组加密所需的 IV,从而进行分组加密。 6
4 结果和性能分析 6
首先对串行版本 AES 算法的 ECB、CBC、CTR 模式做常规正确性检验,调用上述实现函数对 64 字节(4 个分组)的明文/密文进行加解密,对比程序运行结果和标准结果,若完全一致则说明实现的加/解密程序通过正确性检验。 6
在 CUDA 编程中,由主机端调用,GPU 执行的函数需加上 关键字。此外,前面实现的单个分组的加解密函数默认只能由主机调用,若要 使 GPU 也能调用,需加上 6
4.1 实验环境 6
1. 硬件设备 6
2. 软件平台 7
4.2 正确性检验 7
以上函数的具体实现见源代码,对 64 字节(4 个分组)的明文/密文进行加解密,逐字节的比较 程序运行结果和标准结果,以此来检验结果的正确性。 7
4.3 性能分析 7
时,并行程序的计算时间比串行程序要长,几乎没 7
5 结 语 8
参考文献 8
基于 GPU 的 AES 并行算法实现
【摘 要】 密码学中的高级加密标准(Advanced Encryption Standard,AES),是美国联邦政府采用的一种区块加密标准,此标准用来替代原先的 DES(Data Encryption Standard),已经被多方分析且广为全世界所使用。AES 算法中一般的加密通常都是块加密,独立的块加密不能隐藏明文的模式,为解决此问题需要采用链加密模式,本文对对称加密和分组加密中的ECB、CBC、CTR 模式进行分析并实现。在大数据时代背景下,很多应用服务器面临着执行大量计算稠密的加密挑战,笔者结合专业所学的高性能计算领域的知识,对 AES 的加解密模式进行可并行性分析,使用 GPU 异构编程并行化 ECB、CTR 模式的加解密程序,实现了高性能的 AES 加解密算法。经性能分析,并行程序相对于普通串行程序有着极高的计算性能提升, 同时利用线程计数器避免了一般并行算法使明文结构暴露的问题。
【关键词】 AES,高级加密标准,链加密模式,并行计算,GPU,CUDA,异构编程