我的NPI项目之Android 安全系列 -- Keymaster到底是个什么

news2024/12/24 21:44:01

最近因为一直在调研独立secure element集成的工作,不巧的是目前使用的高通平台只有NFC-eSE的方案。高通目前也并不支持独立的eSE集成,codebase中并无相对应的代码。举个例子,目前使用的STM的一款eSE,但是这款eSE的开发STM还没有完成(搞不清楚,为什么就可以被选来用于项目),STM需要将code release给到高通进行validation的操作,高通集成进codebase之后,才能使可用状态,我理解这个也是进Qualcomm PVL的基本方法。

说一下Keymaster,之前的项目上是有过Keymaster相关经验的。Qualcomm SDM660的平台(至少是Android6 launch)基于这个平台,我们在Android N上launch了一个产品,产品为Gpc60,当时对应的keymaster1.0。通过观察,ota包解压后,里面有个两个镜像文件,keymaster.img

这里插一个Google version binding的项目:https://source.android.com/docs/security/features/keystore/version-binding?hl=zh-cn

通过绑定的系统版本和安全补丁信息,阻止针对攻击的系统回滚!详细的后面继续深度研究一下 。 

将OTA包解压后,内容如下:

这里最大的内容是,payload.bin文件,其它部分后面再看。通过,payload_dumper工具能够将payload.bin 的内容导出:

可以看到里面的keymaster.img,update engine能够通过分区表中的分区名称查找镜像文件,并用来更新分区。分区表的内容通常和Emergency download的tool中对应的xml分区表是一致的。通常,分区表中内容是由Qualcomm进行定义的,codebase中自带。

那好,这里留一个疑问,keymaster.img和androd.hardware.keymaster@1.0-service的关系是什么?

为弄清楚上面这个问题,继续理解Qualcomm Android Security中的keymaster相关的技术。有幸经历了三个高通平台和Android6~Android14的8个Android的OS的开发过程。就先从Android6的keymaster1开始。在Android6(M)中,我们可以看到,要支持keymaster,

首先要物理分区表进行配置,早期都是使用的emmc作为存储。配置如下:

<partition label="keymaster" size_in_kb="256" type="4F772165-0F3C-4BA3- BBCB-A829E9C969F9" bootable="false" readonly="false" filename="keymaster.mbn" />
 

这里还涉及tz和metadata的内容,tz的具体内容暂时先不看,主要看下metadata。分区表中,有单独的metadata的分区配置,但是目前也不是很清楚具体的作用,暂时按下不表。但是,可以了解一下vbmeta。

vbmeta 是Android 8.0 以后引入的一个机制,用于保证系统启动过程的完整性和安全性。 vbmeta 是一个包含数字签名的元数据文件,其中记录了系统启动过程中需要校验的boot、recovery、system 和vendor 分区的完整性信息,以及用于校验这些分区完整性的公钥。在分区表中通常由如下的分区设定:

<partition label="vbmeta_a" size_in_kb="64" type="4b7a15d6-322c-42ac-8110-88b7da0c5d77" bootable="false" readonly="true" filename="vbmeta.img"/>

<partition label="vbmeta_b" size_in_kb="64" type="77036CD4-03D5-42BB-8ED1-37E5A88BAA34" bootable="false" readonly="true" filename=""/>  //没有文件名称?

<partition label="vbmeta_system_a" size_in_kb="64" type="1344859D-3A6A-4C14-A316-9E696B3A5400" bootable="false" readonly="true" filename="vbmeta_system.img"/>

<partition label="vbmeta_system_b" size_in_kb="64" type="FE3AB853-5B66-4D4A-BF85-8D90AF1C2C4A" bootable="false" readonly="true" filename=""/> //没有文件名称?

看下verify boot是什么概念:先看看Google的相关概念,简单的流程图如下:

简单的说就是签名和验签的过程, 确保用本公司自己的签名工具签过的image来启动机器。签名的过程就是获取分区的摘要(摘要通常就是一个数据块的hash值),使用私钥对摘要进行加密,并将加密文件和分区文件打包并刷到机器的磁盘中,例如mmc或者ufs中。

这里涉及到一个问题,这里的signature是存储在哪个位置?通过相关文档,发现是存在了vbmeta.img中了;

验证(verify)的过程就比较简单了,同样对分区取摘要为摘要A,对签名进行解密得到之前签名时的分区镜像文件的摘要为摘要B,对A/B进行比较,如果摘要一直,那么验签成功。针对Android的Verified boot后面要重点讲一下。

这里继续keymaster的故事,看一下一些名称需要理解和记忆:

AndroidKeystore 是供应用访问 Keystore 功能的 Android Framework API 和组件。它是作为标准 Java Cryptography Architecture API 的扩展程序实现的,包含在应用自己的进程空间中运行的 Java 代码AndroidKeystore 通过将与密钥库行为有关的应用请求转发到密钥库守护程序执行这些请求。//最好自己写一下测试app进行调试看看

密钥库守护程序是 Android 系统中的一个守护程序,该程序通过 Binder API 提供对所有密钥库功能的访问权限(java的后端,AIDL)。密钥库守护程序负责存储“密钥 blob”。密钥 blob 中包含已加密的实际密钥材料,因此密钥库可以存储这些材料,但无法使用或显示这些材料。(比如说?)

keymasterd 是一个 HIDL 服务器,可提供对 Keymaster TA 的访问权限。(此名称未进行标准化,仅用于说明概念。)(keymaster@1.0-service.rc/ keymaster@4.0-service.rc/keymaster@3.0-service). e.g :keymaster@3.0-service, 这个便是keymasterd的一个实例。

Keymaster TA(可信应用)是在安全环境(大多数情况为 ARM SoC 上的 TrustZone)中运行的软件。它可提供所有安全的密钥库操作,能够访问原始密钥材料,在密钥上验证所有访问权限控制条件,等等。(ps操作命令可以能访问到吗?肯定是不能够的,因为运行在TEE中);

LockSettingsService 是负责用户身份验证(包括密码和指纹)的 Android 系统组件。它不是密钥库的一部分却与其相关,因为很多密钥库密钥操作都需要对用户进行身份验证。LockSettingsService 与 Gatekeeper TA 和 Fingerprint TA 进行交互以获取身份验证令牌,并将其提供给密钥库守护程序,这些令牌最终将由 Keymaster TA 应用使用。

Gatekeeper TA(可信应用)是在安全环境中运行的另一个组件,它负责验证用户密码并生成身份验证令牌(用于向 Keymaster TA 证明已在特定时间点完成对特定用户的身份验证)。

Fingerprint TA(可信应用)是在安全环境中运行的另一个组件,它负责验证用户指纹并生成身份验证令牌(用于向 Keymaster TA 证明已在特定时间点完成对特定用户的身份验证)

继续回到上面的问题:keymaster.img和androd.hardware.keymaster@1.0-service的关系是什么?手边刚好有Android12 的代码作为O设备的launch的设备MR。 对应的service是android.hardware.keymaster@3.0-service。对应的partition.xml内容如下:

那就要看看keymaster64.mbn的编译脚本,就可以知道keymaster64.mbn的内容。但开始可以确认的是,android.hardware.keymaster@3.0-service 是属于vendor分区的一部分,会被打包到vendor.img中。有点意思,keymaster64.mdn的内容到底是啥?(引导加载密钥?)

从高通得知,这个是高通平台封装的TA,是通过编译脚本打包进ROM包中。有一个问题是,那么TEE的整个运行环境是如何更新的?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1489353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mint_21.3 drawing-area和goocanvas的FB笔记(三)

一、改变goocanvas线条自动画线时间间隔 通过系统SIGALRM信号触发&#xff0c;每秒画一条线对于慢温湿度等慢变信号可以应付&#xff0c;但对于快速信号1秒的间隔就太慢了。可以改变方式&#xff0c;通过另外的线程&#xff0c;完成要做的任务。 1. 线程的回调函数 myfunc 2…

串的定义及BF算法

定义 BF算法——朴素查找算法——也叫做串的模式匹配算法 其应用特别多&#xff0c;比如经常在一篇文章里面搜索一些东西&#xff0c;&#xff08;比如文章里的某个内容&#xff0c;或某些关键字词出现的位置&#xff0c;次数等&#xff09; 之前我们大多数情况下是用来搜索关…

在Ubuntu中安装pycharm的专业版且可以激活到2099年(保姆级教学,值得借鉴与信任)

一、进入官网&#xff0c;下载Pycharm2021.3版本 1.官网如下 https://www.jetbrains.com/pycharm/2.在浏览器中进入官网后&#xff0c;点击Download 3.再点击右下角的Other versions 4.选择Version 2021.3下的2021.3-Linux(tar.gz)进行下载 二、安装Pycharm2021.3 1.先将该压…

还在手动Word转PPT?快来试试这些一键生成工具!

在我们日常的工作和学习中&#xff0c;将Word转化成PPT的需求时常出现&#xff0c;尤其是当我们需要进行演讲或者报告时。这不仅能使我们的演讲更具视觉冲击力&#xff0c;也有助于我们更好地传达信息。 那么&#xff0c;如何才能轻松地将Word转换成PPT呢&#xff1f;下面将为…

MWC 2024 | 紫光展锐推出业界首款全面支持5G R16宽带物联网特性的芯片平台V620

要点&#xff1a; 紫光展锐V620支持5/4/3/2G全网通。支持NR 2CC和LTE 5CC&#xff0c;在SA网络下&#xff0c;其5G下行速率可达4.67Gbps&#xff0c;上行速率高达1.875Gbps&#xff0c;相比紫光展锐上一代产品提升100%。紫光展锐V620率先支持5G TSN&#xff0c;把5G应用于工业…

汽车设计的视觉盛宴:艺术家的渲染效果图集锦

对于那些对汽车渲染艺术充满热情的朋友来说&#xff0c;"至臻汽车"渲染效果图总是心之向往。本回&#xff0c;我们精心准备了第十届3dmodels年度汽车渲染比赛的佳作&#xff0c;收录了来自全球的顶级创作者的精彩作品。每张作品都代表了艺术家对精细质感的深究及对极…

