< Antispoofing > 如何科学的攻破活体识别系统
前言
故事(事故)起源于我老大最近跟我说的一个脑洞,他说他最近看了Advhat 的相关介绍,说能不能在活体识别上面尝试一下Advhat, 仿照Advhat做一个特殊贴纸,贴到一张假脸的某个部位,然后就用这样的一张贴了特殊纸张的假脸攻破活体识别系统.
我当时觉得应该不太可能,毕竟活体任务和人脸识别任务不同,活体识别任务学的就是真人和非真人介质的不同,无论生成什么样的纸张,毕竟逃离不了纸张透过摄像头的后的独特介质信息,况且即使生成了特殊的贴纸,然后再打印出来,然后再通过摄像头去识别,这样这张生成的’数字’贴纸就经过了两次失真,应该是没啥效果的.
我就把我的观点和老大一说,老大说还是让我尝试一下.于是我就做个实验验证一下,没想到我被实验结果深深的打脸...
简单回顾Advhat
Advhat主要是基于Fast Gradient-Sign Method (FGSM)通过设计好的Loss来对输入进行梯度回传,然后把输入以一定的方式加上输入对应的梯度来实现梯度上升,从达到使之前的Loss上升,模型输出错误的目的.
Advhat为了使得生成的贴纸在实际贴到脸上之后中更加的鲁棒,在合成贴纸人脸的时候做了三个个小的trick:
第一个trick就是给矩形的贴纸做形态的变换,使得其达到在贴到额头上的弯曲程度.如下图所示:
第二个trick是使用了stn(Spatial Transformer NetworkSpatial Transformer Network),给贴到的人脸图像做位置和形态的细微扰动,使得其生成的贴纸到实际贴到额头上能够更加的鲁棒.
第三个trick是作者使用了Total Variation Loss(TV_loss)让图像看起来更加的平滑自然.
最终的流程图如下图所示:
其中A是原始的人脸,B是生成的贴纸,C是合成的贴纸人脸.cos_loss的目的是增大真脸的embedding和贴纸的脸的embedding的距离,从而达到模型误识别.
grad1是cos_loss对图像C的梯度,grad2是图像C对贴纸B的梯度.grad3是tvloss对贴纸B的梯度,整个迭代过程中不会改变任何的’CLS _model’的参数,’CLS_model’只是为了计算loss,回传梯度.所以你可以把需改变的贴纸B当成weight,把’CLS_model’的所有weight当成常量参数.
所以最终用于更新贴纸B的梯度为:
1 | grad_update = grad2*grad1 + alpha * grad3 |
其中alpha是控制两个梯度的比例因子.
活体实验过程
所以活体的实验就是把上面示意图中的图像变成某一个攻击图片的图像,然后生成一个额头上mask,使得把这个mask贴到假体额头上可以把该假体攻击照片识别为真人.
与advhat不一样的是,这个mask不需要为了适应额头的弯曲程度而矩形的形态变换,因为很多攻击都是平面的,我的初步实验也是在一个二维的裁剪纸张上面做的.为了表示方便,我下面会把额头戴mask的假体叫做mask假体,把对应的真实的假体叫做原始假体.总体示意图如下:
同样梯度更新的方式是一样的,只不过grad2不需要经过projection了.为了直观观察迭代情况,我在迭代的时候把mask经过活体模型的loss和置信度(Confidence)的值同样做了输出(在活体分类模型中,真人的标签是1,攻击的标签是0):
从上图可以看到,刚开始mask假体经过判别模型的置信度是一个很低的数值,也就是说迭代刚开始活体模型可以很好的判定mask假体就是一个假体.
但随着迭代的增加,mask假体的置信度在fgsm迭代的作用下上升的很快,迭代到100步就已经可以达到99%置信度的水平了,换言之,该人脸(假脸)有以很大的置信度被活体模型识别为了真人.
于是我打算看一下下生成的mask到底是啥样的,是不是类似于advhat那样的类似于人的额头的mask.于是我把不同迭代次数生成的mask保存下来,并看到了下面的东西(为了安全起见,我对图片做了黑白处理):
虽然到现在为止的实验结果显示额头贴纸可以很好的把一个攻击假体让神经网络识别为真人.但我还是很疑虑的觉得如果把贴纸打印出来然后贴到假体额头上可能会不起作用,毕竟模拟的mask和现实的mask还是有很大的不同的.
现实的mask还要经过两次失真,一次是打印机打印的失真,一次是摄像头拍摄的失真.而活体模型学到的或许就是跟这两次失真有关的特征.
于是我就去实际打印出来验证了一下,结果就像开头说的,我被深深的打脸,给攻击人脸贴纸确实是有攻入活体识别模型的可能性.放一下视频看一下效果(隐私起见,对部分区域做了马赛克处理):
最后
当然,虽然发现贴纸攻击对于活体识别模型是有效的,现在也大可不必担心活体识别的有效性.
对于活体识别来说,贴纸攻击的有效性跟纸张方式选择,摄像头,打印机和光线角度都有关.我亲自试验过,同一张贴纸,我换一个环境或者是换一张人脸它就失效了.
而且,今天说的攻击方式本质是白盒攻击,必须要拿到活体模型的内部结构和参数才可以生成对应的贴纸,而想要从手机里面拿到完整的活体模型也是一件很困难的事情,所以大家大可不必过于担心现今FaceID的安全性.
< Antispoofing > 如何科学的攻破活体识别系统