QEMU / KVM có sử dụng các hướng dẫn AES của Intel cho hình ảnh qcow2 được mã hóa nếu CPU chủ có chúng không?


9

Định dạng tệp hình ảnh qcow2 cho KVM có thể sử dụng mã hóa AES . Mã hóa được áp dụng ở cấp độ cụm :

Mỗi khu vực trong mỗi cụm được mã hóa độc lập bằng chế độ Chuỗi khối mã hóa AES, sử dụng phần bù của khu vực (liên quan đến khởi động của thiết bị) ở định dạng cuối nhỏ như 64 bit đầu tiên của vectơ khởi tạo 128 bit.

Các kích thước cluster có thể được thiết lập từ 512 byte đến 2M (64K dường như là mặc định).

Một trong những vấn đề chính khi sử dụng mã hóa qcow2 là cú đánh hiệu năng cho CPU - mỗi lần ghi đĩa hoặc đọc không lưu trong bộ nhớ cache cần mã hóa hoặc giải mã.

Điều tôi muốn biết là QEMU / KVM có sử dụng các hướng dẫn Intel AES để giảm thiểu hiệu năng nếu CPU chủ có chúng không? Nếu vậy, việc sử dụng hoặc hiệu suất có phụ thuộc đáng kể vào kích thước cụm?

Các hướng dẫn Intel AES là một bộ hướng dẫn mới có sẵn bắt đầu với tất cả họ bộ xử lý Intel® Core ™ 2010 mới dựa trên tên mã vi kiến ​​trúc Intel® 32nm West mật mã. Các hướng dẫn này cho phép mã hóa và giải mã dữ liệu nhanh chóng và an toàn, sử dụng Tiêu chuẩn mã hóa nâng cao (AES) được xác định bởi Trin Publication số 197. Vì AES hiện là mật mã khối chiếm ưu thế và được sử dụng trong các giao thức khác nhau, các hướng dẫn mới có giá trị cho một loạt các ứng dụng.

Câu trả lời:


8

Ít nhất là với gói Fedora 20 qemu-img(1.6.2, 10.fc20) không sử dụng AES-NI cho tiền điện tử AES.

Khẳng định

Người ta có thể xác minh nó như thế này:

  1. CPU có AES-NI không?

    $ grep aes /proc/cpuinfo  -i
    

    Ví dụ, Intel Core 7 của tôi có phần mở rộng này.

  2. Cài đặt các gói gỡ lỗi cần thiết:

    # debuginfo-install qemu-img
    
  3. Chạy qemu-imgtrong trình gỡ lỗi:

    $ gdb --args qemu-img convert -o encryption -O qcow2 disk1.img enc1.qcow2
    
  4. Đặt điểm dừng trong chức năng mã hóa qemu nổi tiếng không được tối ưu hóa cho AES-NI:

    (gdb) b AES_encrypt
    Breakpoint 1 at 0x794b0: file util/aes.c, line 881.
    
  5. Chạy chương trình:

    (gdb) r
    Starting program: /usr/bin/qemu-img convert -o encryption -O qcow2 disk1.img enc1.qcow2
    

Các kết quả

Trong thử nghiệm của tôi, nó dừng lại ở đó:

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];

Có nghĩa là, thực sự, các hướng dẫn AES của Intel không được sử dụng.

Suy nghĩ đầu tiên của tôi là qemu-imgcó lẽ chỉ sử dụng libcryptoAES-NI để tự động sử dụng khi có sẵn. qemu-imgthậm chí liên kết với libcrypto (cf ldd $(which qemu-img)) - nhưng dường như không sử dụng nó cho tiền điện tử AES. Hừm.

Tôi đã lấy được vị trí điểm dừng thông qua việc lấy mã nguồn QEMU. Trên Fedora bạn có thể có được nó như thế này:

$ fedpkg clone -a qemu
$ cd qemu
$ fedpkg source
$ tar xfv qemu-2.2.0-rc1.tar.bz2
$ cd qemu-2.2.0-rc1

LƯU Ý: gdb có thể được thoát qua qlệnh uit.


Câu trả lời này vượt xa sự mong đợi của tôi, cảm ơn bạn. QEMU có sử dụng cùng một mã khi đọc ảnh dưới chế độ hoạt động bình thường không?

0

Tôi muốn chia sẻ chủ đề này liên quan đến hỗ trợ AES-NI trong CPU West 4.0.3 trong phiên bản 1.7.10.4 của QEMU:

http://lists.gnu.org/archive/html/qemu-devel/2013-03/msg05374.html

Các chức năng đã được xem xét và chấp nhận vào dòng mã.

Sau đó, có một chủ đề khác liên quan đến lý do tại sao chức năng dường như thiếu trong 2.2:

https://www.redhat.com/archives/libvirt-users/2015-F/2/msg00007.html

Chuỗi dường như chỉ ra rằng có một phương pháp kích hoạt tính năng này, nhưng có thể có hậu quả tiêu cực do không tương thích với phát hiện libvirt và CPU. Cá nhân tôi rất muốn thấy tính năng này được giới thiệu lại.


thú vị, mặc dù không liên quan gì đến câu hỏi, không liên quan đến việc mô phỏng và chuyển qua AES-NI cho khách, nhưng liệu chủ nhà có sử dụng nó để mã hóa hay không (khách thậm chí không biết liệu khối lượng của nó có được mã hóa hay không, nó trong suốt) .
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.