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

这篇具有很好参考价值的文章主要介绍了我的NPI项目之Android 安全系列 -- Keymaster到底是个什么。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近因为一直在调研独立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包解压后,内容如下:

keymaster分区,安全,android,partition

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

keymaster分区,安全,android,partition

可以看到里面的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的相关概念,简单的流程图如下:

keymaster分区,安全,android,partition

简单的说就是签名和验签的过程, 确保用本公司自己的签名工具签过的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分区,安全,android,partition

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内容如下:

keymaster分区,安全,android,partition

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

keymaster分区,安全,android,partition

从高通得知,这个是高通平台封装的TA,是通过编译脚本打包进ROM包中。有一个问题是,那么TEE的整个运行环境是如何更新的?文章来源地址https://www.toymoban.com/news/detail-840288.html

到了这里,关于我的NPI项目之Android 安全系列 -- Keymaster到底是个什么的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CocoaPods 在iOS开发中养活了这么多项目,它到底是个啥?

    对于iOS开发者而言,CocoaPods并不陌生,通过pod相关的命令操作,就可以很方便的将项目中用到的三方依赖库资源集成到项目环境中,大大的提升了开发的效率。CocoaPods作为iOS项目的包管理工具,它在命令行背后做了什么操作?而又是通过什么样的方式将命令指令声明出来供我

    2024年02月08日
    浏览(49)
  • socket 到底是个啥

      哈喽大家好,我是咸鱼   我相信大家在面试过程中或多或少都会被问到这样一个问题: 你能解释一下什么是 socket 吗   我记得我当初的回答很是浅显:socket 也叫套接字,用来负责不同主机程序之间的网络通信连接,socket 的表现方式由四元组(ip地址:端口)组成   那么今

    2023年04月13日
    浏览(34)
  • Android keymint(keymaster)一RKP

    RKP is remote key provisioing. 以前我们生产手机平板项目的时候,是从Google申请attestation key(google key),在产线使用工具写入手机或平板设备中。 这种写入的方式有一个安全隐患: 从Google申请的证书和密钥,有私钥泄露的隐患,因此从Android S开始,google提出了一个RKP的做法。简单来

    2024年02月15日
    浏览(134)
  • Web3到底是个啥?

    Web3是近两年来科技领域最火热的概念之一,但是目前对于Web3的定义却仍然没有形成标准答案,相当多对于Web3的理解,都是建立在虚拟货币行业(即俗称的“币圈”)的逻辑基础之上的。 区块链服务网络(BSN)的核心理念,是在互联网上推动建立一个新的公共层,服务于各行

    2024年02月14日
    浏览(37)
  • ​Web3到底是个啥?

    Web3到底是个啥? Web3是近两年来科技领域最火热的概念之一,但是目前对于Web3的定义却仍然没有形成标准答案,相当多对于Web3的理解,都是建立在虚拟货币行业(即俗称的“币圈”)的逻辑基础之上的。 区块链服务网络(BSN)的核心理念,是在互联网上推动建立一个新的公

    2024年02月14日
    浏览(41)
  • vnpy到底是个什么东西?

    vnpy定位是量化交易平台,提供从交易API对接到策略自动交易的完整解决方案,对接了国内外诸多不同类型的金融市场:证券、期货、期权、外汇、数字货币等。有回测功能,但支持较弱。 vnpy对windows支持较好,提供了python发行版,其内置了最新版的vnpy框架以及vnpy量化管理平

    2024年02月11日
    浏览(40)
  • ChatGPT到底是个啥 - 它甚至会和狗说话

    写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成,愿将昔日所获与大家交流一二

    2024年02月03日
    浏览(48)
  • AIGC到底是个啥? AI和AIGC的区别有哪些

      说来说去,到底什么是AIGC呢?AIGC是人工智能生成内容的缩写,是一种基于生成对抗网络(GAN)、大型预训练模型等人工智能技术的方法,通过对已有数据进行学习和模式识别,以适当的泛化能力生成相关内容的技术,AIGC的应用领域有很多例如,AIGC可以用于自动生成新闻、

    2024年02月08日
    浏览(44)
  • 越来越火的Serverless(无服务器计算),到底是个啥?

    今天这篇文章,我们来聊一个云计算领域的热门概念——Serverless。 到底什么是Serverless? 英语好的童鞋,可能一眼就看出来了,Serverless是由Server和less两个词根组成的词。从字面上理解,就是“无服务器”。 行业通常所说的Serverless,主要是指 “无服务器计算(Serverless Comp

    2024年02月03日
    浏览(46)
  • 云原生到底是个啥玩意?从云端降临的超级技术:云原生

    目录 福利:文末分享云原生相关全套资料哦 一、云计算?云原生? 二、云原生带来什么好处 7个字:隔离、弹性、自动化。 三、云原生的基础知识 四、云原生中最重要的概念 1、虚机 2、容器 3、容器编排 4、VPC 5、微服务(Microservices) 6、服务网格(Service Mesh) 7、无服务器

    2024年02月08日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包