APP下载

Intel加密指令研究及其应用

2016-03-04彭茜珍

湖北科技学院学报 2016年12期
关键词:加密算法寄存器解密

彭茜珍

(湖北科技学院 学报编辑部,湖北 咸宁 437100)

Intel加密指令研究及其应用

彭茜珍

(湖北科技学院 学报编辑部,湖北 咸宁 437100)

为了解决信息泄露等安全问题,在互联网等应用中需要实施加密,这些加密算法计算量巨大,非常耗时,在超高性能的情况下,需要有专门的硬件完成。利用ASE-IN指令集,由处理器完成加密任务,无需专用硬件,可大大地降低成本。文章研究了ASE加密指令新特性并给出了这些指令的应用。

AES算法;处理器;加密指令

一、AES加密算法简介[1]

AES 高级加密标准(Advanced Encryption Standard,AES),源于比利时密码学家Joan Daemen和Vincent Rijmen所设计的Rijndael加密算法,是美国联邦政府采用的一种分组加密标准。AES标准用来取代之前发布的DES,现已经被多方多层次地分析,在世界上被各国广泛使用。

我们以128位为单位来阐述AES加密的处理过程,它将128位认作16个单字节,每个字节当作一个字符,把它们排成在一个4×4的矩阵并在其上运作,这个矩阵称为“状态(state)”。在加密的时候,各轮AES加密循环(除最后一轮外)均包含4个步骤:

首先,是ShiftRows,这一步将矩阵中的每个行进行左循环式移位(第一行4个字符保持不变,第二、第三、第四行分别左移一个、二个、三个字符)。

第二步是SubBytes,通过一个非线性的替换函数,用查表法将矩阵中的每个字符替换成对应的字符。

第三步是MixColumns,充分混合矩阵中各个列,使用线性转换来混合每列的四个字符。

第四步是AddRoundKey,用该轮次生成AES密钥,对整个128位做XOR运算。

当采用128位AES密钥时,整个4步骤处理需要进行10个轮次。其中最后一个轮次中省略MixColumns步骤,而以另一个AddRoundKey取代。利用同一个AES密钥进行逆变换,也是四个步骤,称为InvShiftRows, InvSubBytes, InvMixColumns, AddRoundKey,就可以得到加密前的文本。

二、加密指令执行环境[2,3]

Intel的SSE使用的SIMD寄存器为128位长,正好与AES加密算法的单位一样。SSE定义了16个128位寄存器XMM0—XMM15。每个寄存器可以同时存放2个四字整数(每个64位长),或者4个双字整数(每个32位长),或者8个字整数(每个16位长),或者16个字节整数(每个8位长),Intel加密指令将使用这些寄存器。这四类整数在SSE寄存器中的排列顺序见图1:

图1 XXM寄存器

检查CPU是否支持加密指令,利用CPUID指令。使用它可以得到CPU的各种信息,并会根据不同的参数把各相关信息存到eax,ebx,ecx和edx四个寄存器中。在使用CPUID指令时,设置EAX=1,ECX=0,就可以在ECX寄存器中得到相应的CPU信息,如图2所示,根据CPUID.1.0.ECX[25]可知:

图2 在ECX寄存器中返回的CPU的特征信息(节略)

三、加密指令的研究[4,5]

Intel加密指令是指AES-NI指令集。AES-NI指令包括六条AES指令:四条用于加密和解密(AESENC、AESENCLAST、AESDEC、AESDECLAST),两条用于密钥扩展、生成(AESIMC、 AESKEYGENASSI)。AES-NI即支持3种ASE官方规定的密钥长度(ASE128、ASE192、ASE256)及其运算模式,也支持若干种不在ASE官方规范中的算法。对于这些AES指令,Intel还提供另一条新指令用于支持无进位乘法——PCLMULQDQ。和通常的X86指令相似,AES加密指令也包括两类寻址方式:reg-reg和reg-mem。

(一)加密和解密指令(4条)

指令AESENC和 AESENCLAST用于AES算法的加密。指令AESDEC和AESDECLAST用于AES算法的解密。

