借助系统芯片 (SoC) 中提供的可信执行环境,Android 设备可以为 Android 操作系统、平台服务甚至是第三方应用提供由硬件支持的强大安全服务。
之前如果Android系统中的应用需要使用TEE进行存储、加解密、TUI等等,都是通过Framework-->JNI-->HAL层(CA)-->接口库-->TA流程进行的。随着Android8.0及其后续版本的演化,比如Android本身的keystore机制,将keymaster在TEE中硬件实现。流程首先是keystore服务-->HAL层的服务-->HAL层(CA)-->接口库-->TA。
各部分代码如下:
1,\hardware\interfaces\keymaster\3.0中定义了HAL层的服务机制,适合Android8.0新的架构。
2,HAL层keymaster CA,实现获取硬件TEE支持信息接口函数getHardwareFeatures。
3,keymaster TA实现。
Android系统越来会开放其硬件安全能力,并且系统HAL层增加了获取硬件TEE支持信息接口函数,如下:
getHardwareFeatures()
generates(bool isSecure, bool supportsEllipticCurve, bool supportsSymmetricCryptography,bool supportsAttestation, bool supportsAllDigests, string keymasterName,string keymasterAuthorName);
getHardwareFeatures
方法向客户端披露了底层安全硬件的一些重要特征。该方法不需要任何参数,且返回四个布尔值值:
isSecure
为 true
。supportsEllipticCurve
为 true
。supportsSymmetricCryptography
为 true
。supportsAttestation
为 true
。该方法仅可能返回以下错误代码:ErrorCode:OK
、ErrorCode::KEYMASTER_NOT_CONFIGURED
或指示无法与安全硬件通信的错误代码之一。