Android安全支付(3)-安全架构-KeyStore2-Key类簇和Spi类簇

Android KeyStore2实战:从Key类簇到Spi类簇的完整解析(附避坑指南) 本文深入解析Android KeyStore2的核心架构,重点剖析Key类簇与Spi类簇的设计原理与工作机制。通过实战示例,详细阐述如何在安全支付等场景下进行密钥生命周期管理,并提供了密钥属性配置、生物特征认证及跨版本兼容性等关键避坑指南,帮助开发者构建更安全可靠的Android应用。 阅读详情

目录

一、Key类簇

 1.最顶层的父类AndroidKeyStoreKey

 2.派生的公私钥类

3.具体的算法相关的秘钥类

二、Spi类簇

1.AndroidKeyStoreKeyPairGeneratorSpi

2.AndroidKeyStoreECDSASignatureSpi

3.AndroidKeyStoreSpi

4.加密相关的Spi类【重点】


前面,我们从类结构视角看了下KeyStore2的整体类结构派生关系和设计。这里,我们逐个看下每个KeyStore2的类分别提供了什么能力。主要分为2个部分

一、Key类簇

我们前面在KeyStore2的部分整体看了Key类簇的整体框架设计如下:

这里,我们进一步深入看下这些类:

 1.最顶层的父类AndroidKeyStoreKey

这里主要保存了秘钥描述信息、KeyId(秘钥id)、mAuthorizations(秘钥的访问控制策略)mAlgorithm、mSecurityLevel这些信息。这些是无论公钥还是私钥,无论那种算法都会涉及的信息,所以放在基类中:

 2.派生的公私钥类

进一步,除了秘钥本身的存储和表示之外,对于不同的秘钥类型,比如公钥,还需要确保公钥来源的可信,比如验证公钥是否由
可信的CA签发。因此除了mCoded来存储编码后的公钥外,还在公钥类中设计了mCertificate和mCertificateChain来存储公钥相关的证书和证书链。是1的子类


3.具体的算法相关的秘钥类(如RSA、EC等)

因为不同的加密算法会使用不同的数学原理和数据结构来表示密钥(比如RSA这类非对称算法通常会用模数n和私钥指数d来表示私钥,由模数n和公钥指数e来表示公钥。而EC由椭圆曲线参数和私钥值d来表示私钥,由椭圆曲线参数和公钥点(x,y)来表示公钥)。是2的子类
RSA:

EC:


总结:因此,不同的算法秘钥类,有其不同的成员变量和秘钥类接口实现。(接口同理)
通过这样一个类簇,就能完成对相应秘钥的管理和操作。并且具备良好的扩展性。

二、Spi类簇

前面在KeyStore2部分也整体看了Spi框架这部分的类框架设计。这里看下几个比较核心的:

1.AndroidKeyStoreKeyPairGeneratorSpi

我们可以看到这个类簇
(1)定义了一些直接以算法命名的静态内部类,如RSA、EC、XDH、ED25519.
(2)还定义了一个MAP数组,存储了算法名称和秘钥长度的对应关系。
(3)有一个KeyStore2的成员变量。
其核心功能就是在抽象父类中定义的 generateKeyPair函数。此外还有一些检查秘钥目的的函数。

2.AndroidKeyStoreECDSASignatureSpi

这个类主要是使用Android KeyStore生成ECDSA数字签名。(先基于不同哈希算法计算出一个哈希值,然后使用私钥对哈希值进行签名)。这里也定义了很多哈希算法名称命名的静态内部类。
会调用从父类继承的Signature类型对象mSignature来完成签名动作。 

3.AndroidKeyStoreSpi

主要是KeyStore秘钥设置、获取和校验以及和keystore启动加载的功能(根据密码判断是否加载)。

4.加密相关的Spi类【重点】

这部分整体的框架如下:

ps:注意的这里有一个AndroidKeyStoreUnauthenticatedAESCipherSpi和AndroidKeyStoreAuthenticatedAESCipherSpi。
(1)一个是普通 AES(Unauthenticated) 只适合某些本地加密场景,例如数据库加密。适用于 AES/CBC/PKCS7Padding 和 AES/ECB/PKCS7Padding 等传统 AES 模式。由于没有额外的身份验证标签,攻击者可以篡改密文,而不会被检测到。特别是在 AES-CBC 模式 下,容易遭受 Padding Oracle 攻击。早期的加密方案(如 AES-CBC)广泛使用,不支持身份验证,因此 Android 需要保留UnauthenticatedAESCipherSpi以兼容旧系统。

