android 数据请求加密,通过 Android keystore 和 fingerprint 结合实现数据加密和解密

本文详细介绍了如何在 Android 中使用 Keystore 系统和指纹验证实现数据的安全加密和解密。通过设置密钥为强制授权访问,并结合指纹认证,确保只有在用户完成身份验证后才能对数据进行加解密操作。文章涵盖了 Keystore 的功能、身份验证流程、指纹识别匹配的原理,以及具体的加密和解密示例代码。
摘要由CSDN通过智能技术生成

本文目标是通过结合 Android Keystore 和 Fingerprint 来安全的对数据进行加密,并且能够通过指纹身份验证之后对数据进行解密。

了解 Keystore

Android Keystore 系统可以在一个安全的容器中(如:借助于系统芯片中提供的可信执行环境 TEE)存储加密密钥,在我们的加密密钥进入 Keystore 之后,可以在不用导出密钥的前提下完成加密操作,Keystore 支持的操作有:

生成密钥

导入和导出非对称密钥

导入原始对称密钥

使用适当的填充模式(padding modes)进行非对称加密和解密

使用摘要和适当的填充模式(padding modes)进行非对称签名和验证

以适当模式(包括 AEAD 模式)进行对称加密和解密

生成和验证对称消息验证码(Message Authentication Codes, MAC)

另外,我们可以结合身份验证系统(如指纹验证)来实现只有在用户完成身份验证之后才能使用密钥,即可以让应用指定密钥的授权使用方式,一旦生成或导入密钥,授权方式将无法更改,并且之后每次需要使用密钥时,都会由 Android Keystore 库强制执行授权。

本文的代码实现主要基于 Android 6.0 以上,因为从 Android 6.0 开始不仅增加了对称加密算法(AES 和 HMAC)的支持,还增加了针对硬件支持的密钥访问控制系统,访问控制的逻辑会在密钥生成期间指定,并在整个生命周期内被强制执行。

其他参考:

我们下面就接着先看下 Android 的身份验证。

身份验证

在 Android 中,主要通过 Gatekeeper(用于 PIN 码/解锁图案/密码身份验证)和 Fingerprint(用于指纹身份验证)来实现身份验证。

并且 Gatekeeper 和 Fingerprint 会通过与 Keystore 组件进行沟通身份验证的状态。

从 Android 9 开始使用 BiometricPrompt 统一封装了指纹和其他生物识别技术。

下图展示了 Fingerprint,Keystore 等等一起参与的整个的身份验证流程:

9ae81fd55ee28fa9eb70cf0c91a3b5f4.png

用户可以通过 PIN/Pattern/Password 或 指纹 方式进行验证:

对于 PIN/解锁图案/密码,主要通过 LockSettingsService 向 gatekeeperd 发出验证请求;

对于 指纹,会通过 FingerprintService 向 fingerprintd 发起验证请求;

gatekeeperd/fingerprintd 守护进程会将待验证数据发送至 TEE 中的副本 gatekeeper/fingerprint,并由相关副本生成 AuthToken(并使用了 AuthToken HMAC 签名)并发送到 gatekeeperd/fingerprintd 守护进程;

守护进程 gatekeeperd/fingerprintd 收到经过签名的 AuthToken 之后,再通过 KeyStore 服务 Binder 接口的扩展程序将 AuthToken 传入 Keystore Service;

Keystore Service 将 AuthToken 传给 TEE 中的 Keymaster,并使用与 gatekeeper 和 fingerprint 共用的密钥进行验证;

关于 Fingerprint

下面我们具体看下指纹,现在很多的手机上都已配备有指纹传感器,在这些手机上我们可以注册一个或多个指纹,然后使用指纹来解锁手机或执行其他任务(例如:很多涉及转账类的 App 中的免密支付功能),

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值