Androrid KeyStore, KeyStore TA (二)

目标

Android Keystore API 和底层 Keymaster HAL 提供了一套基本的但足以满足需求的加密基元,以便

使用访问受控且由硬件支持的密钥实现相关协议。

除了扩大加密基元的范围外,Android 6.0 中的 Keystore 还增加了以下内容:

·        一个使用控制方案,用于限制密钥的使用,并降低因滥用密钥而损害安全性的风险

·        一个访问控制方案,用于限定只有指定的用户和客户端能够使用相应密钥,并且只能在规定的时间

范围内使用

架构

Keymaster HAL 是由原始设备制造商 (OEM) 提供的动态加载库,Keystore 服务使用它来提供由硬件支持

的加密服务。为了确保安全性,HAL 实现不会在用户空间(甚至是内核空间)中执行任何敏感操作。敏感操

作会被分配给通过某个内核接口连接的安全处理器。最终的架构如下所示:

扫描二维码关注公众号,回复: 1306840 查看本文章



Android 设备中,Keymaster HAL 客户端包含多个层(例如,应用、框架、Keystore 守护进程),

但在本文档中可以将其忽略。这意味着,所介绍的 Keymaster HALAPI 为底层 API,供平台内部组件使用,

不面向应用开发者提供。Android开发者网站对更高层 API(第 23 API)进行了介绍。

Keymaster HAL 的目的不是实现安全敏感型算法,而只是对发送到安全域的请求进行编排和解排。传输格式

是由实现定义的。

与之前版本的兼容性

Keymaster 1 HAL 与之前发布的 HAL(例如,Keymaster 0.2 0.3)完全不兼容。为了在运行 Android 5.0

及更早版本(采用旧版 Keymaster HAL)的设备上实现互用性,Keystore 提供了一个可通过调用现有硬

件库来实现 Keymaster 1 HAL的适配器,但最终仍不能提供 Keymaster 1 HAL 中的全部功能。特别是,

它仅支持 RSA ECDSA 算法,而且所有密钥授权强制执行都由该适配器在非安全域中进行。

Keymaster 2 通过移除get_supported_*方法并允许finish()方法接受输入,进一步简化了 HAL 接口。

在可一次性获得所有输入的情况下,这样可以减少到 TEE 的往返次数,并简化 AEAD 解密的实现过程。

Android 8.0 中,Keymaster 3 从旧式 C 结构 HAL 转换到了从采用新的硬件接口定义语言 (HIDL) 

的定义生成的 C++ HAL 接口。通过对生成的IKeymasterDevice类进行子类化并实现纯虚方法创建了

新式 HAL 实现。在此变更过程中,很多参数类型发生了变化,尽管这些类型和方法与旧的类型和 HAL 结构

体方法具有一对一的对应关系。


猜你喜欢

转载自blog.csdn.net/junwua/article/details/80519515