摘要:近几年图形处理器GPU的通用计算能力发展迅速,现在已经发展成为具有巨大并行运算能力的多核处理器,而CUDA架构的推出突破了传统GPU开发方式的束缚,把GPU巨大的通用计算能力解放了出来。本文利用GPU来加速AES算法,即利用GPU作为CPU的协处理器,将AES算法在GPU上实现,以提高计算的吞吐量。最后在GPU和CPU平台上进行了实验,获得了GPU的加速结果,并对实验结果进行了优化。
关键词:图形处理器;统一计算架构;高级加密标准算法
0 引言
随着通信技术高速发展,信息安全也越来越重要。加密技术是对通信系统或者存储系统中的信息数据进行保护的一个很重要的方式。AES(高级加密标准)算法是一种分组密码算法,具有极高的安全性能,自提出之日起便成为信息安全领域研究的热点。由于该算法在实现方面具有设计简单,速度快,可并行处理,分组长度可以改变,对处理器结构无特殊要求等特点,在电子商务、网络安全和数据存储等多个领域得到了广泛的应用。然而,硬件实现需要较长的开发周期和很高的成本,并且硬件实现不灵活,不易后续的升级和维护,而且只适合做部分算法的实现,限制了应用领域和范围。近几年GPU(图形处理器)已经成为普及的电子消费品,在市场需求的驱动下,GPU已经发展成为具有巨大运算能力和极高内存带宽的并行多核处理器。近几年在某些信号处理任务中使用GPU的运算性能超过了FPGA。
传统的GPU开发具有很大的难度,而且由于无法充分利用GPU的资源,并且很多的开发精力是用在将应用转换到图形上,这就限制了GPU用作通用计算的应用范围,并且影响了GPU进行通用运算的性能。为了改变这一现状,NVIDIA公司在2006年年底推出了一种利用GPU进行通用计算开发的架构,称作统一计算设备架构,简称为CUDA。它对GPU的结构和资源进行了抽象表示,并且为GPU的资源提供了访问接口,这就使得开发者能够根据抽象的GPU结构进行通用计算应用的设计,并且可以充分利用到GPU中的资源。
1 AES算法分析
AES算法由NIST在2001年11月26日公布,并在2002年5月26日成为标准。AES算法具有分组长度和密钥长度均可变的分组密码。密钥长度和分组长度可以独立地指定为128bit、192bit或256bit。AES加密的圈数是一个变量,主要依赖于密钥长度,所有的运算都将在一个4×4字节的模块上进行。每圈包括4个顺序步骤:圈密钥加,字节代替,行移位,列混合。在加密以前,我们必须使用密钥扩展算法扩展密钥。
状态可以用字节为元素组成二维数组阵列,共4行,Nb列,Nb等于数据块长度除以32。密钥的设计类似二维字节数组,也是4行,Nk列,且Nk等于密钥块的长度除以32。AES算法使用的是圈变换,其变换的圈数Nr由Nb和Nk共同决定,如表1所示:
从具体规则上,AES算法在进行加解密运算时都会按照三大步骤进行,依次为1)初始化的圈密钥加法;2)(Nr-1)圈变换;3)最后一圈变换。这里以加密过程为例,其加密过程用伪代码表示如下。
解密过程是加密过程的逆过程。