基于springboot+vue的流浪宠物管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

【每日刷题】数组-LC56、LC238、随想录1、LC560

1. LC56 合并区间 题目链接 Arrays.sort先让intervals里的子数组按照子数组的第一个数字值从小到大排列。开一个新数组&#xff0c;newInterval&#xff0c;存放合并好的子数组让intervals的当前子数组i的第一个数字与newInterval的当前子数组index的最后一个数字比较大小&am…

软文推广带来的收录排名提升,助你在搜索引擎中脱颖而出

互联网营销是一种不受时间和空间限制的营销方式&#xff0c;是一些中小企业成本低、效果好的推广方式。 行业做软文推广&#xff0c;最重要的是选择合适的软文推广平台&#xff0c;现在市场上有很多软文推广平台&#xff0c;这使得很多企业难以选择&#xff0c;此时企业需要学会…

回溯算法套路③排列型回溯+N皇后【基础算法精讲 16】

46 . 全排列 链接 : . - 力扣&#xff08;LeetCode&#xff09; 思路 : 那么怎么确定选了那个数呢? 这里设置一个used表示i选没选过 ; class Solution { public:vector<vector<int>> ans;vector<int> path;void backtrack(vector<int>nums,vect…

常见漏洞的流量特征

1、SQL注入漏洞 查看url / Referer字段/User-Agent字段/cookie字段 出现一些特殊字符&#xff08;eg&#xff1a;单引号【‘】、双引号【“”】、括号【&#xff08;&#xff09;】、单引号括号【‘&#xff08;】、双引号括号【“&#xff08;】等一些常见的特殊的字符&#…

ansible执行速度慢问题解决过程

ansible执行速度慢问题解决过程 一、初见端倪二、问题分析三、解决问题更多技术博客,请关注微信公众号:运维之美 接到项目反馈,客户环境使用我们提供工具部署产品,在主机添加步骤卡了很久,实施同学没有办法,将问题上升给我们。 环境信息:kylin10 架构:arm 一、初见…

【NR 定位】3GPP NR Positioning 5G定位标准解读(四)

目录 前言 6 Signalling protocols and interfaces 6.1 支持定位操作的网络接口 6.1.1 通用LCS控制平面架构 6.1.2 NR-Uu接口 6.1.3 LTE-Uu接口 6.1.4 NG-C接口 6.1.5 NL1接口 6.1.6 F1接口 6.1.7 NR PC5接口 6.2 终端协议 6.2.1 LTE定位协议&#xff08;LPP&#x…

python二级常见题目

一.常见语法 jieba—第三方中文分词函数库 jieba—第三方中文分词函数库_jieba库函数-CSDN博客 Python基础——format格式化 Python基础——format格式化_python format-CSDN博客 format()方法的使用超全_format方法-CSDN博客 Python中random函数用法整理 Python中random…

如何在CentOS部署JumpServer堡垒机并实现无公网ip环境远程访问

文章目录 前言1. 安装Jump server2. 本地访问jump server3. 安装 cpolar内网穿透软件4. 配置Jump server公网访问地址5. 公网远程访问Jump server6. 固定Jump server公网地址 前言 JumpServer 是广受欢迎的开源堡垒机&#xff0c;是符合 4A 规范的专业运维安全审计系统。JumpS…

网络进程:广播、组播、流式域、报式域(套接字)

1.广播 1.1广播发送端模型(类似UDP客户端) 程序代码&#xff1a; #include<myhead.h> int main(int argc, const char *argv[]) {//创建套接字int sfdsocket(AF_INET,SOCK_DGRAM,0);if(sfd-1){perror("socket error");return -1;}//将套接字设置成允许广播i…

【金三银四】每日一点面试题(Java--JVM篇)

1、说一下 JVM 的主要组成部分及其作用&#xff1f; JVM&#xff08;Java虚拟机&#xff09;是Java程序运行的核心组件&#xff0c;它负责将Java字节码翻译成底层操作系统能够执行的指令。JVM由以下几个主要组成部分构成&#xff1a; 类加载器&#xff08;Class Loader&#…

【sgCollapseBtn】自定义组件:底部折叠/展开按钮

特性&#xff1a; 支持自定义折叠状态支持自定义标签名称 sgCollapseBtn源码 <template><div :class"$options.name" click"show !show" :placement"placement"><div class"collapse-btns"><div class"c…

9.WEB渗透测试-Linux基础知识-Linux用户权限管理(上)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;8.WEB渗透测试-Linux基础知识-Linux基础操作&#xff08;二&#xff09;-CSDN博客 用户管…

10个软件测试的吐槽点!

问题一&#xff1a;测试时间评估 这是一个工作日常经常需要回复的问题&#xff0c;理论上&#xff0c;测试这边要做出较科学合理的回复&#xff0c;那就要将【需求变更】、【开发进度延误】、【bug 修复不稳定】、【复杂业务流程】、【测试环境不稳定】、【上下游服务依赖】、…