(2)Authenticated AES 需要额外的计算资源来生成和验证身份验证标签,因此比普通 AES 稍微慢一些。如果应用场景不需要数据完整性保护,使用 普通 AES 可以减少计算开销。现代应用越来越多地采用 AES-GCM/AES-CCM,所以 Android 也提供AuthenticatedAESCipherSpi来增强安全性。

下一步,我们将整理和看下更底层一点的keymaster部分的框架。【技术灌水可进q:1033627716】

Android安全开发实战:TEE与SE架构解析与漏洞防范 在移动安全领域,硬件级安全机制是构建可信应用的基础。其核心原理是通过硬件隔离创建独立于主操作系统的安全执行环境,从而保护敏感代码与数据免受恶意软件攻击。这一技术为移动设备带来了金融级的安全保障,在支付、身份认证、数字版权保护等场景中发挥着关键作用。Android生态通过TEE与SE两大核心组件实现这一目标,其中TEE作为可信执行环境,提供了操作系统内的安全隔离,而SE作为安全元件,则提供了硬件级的安全堡垒。开发者常遇到的漏洞包括通信完整性校验缺失和逻辑漏洞,这些都需要通过严格的安全编码实践来防范。本文聚焦于 阅读详情

相关推荐

Android KeyStore流程

文章目录一、Keystore二、Keystore架构及接口函数1. Keystore组件架构2. IKeymasterDevice.hal中的几个重要接口函数2.1 begin函数2.2 update函数2.3 finish函数2.4 abort函数3. Keymaster TA4. 对称密码函数API三、从Keystore到Keymaster的完整分析1. cts问题2. 代码流程分析2.1 模块调用关系2.2 代码分析 一、Keystore keystore主要是对密钥库的控制操作,包括密钥的生

楼中望月 1万+

【专题】Android13安全架构详解

讲解最新最全的Android安全架构,本课程包含但不限于以下课程:密码锁/locksetting/gatekeeper生物认证/指纹/人脸keystore/keystore2/keymaster/keymintgooglekey/attestationKeycts/vts/CDD解读代码导读、流程分析安全业务的设计TEE简介

深入学习嵌入式: Keystore、Keystore2、Keymaster和Keymint

本文将深入探讨嵌入式系统中的关键技术之一,即Keystore、Keystore2、Keymaster和Keymint。我们将介绍这些概念的背景和功能,并提供一些相应的源代码示例。通过深入学习Keystore、Keystore2、Keymaster和Keymint,我们可以更好地理解嵌入式系统中的密钥管理和安全性。这些组件为开发人员提供了强大的工具和功能,以确保在嵌入式环境中的数据安全和加密操作的可靠性。深入学习嵌入式: Keystore、Keystore2、Keymaster和Keymint。

PixelPusher的博客 1201

keystore 介绍

Keytool 是一个有效的安全钥匙和证书的管理工具. Java 中的 keytool.exe (位于 JDK\Bin 目录下)可以用来创建数字证书,所有的数字证书是以一条一条(采用别名区别)的形式存入证书库的中,证书库中的一条证书包含该条证书的私钥,公钥和对应的数字证书的信息。证书库中的一条证书可以导出数字证书文件,数字证书文件只包括主体信息和对应的公钥。 Keytool 把钥匙和证书储存到一个...

marlay@126.com 597

Keystore2代码导读与深入解析

密钥的生成和导入过程中,Keystore2会使用HSM来保护私钥的机密性。Keystore2的引擎实现文件定义了Keystore2的核心逻辑。Keystore2的头文件定义了各种数据结构、函数和常量,用于实现Keystore2的核心功能。通过对Keystore2的代码导读与深入解析,我们可以更好地理解其工作原理和核心功能,并能够在嵌入式系统中更安全地管理密钥和证书。函数导入指定别名的密钥。需要注意的是,在实际应用中,我们还需要处理密钥和证书的管理、存储以及相关安全性的考虑,以确保数据的保密性和完整性。

Orion_O的博客 1463

【信息科学与工程学】【安全领域】 第八十八篇 网络空间安全21

如果员工认为安全政策和流程(如复杂的密码规则、频繁的认证、繁琐的软件安装审批)阻碍了工作效率,他们可能会寻找变通方法,例如:写下密码、共享账户、使用未经批准的云服务(影子IT)、绕过安全控制。例如,一个用于显示用户列表的API,可能返回每个用户的完整个人资料,包括邮箱、地址、电话等敏感字段,而前端可能只显示了姓名。:在OAuth 2.0或OIDC流程中,攻击者可能截获授权请求中的“授权码”,或窃取“访问令牌”,然后将其用于另一个客户端(非原始授权的客户端),从而以用户身份访问受保护的资源。

