论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
软件与程序人生
›
云原生
›
Android安全付出(1)-团体架构-keymint
Android安全付出(1)-团体架构-keymint
勿忘初心做自己
论坛元老
|
2025-3-27 11:51:59
|
显示全部楼层
|
阅读模式
楼主
主题
1722
|
帖子
1722
|
积分
5166
目次
一、团体架构
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企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
勿忘初心做自己
论坛元老
这个人很懒什么都没写!
楼主热帖
新一代企业级安全OneDNS
记一次有意思的业务实现 → 单向关注是 ...
集合论第6-8章
将git仓库从submodule转换为subtree ...
DNS协议
redis 工具类
Python 开发 漏洞的批量搜索与利用.(G ...
SignalR 2 与mvc 5实现实时聊天功能 ...
数字工厂介绍
反射 p1 反射机制
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
数据仓库与分析
快速回复
返回顶部
返回列表