IT评测·应用市场-qidao123.com技术社区
标题:
Android安全付出(1)-团体架构-keymint
[打印本页]
作者:
勿忘初心做自己
时间:
2025-3-27 11:51
标题:
Android安全付出(1)-团体架构-keymint
目次
一、团体架构
1.app到keystore
2.keystore到keymaster(这部分,不同版本会有不同的实现)
3.keymaster到trusty
4.trusty内部的ipc机制调用到TA
5.trusty TA
二、采用keymint照旧keymaster
三、keymint接口定义和具体实现
(1)接口定义
(2)AndroidKeyMintDevice(具体实现服务端示例)
(3)trusty KeyMintDevice(具体实现服务端的另一个示例)
四、trusty TA对硬件的操纵调用和通信
五、总结
一、团体架构
我们来看下如何基于已有的Android系统框架和安全架构,如作甚区块链用户在arm平台的android装备上添加一颗安全芯片,提供硬件级别的安全付出能力和硬件装备。【ps:所有公开内容将仅限于对已开源的AOSP源码的分析】
团体的框架(官方图镇楼):
我们起首以一个简单应用到TA的调用流程来作为整个分析的索引,然后渐渐拆解开来。
1.app到keystore
2.keystore到keymaster(这部分,不同版本会有不同的实现)
3.keymaster到trusty
4.trusty内部的ipc机制调用到TA
5.trusty TA
二、采用keymint照旧keymaster
在keystore功能的底层实现上,android在不同的版本有不同的实现。
keymint是keymaster v4之后的替换计划。所以android 15上最好采用keymint的接口进行硬件功能的对接。【这里要看下keymint接口和keymaster接口的差异】
这里,我们关注最新的keymint部分的架构。
三、keymint接口定义和具体实现
(1)接口定义
hardware/interfaces/security/keymint/aidl/android/hardware/security/keymint/IKeyMintDevice.aidl
(2)AndroidKeyMintDevice(具体实现服务端示例)
https://android.googlesource.com/platform//system/keymaster/+/9d64bc288499acd6aefa22e44826871e56acfda4/ng/AndroidKeyMintDevice.cpp
这里会构造一个UpgradeKeyRequest 请求,并实行SetKeyMaterial的任务。
会调到android_keymaster_messeges.cpp中的实现中:
进而调用到:
对keymaster_key_blob_t这个布局体进行更新。这个布局体是定义在prebuilts/vndk/v32/arm/include/hardware/libhardware/include/hardware/keymaster_defs.h中。
到这里更新布局体以后,还调用了request.upgrade_params.Reinitialize(KmParamSet(upgradeParams));
这个upgrade_params是AuthorizationSet类型的。
会调用到authorization_set.cpp中:
这里重要是通过memcpy完成的密钥更新。
最后调用impl_->UpgradeKey返回更新结果。
说明:这个system/keymaster目次下是一个AndroidKeyMintDevice的实现。而假如要具体和trusty通信来进行密钥更新。可以参考trusty的TrustyKeyMintDevice的实现。这部分,不同的厂商可以有自己不同的实现:
源码路径:system/core/trusty/keymaster/keymint/TrustyKeyMintDevice.cpp
(3)trusty KeyMintDevice(具体实现服务端的另一个示例)
对于trusty的KeyMintDevice的实现。其在trusty_keymaster_ipc.h中定义了trusty的跨历程通信函数
trusty_keymaster_send.
在TrustyKeymaster.cpp中调用trusty_keymaster_send进行了跨历程通信和trusty的TA进行了交互:
这样,更新密钥的请求就到了trusty 的TA中。
四、trusty TA对硬件的操纵调用和通信
接下来我们看看trusty的keymaster TA端的实现:
源码路径:https://android.googlesource.com/trusty/app/keymaster/+/refs/tags/android-15.0.0_r23
这里,在Android端的TrustyKeymaster.cpp调用UpgradeKey接口以后。会跨进行通信到trusty的TA端:
比如在keymaster_ipc.cpp中会处理KM_UPGRADE_KEY消息:进行派发和TA内部的处理:
上面UpgradeKey是一个函数指针。会调用TrustyKeymaster的UpgradeKey函数中(trusty_keymaster.cpp)。AOSP里UpgradeKey函数貌似没有做参考实现(大概我没有找到)。但其他,比如KM_SET_WRAPPED_ATTESTATION_KEY等消息对应的函数有提供参考实现用作示例。
这里,我们看下KM_SET_WRAPPED_ATTESTATION_KEY消息的调用链来分析一下ta的核心功能的实现:
1.起首会构造一个AttestationKeySlot的对象 key_slot
最后,会通过SecureStorageManager对象,将这个key_slot对象写到存储装备上去:
固然,最终的写入也是通过memcpy和snprintf来实现:
这样,最终就到了硬件层面的文件节点操纵。
五、总结
从上面的源码分析,我们可以看到
1.从应用APP层面不停到trusty TA的团体调用链条
2.以及各个调用步调干系的安全模块
3.以及其源码分布环境(framework+kernel)。
能够团体架构上审阅Android端的架构计划。
ps:后续,我们将从【软件架构视角】和【安全架构视角】逐个分析各调用流程涉及的各个模块。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/)
Powered by Discuz! X3.4