至少在Fedora 20软件包qemu-img
(1.6.2,10.fc20)中不使用AES-NI进行AES加密。
确认中
可以这样验证:
CPU是否具有AES-NI?
$ grep aes /proc/cpuinfo -i
例如,我的Intel Core 7具有此扩展名。
安装必要的调试包:
# debuginfo-install qemu-img
qemu-img
在调试器中运行:
$ gdb --args qemu-img convert -o encryption -O qcow2 disk1.img enc1.qcow2
在未针对AES-NI优化的众所周知的qemu加密功能中设置一个断点:
(gdb) b AES_encrypt
Breakpoint 1 at 0x794b0: file util/aes.c, line 881.
运行程序:
(gdb) r
Starting program: /usr/bin/qemu-img convert -o encryption -O qcow2 disk1.img enc1.qcow2
结果
在我的测试中,它确实停在那里:
Breakpoint 1, AES_encrypt (in=0x7ffff7fabd60 "...", key=0x555555c1b510) at util/aes.c:881
881 const AES_KEY *key) {
(gdb) n
889 assert(in && out && key);
(gdb) n
881 const AES_KEY *key) {
(gdb) n
889 assert(in && out && key);
(gdb) n
896 s0 = GETU32(in ) ^ rk[0];
(gdb) n
897 s1 = GETU32(in + 4) ^ rk[1];
这意味着确实没有使用英特尔AES指令。
我的第一个想法是,qemu-img
也许使用libcrypto
时会自动使用AES-NI。qemu-img
甚至链接到libcrypto(cf ldd $(which qemu-img)
)-但似乎没有将其用于AES加密。嗯
我通过greping QEMU源代码得出了断点位置。在Fedora上,您可以这样获得:
$ fedpkg clone -a qemu
$ cd qemu
$ fedpkg source
$ tar xfv qemu-2.2.0-rc1.tar.bz2
$ cd qemu-2.2.0-rc1
注意: gdb
可以通过q
uit命令退出。