Для выполнения доверенных вычислений, сначала нужно предоставить данные и быть уверенным в том, что они не искажены на этапе ввода, а если они конфиденциальны, то еще убедиться в том, что их никто не «подсмотрел». Обработанные в доверенной среде данные, также нужно выгрузить доверенным образом с обеспечением их целостности и приватности. Тоже самое требуется обеспечить для визуализации процесса вычислений и его результатов на экране монитора.
Следовательно, нужно сделать доверенным не только процесс обработки данных, но и процессы ввода/вывода этих данных да еще и визуализацию неких критически важных параметров. Фактически нужно этот доверенный «компьютер в компьютере» оснастить собственным доверенным периферийным оборудованием.
Вот это уже задачка из разряда «невозможно», этого еще никто не делал. Решая эту задачу можно пойти несколькими путями, первый и самый очевидный это поступить также как и с процессорным ядром, «выкусить» из аппаратных ресурсов используемых ОС необходимые контроллеры и работать с ними только из доверенной среды. Недостаток этого лобового решения – моделезависимость. Нужно писать собственные драйвера для работы с «выкушенным» периферийным оборудованием, а типов этого оборудования слишком много.
Более простым способом является организация «сеансового» захвата любого из необходимых контроллеров, а чтобы ОС и сторонние программы в это время не «путались под ногами» на время этого сеанса все процессорные ядра принадлежащие ОС нужно останавливать (у нас используется термин «заморозить»). Но опять возникает вопрос моделезависимости, как и в первом варианте нужно писать собственные драйвера под все имеющиеся контроллеры, а это просто нереально.
Поэтому эффективней использовать комбинированный метод. Штатный драйвер ОС инициализирует контроллер до уровня активации буфера обмена данными, и только после активации этого буфера происходит «заморозка» процессоров основной ОС. В этом замороженном состоянии контроллер пишет/читает буфер обмена через DMI, процессор доверенной среды контролирует заполнение буфера и когда операция завершается забирает из этого буфера данные после чего «размораживает» процессора ОС.
Ну и наконец, последний, и самый элегантный способ, это работа «на лету», когда с внешним устройством работает ОС, ничего не тормозится не захватывается, но буфера обмена данных гарантировано подменяются и реальная информация из них идет по каналам ДВС а не официальной ОС.
Снова следуя мудрому завету Великого Кормчего – «Пусть цветут все цветы», и не мудрствуя лукаво в Доверенной Вычислительной Среде использованы все эти методы.
Там где оборудование хорошо стандартизировано и критическим является гарантированная надежность (обеспечение сетевого доступа например) применяется метод «выкусывания» контроллеров.
Там где нет даже намека на стандартизацию протоколов доступа к оборудованию и полно недокументированных возможностей (пример современные видеоадаптеры) применен метод заморозки ОС на время чтения\записи буферов данных.
В более простых случаях реализуется метод подмены/съема информации налету, к примеру, так реализована работа с клавиатурным вводом.