2018年11月末,外媒曝光了这样一个消息:纽约大学和密歇根州立大学的研究人员通过深度学习分析了大量人体指纹后,生成了一套“通用指纹”。这组指纹就像一把万能钥匙,可以骗过76.67%的指纹。当然,这个图中有水分,我们将在正文中详细讨论。
出于好奇,简单翻阅知乎后发现,目前为止,知乎上似乎没有详细讨论指纹识别安全性的答案。让我写一篇长文,谈谈你手机上的指纹识别是否安全。
由于这是一篇科普文章,如果用通俗的方式来写,难免会失去一点技术严谨性。此外,由于该领域的快速发展和高度保密,我的答案中可能会出现过时的细节。请在评论部分纠正我。
第 1 部分:制造商如何保护您的指纹?
指纹采集的具体原理比较繁琐,不在本文的讨论范围内,这里简单介绍一下:你的手机配备了一个神奇的小工具,叫做指纹传感器。您将手指按在上面,传感器可以对其进行扫描。您的指纹图像。
所以说到这里,肯定有人会开始担心。制造商收集用户的指纹并将其存储在手机中。它会被黑客或制造商本身滥用吗?
关于这个问题,目前我们能给出的答案是:概率很低。您的指纹目前处于多重保护之下。从手机内部窃取您的指纹非常困难。最好直接偷你平时用来喝水的杯子。
那么究竟什么是“多重保护”?我们可以从软件和硬件两个方向入手:
软件保护:特征点提取算法
在设计“指纹识别算法”时,用户指纹的保护就已经开始了。
目前主流的指纹识别算法都是通过提取和比较关键特征点来实现的,比如指纹的整体结构(Level 1)、局部出现的分岔点、端点、断点等(Level 2) .
如果用视觉类比,就好像你手里拿着一部中国版的《战争与和平》。您提取每个汉字的拼音首字母并将其复制到一张纸上。接下来,我拿到了这张满是字母的纸,我猜不出原作是《战争与和平》。但是如果你再给我一本书,我可以通过拼音的首字母来判断我是否得到了原版。这就是特征点识别的原理。
当然,如果特征点泄露,也足以引起一定的安全问题。例如,黑客拿到上述的一张纸后,就可以小心翼翼地伪造一份原创作品。在句子基本流畅的基础上,匹配拼音的首字母,这样就可以骗过原来的识别算法。但是,当这个假作品遇到另一种不同的特征点算法(比如取第三个拼音字母)时,很可能会失明,所以威胁有限。
但有限的威胁也是威胁,因此疯狂的安全工程师增加了更严格的保护层。
硬件保护:可信计算环境和资源隔离
众所周知,从事信息安全研究的从业者普遍存在被害妄想。
早不记得多久以前,手机界就有人提出过这样一个问题:如果我们的手机系统被黑客入侵,整个手机都会垮掉,是否可以保留一些最机密的信息?这种极端情况下的敏感信息不被盗?
目前主流手机厂商给出的答案是:在手机系统内部建立可信计算环境(TEE)。
它相当于一个拥有超越权力的安全中心,一个独立自主的“国中之国”。这种可信计算环境有自己独特的操作系统、独立的计算资源、存储资源,理想情况下还应该拥有指纹传感器、面部识别传感器等敏感组件。主系统无权干涉,只能提交申请,老老实实等待结果。一些制造商甚至将可信计算环境的独立线路连接到显示器,这样主机系统就无法阻止 TEE 尝试显示任何内容。除非主系统能自己长出一双手,否则拆机剪断线。
理论上,制造商可以在可信计算环境中建立后门,但实际上制造商应该不可能这样做。因为风险太高,和回报不成正比。TEE 涉及各种敏感应用程序,包括 DRM、财务和机密通信。一旦内置后门被第三方发现,真的是足以抹黑的丑闻。这家厂商会在一夜之间失去所有的政府级、企业级用户,以及相当数量的个人消费者,基本等于被判了死刑。
这种设计的优缺点是显而易见的:安装这个设备后,所有敏感数据(如指纹特征点)和关键计算(如指纹识别)都可以安全地锁在里面,安全性如此之强。但是,要在地价昂贵的手机结构中实现这种TEE,厂商需要挤掉很多额外的硬件成本。而且这个TEE的运行速度也不能太慢,不然手机主系统为了等待结果会一直卡顿。如果用户对信息安全了解不多或者不太在意,那么性价比就有点不适应了。
所以,虽然理论很好,但是厂商在具体的技术实现上做了一个微妙的妥协:既然物理隔离的成本很高,那我可以做虚拟隔离吗?比较成熟和具有代表性的技术之一是 ARM 的 TrustZone 架构。
TrustZone 的基本原理也很简单。再打个比方更通俗的比喻:排球队和羽毛球队需要用同一张草进行训练,所以他们请来了一个计时老人。叔叔每两个小时吹一次哨子。哨声一响,前一队就收拾行李离开,让另一队进来训练。这样,同一片草地(硬件资源)就可以被两个不同的团队(主系统和可信系统)使用而不受干扰。
但是,虚拟隔离做的再好,终究是虚拟的,留下了一定的攻击面和一些安全问题。我们将把这些细节留在第二部分并详细讨论。目前,只要知道虚拟隔离并不完美就足够了。
以下内容涉及一些技术细节。不喜欢的读者可以从这里跳到第二部分。
在 TEE 隔离方面,由于各家厂商采取了不同的策略,所以也开启了上、中、下三档:
第一梯队有四家玩家:苹果、谷歌、华为、三星,采取物理隔离+虚拟隔离的策略。
二线玩家是剩下的主流安卓厂商:小米、OV、一加等,由于没有自研芯片的能力,只能使用高通提供的TrustZone虚拟隔离。
三档的玩家基本上只是山寨厂商。不知道怎么用TEE相关的文档开发,只能装着玩。但实际上,我个人怀疑某家能做胶水的屏幕厂家也是三档。毕竟TEE所涉及的专业知识并不是选择胶水那么简单。
第 2 部分:黑客如何攻击指纹识别?
糟糕,激动人心的部分来了。
你说我才写了这么大一段,怎么突然就开始打脸了?
抱歉,目前指纹识别和指纹支付的安全性确实很高,但毕竟这个世界上没有完美的锁。上述各种保护仍有被破解的可能。接下来,让我详细谈谈它。刚才的铜墙铁墙,在什么情况下会坍塌进蚁巢。
远程攻击:外盗或防御,内敌难以防御
我们先来讨论危害更大的远程攻击——无需物理接触手机即可完成指纹支付的攻击。
有人可能会说,你不是说主系统被黑了,不能干扰指纹识别过程吗?远程攻击怎么样?
对不起,确实不能干涉指纹识别的过程,但是指纹识别的结果要交给主系统和微信/支付宝处理。如果这个系统被攻破了,那么它完全可以中途篡改指纹验证的结果,让微信/支付宝误以为指纹验证通过了。或者在root设备上,可以在微信/支付宝内部注入恶意代码,让他们忽略指纹验证的结果。
在有根设备上保护用户的信息就像在敌方大本营进行客场比赛一样。你的食物是敌人给的,你的武器是敌人给的,你看到的东西也是敌人给你看的。因此,微信和支付宝目前的策略非常简单。由于无法保护,他们将直接拒绝在root设备上启用指纹支付功能。
幸运的是,用户是黑客最亲密的伙伴。他们想黑客的想法,担心黑客的需求。没有黑客,他们会主动刷指纹支付等插件,骗微信、支付宝开通指纹支付,真是让人泪目。
此外,除了上面提到的比较隐蔽的情况外,TrustZone 或者 TrustZone 内部运行的独立操作系统也有可能存在安全漏洞。
如前所述,TrustZone 的基本原理是两个团队在两个团队之间切换。这时候可能会出现这样的情况:篮球队离开,排球队进来,发现记分牌上有未擦过的字迹,地上还有一些黑色的球痕。通过这些残局,可以在一定程度上推断出刚才的比赛谁赢谁输。这种不直接窃取信息,而是通过线索推断敏感信息的行为,称为侧信道攻击(Side Channel Attack)。
这方面已经有很多研究,你可以通过谷歌搜索找到它们。只需在此处发布两篇相关论文:
我记得去年有个朋友采取了不同的方法,对 TrustZone 实施了臭名昭著的 Row Hammer 攻击,这也是一个有趣的解决方案。
本地攻击:难以实施,难以解决
这里的本地攻击是指使用假指纹等手段直接欺骗指纹识别。
第一步:如何获取目标的指纹?
如果你生活在一个简单落后的晚年,这个环节确实有点让人头疼。你需要自己找到受害者,偷TA的日常用品,或者在睡觉的时候留下清晰的手印等等。
幸运的是,您现在生活在一个技术先进的新时代,摄影镜头的像素非常高。早在 2014 年,一名德国黑客就证明,通过图像处理技术,可以很容易地从一张照片中提取出德国国防部长的指纹。如果您需要窃取某人的指纹,请在他们参加公共活动时从远处拍几张照片。
这也提醒了我们一点:拍照的时候,不要拿剪刀比手,一次可以偷两个指纹。为了信息安全,下次拍照,应该竖中指吧?
另外,还有一个文章开头提到的有趣的攻击方式,深度学习产生的“万能指纹”,以下链接为原论文:
正如我之前提到的,新闻媒体报道了 76.67% 的破解成功率是水汪汪的。
Deep MasterPrint破解成功率统计
您注意到表格中的 FMR(错误识别率)了吗?这个误认率,通俗的讲,就相当于考试的及格线,通过这条及格线的指纹就可以通过验证。当 FMR 放松到 1% 时,电容传感器上的裂纹率可以达到 76.67%。当 FMR 缩小到 0.01% 时,破解率已经一路下降到 1.11%。
目前商业级FMR的水平是多少?目前我没有详细的数据,但我记得在2014年,国内厂商汇顶科技的GT66x8系列芯片已经达到了0.002%以下的误识别率。换句话说,这种攻击的实用价值就目前的 Deep MasterPrint 而言有点微妙。
但是为什么我还是说这种攻击方式很有趣呢?因为看了这篇论文的思路和数据集后,发现似乎还有改进的空间。
他们现在的思路很混乱,似乎打算直接生成一套通用指纹来对应每个人的指纹。老年人的指纹自然比年轻人的指纹要皱得多。桶型和桶型的指纹在结构上也有很大的不同。如果将它们混合在一起生成通用指纹,效果当然会很差。如果可以根据不同的分类生成不同类型的通用指纹,最终的攻击效果可能会显着提升吗?
第 2 步:如何用假指纹欺骗传感器?
目前,很多家用指纹锁都声称实现了活体识别,称可以区分真指纹和假指纹。
但是,如果手机已经在攻击者手中,攻击者可以完全移除传感器并自己连接电线。所以,单独在手机上使用活体识别技术,感觉还是挺微妙的。除非传感器有额外的认证层,让黑客的假传感器无法通过验证,否则会更安全。
但回到活体识别的问题。
在这方面我的知识可能已经过时了,但以我之前所学的知识,这种活体识别应该不太现实吧?
毕竟,所谓真正的指纹,只是皮肤上的一个图案而已。目前的假指纹膜完全可以做到透光、导电、等密度、传递体温、无缝贴合。从物理性质很难区分,对吧?就算现在的假指纹膜能分辨出来,未来医疗领域制造植皮用人造皮肤时,我们应该怎么做呢?
按照我目前对这部分的理解,只要攻击者拿到指纹,拍指纹片,就无法阻止对方。对方拿着你的手机怎么开怎么开,怎么付怎么付。好在大多数人的指纹都不值得攻击者折腾,偷手机也不是可以偷的东西。
在这个攻击方向上,我唯一能想到的攻击思路是:一队负责偷手机,另一队用准备好的万能指纹膜随机点击一次。如果万能指纹能有1%的成功率,就意味着100部手机中就有1部可以解锁,微信/支付宝/网银中的所有属性都可以洗掉。不是很漂亮吗?
如果您觉得本文有价值,请点赞并支持。对信息安全感兴趣的同学也欢迎阅读我写的其他信息安全科普文章: