舒 乐,戴佳筑
上海大学 计算机工程与科学学院,上海200444
验证码(Completely Automated Public Turing test to tell Computers and Humans Apart,CAPTCHA)是一种反向图灵测试,它的作用是保证网站的访问者确实是人而不是计算机程序,能有效防止计算机程序进行的破解密码、自动刷票、自动发帖等恶意行为。验证码通常会设置一类问题,这种问题很容易被人解决,但是对计算机程序来说却是难题[1],比如基于文字/数字识别的文本验证码、基于图像识别的图像验证码等。然而深度学习的发展使得这些问题对于计算机来说已经不算难题,比如性能优异的卷积神经网络(Convolutional Neural Networks,CNN)模型识别图像的能力甚至已经超越了人类。已经有很多通过深度学习模型成功破解验证码的研究[2-5],传统的验证码已经不再安全。
针对上述问题,有许多研究者致力于研究更加安全的验证码。其中,针对图像验证码的安全性研究分为两类:第一类是在验证码中添加背景噪声或者对验证码进行扭曲变形[6-7];第二类是在验证码中添加对抗扰动(Adversarial Perturbation)[8]。然而,第一类方法在对验证码添加背景噪声或者对验证码进行扭曲变形后,虽然可以在一定程度上保证验证码中的图像不被CNN模型识别,但同时对验证码本身的改变过大,会对人眼的识别造成一定的影响。对抗扰动不同于背景噪声,它是一种人为生成的、能使得CNN模型以很高的概率输出错误分类结果的微小扰动向量,对抗扰动通常可以做到人眼不易察觉,即不会影响人眼对原图像的正常识别。在验证码中添加对抗扰动可以达到既很难让机器识别,又不影响人眼识别的目的。Osadchy等人[8]提出基于不可变对抗噪声(Immutable Adversarial Noise,IAN)的DeepCAPTCHA,是目前唯一将对抗扰动应用到保护图像验证码上的方案。DeepCAPTCHA将IAN添加到验证码的图像中使验证码被CNN模型破解的概率降低。IAN是一种样本相关的对抗扰动,该对抗扰动只能对单个样本产生很好的攻击效果。图1是一个DeepCAPTCHA的例子。图中位于最上方的图像是提示信息,用于提示候选类别。其余图像为候选图像,其中包含属于候选类别的图像和不属于候选类别的图像,用户需要从候选图像中准确选出所有属于候选类别的图像才能通过该验证码测试。
图1 DeepCAPTCHA示例Fig.1 Example of DeepCAPTCHA
IAN是和样本相关的,DeepCAPTCHA出于对生成验证码的效率考虑只在提示信息中添加IAN,而所有候选图像都是未添加对抗扰动的原始图像。但是这会导致DeepCAPTCHA的安全性不够高。并且文献[8]仅仅在结构相对简单的CNN模型下测试了DeepCAPTCHA的安全性,并未在当前主流的CNN模型下进行测试。
本文基于通用对抗扰动(Universal Adversarial Perturbation,UAP)[9]提出了一种更加安全的图像验证码方案。通用对抗扰动是CNN中一种样本无关的对抗扰动,在一组输入的图像样本中添加同一个通用对抗扰动后,能够使得CNN模型以很高的概率输出错误的分类结果。本文首先提出了一种快速生成通用对抗扰动的算法FUAP,将方向相似的对抗扰动向量进行叠加,加快通用对抗扰动的生成速度并提升通用对抗扰动在白盒攻击和黑盒攻击条件下的平均欺骗率。然后基于FUAP算法设计了图像验证码的保护方案FEI-CAPTCHA,将通用对抗扰动加入到验证码的所有图像(包括提示信息和候选图像)中,有效降低CNN模型识别的成功率,从而提高图像验证码的安全性。通过在ImageNet数据集[10]上使用当前主流的CNN模型进行仿真实验,结果表明,FEI-CAPTCHA比DeepCAPTCHA更能抵抗基于CNN的识别攻击。
对于已经训练好的CNN模型f,用k̂(x)代表其输入样本x在最高置信度下的预测分类结果,在x中添加人为生成的对抗扰动r,就可以使得模型的预测分类结果改变:k̂(x+r)≠k̂(x)。如图2所示,以GoogLeNet模型[11]中的对抗扰动为例,原本被该模型以最高置信度分类为espresso(浓咖啡)的样本,在添加对抗扰动后,却以最高置信度被分类为pillow(枕头)。图中叠加了对抗扰动的样本被称为对抗样本。
图2 对抗扰动Fig.2 Adversarial perturbation
大多数对抗扰动是样本相关的,即对抗扰动由某个样本构造得来,并只会对该样本产生很好的攻击效果,比如由文献[8,12-14]所提出的算法生成的对抗扰动都是样本相关的。而Moosavi-Dezfooli等人[9]提出了一种生成通用对抗扰动(Universal Adversarial Perturbation,UAP)的算法(以下简称UAP算法)。通用对抗扰动是样本无关的,凭单个通用对抗扰动就能够对输入CNN模型的大部分输入样本产生很好的攻击效果,即使其中的大部分样本并未参与通用对抗扰动的生成。对抗扰动的攻击效果通常由欺骗率来衡量,欺骗率是指在输入样本添加对抗扰动前后模型预测分类结果发生改变的概率,因此对抗扰动的欺骗率越高会导致模型的分类性能下降越多。
UAP算法是一种迭代算法,基于文献[12]中提出的Deepfool算法来生成通用对抗扰动。Deepfool算法的思想是首先在样本点x附近的特征空间中找到若干从该样本点到目标CNN模型f决策边界的向量:
Deepfool算法能生成样本x的最小对抗扰动。UAP算法通过将由Deepfool算法所生成的各个样本的最小对抗扰动进行叠加来生成通用对抗扰动。但是将各个样本的最小对抗扰动进行叠加并不是生成通用对抗扰动的最好方法。因为所叠加的最小对抗扰动向量的方向是随机的,向量的方向会影响向量叠加后叠加结果的模的大小。根据线性代数的知识,给定向量a和向量b,它们之和的模可以表示为:
其中,cosa,b表示a和b之间夹角的余弦值。从上式可以看出a和b之和的模的大小与cosa,b有关,也即和a和b的之间的夹角有关。比如当a和b具有最小的夹角即方向相同时,它们的叠加结果具有最大的模;而当它们具有最大的夹角即方向相反时,它们的叠加结果具有最小的模。UAP算法没有考虑所叠加对抗扰动向量的方向对叠加结果的模的大小的影响,这会导致通用对抗扰动的生成过程变慢。
针对上述UAP算法中存在的不足,本文提出一种改进的快速生成通用对抗扰动的算法,称为FUAP(Fast Universal Adversarial Perturbation)算法,该算法将余弦相似度引入到迭代生成通用对抗扰动的过程中。从公式(3)可见,为了使向量a和向量b之和的模更大,a和b的夹角的余弦值要越大,即a和b的夹角要越小。这说明在迭代生成通用对抗扰动的过程中,如果每一次叠加的对抗扰动向量能和当前通用对抗扰动向量具有相似的方向,就可以加快通用对抗扰动的模增长,从而加快生成通用对抗扰动的速度。基于上述分析,将Deepfool算法的优化目标做修改,将对抗扰动向量的方向作为优化目标之一。具体的做法是,在通过公式(1)找到若干从样本点x到决策边界的向量之后,从中选择与当前通用对抗扰动vˉ具有最相似方向的对抗扰动向量:
这样就可以使得通用对抗扰动的模在迭代中得到有效增长从而达到快速生成的目的。
不同于样本相关的对抗扰动,通用对抗扰动的生成需要若干样本。为了使得最终生成的通用对抗扰动满足人眼不可察觉的特性,每一次迭代过后需要对当前通用对抗扰动进行元素值裁剪。具体地,将会限制通用对抗扰动元素值绝对值的L∞范数上限为ξ。算法的终止条件是当迭代完所有样本后,通用对抗扰动的欺骗率,其中l代表测试通用对抗扰动欺骗率的样本数。如果F<δ,则在原样本集上开始新的一轮迭代。为了保证通用对抗扰动的质量在每一轮迭代中得到实质性的提升,新一轮迭代开始前会打乱样本集中样本的顺序。算法的具体流程如下:
算法1FUAP算法
输入:样本集X={x1,x2,…,xn},目标CNN模型f,预定的欺骗率δ和L∞范数的上限值ξ。
输出:通用对抗扰动v。
步骤1初始化v为零向量,初始化欺骗率F为0。
步骤2打乱样本集X中样本的顺序,并对其进行顺序遍历。
步骤3如果v无法在目标模型f上使得样本xi的分类结果改变且v为零向量,则生成xi的最小对抗扰动v*(xi)。
步骤4如果v无法在目标模型f上使得样本xi的分类结果改变且v不为零向量,则生成xi的与v具有最相似方向的对抗扰动v(xi)。
步骤5如果步骤3或步骤4成立,则将v*(xi)或v(xi)叠加到v上并对v进行元素值裁剪使其元素值绝对值的L∞范数小于等于ξ。
步骤6如果X中的样本遍历完毕,则重新计算F,否则遍历X中的下一个样本并回到步骤3。
步骤7如果欺骗率F小于预定值δ,则回到步骤2,否则结束算法并返回v。
实验证明,FUAP算法能有效提升通用对抗扰动的生成速度,除此之外,FUAP算法还能提升通用对抗扰动在白盒攻击和黑盒攻击条件下的平均欺骗率。
实验分为两部分,第一部分对FUAP算法和UAP算法生成通用对抗扰动所需的时间进行对比,证明FUAP算法能加速通用对抗扰动的生成;第二部分对由FUAP算法和UAP算法生成的通用对抗扰动在白盒攻击和黑盒攻击条件下所能达到的欺骗率进行对比,证明FUAP算法能提升通用对抗扰动在白盒攻击和黑盒攻击条件下的平均欺骗率。实验所用到的卷积神经网络模型为DenseNet-121、GoogLeNet、Vgg-16和ResNet-50。用于生成通用对抗扰动的样本集为从ILSVRC2012训练集中随机选取的10 000个样本,其中每个类别固定10个样本,测试集为ILSVRC2012验证集,一共包含50 000个样本,用来测试通用对抗扰动的欺骗率。
首先比较FUAP算法和UAP算法在生成通用对抗扰动所需时间上的差异。将上述4个模型分别作为目标模型,用FUAP算法和UAP算法生成通用对抗扰动,并将所生成的通用对抗扰动在目标模型上达到预定欺骗率的时间点记录下来。实验所用的GPU为NVIDIA GeForce GTX 1050Ti,CPU为AMD Ryzen 5 2600X 3.6 GHz。因为在欺骗率低于50%时,两种算法的生成速度都很快,所以选取欺骗率在50%以上,每隔5%节点做记录。每迭代500个样本测试一次通用对抗扰动的欺骗率。通用对抗扰动的范数越大虽然会使得其攻击效果越好,但是也会增加通用对抗扰动的人眼可见度,为了保证所添加的通用对抗扰动人眼不易察觉,设定所有通用对抗扰动元素值绝对值的L∞范数上限为10。两种算法的生成时间对比见图3。
图3 两种算法的生成时间对比Fig.3 Comparison of computation time for FUAP algorithm and UAP algorithm
实验结果表明,在所有测试模型上,FUAP算法只需要更少的时间就能生成达到预定欺骗率的通用对抗扰动,证明了FUAP算法能加速通用对抗扰动的生成。
下面比较由FUAP算法和UAP算法生成的通用对抗扰动在白盒攻击和黑盒攻击条件下的欺骗率。其中,白盒攻击即攻击方具有充分的知识,包括目标模型的结构、参数以及训练数据集等;黑盒攻击即攻击方具有十分有限的知识,比如目标模型的结构或者部分训练数据集,但对模型的参数一无所知。具体地,针对目标模型(比如GoogLeNet)生成的通用对抗扰动,其白盒攻击效果在目标模型(GoogLeNet)上进行测试得来,而黑盒攻击效果则在非目标模型(比如ResNet-50)上进行测试得来。通用对抗扰动的黑盒攻击效果也代表了其迁移性的强弱。实验所用的CNN模型为上述4个模型。为了获得未知的欺骗率上限,将两个算法的预定欺骗率均设置为100%,当欺骗率不再上升时结束算法。设定所有通用对抗扰动元素值绝对值的L∞范数上限为10。由FUAP算法和UAP算法所生成的通用对抗扰动在白盒攻击和黑盒攻击条件下的欺骗率对比见表1。表中处于对角线的黑体数据表示白盒攻击的实验结果,其他数据表示黑盒攻击的实验结果,其中FUAP算法相比于UAP算法所生成的通用对抗扰动的欺骗率增量在括号中给出。
表1 两种算法所生成的通用对抗扰动的欺骗率对比Table 1 Comparison of fooling rates for universal adversarial perturbations generated using FUAP algorithm and UAP algorithm %
实验结果表明。由FUAP算法生成的通用对抗扰动在白盒攻击和黑盒攻击条件下均能达到更高的欺骗率。其中白盒攻击条件下的平均欺骗率增量为8.08%;黑盒攻击条件下的平均欺骗率增量为9.93%,这表示由FUAP算法生成的通用对抗扰动具有更强的迁移性;总的欺骗率增量为9.46%。证明了FUAP算法能提升通用对抗扰动在白盒攻击和黑盒攻击条件下的平均欺骗率。
为了便于学习交流,FUAP算法的源代码见https://github.com/shucsAISL/fast-universal。下面详细介绍本文提出的基于由FUAP算法生成的通用对抗扰动的图像验证码方案。
为了使得图像验证码能抵抗基于CNN的识别攻击,本文基于由FUAP算法生成的通用对抗扰动,提出FEI-CAPTCHA(FUAP Enhanced Image-based CAPTCHA)验证码方案,在验证码的图像中添加通用对抗扰动以降低验证码被CNN模型破解的概率。图4展示了一个FEI-CAPTCHA的例子。图中的所有图像都添加了通用对抗扰动。
FEI-CAPTCHA中的图像可以分为以下两类:
(1)提示信息。即位于最上方的那幅图像,该图像不能被选择,仅用作提示候选的类别。例如图4中的候选类别为狗。
(2)候选图像。即除提示信息外的所有图像,这些图像包含属于候选类别的图像和不属于候选类别的图像。测试者只有在准确无误地选出所有属于候选类别的图像后才能通过测试。例如图4中候选图像中属于候选类别狗的图像一共有3幅,在本次测试中,测试者需要将这3幅图像全部选中(而且不能多选)才能通过测试。
图4 FEI-CAPTCHA示例Fig.4 Example of FEI-CAPTCHA
FEI-CAPTCHA需要一个类别数至少为1 000的图像数据库以保证其基于大规模图像识别任务的特性。使用图像而不是文字展示提示信息。一方面,图像相比于文字更难被机器识别,这可以进一步增强验证码的安全性;另一方面,图像往往比文字更加直观易懂,而且不会有语言不通的问题。为了安全性考虑,候选图像中属于候选类别的图像数目要大于1,但是也不宜过多,因为会影响用户友好性。验证码中的所有图像需要添加通用对抗扰动并且通用对抗扰动需要定期更换。
为了验证FEI-CAPTCHA在抵抗基于CNN的识别攻击上的优势,将FEI-CAPTCHA和DeepCAPTCHA两种方案在基于CNN的识别攻击下的安全性进行对比。
验证码的安全性通过破解率(即攻击者成功破解验证码的概率)来衡量。要通过图像验证码的一次测试,需要同时识别1幅代表提示信息的图像和候选图像中的m幅属于候选类别的图像。而分别识别这些图像为相互独立的事件,所以在基于CNN的识别攻击下图像验证码的破解率即为CNN模型对这些图像的识别率(即CNN模型在最高置信度下的预测分类类别为样本真实标签的概率)的乘积。为了更好地将两种方案进行对比,本文对两种方案在基于CNN的识别攻击下的破解率分别进行测试,并对实验结果进行分析。实验所使用的目前主流的CNN模型为DenseNet-121[15]、GoogLeNet[11]、Vgg-16[16]和ResNet-50[17]。实验环境配置:GPU为GeForce GTX 1050Ti,CPU为AMD Ryzen 5 2600X 3.6 GHz,操作系统为Windows 10 64位,内存16 GB。深度学习框架为TensorFlow,实验所采用的数据集从ILSVRC2012数据集中选取。实验所用的CNN模型经过预训练,在ILSVRC2012验证集下的识别率如表2所示,表中的数据代表了各CNN模型对未添加对抗扰动的干净样本的分类性能。
表2 各模型在干净样本下的分类性能Table 2 Classification accuracyof each model on clean examples
要通过DeepCAPTCHA的一次测试,需要同时识别DeepCAPTCHA的提示信息和候选图像中属于候选类别的图像,其中,DeepCAPTCHA的提示信息为添加了IAN的对抗样本,候选图像中属于候选类别的图像为干净样本。在基于CNN的识别攻击下DeepCAPTCHA的破解率即为CNN模型对上述所有图像的识别率的乘积。CNN模型对干净样本的识别率参见表2。下面通过实验测试各CNN模型对添加了IAN的对抗样本的识别率,并进一步对DeepCAPTCHA在基于CNN的识别攻击下的破解率进行估算。
在ILSVRC2012的训练集中随机选择100个样本作为实验样本,并使用DenseNet-121作为目标模型生成对应的100个IAN。然后测试上述4个模型在对抗样本下的分类性能,其结果见表3。由表可见,IAN能使得目标模型的识别率降至0%,但是非目标模型的识别率仍接近15%。要通过CNN模型成功破解DeepCAPTCHA需要同时识别一个带有IAN的对抗样本和m个干净样本。若由DenseNet-121作为目标模型生成DeepCAPTCHA所用的IAN,结合表2各模型在干净样本下的识别率,将CNN模型对上述m+1个样本的识别率进行相乘即可以求得DeepCAPTCHA在基于CNN的识别攻击下的破解率。DenseNet-121、GoogLeNet、Vgg-16和ResNet-50这4个CNN模型对DeepCAPTCHA的破解率随m的变化情况见表3。
表3 各模型的分类性能及其对DeepCAPTCHA的破解率Table 3 Each model’s classification accuracy and its cracking rate on DeepCAPTCHA %
要通过FEI-CAPTCHA的一次测试,同样需要同时识别提示信息以及候选图像中的m幅属于候选类别的图像。在基于CNN的识别攻击下FEI-CAPTCHA的破解率为CNN模型对上述m+1幅图像的识别率的乘积。因为FEI-CAPTCHA中所有图像都添加了由FUAP算法生成的通用对抗扰动,下面首先测试实验所用各CNN模型对添加了通用对抗扰动之后的样本的识别率,然后对FEI-CAPTCHA在基于CNN的识别攻击下的破解率进行估算。
为了更好地和DeepCAPTCHA的破解率测试实验进行对比,同样使用DenseNet-121作为目标模型生成通用对抗扰动。实验所用的生成通用对抗扰动的样本集为从ILSVRC2012的训练集中随机选取的10 000个样本,其中每个类别选取10个样本。将ILSVRC2012的验证集作为测试模型性能的测试集,一共50 000个样本。按照FUAP算法的步骤使用DenseNet-121作为目标模型生成通用对抗扰动。设定预定欺骗率δ的值为100%并在欺骗率不再上升时结束算法。设定L∞范数上限值为10。各模型在输入样本添加通用对抗扰动后的分类性能见表4。当CNN模型对添加通用对抗扰动的样本的识别率为p,该CNN模型对FEI-CAPTCHA的破解率为pm+1。若由DenseNet-121作为目标模型生成FEI-CAPTCHA所用的通用对抗扰动,DenseNet-121、GoogLeNet、Vgg-16和ResNet-50这4个CNN模型对FEI-CAPTCHA的破解率随m的变化情况见表4。
表4 各模型的分类性能及其对FEI-CAPTCHA的破解率Table 4 Each model’s classification accuracy and its cracking rate on FEI-CAPTCHA %
由表3可见,IAN不仅干扰目标CNN模型正确识别图像的能力,并且能使得非目标CNN模型的识别率显著降低,这表示IAN具有很强的迁移性。但是考虑到生成验证码的效率,IAN的样本相关特性使其无法添加到DeepCAPTCHA的每一幅图像中。因为在图像验证码的实际使用中,为了安全考虑,所使用的图像数据库是一直处于更新状态的,而已经生成的IAN无法对数据库中新增的图像起到保护作用,所以在生成DeepCAPTCHA时需要同时生成IAN。表5列出了各模型生成IAN的平均时间。由表5可见,在需要生成一个IAN的情况下,生成一次DeepCAPTCHA测试至少需要接近2 s的时间。若要生成一个以上的IAN,那么DeepCAPTCHA的生成效率将变得很低下。
表5 各模型生成IAN的时间Table 5 Time for each model to generate IAN
由表4可见,通用对抗扰动能使得目标模型的识别率显著降低,并且在非目标模型上具有较强的迁移性。通用对抗扰动的样本无关特性可以使得其在生成之后,不仅可以保护FEI-CAPTCHA的所有图像不易被CNN模型识别,而且对验证码图像数据库中新增的图像同样可以起到保护作用。这样在生成FEI-CAPTCHA时省去了生成通用对抗扰动的时间。这样在预先生成了通用对抗扰动的条件下,FEI-CAPTCHA的生成速度将会快于DeepCAPTCHA。各模型生成通用对抗扰动所需的时间详见第3章。本文的实验结果表明,在基于CNN的识别攻击下,当图像验证码的候选图像中属于候选类别的图像数目等于1时,DeepCAPTCHA与FEI-CAPTCHA具有相当的平均破解率,而当图像验证码的候选图像中属于候选类别的图像数目大于1时,FEI-CAPTCHA具有更低的平均破解率,将会更加安全。而且在图像验证码的实际使用中,候选图像中属于候选类别的图像数目一般会大于1,但是也不宜过多,否则会影响用户友好性。这也证明了FEI-CAPTCHA相比于DeepCAPTCHA更能抵抗基于CNN的识别攻击。
本文提出了一种快速生成通用对抗扰动的FUAP算法,该算法不仅生成速度快,而且所生成的通用对抗扰动迁移性强。在FUAP算法的基础上提出了能有效抵抗基于CNN的识别攻击的FEI-CAPTCHA——一种基于通用对抗扰动的图像验证码方案,并详细阐述了方案的设计细节。将FEI-CAPTCHA与现有工作DeepCAPTCHA进行对比,通过实验与分析证明了FEICAPTCHA在基于CNN的识别攻击下具有更低的破解率。下一步的研究方向是将通用对抗扰动推广到语音识别领域。