验证码的种类较多,可分为静态验证码、行为式验证码和间接式验证码。静态验证码是用户所能直接得到或间接分析得到的验证码的值,根据验证码呈现方式的不同分为图片验证码(包括经过翻转、扭曲变形、添加背景等处理后的验证码)、问答式验证码、视频验证码等。
行为式验证码是需要用户直接的行为操作而得到的验证码。行为式验证码根据验证码的处理过程不同又可分为拖动式验证码(通过拖动指定的图标到特定位置的验证码)和点击式验证码(点击选择对应图标的验证码)。
间接式验证码是指需要借助第三方工具获得的验证码,如手机短信验证码、手机语音验证码、邮箱验证码等。移动互联技术的快速发展为手机短信验证和语音验证提供了技术支持和平台支撑。手机短信验证码和语音验证码逐渐成为主流的验证码。
常用的验证码有以下类别。
1.文本验证码
文本验证码以图片为载体将随机或根据某种规则选择或生成的一组文本,经过图像处理后呈现给用户,用以区分用户是计算机还是人。通常文本验证码中都会加上干扰信息以避免被计算机识别,嵌入图片里的是扭曲和损坏的文本内容。这些图像一般很容易被人类识别,但其内容对于光学字符识别软件来说,通常是难以辨认的。
验证码的稳健性和可用性的矛盾是由于验证码既要人类易于识别又要满足不易被机器识别的特点决定的。基于文本的验证码由于其技术门槛低、成本低而被广泛使用,但极易受到光学字符分割攻击。
在文本验证码系统中,服务器生成随机文本字符串R,经变换成φ(R)后发送给用户,由于机器不能识别出变形图片φ(R)中的字符串R,只有人才能够识别,保证了客户端参与者必须是人,避免了攻击者利用机器进行自动的在线口令字典攻击。通俗地说,就是由服务器随机产生文本序列,然后与背景图片进行信息融合生成最终的验证码。
文本验证码有如下特点:文本验证码是随机生成的;验证码只是为防止程序猜测等目的而生成的无意义字符串,不需要用户记忆;验证码只对当前服务有效,并具备时效性,只在一定时间内有效。例如,一般网页规定验证码的有效时间为5分钟。
验证码作为一种安全技术,安全强度主要基于图像识别的难度,根本就在于其具备一定的信息隐藏性,使得一般程序化手段难以进行提取,因此,提高验证码的安全性,必须从增加信息提取难度入手。
文本验证码从两个方面增加了信息提取难度:一方面,在信息传输和页面显示中不存在直接可提取的验证码文本,要进行图像-文本的程序转换必须通过图像识别;另一方面,针对图像识别技术,可在信息融合过程中添加干扰信息,同时进行图像混杂、扭曲或变形处理,增加图像识别的难度,从而提高图像识别的算法复杂度,降低识别正确率,以达到用户可识别,而无法进行程序化识别的最终目标。
提高文本验证码的安全强度,一是文本使用较多的字符种类与字体种类,使计算机识别复杂化。字符种类有字母、数字、汉字、符号。字体种类有宋体、草书、行书、艺术字体、空心字体等。二是对图片的背景干扰、前景变形和信息码变换。干扰种类越多,计算机去除干扰的能力越差,当然人类识别的难度也随之增大。
•背景干扰:选择变化的背景图片,是降低图像识别率的基本方法。通常有不同的背景色、背景点、背景图、渐变背景色、网格背景等。对背景图形进行凹凸化、球状扭曲等变换。为了干扰字符位置的检测过程,一些文本验证码将字符嵌入复杂的背景当中,如街景。最著名的机制是Google的reCAPTCHA街景版本,它直接将街景中的门牌号作为验证码。
•前景变形:通过对前景图形(通常是数字、字符、汉字等)进行倾斜、旋转、扭曲、膨化、波浪化、风化、空心化等变形,改变颜色、位置、大小等方法干扰图像的识别。例如,使用水波效果、水滴效果等字符扭曲手段,增加图像切割、识别的复杂度。采用不同字符旋转角度不同的方式增加切割的复杂度。空心机制的主要特征则是字符仅由轮廓线构成。变化的文本验证码长度增加随机性,这指的是一张验证码图片中所包含的字符个数并不固定不变。
•信息码变换:包括添加干扰线(噪线)、对字符叠加等。例如,使用干扰线使相邻文字粘连,增加图像切割难度。噪线可以分为两种,一种是细噪线,另一种是粗噪线。利用相邻字符前后重叠粘连在一起增加计算机图像分割的难度。双层结构的字符重叠是两个单层验证码在竖直方向的组合,即上层与下层字符上下重叠粘连。
文本验证码包括文字输入型、文字点选型。对于文字输入型的文本验证码,用户需按次序输入图中字符。对于文字点选型的文本验证码,用户需按照顺序点击图中文字。
2.图像验证码
随机或根据某种规则选取若干图像,将这些图像呈现给用户,用以区分用户是计算机还是人。通常这些图像中有一个或一组具备某一个共同的特点,例如,点击包含路标的所有图。这种基于图片分类的验证码是当前应用比较广的一种验证码,优势是验证过程简单,并且可以通过调整图片物品种类的相似度来加强验证强度,不易被计算机识别;缺点是用来验证的图片相似度不好控制,容易使本该通过的人类验证失败,因为过于相似人类也不易识别,同时它对图像库以及问题库的大小要求比较高,图像库越大,越难出现重复,验证码的安全性也就越高。
图像验证码提出在八张小图片中选择需要点击的所有物体才能验证成功,少点或错点都会验证失败,由于验证码物体类型繁多,像素低,往往会给使用者带来不便,错误率高。例如,点击8幅头像中所有的姚明头像,点击图中嵌入的所有图标。
3.滑块验证码
动态认知游戏(Dynamic Cognitive Game,DCG)验证码要求用户进行一系列游戏式的认知任务以通过验证,相比文本验证和图像验证在用户体验上有了很大改善。动态游戏验证码的游戏形式多样,有在给定图案中选中并拖动到匹配位置,有识别图片方向并旋转到指定位置。
滑块式验证码是动态认知游戏验证码的典型代表,它要求用户拖动滑块到目标位置,相比于肉眼识别字符或图片,这种验证方式的交互过程更为有趣,因此在很多主流平台上,滑动验证日渐替代了先前流行的文本和图像验证方式。
滑块验证码是一种基于位置的验证码。随机或根据某种规则选择或生成一个或一组位置信息,将这些位置信息以某种方式呈现给用户,滑块验证码将拼图拖拽至缺损位置处进行验证。由于后台会对用户将滑块拖动到指定位置的鼠标路径进行判断,因此滑动的轨迹必须要根据人类控制鼠标滑动的特点来进行生成。滑块验证码的出现很大程度上提高了验证码的安全性能,能够很好地区分人和机器,防止暴力破解。
绕过滑块验证的过程主要分为两个步骤:首先根据前端呈现的图像找到滑块需要滑动到的目标位置;然后根据目标位置的偏移距离,获得一条相应的滑动轨迹,根据这条轨迹用脚本模拟人类进行鼠标轨迹的拖动,滑块虽然只是简单的向右拖动,但在过程上会去判断加速、减速等过程,鼠标拖动过程也并非是直线滑动,其间是一个在一定范围内连续的曲线运动,程序很难去模拟。
图4.65是滑动拼图式的滑块验证码,要求滑动完成拼图。(www.daowen.com)
图4.65 滑动拼图式的滑块验证码
图4.66是推理拼图式滑块验证码,要求拖动交换两个图块复原图片,图片完整性推理结合生物行为轨迹,保障验证安全。
图4.66 推理拼图式的滑块验证码
4.鼠标手势验证码
在验证码图片中,系统给出了一个带有箭头的折线。用户需要按照给出的验证码图案上的有向折线(手势),用鼠标绘制出相应的折线。系统获取到用户绘制的鼠标手势后,计算鼠标手势与图片中折线的相似度,当相似度大于给定阈值时,即认为该用户通过了验证。
5.声音音频验证码
声音验证码通常作为视觉验证码的补充。随机或根据某种规则选取一组经过处理的声音信息,如将一些单词的声音片段和一些随机选择的混扰杂音放在一起输出,使用者需识别其中声音的内容。这种系统是利用人和计算机在语音识别方面的差异实现的。对于一些视觉存在弱化的人群来说,以语音作为RTT系统是十分有用的,它们可以用来代替基于文本的CAPTCHAs。口音的不同,尤其是方言的引入,能够有效地防止计算机识别,如英式英语、美式英语、方言等。
6.视频验证码
系统给用户播放视频让其进行验证,系统将数字、字母、中文等字符动态地嵌入MP4、FLV等格式的视频中,验证码视频从视频库中动态选取,视频中的验证码使用字母、数字等随机组合,字体形状、大小的变化,速度的快慢变化,显示效果和轨迹的动态变换,增加了恶意抓屏破解的难度,具有较高的安全性。
7.基于常识的验证码
随机或根据某种规则选取一道问题,将被选取的问题呈现给用户,用以区分用户是计算机还是人,也称基于问答的验证码。选取的问题可能需要用户根据自身知识分析判断得出答案,这些问题可以是文学常识、历史知识、算术计算、单词补全、成语补全、技术知识、网站信息、个人信息、逻辑推理等。
与基于图像的验证码类似,基于常识的验证码要求问题库足够大,能够有效地避免计算机获取所有常识库人工解答最终自动破解的发生。常识库要持续更新,常识库的更新频率,尤其是与用户相关的常识库(如访问过的网站、购买过的产品等)的更新频率直接影响验证码的安全。
基于常识的验证码能够与文本验证码结合,用户首先需要识别出验证码中以文本图片方式展示的常识问题,经过推理得到答案,再将答案作为输入,而不是像文本验证码那样直接输入图中字符。
8.短信上行验证码
短信上行验证码需要发送指定的随机数字短信到指定平台进行验证。
9.广告验证码
让用户在输入验证码的同时阅读广告。目前的广告验证码都是基于传统验证码的,如图片验证码。可能是以某广告图片为背景再附上验证码,也可能验证码就是广告词等。
10.reCAPTCHA
2005年冯·安创造了一个新概念“人本计算”(Human-based Computation),即把人的脑力和计算机的能力结合起来,完成两者都无法单独完成的工作。他提出reCAPTCHA项目,主要用于把互联网出现前的纸质典籍数字化。思路是这样的:验证码系统会向用户出示两个单词,一个是正常的自动生成扭曲文字,另一个则来自纸质典籍的扫描版,它们通常因为年代久远、纸上有污点等原因难以被OCR程序识别。用户输入验证码时,只要第一个单词输入正确就可以被判别为人类。系统默认输入的第二个单词正确,并与其他用户的输入结果进行对比,如果多名用户的答案一致,这个词的数字化就完成了。推出之初,reCAPTCHA每天就能录入3 000万个字符。2009年,Google收购了reCAPTCHA,它也在Facebook、Twitter、CNBC中使用。在抵御自动化程序攻击的同时,Google图书中难以被自动识别的扫描版的古老典籍借助reCAPTCHA得以数字化。
11.NoCAPTCHA
2014年,Google推出了不需要输入验证码的验证系统,用户只需要单击一个“我不是机器人”的复选框,就能判别是不是真正的人类。工作机制是跟踪用户点击验证框之前、当时和之后的行为,比如在网页上花费的时间,从而来判断是否是人为操作。该系统用户不需要任何输入,具有较好的使用体验。不足是Google掌握了越来越多的用户隐私。如果被系统误判为机器人,则可使用图像验证码,从一堆图片中选出正确的目标。
对验证码的攻击主要是通过人工智能的算法识别验证码,另外一种攻击是利用打码平台(网赚平台)。打码平台利用低廉的佣金吸引闲暇时间比较多的人来帮忙人肉识别验证码,然后把识别好的文本回传给脚本。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。