谁发明了验证码?你出来 保证不打死你

前验证码时代


一开始,网络上是没有验证码的。那时想要在论坛上发帖,只需轻轻敲一下回车键。

然而,那个时代却没有大家以为的那么平静,当时的黑客也十分猖狂:他们编写了一种能够大量、重复编写信息的程序,伪装成人类用户,肆无忌惮地朝网络上倾倒大量的、无意义的“僵尸”信息,垃圾邮件、垃圾广告、垃圾评论到处乱飞。论坛被灌水,有用的信息很快会被淹没,很多网站的正常运营遭到破坏。

除此之外,还有数之不尽的程序机器人使用不断尝试的方法恶意破解密码、恶意刷票,从中获取非法的利益。强而有力的程序机器人如同霸王龙一样横行霸道,网络世界一片狼藉,眼看着就要失控了。

其中,受影响最大的当属电子邮件的提供商:他们的用户每天收到数以百计的垃圾邮件轰炸,严重地影响了正常的工作;更要命的是,这些垃圾邮件还是用他们的免费邮箱发出的。他们不可能一一审查邮件,因为那既不尊重隐私,工作量也太大。

难道就没有任何手段约束程序机器人了吗?当时最有实力的邮件提供商Yahoo(雅虎)公司决定下狠劲改善这个问题。很快,雅虎的负责人联系到了当时卡内基梅陇大学一位21岁的学生,他叫路易斯·冯·安(Luis von Ahn)。


反图灵测试

路易斯是一个计算机天才,17岁进入卡内基梅陇大学,在大学时期,他凭借良好的表现获得了导师曼纽尔·布鲁姆(Manuel Blum)的赏识,他的傲人履历也很可能是雅虎向他伸出橄榄枝的原因。

在研究过程序机器人的“工作手法”之后,他给出了一个独特的方案:在用户进行操作之前,就将那些机器人从正常用户里揪出来。


大家都知道图灵测试的目的是将机器伪造成人类,而路易斯的方案就是“反”过来:通过简单的方法将试图伪装成人类的程序机器人鉴定出来。

好了,现在大家来想想,有什么是人类能够轻易做到,而机器不可能的呢?

数学题?机器做得比人类出色多了;

写一篇洋洋洒洒保证书保证“我是人类”?机器绝对写得又快又好;

画一幅画?拜托,谁有空每次在论坛发一次贴就画一次画?而且说真的,机器画画也绝对比人类强;

晒出自己和电脑屏幕上的信息合影的照片?哪有那么多工作人员有空一个个审核呢。

路易斯发现,人类可以用肉眼很轻易地识别图片里的文字信息,而机器就不能。当时的计算机辨识技术还很落后,对于那些镶嵌在图片中的、被扭曲过、污染过的文字无法辨识,而人类只需要稍稍皱眉就可以识别出来。

路易斯在导师布鲁姆的帮助下很快设计了一个程序,它先是产生一个随机的字符串,比如smwm,然后对这串字符进行随机的扭曲、重叠、污染,再显示给要进行操作的用户。只要能够识别这个变形了的smwm的,就是人类。


这个字符串经历过扭曲、右侧加光调色的处理

这个设计方案后来被命名为“CAPTCHA”,这是“Completely Automated Public Turingtesttotell Computersand Humans Apart”首字母的缩写,意思是“全自动区分计算机和人类的图灵测试”。

虽然看上去很夸张,但实际上还是挺简单易懂的。它的中文译名就是大家熟知的“验证码”啦。

人人都来当校对

21岁的路易斯·冯·安发明了验证码后真是名利双收,但他享受了掌声和鲜花后冷静了下来,为一件“小事”感到耿耿于怀:全世界的网民每天要输入验证码接近2亿次,假设每次花费10秒,那么算下来每天要花费50万小时。这个时间如果能利用起来,那将会有多大的力量啊。


路易斯将目光投向了旧书摊。信息时代来临之际,很多古旧的书籍报纸需要整理成电子版,但是电脑扫描辨识时常常出错,因为这些旧资料常常不可避免地有着字迹模糊、褪色、污损的情况。路易斯比任何人都清楚电脑在辨识文字上有多笨拙。唯一的方法是人工核对,但这样的工作显然不是一个人或者一个公司可以胜任的,为什么不让网民们来帮忙呢?

说干就干的路易斯很快开工了:他扫描了一些过期的旧报纸,将扫描得到的图片在计算机的分析下拆开成单词片段,再将这些单词作为验证码发送给用户。


有人要问了,先前的那些验证码,系统是知道答案的,但这些书籍拆下来的单词,系统自己也搞不清楚答案,那怎么知道用户的判断结果对不对呢?

路易斯用一贯简洁优美的思路解决了这个问题,并将它起名为reCAPTCHA(意思是“二次验证码”):他让用户一次性辨识两个单词,其中一个是系统生成的真正的验证码,另外一个是从旧报纸上截下来的单词。如果用户输对了第一个验证码,那么输对第二个单词的几率也很高。


扫描出来的图片和真正的验证码长得那么不像,reCHAPTCHA这个项目又人所皆知,用户一眼就能看出来右边那个“345”是假的验证码。很多认真的用户会乐意为辨识古书籍献出一份力,但并不是每个人都那么乐于助人,那些爱捣蛋的用户很可能会故意输入错误的单词。

为了防止恶意捣乱、提高答案的可信程度,路易斯后来还要对两个验证码进行加工,让它们成为“孪生子”:下面左边的这个morning,就是从旧报纸里截取出来的,是不是跟右边的overlooks长得很像呢?如果用户分不清那个是真验证码,哪个是“假验证码”,他们会更配合工作。

路易斯还将同一个未知的单词输送给多个用户,如果所有用户辨识的结果一致,都是“morning”,那么就认为这个单词被“搞掂”了。

用这一个方法,在短短几个月时间内,路易斯让网民们帮忙完成了纽约时代130年来所有旧报纸的存档电子化——这原本可是个让人望而生畏的大工程啊。

reCAPTCHA很快被Google收购,现在已经成为了Google旗下的一项免费服务:任何人都可以申请将reCAPTCHA用在自己的网站上,你不仅可以为你的网站建立一个防止垃圾信息的堡垒,还让你的用户们得以参与到完善人类电子图书馆的丰功伟业中来。

验证码的不断进化

我们知道,验证码实际上就是一种人机大战。随着电脑技术的飞速发展,有效的图像识别技术已经被开发出来了,路易斯在世纪初开发的那种简单验证码在尖端的破解手段面前,差不多就像是个拄着拐杖、摇摇晃晃的老头,一推就倒了。

先不要惊恐,目前大部分网站使用的文本验证码还是有用的;尖端的图像识别技术需要花费大量时间金钱成本,黑客们是不会用它们来破解你的博客、窥探你中午打算吃什么的。只有那些涉及机密、金钱利益的网站,比如网上银行、购物网站等受到了较大的威胁。为了防止财产损失,这些网站纷纷推出了各种进化版的验证码。

主流的验证码都是静态图片,有些网站推出了动态的验证码,令机器人很难捕捉,同时动画效果能够增加网页的美观程度;很多大型的购物网站要求发送手机短信验证码,确保操作用户是本人;又或者是问用户一个常识性的问题,比如“牛奶和汽油哪个可以喝?”——总之就是一些机器不会、但是人类可以轻易做到的事。

不久前,12306购票网站曾经因为更换了一种“超难”的图形验证码而在各媒体报纸上大出风头。大家都知道,节日期间的火车票很难买,而众多抢票软件更是火上浇油,令网络购票变得更加艰难、混乱。

为了拦截住那些违反公平的抢票软件,12306网站推出了这种让人大呼“坑爹”的验证码系统:系统要求想买票的用户在一堆图片里找出目标物体,比如便利贴、汉堡、玉米等常见事物,虽然很多人在不习惯的情况下觉得有点难,但这对于想钻空子的机器程序来说,更是难如上青天。

时间: 2024-10-07 15:15:19

谁发明了验证码?你出来 保证不打死你的相关文章

谁说Python协程是鸡肋的!站出来我不打死他!这么牛逼的协程!

文章思路:本文将先介绍协程的概念,然后分别介绍Python2.x与3.x下协程的用法,最终将协程与多线程做比较并介绍异步爬虫模块. 协程 概念 协程,又称微线程,纤程,英文名Coroutine.协程的作用,是在执行函数A时,可以随时中断,去执行函数B,然后中断继续执行函数A(可以自由切换).但这一过程并不是函数调用(没有调用语句),这一整个过程看似像多线程,然而协程只有一个线程执行. 进群:548377875   即可获取数十套PDF哦! Python2.x协程 python2.x协程应用: y

廉价OpenVZ的VPS如何在solusvm下保证永不死

行业里面有openvz架构的其实是一个不错的架构,资源的利用效率挺高的,当然也有一些限制,同时也带来一些缺点,其中最大的缺点莫过于超售了,卖1G的RAM可能连128都没有,这样的直接后果就是某些不良玩家,稍微激动一下,同母鸡的其他实例就直接offline了. 很多时候我们只需要一个稳定的挂机环境,安静的跑一些程序,这样问题就来了,如何保证始终在线呢? 幸好每家IDC基本上都有solusvm,幸运的是solusvm有client api,简单的post或者get发送指令都可以,详情见 https:

文件和发明是打发恶如统一怕死的货架上的回复

http://f.dangdang.com/group/24297/949302/ http://f.dangdang.com/group/24297/949303/ http://f.dangdang.com/group/24297/949304/ http://f.dangdang.com/group/24297/949305/ http://f.dangdang.com/group/24297/949306/ http://f.dangdang.com/group/24297/949307

Java程序猿学习当中各个阶段的建议

回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议 引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容基本上忘得一干二净,所以写这篇文章其实是很有难度的. 但是,最近问LZ的人实在是太多了,为了避免重复回答,给自己省点力气,干脆就在这里统一回复了. 其实之前LZ写过一篇文章,但是那篇文章更多的是在讨论“面试前该不该刷题”这个

AWS 技术峰会

我应该怎么说呢?AWS被AWS的市场部害惨了. 这次活动是AWS的市场人员组织的吧.说出来是谁组织的吧.说出来,我们大家保证不打死他/她. 开场气氛不错.但是为什么这么口渴.渴的我到处找水喝.我没有亲见AWS兑换礼品处的争吵.只是听说那块快打起来了.像码农这样温和的物种竟然也要打人,这组织的真不错.另外为什么需要网上报名,网上报名也就罢了,还给个编号.给我打电话的人员说没有编号进不去,没编号也不让去.那,为什么还开设现场报名!另外下午那动手课排了好长好长的队伍.竟然一节课听完要全部清场,还要出去

环保标签

海淘在带给我们大量丰富多样产品的同时(钱包君,你受苦了 ), 也让我们在产品的选择上产生了很多困扰.自己选择花费如此多精力.金钱海淘商品是否真的就比国产商品更好?如何在众多同价位的产品中进行选择?虽然美帝已 经为大家提供了诸如USDA.FDA.NSF.GMP等各类认证,加拿大.欧盟等国家和组织也提供EcoLogo.Ecolabel等认证,但是具备这些 认证的产品就一定是好产品,就一定是无害的么?万一想要购买的产品没有获得这类认证,应不应该购买?身患被迫害妄想症.选择困难症的撸主时常对此无比揪心

xcode 的duplicate symbol xx问题

今天在写程序的时候遇到一个奇葩问题. 前N表,我的应用都可以编译并且运行.后一秒突然无法编译通过,通过查看报错信息,发现是duplicate symbol xx问题,问题出现在连接的时候. why?? 首先字面意思就是重复定义了.(但为什么前面可以编译通过不报错?乔布斯,你给我活过来,我保证不打死你!) 其实解决的办法很简单,全文查找这个 XX.你会发现连接错误提示的几个文件里,都定义了这个变量.(我局部变量(写在.m里的,这是局部变量吗?我是菜鸟,至少实例访问不到的)都能连接出错??).然后你

总结php删除html标签和标签内的内容的方法

经常扒别人网站文章的坑们:我是指那种批量式采集的压根不看内容的,少不了都会用到删除html标签的函数:这里介绍3种不同用途上的方法: $str='<div><p>这里是p标签</p><img src="" alt="这里是img标签"><a href="">这里是a标签</a><br></div>'; 1:删除全部或者保留指定html标签 php自带的

CQRS架构设计及其实现

CQRS架构设计及其实现 一.为什么要实践领域驱动? 近一年时间我一直在思考一个问题:“如何设计一个松耦合.高伸缩性.易于维护的架构?”.之所以有这样的想法是因为我接触的不少项目都是以数据库脚本来实现业务逻辑.在项目初期使用这样的方式野蛮开发似乎显得很高效,但是大家其实都清楚,正是这样的项目让大家拖入了加班的深渊.这种系统维护性差,无法扩展,无法编写有效的单元测试,质量基本没有保证. 一个符合我心理预期的架构,一定不是靠使用某个代码生成工具来完成的,这样的项目把码农培养成了彻头彻尾没有思想的个体