1)AESENC xmm1, xmm2/m128

说明:执行ASE单轮的加密。该指令一次完成AES算法加密的4个步骤,即ShiftRows、 SubBytes、MixColumns和AddRoundKey。对源操作数进行AES加密,将结果存入目标操作数。

2)AESENCLAST xmm1, xmm2/m128

说明:执行AES最后一轮的加密。该指令一次完成AES算法最后一轮的加密,包括ShiftRows、SubBytes和AddRoundKey。对源操作数进行最后一轮AES加密,将结果存入目标操作数。

3)AESDEC xmm1, xmm2/m128

说明:执行ASE单轮的解密。该指令一次完成AES算法解密的4个步骤,即InvShiftRows、InvSubBytes、InvMixColumns和AddRoundKey。对源操作数进行AES解密,将结果存入目标操作数。

4)AESDECLAST xmm1, xmm2/m128

说明:执行AES最后一轮的解密。该指令一次完成AES算法最后一轮的解密,包括InvShiftRows、InvSubBytes和AddRoundKey。对源操作数进行最后一轮AES解密,将结果存入目标操作数。

(二)密钥生成和转换指令(2条)

指令AESKEYGENASSIST用于AES算法密钥的生成,指令AESIMC用于InvMixColumns 转换。

1)AESIMC xmm1, xmm2/m128

说明:执行AES各轮的InvMixColumns转换。对源操作数进行InvMixColumns 转换,将结果存入目标操作数

2)AESKEYGENASSI xmm1, xmm2/m128, imm8

说明:生成用于下一轮的密钥。利用在源操作数中指定的128位数据和一个指定的8位立即常数,生成下一轮计算步骤所需的一个加密密钥,并辅助扩展成AES密钥,结果存储在目标操作数中。

(三)无进位乘法指令(1条)

指令PCLMULQDQ用于支持无进位乘法,支持两个64位四个字的无进位乘法运算。

1)xmm1, xmm2/m128, imm8

说明:根据立即字节的值,从第1个和第2个源操作数中选择两个64位四个字进行无进位乘法运算,如何选取见下表。

根据立即字节,PCLMULQDQ 选择的四字

lmm[4]lmm[0]PCLMULQDQ操作00CL_MUL(SRC2[63:0],SRC1[63:0])01CL_MUL(SRC2[63:0],SRC1[127:64])10CL_MUL(SRC2[127:64],SRC1[63:0])11CL_MUL(SRC2[127:64],SRC1[127:64])

四、INTEL加密指令应用举例[5]

AES-NI指令主要用于联网与企业内部网间的通信加密、全磁盘加密、应用程序级的加密(如数据库,电子邮件),云服务加密。由于受版面限制,这里给出几个实例,说明AES加密指令的应用。

例1 AES-128 加密代码

; 假设数据块存储在xmm15中.

; 寄存器Registers xmm0-xmm10 存放密钥(在此次加密序列是从0到10).

; 最后, xmm15保存加密结果.

pxor xmm15, xmm0 ; Round 0

aesenc xmm15, xmm1 ; Round 1

aesenc xmm15, xmm2 ; Round 2

aesenc xmm15, xmm3 ; Round 3

aesenc xmm15, xmm4 ; Round 4

aesenc xmm15, xmm5 ; Round 5

aesenc xmm15, xmm6 ; Round 6

aesenc xmm15, xmm7 ; Round 7

aesenc xmm15, xmm8 ; Round 8

aesenc xmm15, xmm9 ; Round 9

aesenclast xmm15, xmm10 ; Round 10

例2 AES-128 解密代码

; 假设数据块存储在xmm15中.

; 寄存器xmm10 - xmm0存放密钥.

; 最后, xmm15保存解密结果

pxor xmm15, xmm10 ; First xor

aesdec xmm15, xmm9 ; Round 1 (consuming round keys in reverse order)

aesdec xmm15, xmm8 ; Round 2

aesdec xmm15, xmm7 ; Round 3

aesdec xmm15, xmm6 ; Round 4

aesdec xmm15, xmm5 ; Round 5

aesdec xmm15, xmm4 ; Round 6

