水杯上到处都是我的指纹,有点担心 iPhone 的指纹识别
图片:CPOA / CC BY-ND为什么 Touch ID 存储在本地的指纹信息可以用来验证 Apple ID,是否存在安全隐患?
这并不新奇。类似的问题在密码学里早已经解决了。
首先我们需要明确,进行指纹匹配,事实上并不需要发送整个指纹图像到远程服务器,而只需要根据本地采集到的指纹图像数据提取出一些特征模式,汇总成一个描述结构,然后只发送这个描述结构即可。
所以,指纹识别的过程,本质上属于数字序列的一种广义匹配。因此,只要我们能基于密码学原理建立一种安全的远程数字序列匹配方法,就能够保护包括指纹识别、心跳识别、脑波识别等身份识别过程。
例如基于 HMAC (Hash-based Message Authentication Code) 的方法。如果苹果基于此类方法实现其指纹识别系统,那么苹果可以做到:
1、服务端只需存储用户指纹信息哈希后的摘要值,而不存储原始的指纹信息,因此服务器即使被入侵,也不会泄露用户的指纹信息。
2、验证指纹的过程中,用户的指纹信息不会在网络上传输,而只是传输指纹信息哈希后的摘要值。即使被窃取,也无法还原出原始指纹信息。并且由于 HMAC 具有的防重放攻击特性,攻击者也无法凭借该段摘要伪造用户身份执行其他操作。
当然,这只是安全体系的一小部分。但是也是至关重要和不可或缺的。由于在指纹识别方面我并没有做过太具体的工作(我有同学做这方面),因此说得不对还请大家见谅。
关于 HMAC 的应用,在另一篇文章里,我也曾经简单的讨论过:
阿北能不能看到我在豆瓣的账户对应的密码?
特别值得一提的是,对于基于指纹的身份验证需要特别重视其安全性。因为对于一般性的密码,我们如果发现泄漏,可以通过修改密码来补救。但是指纹基本是一生不变的,一旦泄漏,后果严重。
但遗憾的是,指纹又特别容易泄漏。我递杯水给你,你一握杯子,你的指纹就留下了。或者对于曾经服刑过的人员,指纹也许都加入了国家统一管理的指纹数据库,你的指纹就更加不是秘密了。
因此在我看来,基于指纹识别来完成身份验证,是不完整的。还需要和设备绑定,以及辅以其他增强手段。否则其功能形同虚设。当然苹果有最一流的相关领域人员,我相信他们能够做好安全性和易用性的平衡。
首先我们需要明确,进行指纹匹配,事实上并不需要发送整个指纹图像到远程服务器,而只需要根据本地采集到的指纹图像数据提取出一些特征模式,汇总成一个描述结构,然后只发送这个描述结构即可。
所以,指纹识别的过程,本质上属于数字序列的一种广义匹配。因此,只要我们能基于密码学原理建立一种安全的远程数字序列匹配方法,就能够保护包括指纹识别、心跳识别、脑波识别等身份识别过程。
例如基于 HMAC (Hash-based Message Authentication Code) 的方法。如果苹果基于此类方法实现其指纹识别系统,那么苹果可以做到:
1、服务端只需存储用户指纹信息哈希后的摘要值,而不存储原始的指纹信息,因此服务器即使被入侵,也不会泄露用户的指纹信息。
2、验证指纹的过程中,用户的指纹信息不会在网络上传输,而只是传输指纹信息哈希后的摘要值。即使被窃取,也无法还原出原始指纹信息。并且由于 HMAC 具有的防重放攻击特性,攻击者也无法凭借该段摘要伪造用户身份执行其他操作。
当然,这只是安全体系的一小部分。但是也是至关重要和不可或缺的。由于在指纹识别方面我并没有做过太具体的工作(我有同学做这方面),因此说得不对还请大家见谅。
关于 HMAC 的应用,在另一篇文章里,我也曾经简单的讨论过:
阿北能不能看到我在豆瓣的账户对应的密码?
特别值得一提的是,对于基于指纹的身份验证需要特别重视其安全性。因为对于一般性的密码,我们如果发现泄漏,可以通过修改密码来补救。但是指纹基本是一生不变的,一旦泄漏,后果严重。
但遗憾的是,指纹又特别容易泄漏。我递杯水给你,你一握杯子,你的指纹就留下了。或者对于曾经服刑过的人员,指纹也许都加入了国家统一管理的指纹数据库,你的指纹就更加不是秘密了。
因此在我看来,基于指纹识别来完成身份验证,是不完整的。还需要和设备绑定,以及辅以其他增强手段。否则其功能形同虚设。当然苹果有最一流的相关领域人员,我相信他们能够做好安全性和易用性的平衡。
iPhone 5s 采用的指纹识别 (Touch ID) 会有哪些安全隐患?
大家在讨论指纹信息能否hash,没原始数据怎么对比?当然可以hash,指纹不是位图那样对比,而是傅里叶变换后滤波得到特征数据再对比。
我的朋友 autopear 大大从代码上看苹果采用的方案确实和我下面说的Mapping一样,至少对于第一方软件是这样的。
本来以为苹果会在硬件层做更多安全措施,甚至可能让指纹数据完全不出现在软件层。但就在刚刚,以前WEIP技术组的朋友autopear说,已经找到保存指纹数据的位置,可加载为NSData...估计具体格式过一阵搞搞就出来吧,目前估计就是加了salt的hash。
最大的安全隐患是每个人只有一套指纹,而且不像密码那样可以随时换。
也就是说,如5S等设备/服务的任何一个指纹数据泄露就等于全盘泄露...
我觉得5S的指纹扫描绝不能让第三方软件获取raw数据,hash都不行,应允许用户保存一套Mapping:如食指指纹对应常用密码A,中指指纹对应网银密码B,第三方只能调用系统密码文本框控件来黑箱获取文本输入,软件代码不用改又安全 。该映射只有iOS知道,不同步或云端保存(感谢棱镜项目,苹果绝对不敢这么干)。
简单来说,就是iOS本身最好能有一个用户自行维护的本地“文本密码”库,而指纹只是这个库的钥匙。用户角度来看,他们会发现,每处密码输入文本框都会提示可以用指纹扫描,但他们不知道其实iOS只是以指纹为令牌获取了文本密码并填进去再确认。
这对开发者来说有三点好:
- 代码不用改,所有的secured文本框(***代替文本那种...)都自动支持了指纹
- 撇清责任,从逻辑上杜绝了自己泄露指纹的可能
- 交互不变,不用给指纹单独设计流程
这么做最多在API层面杜绝了安全隐患,但真正可怕的是越狱...
越狱后这些什么措施都是纸老虎了,像我这样不犀利可能研究下劫持,更犀利的直接驱动层搞起了啊!
转载请注明:微图摘 » 水杯上到处都是我的指纹,有点担心 iPhone 的指纹识别