指纹登录是怎么跑起来的2

简介: 指纹登录是怎么跑起来的2

开启指纹认证


这里以登录为例,来看看如何使用指纹认证来做APP登录。还是先要注册指纹,具体过程如下图所示:

1689134232771.png

  • 5开启指纹:开启指纹登录的时机,一般都是先用别的方式登录了APP,然后再开启指纹登录。但是也有一些例外,用户使用APP时直接使用第三方登录,第三方提供了指纹登录的方式,比如使用Apple Id登录。上边图中是先用账号密码登录了系统,然后才开启的指纹认证。
  • 12对比系统存在的指纹:指纹数据始终保存在手机本地,不会上传到远程。目前市面上的手机都是这样做的,Android和iOS提供的指纹认证API都只返回true或者false的认证结果,这样可以避免云服务被攻破时导致大规模泄漏的严重后果,最大限度的保护用户生物特征数据的安全。
  • 13指纹验证成功:本地指纹认证通过就代表用户身份验证通过,不管是哪个手指。早期的操作系统版本中可能能够获得是使用的哪个指纹,但是现在一般都不开放了,只能得知指纹集是否发生了变化(删除或者添加了指纹),此时App可以强制用户退出,再使用其它安全的方式登录,然后再让用户决定是否开启指纹,支付宝就是这样做的。
  • 重放攻击问题:步骤16中的请求可能被人截获,虽然无法解密,但是可以多次发向服务端,造成重放攻击的问题,可以引入一个挑战码来解决这个问题。步骤8初始化指纹注册请求时服务端可以生成这个挑战码,然后在步骤16中携带这个挑战码,然后在服务端进行验证。

使用指纹认证


下边再来看下使用指纹登录的过程:

1689134269861.png

  • 登录时的本机指纹认证和注册时的本机指纹认证方法相同,只不过这次是在用户选择指纹登录时弹出指纹刷取页面。
  • 10签名登录数据:主要是用客户端私钥签名设备的唯一标识和挑战码,在开启指纹认证时指定了必须采用指纹授权的方式才能使用私钥,这样能确保签名是由认证过的用户发起的(准确的说是手机上登录过指纹的所有用户,在开启指纹认证时已经提示用户所有录入的指纹都将可以用来登录,同时如果指纹发生变化,会让用户重新确认,所以可以认为他们都是有权限的用户);服务端如果验证签名通过,则代表数据在传输过程中没有被篡改,登录是在可信的客户端发起的;前后端的认证结果结合起来就代表登录是由认证过的用户发起的。
  • 在开启指纹阶段,已经将设备唯一标识、客户端公钥绑定到了用户记录,所以签名验证通过后,就可以生成当前用户的登录Token,并在后续的客户端与服务端的一般交互中使用这个Token。在关键的交互,比如支付中,还是要使用指纹认证这种安全性更高的方式。

以上就是APP中的指纹认证原理,指纹登录和指纹登录的过程差不多,只不过支付需要更高的安全等级,指纹认证可以满足这个安全要求。

客户端身份认证的问题

在上文APP的指纹注册阶段,客户端生成了一对非对称密钥,用于后续服务端认证客户端的身份,这个密钥在当前的手机中已经有了成熟的安全存储和使用方法,这就是TEE(可信执行环境):

客户端私钥被TEE安全密钥加密存储在手机中,目前没有破解之法;同时还可以指定只有通过了本机指纹认证才能使用私钥对数据进行签名和加密;再者如果手机中加入了新的指纹或者删除了指纹,存储的私钥就会失效;所以密钥的存储和使用是可以保证安全的。

但是还存在其它的安全隐患:

1、服务端无法确认上传的客户端公钥能否代表客户端身份,任何程序都可以生成一对非对称密钥,然后对数据进行签名,再把公钥一起发到服务端,服务端仅能验证签名的正确性,但是无法验证公钥的来源,也就无法验证客户端的身份。某些解决方案中会在客户端集成一个认证器SDK,这个SDK生成的认证信息中会携带一些特殊识别信息,而且每个应用每个机器不同,很难破解,后端可以据此判断是在集成了认证器SDK的应用中发起的。但是也有一些难题,识别信息的生成方法可能会被破解,还有怎么确认是用户发起的还是恶意程序发起的?

2、密钥生成过程中可能被黑客替换,存储和使用再怎么安全也无济于事了。这个在微信的技术资料中提到过,Android的密钥生成有被拦截的可能,不确定当前是不是解决了。这也说明底层框架和操作系统也可能是不可信的,在某些场景下必须慎重考虑。

1689134299962.png

3、以上两个问题在Root或者越狱之后的手机中更严重,APP、SDK和操作系统都无法信任了,所以很多金融类APP不支持在Root或者越狱的手机上使用指纹认证,不过道高一尺魔高一丈,还是有一些方法来欺骗APP,这也不乏部分用户的支持(自作X啊)。

