注意事项
必须解决以下注意事项,以确保 Android 受保护的确认的完整性。如果无法令人满意地解决这些注意事项,则无法在设备上实施受保护的确认。
Linux 内核注意事项
受保护的确认旨在安全运行,即使设备的内核受到威胁也是如此。当受保护的确认对话框处于活动状态时,内核不得干扰屏幕内容的完整性、用户输入的完整性以及用户输入和输出之间的原子性。从架构上讲,必须防止内核增强用户的决定和首先欺骗用户事件。内核不被认为是此用例的可信内核,因为它可能受攻击者的控制或被完全不同的东西取代。
固件注意事项
只有当所涉及的所有组件都具有可信固件时,才能在设备上实施受保护的确认。受保护的确认旨在确保用户有机会阅读可信用户界面中显示的消息,以便就是否继续交易做出明智的决定。显示面板驱动程序尤为重要,因为它可能会阻止用户查看可信用户界面。
输入注意事项
选择安全的输入方法,以确保除非用户在该对话框处于活动状态时生成事件,否则由此选择的输入方法生成的输入事件不会传达给受保护的确认对话框。
物理硬件
任何可以由 Android 内核控制的组件,例如片上系统 (SoC) 或电源管理集成电路 (PMIC),都不得能够驱动连接到物理确认按钮的线路。
触摸控制器注意事项
受保护的确认可以使用屏幕上的软件按钮作为输入。每当触摸控制器由 TEE 驱动时,都必须采取措施来清理触摸控制器的状态。
预期行为
中断
如果系统因来电或电源事件而中断确认会话,则 HAL 必须报告 ResponseCode::Aborted
。onCanceled()
回调会提供给应用,并且应用知道用户未选择操作。闹钟不需要中止会话,但确实需要通知用户。在对话框处于活动状态时,不允许任何类型的通知叠加层。
输入宽限期
在受保护的确认启动后,输入需要保持非活动状态至少 1 秒,然后才能响应用户交互。此宽限期确保用户有机会对意外的确认对话框做出反应。此宽限期必须由可信应用强制执行。
屏幕旋转
纵向是唯一强制模式,并且不支持屏幕旋转。屏幕旋转允许在受损系统上进行滥用的可能性,例如误导性的按钮放置或正文文本操作。
正文文本渲染失败
对于正文文本(包括额外的未显示数据和 CBOR 标头信息),硬性边界为 6144 (0x1800) 字节。此外,还必须强制执行软性边界。如果渲染的消息未完全适合可用屏幕空间,请确保受保护的确认中止并且交易被取消。如果 MessageSize
超过最大允许大小,则您的实施必须在 promptUserConfirmation
上返回 UIErrorMessageTooLong
。
最佳实践是在收到 API 调用后格式化正文文本。正文文本必须完整地显示给用户。
辅助显示器
在某些条件下支持辅助显示器。必须保持输出和用户输入的完整性,并且不得通过其他方式显示误导性信息。否则,对话框可能仅显示在主显示器上,并且所有其他显示器都应停用或空白。不允许流式传输和屏幕共享解决方案显示对话框或生成确认。