HarmonyOS学习路之开发篇—安全管理(生物特征识别开发)

news/2024/11/22 13:17:19/

生物特征识别开发概述

提供生物特征识别认证能力,可应用于设备解锁、支付、应用登录等身份认证场景。

当前生物特征识别能力提供2D人脸识别、3D人脸识别两种人脸识别能力,设备具备哪种识别能力,取决于设备的硬件能力和技术实现。3D人脸识别技术识别率、防伪能力都优于2D人脸识别技术,但具有3D人脸能力(比如3D结构光、3D TOF等)的设备才可以使用3D人脸识别技术。

基本概念

生物特征识别(又叫生物认证):通过计算机与光学、声学、生物传感器和生物统计学原理等高科技手段密切结合,来进行个人身份的鉴定。

人脸识别:基于人的脸部特征信息进行身份识别的一种生物特征识别技术,用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别,通常也叫做人像识别、面部识别、人脸认证。

运作机制

人脸识别会在摄像头和TEE(Trusted Execution Environment)之间建立安全通道,人脸图像信息通过安全通道传递到TEE中,由于人脸图像信息从REE(Rich Execution Environment)侧无法获取,从而避免了恶意软件从REE侧进行攻击。对人脸图像采集、特征提取、活体检测、特征比对等处理完全在TEE中,基于TrustZone进行安全隔离,外部的人脸框架只负责人脸的认证发起和处理认证结果等数据,不涉及人脸数据本身。

人脸特征数据通过TEE的安全存储区进行存储,采用高强度的密码算法对人脸特征数据进行加密和完整性保护,外部无法获取到加密人脸特征数据的密钥,保证用户的人脸特征数据不会泄露。本能力采集和存储的人脸特征数据不会在用户未授权的情况下被传出TEE,这意味着,用户未授权时,无论是系统应用还是三方应用都无法获得人脸特征数据,也无法将人脸特征数据传送或备份到任何外部存储介质。

约束与限制

  • 当前版本提供的生物特征识别能力只包含人脸识别,且只支持本地认证,不提供认证界面。
  • 要求设备上具备摄像器件,且人脸图像像素大于100*100。
  • 要求设备上具有TEE安全环境,人脸特征信息高强度加密保存在TEE中。
  • 对于面部特征相似的人、面部特征不断发育的儿童,人脸特征匹配率有所不同。如果对此担忧,可考虑其他认证方式。

生物特征识别开发

场景介绍

当前生物特征识别支持2D人脸识别、3D人脸识别,可应用于设备解锁、应用登录、支付等身份认证场景。

接口说明

BiometricAuthentication类提供了生物认证的相关方法,包括检测认证能力、认证和取消认证等,用户可以通过人脸等生物特征信息进行认证操作。在执行认证前,需要检查设备是否支持该认证能力,具体指认证类型、安全级别和是否本地认证。如果不支持,需要考虑使用其他认证能力。

接口名

功能描述

getInstance(Ability ability)

获取BiometricAuthentication的单例对象。

checkAuthenticationAvailability(AuthType type, SecureLevel level, boolean isLocalAuth)

检测设备是否具有生物认证能力。

execAuthenticationAction(AuthType type, SecureLevel level, boolean isLocalAuth,boolean isAppAuthDialog, SystemAuthDialogInfo information)

调用者使用该方法进行生物认证。

getAuthenticationTips()

获取生物认证过程中的提示信息。

cancelAuthenticationAction()

取消生物认证操作。

setSecureObjectSignature(Signature sign)

设置需要关联认证结果的Signature对象,在进行认证操作后,如果认证成功则Signature对象被授权可以使用。设置前Signature对象需要正确初始化,且配置为认证成功才能使用。

getSecureObjectSignature()

在认证成功后,可通过该方法获取已授权的Signature对象。如果未设置过Signature对象,则返回null。

setSecureObjectCipher(Cipher cipher)

设置需要关联认证结果的Cipher对象,在进行认证操作后,如果认证成功则Cipher对象被授权可以使用。设置前Cipher对象需要正确初始化,且配置为认证成功才能使用。

getSecureObjectCipher()

在认证成功后,可通过该方法获取已授权的Cipher对象。如果未设置过Cipher对象,则返回null。

setSecureObjectMac(Mac mac)

设置需要关联认证结果的Mac对象,在进行认证操作后,如果认证成功则Mac对象被授权可以使用。设置前Mac对象需要正确初始化,且配置为认证成功才能使用。

getSecureObjectMac()

在认证成功后,可通过该方法获取已授权的Mac对象。如果未设置过Mac对象,则返回null。

开发步骤

