2024-02-11 13:00:16 | 来源: 互联网整理
我认为指纹认证能够普及有两个关键点:
首先,它很简单。 无需担心忘记密码,也免去了输入密码的繁琐。
第二是安全。 可以在支付过程中使用,这说明它可以达到金融级别的安全性。
本文将简单介绍一下指纹认证是如何实现上述两点的,以及存在哪些陷阱和障碍。
指纹识别原理
指纹认证的历史其实很悠久。 在我国,指纹在唐代就已经广泛应用于文书合同中。 到了宋代,指纹正式成为刑事诉讼中的物证。 这说明人们早已认识到个体指纹的唯一性,并拥有成熟的识别方法。 对于计算机指纹识别,我们也寻找指纹的唯一性。 这里仅简单介绍一下:
有一个关键的概念:指纹特征点。 常见的特征点包括指纹中的端点和分叉点,它们的位置和方向通常记录在算法中。 该程序通过光学传感器采集指纹图像,提取指纹特征点,并用数学表达式描述,称为指纹模板。 注册指纹时,指纹模板保存在数据库或其他存储中; 在验证指纹时,首先提取当前指纹的特征点,然后与记录的指纹模板进行比较。 如果匹配度达到一定阈值,则认为匹配成功。
指纹识别的两个安全问题:
门禁中的指纹认证
在指纹认证广泛应用于移动设备之前,该技术就已经被广泛使用。 很多人应该接触过刷指纹的门禁或考勤机。 从老板的角度来看,刷指纹比刷卡更能有效验证员工身份,而且成本也不高。 从员工的角度来看,无需额外携带卡,更加方便、高效。 从安全角度来看,指纹识别技术已经比较成熟。 只要不漏水,一般不会有问题。 如果设备制作精良,安全性就会更高。 问题仅发生在访问控制链路上。 即使没有指纹认证,也存在差异。 通过复制门禁卡或钥匙开门可能会更方便; 对于更重要的保护对象,应该有更安全的保护措施。
在门禁中使用指纹时,通常需要先注册,将用户与指纹绑定,然后将提取的指纹特征数据存储在本地。 具体注册流程如下图所示:
当用户需要开门时,在指纹机上刷指纹。 指纹机提取当前指纹的特征值,然后与本地存储的指纹数据一一进行比较。 如果匹配达到一定阈值,则指纹识别成功,并向门禁发送通知。 开门命令,具体认证流程如下图所示:
APP内指纹认证
这里所说的APP是指移动设备系统中的第三方应用程序。 移动设备系统特指当前流行的Android、iOS等移动操作系统。
APP中的指纹认证目前常见于登录或支付功能中。 因为涉及到APP自身的用户和业务数据操作,所以必须与APP后端服务进行交互。 基于安全考虑,客户端和服务器之间也需要进行身份验证。 认证,所以APP中的指纹认证分为手机本地认证和远程认证两部分。
本机身份验证
手机系统本身的指纹认证与门禁系统中的指纹认证没有本质区别:用户首先输入指纹,基于安全考虑,指纹的特征数据也保存在本地。手机; 使用指纹进入系统时,也先提取当前的特征值。 然后与本地指纹库进行比对,如果匹配,就可以进入手机并进入系统。
与门禁系统不同的是,手机上的用户需要有密码才能进入系统,可以是字符密码,也可以是手势密码。 当用户指纹无法使用时(可能是指纹模块故障,或者用户指纹问题),还有其他方式进入手机; 在门禁系统中,用户只能使用指纹认证。 当他们进不了门时,也可以找到管理员。
当然,仅在手机上使用本地身份验证也是有意义的。 每次APP从后台切换到前台时,都需要用户刷指纹来验证当前操作用户的身份。 这是很多银行APP都是这么做的(其实这些APP我都没有确认过,你这个时候有没有去后台再次验证过?我只是觉得这是一个有意义的认证方式)。
手机操作系统厂商在本地认证的安全性方面做得很好。 指纹登记和识别均在安全区域内进行。 指纹识别结果可以加密方式返回给APP。 这个可以直接套用。
远程认证
远程认证是客户端和服务器之间的认证。 完整的方法是双向认证:客户端必须验证服务器的身份,以免信息被盗; 服务器必须验证客户端的身份,防止用户身份被冒充。
开启指纹认证
这里我们以登录为例,看看如何使用指纹认证登录APP。 您仍然需要先注册指纹。 具体流程如下图所示:
使用指纹认证
我们看一下使用指纹登录的流程:
以上就是APP中指纹认证的原理。 指纹登录和指纹登录的流程类似,只不过支付需要更高的安全级别,而指纹认证可以满足这种安全要求。
客户端身份验证问题
在上述APP的指纹注册阶段,客户端生成了一对非对称密钥,服务器随后使用这对非对称密钥来验证客户端的身份。 该密钥在目前的手机中已经有了成熟的安全存储和使用方式。 这就是TEE(可信执行环境):
客户端私钥通过TEE安全密钥加密存储在手机中。 目前还没有办法破解它。 同时,您还可以指定本地指纹认证通过后,只能使用私钥对数据进行签名和加密。 此外,如果手机添加了新指纹或者指纹被删除,则存储的私钥将失效; 因此,可以保证密钥的存储和使用的安全。
但还存在其他安全风险:
1、服务器无法确认上传的客户端公钥是否代表客户端的身份。 任何程序都可以生成一对非对称密钥,然后对数据进行签名,然后将公钥一起发送到服务器。 服务器只能验证签名的正确性,但无法验证公钥的来源,也无法验证客户端的身份。 有些解决方案会在客户端集成验证器 SDK。 这个SDK生成的认证信息会携带一些特殊的识别信息,每个应用、每台机器都不同,很难破解。 后端可以根据这个来判断。 在集成验证器 SDK 的应用程序中启动。 但也存在一些问题。 生成识别信息的方法可能被破解。 如何确认是用户发起的还是恶意程序发起的?
2、密钥在生成过程中可能被黑客替换。 无论储存和使用多么安全,都无济于事。 微信的技术资料中提到了这一点。 Android 密钥生成可能会被拦截。 我不确定目前是否已解决。 这也说明底层框架和操作系统也可能是不可信的,在某些场景下必须慎重考虑。
3、以上两个问题在Root或越狱的手机上更为严重。 APP、SDK、操作系统都是不可信任的,所以很多金融APP不支持在Root或越狱的手机上使用指纹认证。 不过,道高一魔虽然再好,但欺骗APP的手段还是有的,而且也不乏一些用户的支持(自制X)。
有没有好的办法解决这个问题呢? 是的,私钥在设备出厂前就保存在TEE中。
Android 中的关键安全性
大家应该知道Android系统是开源的。 许多手机制造商都在生产Android手机。 市场上有多家厂商竞争,但没有一个人信服。 因此,如果要推广上述出厂前构建私钥的方法,就必须统一标准。 腾讯和阿里巴巴在中国有这样的影响力。 腾讯推出了SOTER,阿里巴巴推出了IFAA。 两者都需要手机厂商在生产线上生成一对非对称密钥,并将私钥写入手机TEE中。 即使拿到手机,目前也没有办法破解,私钥也不会泄露,除非手机厂商有所作为。 但手机厂商如果这样做,离破产也就不远了; 公钥上传到认证服务器并在认证时使用。 用于验证手机APP上传的数据签名。 如果验证通过,则表示在对应的手机上发起了认证。
同时,为了推广这项技术,该协议还支持其他厂商APP的接入。 但APP的商业隐私很容易泄露。 例如,SOTER每次支付都必须经过腾讯的认证服务器的认证。 基于此,它可以推断出你的商业行为和交易量,因此SOTER开发了应用程序密钥和商业秘密。 关键,要设法消除这种经营风险; 同时,针对Android密钥生成可能被拦截的问题,让手机厂商安装补丁包来解决问题,比如替换不安全的中间环节。 我们先看一下应用密钥和业务密钥的生成过程。
应用程序密钥生成过程:应用程序密钥在首次安装应用程序时生成。 应用密钥的私钥保存在手机上,出厂前使用内置私钥进行签名。 然后发送到腾讯的认证服务器验证签名。 此时应用程序密钥的公钥被保存到应用程序的后端。
业务密钥生成过程:当使用指纹认证进行登录或支付时,应用程序将生成业务密钥。 业务密钥的私钥仍然存储在手机上。 业务密钥是使用手机上的应用程序密钥进行签名的。 ,验证只需要在应用后台进行验证即可。 此时与腾讯的认证服务器无关。
这样,腾讯不会知道你的实际业务运营情况,比如你每天进行多少笔在线支付,但APP的安装数量必然会被暴露。 都说APP一定要上应用市场,但这个信息其实早就公开了。
SOTER的详细介绍请参见官方文档:/Tencent/soter/wiki
IFAA的申请流程和SOTER类似,这里不再赘述。 另外,国外有一个FIDO联盟也解决了这个问题。 在中国,联想集团旗下的国家认证公司正在推动这一点,技术原理也类似。
iOS 中的关键安全性
iPhone的操作系统和硬件都是自己控制的,所以可以很好的进行安全控制。
对于原生指纹认证,苹果还提供了Touch ID API,可以在前端调用指纹认证。 但如果要发送到服务器进行验证,基于各种安全考虑,还是需要客户端密钥。 这个客户端有没有安全的方法来生成密钥? 我没有找到任何官方文档。 许多基于该解决方案的第三方应用程序可能是自己生成的。 尽量保持安全。 当然这也是猜测。
但我们怎么能容忍像微信、支付宝这样的应用程序呢? SOTER曾表示会支持iOS,但最终不了了之。 IFAA 宣称它兼容 iPhone 5s 及以上的所有 iOS 手机,但它并不是开源的。 也许苹果最终还是不想放过这件事。 同时,基于苹果的强势地位,很有可能苹果专门针对这类应用开放了特定的API,不允许对外通信。
如果是指纹登录的话,其实可以直接使用苹果开放的Apple ID登录协议,支持指纹和人脸识别认证。 身份验证令牌和授权码将返回给应用程序。 应用程序后端会把这两个拿到苹果去验证。 从这个逻辑来看,苹果的后端必须能够安全地确认发起请求的客户端的身份,所以估计原理和Android类似,只是前后端的每一次认证都必须经过苹果的验证。
网络中的指纹认证
上述FIDO联盟与W3C共同制定了WebAuthn标准。 其目的是标准化基于 Web 的应用程序和服务的公钥身份验证的用户界面。 从人类的角度来说,它规定了 Web 程序中公钥的使用。 密钥认证的标准。 所谓公钥认证就是上面提到的客户端密钥认证技术。 这个国内好像很少用,不过这个东西还蛮酷的。 可在Windows、Linux、Mac OS、Android、iOS、智能手表等各种设备中使用指纹识别、面部识别、虹膜识别、语音识别、物理按键(USB连接、蓝牙连接、NFC连接)等. 采用认证方式来尽可能消除对密码的依赖。
该技术标准与APP中的公钥认证技术一致。 主要区别是APP被浏览器取代了。 认证模块除了操作系统本身的支持外,还增加了对特殊硬件的支持。 有兴趣的可以了解更多。
热门手游排行榜