一种三维验证码的实现方法

文档序号:6486344阅读:172来源:国知局
一种三维验证码的实现方法
【专利摘要】本发明公开了一种三维验证码的实现方法,绘制一个可旋转的三维球体,该三维球体的球面上的每一个点由一个向量表示;在所述三维球体的球面上按预定的规则随机添加一组噪声点;将已经产生的验证码中的字符投影在所述三维球体上;在所述三维球体的球面上随机选择两个点,连接成线,生成随机噪音线;显示在验证界面上由用户识别。其中绘制一个可旋转的三维球体的方法是:绘制一个二十面体,该二十面体的坐标存放在数组中;对于每一个三角面,在其三条边上取中点,并将每个终点的向量调整长度与球体半径相同;将一个三角形一分为四,通过递归算法将二十面体细分为八十面体、三百二十面体,以此类推,直至近似球体。
【专利说明】—种三维验证码的实现方法【技术领域】
[0001]本发明属于信息安全【技术领域】,特别涉及一种三维验证码的实现方法。
【背景技术】
[0002]在验证码尚未出现的时期,垃圾评论可以轻松通过任何一个网站的注册程序,通过各种方式攻击论坛;同样,黑客也可通过暴力搜索破解账户密码,造成用户的巨大损失。
[0003]如果一个用户连续发表一连串相同又毫无意义的内容在论坛中,不久论坛的整个板块就全是此垃圾信息了,而其他信息全被挤到了队列的后面。试想现在有一个自动发布信息的程序,每五秒内就能发送一次信息,那么一天的发送量至少在几万。当垃圾信息多到删除不完的时候,这个论坛就崩溃了。这就是所谓的恶意灌水。同理,一些不法分子专门利用破解用户银行帐号来谋取利益,一些网络银行也因此类原因导致用户密码被盗、财产损失等众多事件。如果发贴程序或是密码穷举程序在很多僵尸机中同时工作,结果可想而知。
[0004]许多论坛意识到了防止恶意灌水的重要性,所以纷纷使用了一些防止措施,如发贴时间间隔的限制、同一 IP地址发贴数的限制、内容不能重复等,但是这些都不是非常有效。同时,网站对账号的保护并不能使用这种方法,所以验证码应运而生。
[0005]验证码(CAPTCHA,Completely Automated Public Turing test to tellComputers and Humans Apart,全自动区分计算机和人类的图灵测试)是一种区分用户是计算机和人的公共全自动程序,可以防止恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试。[1]现在很多网站的登陆和发帖都是用了验证码。
[0006]客户端请求一个验证码,服务器便生成一个图片验证码并把其内容储存在session中,同时把它打印在网页页面上。当用户提交数据时,服务器判断输入的验证码和session的内容是否一致。
[0007]一般验证码的设计步骤如下:
[0008]I)随机生成几个数字或字符形成字符串
[0009]2)产生一幅图片将字符串包含在里面
[0010]3)在该图片中加入一些干扰像素(有“噪点”、“噪音线”等)
[0011]4)将其写入内存数据流,并将图形输出传递到客户端
[0012]5)判断用户输入的验证码和保存的内容是否一致
[0013]6)如果验证失败,或是一定时间内没有向服务器提交登录和注册请求,则验证码就会失效,必须重新刷新获取一个新的验证码;若请求成功,则用户可进行操作,同时相关验证码刷新
[0014]由此可见,验证码在一定程度上可有效防止“自动化机器人”的攻击尝试。
[0015]虽然验证码已被广大 网站所使用,但它还是存在着许多漏洞。对于简单的验证码(纯数字),黑客通过技术手段使验证码无法刷新,再用暴力破解,最终导致验证码形同虚设。后来加入了文字,使得暴力破解的时间变得无限漫长。这时黑客首先使用手段令验证码无法刷新,接着通过OCR将文字识别。所以产生了更复杂的验证码,如文字扭曲,背景画面的复杂化以增加识别难度,但这也会使用户难以看清图片;语音输入(让用户读一段文字)是一个好方法,但人口音的不同使得识别变得困难,这个度很难把握;还有问题回答,但对于知识面不广的用户有困难,且问题格式不会太多,使用多次后便会出现一定的重复。
[0016]当然,没有一种验证码可以完全抵御破解的攻击。但是,找到一个机器识别成功率非常低的验证码仍是目前网络信息安全的一个重点,因为一个好的验证码能够更好地保护用户的个人信息和论坛的可持续性,这也就是世界各地的学者所追求的。

