- 讲师:刘萍萍 / 谢楠
- 课时:160h
- 价格 4580 元
特色双名师解密新课程高频考点,送国家电网教材讲义,助力一次通关
配套通关班送国网在线题库一套
一、AES 加密算法简介
AES 高 级 加 密 标 准 ( Advanced EncryptionStandard,AES) ,源于比利时密码学家 Joan Dae-men 和 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,InvMixCol-umns,AddRoundKey,就可以得到加密前的文本。
二、加密指令执行环境
Intel 的 SSE 使 用的 SIMD 寄存器为 128 位长,正好与 AES 加密算法的单位一样。SSE 定义了 16 个 128 位寄存器 XMM0-XMM15.每个寄存器可以同时存放 2 个四字整数( 每个 64 位长) ,或者 4 个双字整数( 每个 32 位长) ,或者 8 个字整数( 每个16 位长) ,或者16 个字节整数( 每个8 位长) ,Intel 加密指令将使用这些寄存器。这四类整数在 SSE 寄存器中的排列顺序见图 1:
检查 CPU 是否支持加密指令,利用 CPUID 指令。使用它可以得到 CPU 的各种信息,并会根据不同的参数把各相关信息存到 eax,ebx,ecx 和 edx四个寄存器中。在使用 CPUID 指令时,设置 EAX= 1,ECX = 0,就可以在 ECX 寄存器中得到相应的 CPU 信息,如图 2 所示,根据 CPUID. 1. 0. ECX[25]可知:
三、加密指令的研究
Intel 加密指令是指 AES - NI 指令集。AES -NI 指令包括六条 AES 指令: 四条用于加密和解密( AESENC、 AESENCLAST、 AESDEC、 AESDE-CLAST) ,两条用于密钥扩展、生 成 ( 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、Sub-Bytes、MixColumns 和 AddRoundKey.对源操作数进行 AES 加密,将结果存入目标操作数。
2) AESENCLAST xmm1,xmm2 / m128
说明: 执行 AES 最后一轮的加密。该指令一次 完 成 AES 算 法 最 后 一 轮 的 加 密,包 括ShiftRows、SubBytes 和 AddRoundKey.对源操作数进行最后一轮 AES 加密,将结果存入目标操作数。
3) AESDEC xmm1,xmm2 / m128
说明: 执行 ASE 单轮的解密。该指令一次完成 AES 算法解密的4 个步骤,即 InvShiftRows、Inv-SubBytes、InvMixColumns 和 AddRoundKey. 对源操作数进行 AES 解密,将结果存入目标操作数。
4) AESDECLAST xmm1,xmm2 / m128
说明: 执行 AES 最后一轮的解密。该指令一次完成 AES 算法最后一轮的解密,包括 Inv-ShiftRows、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 选择的四字
四、INTEL 加密指令应用举例
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
1pxor 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 ProcessingStandards Publication 197.
[2]Intel Corporation: Intel 64 and IA -32 Architec-ture Software Developer 's Manual Volume 1:Basic Architecture[M / CD].
[3]Intel Corporation: Intel 64 and IA - 32 Archi-tecture Software Developer 's Manual Volume 2:Instruction Set Reference,A - Z[M / CD].
[4] Gael Hofemeier,Robert Chesebrough ,Intro-duction to Intel AES - NI and Intel Secure KeyInstructions [M].
[5]Jeffrey Rott,Intel Advanced Encryption Stand-ard Instructions ( AES - NI) .7 4湖北科技学院学报 第 36 卷
责编:古斯琪
课程专业名称 |
讲师 |
课时 |
查看课程 |
---|
课程专业名称 |
讲师 |
课时 |
查看课程 |
---|
点击加载更多评论>>