【发布时间】:2014-11-27 08:37:15
【问题描述】:
x86 ISA 允许我使用 AES-NI 指令一起加密/解密一轮的所有 4 个步骤,或者最后一轮只加密/解密其中的 3 个。
唯一也有单独指令的步骤是 InvMixColumn 转换 (AESIMC)。
这是为什么呢?我应该在什么情况下将此指令与 AESDEC / AESDECLAST 分开使用?
【问题讨论】:
标签: assembly x86 aes intel instruction-set
x86 ISA 允许我使用 AES-NI 指令一起加密/解密一轮的所有 4 个步骤,或者最后一轮只加密/解密其中的 3 个。
唯一也有单独指令的步骤是 InvMixColumn 转换 (AESIMC)。
这是为什么呢?我应该在什么情况下将此指令与 AESDEC / AESDECLAST 分开使用?
【问题讨论】:
标签: assembly x86 aes intel instruction-set
您在执行 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 中定义)为解密做好准备。
来源:http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/aes-instructions-set-white-paper.pdf(搜索“代码示例”一章)。
【讨论】:
AES key generation is supported by two instructions. AESKEYGENASSIST is used for generating the round keys, used for encryption. AESIMC is used for converting the encryption round keys to a form usable for decryption.