重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
摘要:当前,人脸识别技术已经在诸多领域取得广泛应用,但其风险也一直为外界关注,尤其是对风险容忍度较低的金融行业来说,用户验证环节如果出现漏洞,就可能造成巨大损失。本文将以一个项目实例出发,分享在测试人脸识别技术时遇到的问题和取得的经验,并对如何测试人工智能提出几点思考。
创新互联建站主营遂平网站建设的网络公司,主营网站建设方案,手机APP定制开发,遂平h5微信小程序定制开发搭建,遂平网站营销推广欢迎遂平等地区企业咨询人脸识别技术测试实例——从一个项目谈起
近期,我司测试部门在承接某项目时,发现了该项目在用户活体验证出现的一个业务安全漏洞。活体验证是该项目服务流程中的一个必经步骤,验证的方式是由用户以手机设备录制阅读随机数字的视频,与后台人脸数据比对后,判断当前操作用户是否为本人。在此环节,测试人员发现,通过在电子设备上进行图片翻拍和视频翻拍,非本人也同样能够通过该验证。随后,项目组联系活体验证技术提供方,调整相关参数,又进行了人脸识别的专项测试,但在该专项测试中仍有一定比例的静态图片攻击成功,骗过模型。鉴于测试结果,项目组经过研究讨论,决定该项目延期投产,集中解决人脸识别模型相关问题。
常用人脸识别/活体检测技术简介
人脸识别是人工智能领域应用较为广泛,发展也相对成熟的技术。静态的图片人脸识别安全性较低,因此多采用活体检测技术,下面对常见的活体检测技术进行介绍。
动作配合式活体检测:算法给出随机动作指令,用户配合完成动作,如点头、眨眼、摇头、唇语等,该类算法当前应用最为广泛。
静默活体检测:顾名思义,相较动作活体检测,静默活体检测不需要用户进行配合动作,而是让用户正对着摄像头几秒即可完成检测,其检测的要素包括了眼皮和眼球的律动、面部肌肉的收缩等。
红外活体检测:即利用红外成像原理进行活体检测,该算法安全性较高,但需要额外配置红外摄像头。
3D结构光活体检测:能够根据反射光线识别3D的人脸结构,安全性较高,但需要深度图像镜头模组配合,目前只在部分高端旗舰手机上有所配置。
常见人脸识别攻击方式简介
在对人脸识别/活体验证环节的测试过程中,测试人员尝试了多种攻击方式,从介质上分类,基本的思路包括图片攻击和视频攻击。
图片攻击:即以静态图片欺骗人脸识别算法,应用于静态图片人脸识别。图片展示介质包括了电子屏幕(考虑不同分辨率,不同成像原理的电子屏幕),纸质图片(彩色和黑白)等。
图1基本的照片攻击方式,看看我是谁?
视频攻击:翻拍或制作视频以欺骗人脸识别算法,主要用来对动作配合式活体检测进行攻击。最直接的攻击方式为播放对应客户本人预先根据指令而录制的短视频,但现实中伪造成本较高。随着图像处理技术、人工智能技术的发展,出现了一些根据静态照片生成动态视频的软件,仅需要一张人像照片,就可以生成该人像摇头、点头、眨眼,甚至阅读各种文字口型的视频。
图2使用软件生成了彦祖读一串数字的视频,右下为原图
考虑上述两种攻击方式,准备的影像素材通常需要依赖电子屏幕作为介质进行输出,这就可以通过识别摩尔纹等方式进行判别。而单纯的静态图片人脸识别应用场景也较少。下面介绍两类进阶的攻击方式。
实体攻击:该攻击方式的形式较为多元化,主要思路是避免将电子屏幕或者单纯的平面照片作为验证图像展示方式。例如,打印一张人体照片,将照片按照一定弧度弯折,配合活体验证指令活动,对于向眨眼这样的指令,可将照片的眼部图像减掉,非本人的真人在后方配合眨眼。而较为高级的攻击方式还包括了制作3D脸部模型等。
图3半张脸攻击
图4扣嘴攻击
应用破解/注入攻击:该攻击方式需要一定技术手段,思路包括埋点监测人脸识别触发流程,修改程序绕过该步骤,或抓包后重组数据报文,将前述图片攻击和视频攻击中准备的影响不通过其他介质转录,直接发送给后台,以及修改报文中的阈值等关键指标后再进行检验等。
浅谈如何测试人工智能软件
人工智能软件的测试,可以分为两个部分:一,对软件的测试。二,对算法的测试。而本次测试的特殊性就在于对算法的测试。
对于测试人员来说,由于当前最广泛应用的深度学习算法(神经网络)是一种黑盒算法,测试人员难以像传统的功能测试一样提出规则性的功能缺陷,且缺陷难以稳定复现,因此测试人员最终所提供的测试结果往往是提供正向及反向用例的通过率,作为参考。
尽管算法的开发人员在建模时就需要输入大量的训练集与测试集,同时也需要评估大量的模型相关指标,但测试工作仍然是不能缺位的:开发人员更注重模型的正向通过率,而对多样性的反向场景设想不足。这就需要测试人员发挥想象力,提供更多反向场景。其意义在于,一方面对于算法较易失效的场景采取更加针对性的模型训练。另一方面,即便是黑盒的神经网络算法,也能够根据反向用例反推模型各个路径的权重,对模型参数调整提供参考。
另外,对于人脸识别算法,通常还要关注模型相似性阈值,即相似度大于X%后判定通过。该值过高,则增加了攻击通过的风险,该值过低,则会造成正向通过率偏低,影响正常用户体验。而采用何种阈值,还需要项目组权衡了风险和收益之后,综合考虑后决定。