这个问题有好的办法解决吗?有,设备出厂前就把私钥保存到TEE中。

Android中的密钥安全

大家应该知道Android系统是开源的,很多手机厂商都在生产Android手机,市面上有多个厂商在竞争,谁也不服谁,所以要想推广上文提到的出厂前内置私钥的方法,就必须统一标准。在国内腾讯和阿里具备这样的影响力,腾讯搞了SOTER,阿里搞了IFAA,两者都要求手机厂商在产线上生成一对非对称密钥,私钥写入手机TEE,即使拿到了手机当前也没有破解之法,私钥也就不会被泄漏,除非手机厂商搞事情,不过如果手机厂商真的这样做了,就离倒闭不远了;公钥上传到认证服务器,认证的时候用于验证手机APP上传的数据签名,验证通过了就能代表是在对应的手机发起的认证。

同时为了推广这个技术,这种协议还支持别的厂商APP接入进来。但是这样就很容易泄漏APP的商业隐私 ,比如SOTER每次支付都要去腾讯的认证服务器认证一下,据此就可以推断你的业务行为和交易量,所以SOTER又搞了应用密钥和业务密钥,来尽量消除这个商业风险;同时针对Android密钥生成可能被拦截的问题,让手机厂商装个补丁包就解决了,比如替换掉不安全的中间环节。下边来看下应用密钥和业务密钥的产生过程。

应用密钥产生流程:应用密钥在应用首次安装的时候生成,应用密钥的私钥保存在手机端,并使用出厂前内置的私钥签名,然后发到腾讯的认证服务器验证签名,此时应用密钥的公钥会保存到应用的后台。

1689134334648.png

业务密钥产生流程:在使用登录或者支付的指纹认证注册的时候,应用会再生成一个业务密钥,业务密钥的私钥还是保存在手机端,业务密钥使用手机端的应用密钥进行签名,验证也只需要在应用的后台验证就可以了,此时和腾讯的认证服务器就没有关系了。

1689134362223.png


这样腾讯就不知道你的实际业务运营情况了,比如每天在线支付多少笔,但是APP安装量还是免不了会暴漏出来,话说APP都要上应用市场的,这个信息其实早就公开了。

关于SOTER详细介绍,可以看官方文档:github.com/Tencent/sot…

IFAA的应用过程和SOTER差不多,这里就不再赘述了。另外国外还有一个FIDO联盟,也是解决这个问题的,国内是联想集团的子公司国民认证在推广这个,技术原理也都差不多。


iOS中的密钥安全


iPhone的操作系统和硬件都是自己控制的,所以对于安全控制它可以做的很好。

对于本机指纹认证,苹果也提供了Touch ID的API,可以在前端调用指纹认证,但是如果要发送到服务端去验证,基于各种安全考虑,就还是需要一个客户端密钥,这个客户端密钥有没有安全的产生方式呢?我没有找到官方的文档说明,很多基于这个方案的第三方应用可能都是自己生成的吧,尽量做到安全。当然这个也是猜测。

但是微信或者支付宝这种应用怎么能忍呢?SOTER曾经说要支持iOS,最后也是不了了之;IFAA宣传的是兼容支持iPhone 5s 以上所有 iOS 手机,不过它不开源。可能苹果最终还是不想把这块放开,同时基于苹果的强势地位,最有可能是苹果专门给这种应用开放了特定的API,不许外传。

如果是做指纹登录,其实可以直接使用苹果开放的Apple ID登录协议,支持指纹和刷脸认证,会给应用返回认证Token和授权码,应用后台拿着这两个再去找苹果验证。从这个逻辑上看,苹果的后台必然能安全的确认发起请求的客户端身份,所以估计和Android的原理差不多,只不过前后端的每次认证都得苹果来验证。


Web中的指纹认证


上面提到过一个FIDO联盟,它和W3C搞了一个WebAuthn标准,它的目的是标准化用户对基于 Web 的应用程序和服务的公钥认证的接口,说人话就是定了一个Web程序中使用公钥认证的标准,所谓的公钥认证就是上文提到的客户端密钥认证技术。这个国内产品好像使用的不多见,不过这件事挺牛的。它可以在Windows、Linux、Mac OS、Android、iOS、智能手表等各种设备中使用指纹识别、面部识别、虹膜识别、声音识别、实体密钥(USB连接、蓝牙连接、NFC连接)等多种方式进行认证,尽可能的摆脱对密码的依赖。

这个技术标准和APP中的公钥认证技术是一脉相承的,主要区别在于APP换成了浏览器,认证模块除了操作系统本身支持,还增加了对专用硬件的支持。有兴趣的可以去了解下。


以上就是本文的主要内容,因能力有限,可能存在部分错漏,欢迎指正。


1689134334648.png


