英特尔AES - NI指令程序生成器解析
1. 背景与动机
近年来,英特尔扩展了其流行的x86架构,以支持高级加密标准(AES)。新的指令能在单条指令中执行完整的AES轮加密,但这些指令有几周期的延迟,要充分利用它们并不容易。良好的性能依赖于在处理器流水线中重叠执行多条AES指令,同时还要仔细管理寄存器等资源。现有的编译器在这方面表现不佳,因此英特尔提供了一个高度优化的汇编例程库来实现各种AES模式。
不过,汇编代码理解、维护和修改都很困难且成本高。而且,汇编编程也难以将多种算法组合到一段代码中。为了解决这些问题,我们提出了一个程序生成器,它可以从简单的、带注释的C版本代码自动创建优化的AES代码。
2. 英特尔AES - NI指令
英特尔高级加密标准新指令(AES - NI)是6条新的x86指令,用于支持AES加密、解密和密钥扩展,首次出现在英特尔Westmere架构上。 aesenc 指令能在单条指令中执行完整的一轮加密。AES算法由10、12或14轮加密组成,分别对应128、192或256位的密钥大小。
以下是使用AES - NI指令的AES CTR(第1轮)加密的C代码实现:
#include <wmmintrin.h>
#include "aes - table.h"
void AES_CTR_Encrypt( __m128i * plaintext , __m128i * ciphertext ,
__m128i * key , long long ivec , lon
超级会员免费看
订阅专栏 解锁全文
3515

被折叠的 条评论
为什么被折叠?



