Assembly 我什么时候应该单独使用AESIMC而不是使用AESDEC

Assembly 我什么时候应该单独使用AESIMC而不是使用AESDEC,assembly,x86,aes,intel,instruction-set,Assembly,X86,Aes,Intel,Instruction Set,x86 ISA允许我使用AES-NI指令同时加密/解密一轮中的所有4个步骤,或者在最后一轮中仅加密/解密其中3个步骤 唯一一个也有单独指令的步骤是InvMixColumn转换() 为什么呢?我应该在哪些条件下使用本指令与AESDEC/AESDECLAST分开使用?在执行AES-192(FIPS 197)时,将指令应用于键上。假设您的密钥位于寄存器xmm2到xmm14中,如下所示: aesimc xmm2, xmm2 aesimc xmm3, xmm3 aesimc xmm4, xmm4 ...

x86 ISA允许我使用AES-NI指令同时加密/解密一轮中的所有4个步骤,或者在最后一轮中仅加密/解密其中3个步骤

唯一一个也有单独指令的步骤是InvMixColumn转换()


为什么呢?我应该在哪些条件下使用本指令与AESDEC/AESDECLAST分开使用?

在执行AES-192(FIPS 197)时,将指令应用于键上。假设您的密钥位于寄存器xmm2到xmm14中,如下所示:

aesimc xmm2, xmm2
aesimc xmm3, xmm3
aesimc xmm4, xmm4
...
aesimc xmm13, xmm13
aesimc xmm14, xmm14
这发生在aesdec之前。只要aesimc在与解密指令一起使用之前发生在寄存器上,指令也可能是混杂的:

aesimc xmm14, xmm14
aesdec xmm1, xmm14
aesimc xmm13, xmm13
aesdec xmm1, xmm13
...
然而,首先一次完成这一切可能更快,因为这样寄存器就可以随时用于aesdec指令

仅供参考,说明文件说明:

注:AESIMC指令应适用于扩展AES轮密钥(第一轮和最后一轮密钥除外),以便为使用“等效逆密码”(在FIPS 197中定义)进行解密做好准备


来源:(搜索“代码示例”一章。)

因此,如果我理解正确,在每次AESDEC之前,我应该对AESKEYGENASSIST的结果(目的地)执行AESIMC?是的,根据文档AES密钥生成由两条指令支持。AESKEYGENASSIST用于生成用于加密的圆密钥。AESIMC用于将加密轮密钥转换为可用于解密的形式。好吧,奇怪的是,他们没有将其添加为AESDEC本身的一部分,但无论如何,谢谢!