网络验证码的分析与研究
班级:统计112 姓名:汪强 学号:2011014402
摘要:验证码(CAPTCHA) 最早作为Carnegie Mellon University(卡内基梅隆大学)的一个科研项目,雅虎是验证码的第一个用户。验证码的目的就是研究用来区分计算机与人类的程序算法,这种程序必须能生成并评价人类能很容易通过但计算机却通不过的测试随着互联网的进一步发展,在网络给人们提供丰富资源的同时,网络的安全问题也日益突出,比如用户利用机器人程序自动注册、登录、恶意投票、发送垃圾邮件、恶意尝试密码等。由于验证码技术简单,容易实施,传输数据量小,因此不少网站为了避免上述安全问题,都采用了验证码技术来区分机器人程序与真实用户。所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰像素(防止 OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。 关键词:验证码识别;神经网络;遗传算法;互联网安全
本文旨在通过采用遗传算法与 BP 神经网络的结合,来优化 BP 神经网络的初始权 值的选择,以改进验证码识别技术的样本训练效率。通过遗传算法来多次选择不同的初 始权值,并在平坦区域加快学习速度,以使其尽量可以跳出纯 BP 神经网络易陷入的局 部极小值、训练时间过长的困境,达到加快训练速度、提高识别率的效果。
对验证码识别方法的研究已不仅仅局限于促进验证码设计技术的进步,还完全可以 应用到其他的图像识别领域,比如手写字体识别、车辆牌照识别等等。 本文研究的主要内容为:
如何应用图像处理技术及结合 BP 神经网络和遗传算法来搭建一个验证码识别系统,将网站系统随机生成的验证码图片识别为原始验证码,以及在此基础上对验证码设计的安全性方面提出一些改进性意见。主要内容包括:
1、验证码识别概述及神经网络和遗传算法的概述
本文对验证码识别的概念进行了阐述,分析了验证码识别的理论背景,并对验证码 识别在国内外的发展过程及发展现状作了分析,对验证码识别作了初步概述。还对神经 网络和遗传算法分别作了介绍,在分析了两者的优缺点后,提出了两者结合的算法。 2、验证码识别系统需求分析、系统设计及实现的研究
确立系统的总的开发设计目标、系统的开发设计思想、分析系统的功能结构,并且 确立系统需要实现的各类功能,完成需求分析。总体上来说要设计一个界面简洁、功能 实用、训练速度快、识别率高的系统。在此基础上采用 Visual C++语言来实现验证码识 别系统的相应模块和功能。 3、验证码设计的安全性分析
在前述研究的基础之上,针对验证码设计技术的安全性进行了分析,并提出一些改 进性意见。
4、验证码识别的概念、发展及现状概述 5、很难识别出来的地步。
机器识别图片主要的三个步骤为消去背景、切割字符、识别字符。现有的字符验证
码也针对这三个方面来设计强壮的验证码,举例来说:
2-1 扭曲文字验证码
图 2-1 的这个 EZ-Gimpy 产生的验证码就用了一个渐层的背景和扭曲的文字来让 电脑辨识困难。事实上,以现代技术来说,这差不多是最容易破解的一种。因为电脑就 是消去背景和识别字符这两个部分最擅长,因此要增加电脑辨识难度,还必须要加上切 割字符的困难度才行。
图 2-2 reCAPTCHA 验证码
图 2-2 的这种验证码叫 reCAPTCHA,是一种使用率很高的验证码。reCAPTCHA 用
的技术很有趣:它是去扫描古书,并从中找出电脑无法辨认出来的古字,加上一条增加 切割字符困难度的曲线后,呈现给使用者。系统只知道两个字当中其中一个的答案,如 果你答对了它知道的那个,那它就假设你是人类无误,并假设你的另外一个字也有答对, 这样 reCAPTCHA 知道的字就又多一个了。
图 2-3 KCAPTCHA
图2-3的 KCAPTCHA 则是让所有的字都粘连在一起,让电脑无法正确地切割字符。
图 2-4 前景色和背景色易混淆的验证码
图 2-4 是一个利用背景和前景的复杂度来增加识别字符困难度的例子。
图 2-5 动画格式验证码
图 2-5 虽然不多见,但也有些网站用的是动画的验证码字符。这种对电脑来说几乎 是不可能破解的,因为电脑很难知道哪个影格里的数据是正确的。当然,也不一定要靠 文字才能做验证码,像下面这个:
图 2-6 Kitten Author 验证码 这个系统叫“KittenAuth”,顾名思议就是要你从九张可爱的动物中选出三张是猫咪 的图来。这个利用的是电脑对没有固定模式的东西(像照片)的内容没有对策的这个弱 电来设计的。
除了上面一些比较常规的验证码之外,我们在网络上也发现一些不但是机器难于回 答,就连人类自身也难于回答的验证码,如下面几幅图所示:
图 2-7 背景图中亦有字符的验证码
验证码识别的技术基础主要是图像处理技术和模式识别技术。
其中,图像处理技术主要包括图像的灰度化、二值化、去噪、倾斜度校正、字符切 割和归一化等;模式识别技术则主要包括提取字符特征、样本训练和识别等。 下图为验证码识别系统的功能流程图:图像采集→ 图像处理→ 模式识别 2.3 验证码识别在国外的发展及现状综述
验证码研究作为卡内基梅隆大学的一个科研项目,雅虎是它的第一个用户。此后,吸引了不少研究人员对此项目进行研究,有人站在验证码阵营,而另外一些人则站在了
验证码识别的阵营,两大阵营互相竞赛。两大阵营的对抗竞赛促进了验证码技术的不断 向前发展。
验证码是每一个网站不可回避的一个东西。不久前,Slashdot 上一则题为“Yahoo CAPTCHA Hacked”的消息引起了不少人的震惊,精确度能达到 35%!要知道,一直研 究验证码有效性的 PWNtcha 项目的评测中,雅虎的验证码几乎是最安全的那种,“A very good CAPTCHA, but not always human-solvable”,之前也有专门针对雅虎所用验证码进 行破解研究项目,比如 Gimpy。
肯定没有 100% 安全的验证码——除非你根本不想让人看明白,在用户可识别性 与机器识别之间的平衡是最大的问题,“挑战——响应”(Challenge-Response),两个环 节之间的问题其实也挺微妙。在注册微软的一些服务的时候,验证码很难让人看明白, 要多刷新几次才能有个好认的;而一些电子商务的网站,比如 Paypal ,验证码被 PWNtcha 破解的概率是 88% ,这么做应该也是有苦衷的,毕竟要考虑用户体验 Internet 上一个持久的问题,就是如何屏蔽掉一些自动软件,如自动注册帐户然后 发送垃圾邮件或垃圾回复以提高站点的搜索排名。谷歌一直致力于这方面的研究,已经 在尝试新的方法让机器退散 。 [
目前谷歌发布了一项新的研究成果,提出了一种区分电脑与人类新的测试方法。该 方法的原理是,人类通常能区分出图片的哪个方向是朝上的,而电脑不能。这种方法要 求受验证者旋转给定的图片,使其直立。比如图片是一个人的话,就要旋转到头在上脚 在下。
本文通过对验证码识别的研究,利用图像处理技术和模式识别技术设计并实现了验 证码识别系统。特别在基于神经网络和遗传算法来对验证码进行识别方面,做出了有益 的尝试,但在实际应用过程中还是发现有不少问题尚待解决。比如前文提到的网络的训 练参数依赖于多次尝试的经验值来确定,以达到训练时间与识别率的最佳平衡。 基于前述的研究工作,以下对验证码设计提出一些建议:
1、在噪点的使用上,尽量让字符和用来混淆的前景和背景不容易区分,尽量让噪 点与字符相似。
2、要设计特别好的验证码,必须尽量发挥人类擅长而机器算法不擅长的。 比如粘 连字符的切割和手写体(通过印刷体做特别的变形也可以)。 而不要一味的去加一些看 起来比较复杂的噪点或者其他的花哨的东西。即使你做的足够复杂,但如果人类也难于 识别,显然失去 CAPTCHA 的本意。
3、从专业的机器视觉的角度说,验证码的设计,一定要在低阶视觉和高阶视觉之 间多反复几次,增加机器识别的难度。 这样可以提高破解难度和降低破解准确率。 下一步的研究重点如下:
1、在前述工作的基础上,继续完善系统的相关技术。比如样本训练网络的进一步 优化,遗传算法在图像倾斜校正、图像切割的应用等。
2、积极探索识别技术在其他领域的应用。比如在文字识别、车牌识别中的应用等