AMD, Intel и ARM вместе работают над одной задачей. В ядро Linux добавили шифрование PCIe-соединений.

В выходные в ветку Linux 6.19 вошло одно из самых интересных обновлений последних месяцев: в ядре появилась базовая инфраструктура для шифрования линий PCI Express и аутентификации устройств. Над этой возможностью одновременно работают несколько вендоров, а первый реальный пользователь нового кода - технология AMD SEV-TIO для защищенного ввода-вывода, которая теперь начинает путь в апстрим.
Пул-реквест с обновлениями по подсистеме PCI отправил Дэн Уильямс из Intel. Он заложил в ядре общую инфраструктуру для шифрования PCIe-соединений и проверки подлинности устройств, на которую смогут опираться реализации от разных производителей. Первая такая реализация уже есть - это поддержка AMD SEV-TIO Trusted I/O. Остальные решения, в том числе для Intel TDX и ARM CCA, ожидаются в следующих выпусках ядра, примерно в диапазоне версий 6.20 - 7.0, когда они закроют свои зависимости.
Шифрование канала PCIe строится на наборе технологий с говорящими, но не слишком запоминающимися аббревиатурами. В центре находится протокол IDE (Integrity and Data Encryption), который отвечает за установку ключей в передатчике и приемнике на каждом конце линка. Обмен служебными данными для IDE идет через почтовые ящики DOE (Data Object Exchange) на основе конфигурационных запросов PCI. За кулисами всем этим управляет так называемый диспетчер безопасности в доверенной среде исполнения: TEE Security Manager, или TSM. Это может быть прошивка, работающая на отдельном сопроцессоре, как в случае AMD SEV-TIO, или специальный программный компонент, функционирующий в защищенном режиме процессора, как у Intel TDX или ARM CCA.
Ключевой момент в том, что ключи для шифрования линка устанавливает не драйвер Linux, а именно TSM. Это нужно затем, чтобы конфиденциальная виртуальная машина могла напрямую обратиться к этому диспетчеру с вопросом вроде "можешь ли ты сертифицировать это устройство". Хостовая система при этом находится вне доверенной области для такой гостевой ВМ, поэтому она не должна иметь возможность подменить ключи. Дополнительно ситуацию осложняет то, что почти ни одна архитектура не предлагает операционной системе стандартный способ самостоятельно настраивать ключи в корневом порту PCIe. В итоге схема с шифрованием, устанавливаемым через TSM, сейчас фактически единственный рабочий вариант для кроссархитектурной поддержки.
Принятие этого пул-реквеста разблокирует дальнейшие шаги. На следующем этапе разработчики будут реализовывать полноценный сквозной сценарий назначения конфиденциальных устройств виртуальным машинам. В спецификации PCIe эта связка описана отдельным протоколом TEE Device Interface Security Protocol, или TDISP. Пока же Linux уже получает полезную инфраструктуру шифрования линка, которая по смыслу близка к шифрованию памяти: ядро сможет аутентифицировать устройства по сертификатам и защищать трафик от атак с использованием промежуточных "прослушивающих" плат, пытающихся перехватить незашифрованные данные по PCIe.
Текущее изменение в ядре - лишь первая фаза вывода AMD SEV-TIO в апстрим. В рамках этого шага в ядре появилось около четырех тысяч строк нового кода и документация по новому интерфейсу sysfs вокруг TEE Security Manager. Полноценная поддержка AMD SEV-TIO для защиты PCIe-устройств - сетевых карт, ускорителей, систем хранения и других - уже доступна на актуальных платформах AMD EPYC 9005 Turin и будет развиваться по мере выхода новых версий Linux.