【发明内容】

[0017]本发明的目的是提供一种难以被破解的三维验证码,以更好地抵御恶意的暴力破解。
[0018]本发明的技术方案是,一种三维验证码的实现方法,包括以下步骤:
[0019]Al,绘制一个可旋转的三维球体,该三维球体的球面上的每一个点由一个向量表示;
[0020]A2,在所述三维球体的球面上的按预定规则随机添加一组噪声点;
[0021]A3,将已经产生的验证码中的字符投影在所述三维球体上;
[0022]A4,在所述三维球体的球面上随机选择两个点,连接成线,生成随机噪音线;
[0023]A5,显示在验证界面上由用户识别。
[0024]所述步骤Al中绘制一个可旋转的三维球体的方法是:
[0025]绘制一个二十面体,该二十面体的坐标存放在数组中;
[0026]对于每一个三角面,在其三条边上取中点,并将每个终点的向量调整长度与球体半径相同;
[0027]将一个三角形一分为四,通过递归算法将二十面体细分为八十面体、三百二十面体,以此类推,直至近似球体。
[0028]A6,对于所述的三维球体,利用滚轴控件完成对球体的旋转拖动。
[0029]目前三维图形技术和人机交互技术的发展相当迅速,在验证码中也有了一定的应用。然而,正在使用或最新创造的验证码还没有将这两者进行整合运用,来有效提高验证码的抗破解性。本申请的三维验证码最大的创新点是在于它生成的球体能够通过用户的控制进行旋转,可以大大降低被破解的几率,其原因主要有二:
[0030]I)由于验证码分布于立体上,使得原来平面形式的字符不一定能全部同时出现在屏幕视角当中,总会缺少一些部分。一个残缺的字符不能与机器中字符库对应,从而影响到机器的比对;同时,由于投影面为球面使得平面上的字符会有所扭曲,从而影响机器的OCR识别。
[0031]2)由于球体是可以旋转的,攻击者不知道初始的旋转角度,识别的几率再次减小。破解这种新式验证码的方法仍为OCR (本质上仍旧是机器对字符的辨识),但是由于加入了一个新的干扰:旋转角度,使得攻击者在破解的时候必须先尝试出正确的角度,因此攻击的时间复杂度必须乘以枚举数(360的立方),显然大大增加了破解的时间。
[0032]在实用性方面,本课题设计的验证码也并不因安全性提高而降低便捷度。在生成验证码的时间复杂度上,该验证码与现行的种类相差无几,在服务器生成它的过程中并不会占用用户太多时间,用户也不会因此而需要等待许多时间让服务器生成验证码。除此之夕卜,该验证码面向各类用户,可以根据用户的识别能力来进行适当的调整,来降低用户的使用困难。针对不同的用户群体,可以调整生成验证码的参数,使用户获得最佳体验。例如对于视力不佳的老年人,该验证码可以根据用户的年龄来设定适当的识别难度。
[0033]与现有验证码相比较的优点是:
[0034]I)对于二维字符式验证码,本验证码的字符均处在三维空间中,且验证码的字符并不总是完整出现在显示界面中,相比于二维验证码更加难以被机器所识别和破解。
[0035]2)对于非字符式验证码,本验证码的优势在于它仍然使用字符,保持了验证码原有的随机性。同时该验证码运用了更好的三维防范方法,可以做到和非字符式验证码相同的反识别效果。
【专利附图】

