Реализация защищенного подтверждения

Соображения

Чтобы обеспечить целостность подтверждения Android Protected, необходимо принять во внимание следующие соображения. Если эти соображения не могут быть удовлетворительно решены, защищенное подтверждение не может быть реализовано на устройстве.

Особенности ядра Linux

Защищенное подтверждение предназначено для безопасной работы, даже если ядро ​​устройства скомпрометировано. Пока диалоговое окно «Защищенное подтверждение» активно, ядро ​​не может вмешиваться в целостность содержимого экрана, целостность ввода пользователя и атомарность между вводом и выводом пользователя. Архитектурно ядро ​​должно быть защищено от возможности дополнять решения пользователя и в первую очередь подделывать пользовательские события. В этом случае ядро ​​не считается заслуживающим доверия, поскольку оно может оказаться под контролем злоумышленника или быть заменено чем-то совершенно другим.

Рекомендации по прошивке

Защищенное подтверждение может быть реализовано на устройстве только в том случае, если все задействованные компоненты имеют доверенную прошивку. Защищенное подтверждение предназначено для того, чтобы у пользователя была возможность прочитать сообщение, отображаемое в доверенном пользовательском интерфейсе, и принять обоснованное решение, продолжать транзакцию или нет. Драйвер панели дисплея особенно важен, поскольку он может помешать пользователю просматривать доверенный пользовательский интерфейс.

Рекомендации по вводу

Выберите безопасный метод ввода, чтобы гарантировать, что события ввода, созданные этим выбранным методом ввода, не передаются в диалоговое окно «Защищенное подтверждение», если только пользователь не создаст событие, пока это диалоговое окно активно.

Физическое оборудование

Любой компонент, которым может управлять ядро ​​Android, например система на кристалле (SoC) или интегральная схема управления питанием (PMIC), не должен иметь возможности управлять проводом, подключенным к физической кнопке подтверждения.

Рекомендации по сенсорному контроллеру

Защищенное подтверждение может использовать экранные программные кнопки в качестве входных данных. Каждый раз, когда сенсорный контроллер управляется TEE, необходимо принять меры для очистки состояния сенсорного контроллера.

Ожидаемое поведение

Перебои

Если система прерывает сеанс подтверждения из-за входящего телефонного звонка или события, связанного с питанием, HAL должен сообщить ResponseCode::Aborted . Приложения получают обратный вызов onCanceled() и знают, что пользователь не выбирал действие. Сигналы тревоги не требуют прерывания сеанса, но должны уведомлять пользователя. Наложения уведомлений любого типа не допускаются, пока диалоговое окно активно.

Входной льготный период

После запуска защищенного подтверждения ввод должен оставаться неактивным в течение как минимум 1 секунды, прежде чем он начнет реагировать на взаимодействие с пользователем. Этот льготный период гарантирует, что у пользователя будет возможность отреагировать на неожиданное диалоговое окно подтверждения. Этот льготный период должен соблюдаться доверенным приложением.

Вращение экрана

Портрет — единственный обязательный режим, поворот экрана не поддерживается. Поворот экрана допускает возможность злоупотреблений в скомпрометированной системе, таких как неправильное расположение кнопок или манипулирование основным текстом.

Ошибки рендеринга основного текста

Для основного текста, включая дополнительные неотображаемые данные и информацию заголовка CBOR, существует жесткая граница в 6144 (0x1800) байт . Кроме того, существует мягкая граница, которую необходимо соблюдать. Если отображаемое сообщение не полностью помещается на доступном пространстве экрана, убедитесь, что защищенное подтверждение прерывается и транзакция отменена. Если MessageSize превышает максимально допустимый размер, ваша реализация должна вернуть UIErrorMessageTooLong в promptUserConfirmation .

Лучше всего форматировать основной текст после получения вызова API. Основной текст должен быть показан пользователю полностью.

Вторичные дисплеи

Дополнительные дисплеи поддерживаются при определенных условиях. Необходимо поддерживать целостность вывода и ввода пользователя, и никакая вводящая в заблуждение информация не может отображаться другими способами. В противном случае диалоговое окно может отображаться только на основном дисплее, а все остальные дисплеи должны быть отключены или пусты. Решениям для потоковой передачи и совместного использования экрана не разрешено отображать диалог или генерировать подтверждения.