aesdec xmm15, xmm3 ; Round 7

aesdec xmm15, xmm2 ; Round 8

aesdec xmm15, xmm1 ; Round 9

aesdeclast xmm15, xmm0 ; Round 10

例3 AES-128密钥扩展

; 假设密钥存储在数组Key_Schedule中.

movdqu xmm1, XMMWORD PTR Key

movdqu XMMWORD PTR Key_Schedule, xmm1

mov rcx, OFFSET Key_Schedule+16

aeskeygenassist xmm2, xmm1, 0x1

call key_expansion_128

aeskeygenassist xmm2, xmm1, 0x2

call key_expansion_128

aeskeygenassist xmm2, xmm1, 0x4

call key_expansion_128

aeskeygenassist xmm2, xmm1, 0x8

call key_expansion_128

aeskeygenassist xmm2, xmm1, 0x10

call key_expansion_128

aeskeygenassist xmm2, xmm1, 0x20

call key_expansion_128

aeskeygenassist xmm2, xmm1, 0x40

call key_expansion_128

aeskeygenassist xmm2, xmm1, 0x80

call key_expansion_128

aeskeygenassist xmm2, xmm1, 0x1b

call key_expansion_128

aeskeygenassist xmm2, xmm1, 0x36

call key_expansion_128

jmp END;

key_expansion_128:

pshufd xmm2, xmm2, 0xff

vpslldq xmm3, xmm1, 0x4

pxor xmm1, xmm3

vpslldq xmm3, xmm1, 0x4

pxor xmm1, xmm3

vpslldq xmm3, xmm1, 0x4

pxor xmm1, xmm3

pxor xmm1, xmm2

movdqu XMMWORD PTR [rcx], xmm1

add rcx, 0x10

ret

END:

五、结论

数据加密已经是每个百姓日常信息生活中重要的部分之一, AES是一种广泛使用的加密标准,它能够帮助我们保护自己的隐私信息安全,但由于加密的计算量较大也带来巨大的性能损耗,因此在做加密运算时,对普通处理器时间的占用可能使其无法完成其他要处理的日常工作。以前,只能通过购买更强大的处理器,或者使用多处理器或者使用加密卸载来解决性能问题。然而,这些解决方案都有各自限制。现在根据新的AES-NI加密标准,通过在CPU上增加6条新的AES指令,就能够显著提高CPU性能以及安全性。这有助于在很多应用中提高性能和安全性,通过结合英特尔AES-NI加密标准,可以为计算带来改革,并且在提高生产效率方面能够使计算机用户和管理员的满意度显著提高。

[1] 美国联邦政府: Advanced Encryption Standard[M/CD].Federal Information Processing Standards Publication 197. http://csrc.nist.gov 2016.

[2]Intel Corporation: Intel 64 and IA-32 Architecture Software Developer's Manual Volume 1: Basic Architecture[M/CD]. http://WWW.INTEL.COM Order Number 253665-059US 2016.

[3] Intel Corporation: Intel 64 and IA-32 Architecture Software Developer's Manual Volume 2: Instruction Set Reference,A-Z[M/CD]. http://WWW.INTEL.COM Order Number 253666-059US 2016.

[4] Gael Hofemeier,Robert Chesebrough , Introduction to Intel AES-NI and Intel Secure Key Instructions [M]. http://WWW.INTEL.COM 2006.

[5] Jeffrey Rott,Intel Advanced Encryption Standard Instructions (AES-NI). https://software.intel.com/en-us/articles/intel-advanced-encryption-standard-instructions-aes-ni 2012.

2095-4654(2016)12-0068-03

2016-05-28

TP313

A

猜你喜欢

加密算法寄存器解密
STM32和51单片机寄存器映射原理异同分析
炫词解密
解密“一包三改”
Lite寄存器模型的设计与实现
炫词解密
基于整数矩阵乘法的图像加密算法
基于混沌系统和DNA编码的量子图像加密算法
移位寄存器及算术运算应用
混沌参数调制下RSA数据加密算法研究
基于小波变换和混沌映射的图像加密算法