相关文章
|
2月前
|
人工智能 Linux API
OpenClaw 阿里云+本地多系统部署全攻略,大模型配置+planning-with-files技能实战解析
在基于OpenClaw(Clawdbot,开发者昵称“龙虾”)进行AI协作的过程中,开发者常面临这样的问题:面对复杂任务时,与AI的多轮对话极易丢失上下文,最终输出结果偏离预期,甚至出现逻辑混乱的情况。2026年,planning-with-files技能的出现彻底解决了这一痛点,该技能通过文件化的规划方式,将复杂任务的执行过程沉淀为标准化文档,让AI协作具备可追溯、可恢复、可管控的特性。本文将完整梳理2026年OpenClaw在阿里云及本地MacOS、Linux、Windows11系统的部署流程,详解阿里云千问大模型与免费Coding Plan API的配置方法,深度解析planning-w
815 3
|
6月前
|
数据采集 机器学习/深度学习 人工智能
AI 十大论文精讲(二):GPT-3 论文全景解析——大模型 + 提示词如何解锁 “举一反三” 能力?
摘要 2020年发表的《Language Models are Few-Shot Learners》(GPT-3论文)开创了AI新时代。该论文突破性地证明:当Transformer模型参数规模扩大到1750亿时,仅通过文本交互即可实现任务无关的少样本学习。GPT-3采用"预训练+提示词"的新范式,无需微调就能在翻译、问答等40+任务上展现强大性能。论文系统验证了模型在语言建模、闭卷问答等9类任务中的表现,其中在LAMBADA长文本任务上准确率达86.4%,较此前最优提升18.4%。这一研
1084 152
|
8月前
|
存储 监控 图形学
《深挖Unity开发痛点:从动画状态机崩溃到资源加载异常的实战排障指南》
本文结合开放世界冒险游戏开发实例,聚焦Unity开发中三类高频复杂Bug展开分析。在Switch平台,Addressables加载场景后NPC动画状态机失效,因资源加载后未建立强引用致控制器被回收,通过静态列表存储引用解决;动态植被材质在多平台闪烁或丢失,源于共享材质冲突与Shader变体加载问题,经独立材质实例化及预烘焙变体优化;角色跳跃穿斜坡,因物理检测帧间隔长、速度超阈值,调整检测模式与帧率后修复。文中还提炼“现象分类-环境隔离-工具监控-原理溯源”排查法,强调引擎底层认知与跨平台规范的重要性。
382 9
|
7月前
|
API 开发者 数据采集
高效获取淘宝商品详情:API 开发实现链接解析的完整技术方案
2025反向海淘新机遇:依托代购系统,聚焦小众垂直品类,结合Pandabay数据选品,降本增效。系统实现智能翻译、支付风控、物流优化,助力中式养生茶等品类利润翻倍,新手也能快速入局全球市场。
高效获取淘宝商品详情:API 开发实现链接解析的完整技术方案
|
机器学习/深度学习 人工智能 API
大模型推理服务全景图
大模型推理服务全景图
|
机器学习/深度学习 搜索推荐 算法
推荐系统的算法与实现:深入解析与实践
【6月更文挑战第14天】本文深入探讨了推荐系统的原理与实现,包括用户和项目建模、协同过滤、内容过滤及混合推荐算法。通过收集用户行为数据,系统预测用户兴趣,提供个性化推荐。实践中,涉及数据处理、建模、算法选择及结果优化。随着技术发展,推荐系统将持续改进,提升性能和用户体验。
2019 3
|
人工智能 自然语言处理 程序员
5个小妙招,通义灵码“一键治愈”你的代码问题
目前通义灵码支持 DeepSeek 满血版 V3 和 R1 模型,并内置 Qwen2.5-max 以及 QwQ-plus 模型,让研发体验焕新升级。
|
弹性计算 安全 前端开发
阿里云服务器ECS通用型、计算型和内存实例区别、CPU型号、性能参数表
阿里云ECS实例有计算型(c)、通用型(g)和内存型(r)系列,区别在于CPU内存比。计算型1:2,如2核4G;通用型1:4,如2核8G;内存型1:8,如2核16G。实例有第五代至第八代,如c7、g5、r8a等,每代CPU型号和主频提升。例如,c7使用Intel Ice Lake,g7支持虚拟化Enclave。实例性能参数包括网络带宽、收发包能力、IOPS等,适合不同场景,如视频处理、游戏、数据库等
1294 0
|
存储 Kubernetes Unix
k8s教程(Volume篇)-CSI存储机制详解
k8s教程(Volume篇)-CSI存储机制详解
3122 0
k8s教程(Volume篇)-CSI存储机制详解
|
缓存 Linux
关于近期CentOS 6.X系列各大开源镜像站Yum源失效404问题解决
关于近期CentOS 6.X系列各大开源镜像站Yum源失效404问题解决
1195 0