weixin_49199313的博客 436

Android安全支付(2)-软件架构-KeyStore2-APP到Framework层的调用

验证签名的真实性,确保交易合法。服务器端预存了APP的公钥,收到请求后,使用该公钥对签名进行验证,确保数据未被篡改。2.在交易请求时,APP使用KeyStore中的私钥对交易数据进行数字签名。这个签名可以保证数据的完整性和真实性。2.将公钥Base64编码后传到服务器端。并且将公钥和用户ID绑定。这里要指定KeyGenParameterSpec的初始化对象。1.首先在应用(钱包)首次安装或首次使用时,在。生成的密钥只能在当前设备上使用,且无法导出。签名交易数据并发送给服务器。,因为私钥永远不会离开设备!

Android系统开发-VR OS-系统安全隐私 1271

keystore2代码导读笔记

setWrappedKeyEntry – AndroidKeyStoreSpi.javaIKeystoreSecurityLevel.aidlimport_key – system/security/keystore2/src/security_level.rskm_dev.importKey(&params, format, key_data, None /* attestKey */) — 调用到Vendor HAL---->TA

baron-周贺贺-代码改变世界ctw 1614

Play Integrity Fix终极指南:2025年Root设备绕过Google认证的完整解决方案

在Android设备Root的世界里,Google Play Integrity验证机制一直是开发者与用户之间的技术博弈。当你解锁bootloader并安装Magisk后,Google Play商店会无情地标记设备为"未认证",导致金融应用、支付服务和部分游戏无法正常使用。Play Integrity Fix项目正是为了解决这一核心痛点而生,通过巧妙的系统级干预,让Root设备重新获得Google

gitblog_01108的博客 640

Keystore/Keystore2/Keymaster/Keymint 深入剖析 嵌入式

本文深入学习了 Keystore、Keystore2、Keymaster 和 Keymint 这些在嵌入式系统中保护和管理密钥的关键组件。Keystore、Keystore2、Keymaster和Keymint 是一系列用于保护和管理密钥及其相关操作的关键组件。安全的密钥派生:Keystore2 支持衍生密钥派生(Key Derivation),通过一个主密钥衍生出多个子密钥,从而更好地保护密钥和数据。密钥生成和导入:Keymaster 支持生成和导入各种类型的密钥,包括对称密钥、非对称密钥和证书等。

CyberSphinx的博客 1448

keystore/keystore2/keymaster/keymint 深入学习

Keymaster的发展历程 keymaster0.2/0.3 非常简单的密码学服务,提供数字签名和验证操作 keymaster1.0 增加对称加密单元(AES和HMAC) keymaster3.0 从旧式 C 结构硬件抽象层 (HAL) 转换到根据新硬件接口定义语言 (HIDL), 支持 ID (IMEI/MEID)认证 keymaster4.0 支持嵌入式安全元件、支持密钥导入、支持3DES、版本绑定(boot.img,system.img) 2、软件架构 在android11及其之前的版本中

baron-周贺贺-代码改变世界ctw 6641

Play Integrity Fix:Root设备完美通过Google认证的终极解决方案

对于Android设备Root用户来说,最大的困扰莫过于Google Play Integrity验证失败。当您解锁bootloader并安装Magisk后,银行应用闪退、支付服务无法使用、游戏应用拒绝启动等问题接踵而至。Play Integrity Fix正是解决这一痛点的革命性Magisk模块,它通过巧妙的系统级干预技术,让Root设备重新获得Google的信任认证。 ## 为什么Root设

gitblog_00466的博客 1964

即梦文生视频逆向接口部署使用