【附图说明】
[0036]图1是本发明实施例中的验证码被识别机率的测试结果图【具体实施方式】
[0037]本发明具体实施时,可以采用以下系统:
[0038]I)C# (C Sharp),Microsoft Visual C#是一种功能强大、使用简单的面向对象语言,主要面向需要使用Microsoft.NET Framework来创建应用程序的开发者。它在C++和Microsoft Visual Basic的基础上去芜存菁,最终成了一种更加清晰、更富有逻辑的语言。C#凭借在许多方面的创新,在保持C语言风格的表现力和雅致特征的同时,实现了应用程序的快速开发。
[0039]2) OpenGL(Open Graphics Library), OpenGL 图形系统是图形硬件的一个软件借口,它允许我们创建交互性的程序,产生移动三维物体的彩色图像。从本质上说,他是一个3D图形和模型库,具有高度的可移植性,并且具有非常快的渲染速度。如今,OpenGL广泛应用于游戏、医学影像、地理信息、气象模拟等领域,是高性能图形和交互性场景处理的行业标准。
[0040]本发明基于上述开发系统,实现步骤有:
[0041]I)绘制一个可由用户控制旋转的三维球体
[0042]每一个点都是由向量确定的。通过连续确定多个点,并在绘制图像的函数中确定所绘制的图形模式(例如直线、多边形等等),可将已经给定的坐标点集合转变为图形。
[0043]绘制球体的算法是,首先绘制一个二十面体(坐标存放在数组中),接着对于每一个面(一个三角形),在它的三条边上取中点,并将每个终点的向量调整长度与球体半径相同。这样就将一个三角形一分为四,通过递归算法可将二十面体细分为八十面体、三百二十面体,直至近似球体。对于三维球体的控制旋转的方法是,利用滚轴控件完成对球体的拖动。
[0044]2)给球面上的每个部分按指定规则随机一组像素值(类似噪音点)。
[0045]3)将验证码中的字符投影在该球体上(目前的方法为生成字符坐标库)
[0046]4)随机噪音线:随机两个坐标,连接成线。
[0047]5)显示在界面上让用户识别。[0048]以下是对于本发明实施成果的验证。本申请的测试方法为基本的OCR (由于球体上的字符仅凭借球面进行扭曲,并未添加其它变形),通过读取图片并与字符库比对得到结果。由于上述验证码没有以图片形式显示,故一般的识别验证码的方法对此并不适用。针对设计的新型验证码,本申请使用的试验方式是:在用户界面上选择多个特定角度,将验证码转化成BMP图像让识别程序(由VC编译)尝试识别。对于每一固定角度,将识别成功次数除以总识别次数,从而得出识别该角度下的成功率。本测试所处的系统为Windows XP,图1为验证码球体相对于验证码(字母和数字)正对屏幕时机器识别的几率(每组20个),其中横轴为旋转角之和,纵轴为识别几率。
[0049]由图1可见,尽管在字符正对屏幕的情况下,识别几率较大,但随着旋转角的增力口,验证码的识别率显著减小;而当旋转超过九十度时,机器几乎不能识别。同时在仅采用数字的情况下,该验证码的表现已相当不错。从定性方面分析,该验证码的识别几率并不是很高,且具有很好的使用前景。
【权利要求】
1.一种三维验证码的实现方法,其特征在于,包括以下步骤: Al,绘制一个可旋转的三维球体,该三维球体的球面上的每一个点由一个向量表示; A2,在所述三维球体的球面上的按预定规则随机添加一组噪声点; A3,将已经产生的验证码中的字符投影在所述三维球体上; A4,在所述三维球体的球面上随机选择两个点,连接成线,生成随机噪音线; A5,显示在验证界面上由用户识别。
2.如权利要求1所示的三维验证码的实现方法,其特征在于,所述步骤Al中绘制一个可旋转的三维球体的方法是: 绘制一个二十面体,该二十面体的坐标存放在数组中; 对于每一个三角面,在其三条边上取中点,并将每个终点的向量调整长度与球体半径相同; 将一个三角形一分为四,通过递归算法将二十面体细分为八十面体、三百二十面体,以此类推,直至近似球体。
3.如权利要求2所示的三维验证码的实现方法,其特征在于,对于所述的三维球体,利用滚轴控件完成对球体的旋转拖动。
【文档编号】G06F21/36GK103514393SQ201210206027
【公开日】2014年1月15日 申请日期:2012年6月20日 优先权日:2012年6月20日
【发明者】陆嘉辉, 吴奕明 申请人:上海市上海中学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1