开发前请完成以下准备工作:

  1. 在应用配置权限文件中,增加ohos.permission.ACCESS_BIOMETRIC的权限声明。
  2. 在使用生物特征识别认证能力的代码文件中增加import ohos.biometrics.authentication.BiometricAuthentication。

开发过程:

1. 获取BiometricAuthentication的单例对象,代码示例如下:

BiometricAuthentication  biometricAuthentication = BiometricAuthentication.getInstance(MainAbility.mAbility);

2. 检测设备是否具有生物认证能力:

2D人脸识别建议使用SECURE_LEVEL_S2,3D人脸识别建议使用SECURE_LEVEL_S3。代码示例如下:

int retChkAuthAvb = biometricAuthentication.checkAuthenticationAvailability(BiometricAuthentication.AuthType.AUTH_TYPE_BIOMETRIC_FACE_ONLY, BiometricAuthentication.SecureLevel.SECURE_LEVEL_S2, true);

3. (可选)设置需要关联认证结果的Signature对象或Cipher对象或Mac对象,代码示例如下

// 定义一个Signature对象sign;
biometricAuthentication.setSecureObjectSignature(sign);// 定义一个Cipher对象cipher;
biometricAuthentication.setSecureObjectCipher(cipher);// 定义一个Mac对象mac;
biometricAuthentication.setSecureObjectMac(mac);

4. 在新线程里面执行认证操作,避免阻塞其他操作,代码示例如下:

new Thread(new Runnable() {@Overridepublic void run() {int retExcAuthretExcAuth = biometricAuthentication.execAuthenticationAction( BiometricAuthentication.AuthType.AUTH_TYPE_BIOMETRIC_FACE_ONLY, BiometricAuthentication.SecureLevel.SECURE_LEVEL_S2, true, false, null);}
}).start();

5. 获得认证过程中的提示信息,代码示例如下:

AuthenticationTips tips = biometricAuthentication.getAuthenticationTips();

6. (可选)认证成功后获取已设置的Signature对象或Cipher对象或Mac对象,代码示例如下:

Signature sign = biometricAuthentication.getSecureObjectSignature();Cipher cipher = biometricAuthentication.getSecureObjectCipher();Mac mac = biometricAuthentication.getSecureObjectMac();

7. 认证过程中取消认证,代码示例如下:

int ret = biometricAuthentication.cancelAuthenticationAction();


http://www.ppmy.cn/news/544897.html

相关文章

ChatGPT底层架构Transformer技术及源码实现(一)

ChatGPT底层架构Transformer技术及源码实现 Language Model底层的数学原理之最大似然估计MLE及最大后验概率MAP内部机制详解 Gavin大咖微信:NLP_Matrix_Space 传统人工智能算法的真相(The Truth Under Traditional AI Algorithms),传统人工智能算法是相对于贝叶斯(Bayesia…

《小星星》简谱

一、单手 二、双手

夜晚的星星很...

夜晚的星星很美 回眸一笑的月亮 无法窥见全貌 我的屡屡思念 在梦的边界 冲破所谓的时空 尽情与你相拥 ——谙忆 转载请注明原文地址与作者笔名 原文地址: https://copyfuture.com/blogs-details/20191207013705533k0mjwww7kpb1wnv

闪耀的星星

今天准备签到来着,但是一直弹出来的是小星星,不停闪耀,不知道是不是网络问题导致的呢?

消失的星星

1.设计思路&#xff1a; 通过鼠标点击获取星星出现的位置 创建星星这个对象设置星星的属性用匿名函数实现星星在几s后消失设置星星的样式给星星随机宽高使星星随机变化 代码展示; <!DOCTYPE html> <html><head><meta charset"utf-8"><t…

满天都是小星星C语言答案,满天都是小星星

满天都是小星星 ——汉川市城隍镇农利小学生本课堂建设侧记 本刊记者 姜楚华 尹培文 通讯员 王荣华 在汉川市城隍镇农利小学(以下简称“农利小学”)&#xff0c;这样的场景司空见惯&#xff1a;课堂上&#xff0c;小组成员聚在一起&#xff0c;要么激烈而低声地争论着&#x…

CentOS7安装Docker(超详细)

配置要求 系统&#xff1a;Centos7 Linux 内核&#xff1a;官方建议 3.10 以上 注意&#xff1a;本文的命令使用的是 root 用户登录执行&#xff0c;不是 root 的话所有命令前面要加 sudo 1.查看当前的内核版本 uname -r2.更新 yum 包&#xff08;使用 root 权限&#xff0…

第九周项目三小星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星

#include <iostream> using namespace std; int main() { int s,i11; for(i11;i>1;ii-2) { for(si;s>1;ss-1) cout<<"*"; cout<<endl; } cout<<endl; return 0; }