Android 10(SDK29)设备TEE激活存疑:KeyInfo与日志矛盾问询
问题分析与验证方案
1. KeyInfo.isInsideSecureHardware()返回值的歧义
Android 10(SDK29)中,该API返回true并不严格等价于密钥存储在TEE中。部分设备厂商会将其他加密硬件分区(非标准TEE)标记为"安全硬件",甚至存在厂商Keystore实现逻辑偏差,实际用软件模拟却错误返回true的情况。
2. 验证TEE是否激活的实操方法
- 检查系统属性:通过adb shell执行以下命令,查看TEE相关状态:
正常激活TEE的设备会返回类似getprop | grep tee getprop ro.hardware.keystoretee=1或ro.hardware.keystore=trustonic/qsee这类TEE厂商标识;若返回空或software,则说明未启用TEE。 - 查看Keystore详细日志:过滤日志确认实际存储逻辑:
若日志中出现adb logcat -s Keystore Keystore2Using software backing store或明确指向/data/misc/keystore为存储路径,即可确认是纯软件实现。 - 检查TEE驱动与进程:查看系统中是否存在TEE相关组件:
激活TEE的设备会有ls /dev/tee* ps | grep tee/dev/tee0这类节点,以及teed或对应厂商的TEE守护进程。
3. 矛盾现象的原因
- 厂商Keystore实现不规范:部分厂商为通过兼容性测试,让
isInsideSecureHardware()返回true,但实际未接入TEE,仅用加密软件存储模拟。 /data/misc/keystore的作用:即使启用TEE,部分设备可能在此目录存储密钥元数据,但如果是完整密钥文件存在于此,基本可判定为软件实现——TEE中的私钥永远不会导出到普通文件系统。
4. 最终结论
结合日志"未找到Keystore模块,使用纯软件实现"的提示,以及/data/misc/keystore下的完整密钥文件,可判定设备未激活TEE,KeyInfo.isInsideSecureHardware()的返回值是厂商实现的错误或虚假标记。
内容的提问来源于stack exchange,提问作者Daniel P
相关产品推荐
相关产品推荐