有的小伙伴不知道这个地址如何填写,你可以理解是步骤3上提供的 服务器或者本地电脑IP 地址(不要写 http://127.0.0.1 或者http://localhsot ) 是 (192.168.XXX.XXX 参考)

weixin_44245188的博客 3179

Play Integrity Fix 2025:Root设备认证修复终极实战指南

当您的Android设备解锁bootloader并安装Magisk后,是否遭遇过Google Play商店的"设备未认证"警告?银行应用闪退、支付服务拒绝启动、游戏检测Root环境——这些困扰正是Google Play Integrity验证机制在发挥作用。Play Integrity Fix项目为您提供了一套完整的解决方案,让Root设备重新获得Google的信任认证。本文将带您深入探索这一技术

gitblog_00485的博客 1094

分布式 Agent 系统设计:高并发场景下的挑战与解决方案

分布式 Agent 系统由多个分布在不同节点上的智能 Agent 组成,这些 Agent 具有自主决策能力,能够通过通信协作完成复杂任务。每个 Agent 可以看作是一个独立的实体,具备感知环境、处理信息、执行动作的功能,它们相互协作,共同实现系统的整体目标。分布式 Agent 系统在高并发场景下面临着资源调度、通信延迟、状态一致性、容错处理和性能瓶颈等诸多挑战。通过采用动态资源分配、高效通信协议、分布式共识算法、冗余备份等解决方案,可以有效应对这些挑战,提高系统的性能、可靠性和可用性。

shuizhudan223的博客 1283

R语言:基于Spatstat包的单变量和双变量平面Ripley‘s K函数分析

因为网上查找得到的R语言K函数分析的资料很少,Spatstat包的介绍也很少,所以抛砖引玉。本文简单介绍了使用R语言spatstat包的Kest,Kcross(Lcross)和Kinhom方法进行了单变量和双变量平面Ripley's K函数分析的方法及代码,希望有所帮助。

hsdcmax的博客 1万+

Play Integrity Fix:解锁Root设备完整性的终极解决方案

在Android设备Root后,您是否遇到过Google Play商店显示"设备未通过认证"的困扰?银行应用闪退、支付服务无法使用、游戏应用拒绝启动,这些看似简单的问题背后,是Google Play Integrity验证机制对Root设备的严格限制。**Play Integrity Fix**作为一个革命性的Magisk模块,通过巧妙的技术手段解决了这一核心问题,让Root设备重新获得Googl

gitblog_00471的博客 329

CloudCompare如何进行二次开发?

CloudCompare源代码编译成功后,即可进行二次开发,可以通过修改源码或者制作插件实现二次开发。本文二次开发采用修改CloudCompare的源代码的方式,分别修改mainwindow.ui、mainwindow.h、mainwindow.cpp,实现扩展功能,克隆选中的点云。

【cacrle】的博客 5326

Androrid KeyStore, KeyStore TA (二)

目标Android Keystore API 和底层 Keymaster HAL 提供了一套基本的但足以满足需求的加密基元,以便使用访问受控且由硬件支持的密钥实现相关协议。除了扩大加密基元的范围外,Android 6.0 中的 Keystore 还增加了以下内容:·        一个使用控制方案,用于限制密钥的使用,并降低因滥用密钥而损害安全性的风险·        一个访问控制方案,用于限定只...

求变,从思想开始 3539

别再为EPI形变头疼了!FSL的topup+eddy实战保姆级教程(含AP/PA数据采集要点)

本文详细介绍了如何使用FSL的topup和eddy工具解决EPI形变问题,包括数据采集要点、参数设置和实战操作步骤。通过AP/PA双编码数据和精确的形变场估计,有效矫正MRI图像中的几何畸变,提升弥散数据质量。特别适合需要处理高场强MRI数据的研究人员和技术人员。

weixin_28725949的博客 397

AI漫剧实战:MiniMaxH3本地部署+ComfyUI工作流,6G显存出长视频

随着AI视频生成技术的普及,创作者开始追求在有限硬件条件下的本地化部署。本地部署不仅降低使用成本,更能获得对生成流程的完全可控性,这为高频次的内容生产提供了基础。以开源工作流引擎ComfyUI为依托,通过量化模型与显存优化,即便是6G显存的中端显卡也能流畅运行MiniMaxH3视频生成模型,输出60秒级别的AI漫剧片段。本文从视频生成原理出发,讲解模型选择、节点搭建、参数调优与提示词结构化设计,并延伸到剧本拆分、角色一致性控制、后期合成及平台变现路径,为AI漫剧创作者提供一套低成本、可复制的工程化方案。无论

weixin_29051149的博客 153

Android编译报错-keystore2

这个两个文件和厂家名称等配置信息有关。

rebeccachong的专栏 609

YOLOv5入门实践(1)——手把手带你环境配置搭建

YOLOv5入门实践第一步,手把手带你配置环境

路人贾的博客 2万+
上一篇: Android安全支付(1)-整体架构-keymint
下一篇: Android安全支付(2)-软件架构-KeyStore2-APP到Framework层的调用
duansilence
博客等级 码龄15年 125粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值