APP下载

12306验证码,真的不靠谱?

2016-04-19

科学大众(中学) 2016年3期
关键词:程序员区分字符

最近,12306验证码已然成为了众人热议的话题,又一次把春运买票难推向了舆论的风口浪尖。其实,只要观察下网友吐槽的验证码,很多是无中生有的图片,是个别网友故意丑化铁路形象的行为,仔细想想就能识破。但说实话,12306验证码的辨认度确实是比较难。在这紧张的抢票节奏里,还要忍受验证码对智商的考验,生活也真是不容易。

看到网站上的奇葩验证码,网友们纷纷献计献策,我个人觉得难度最大的应该是下面这种了:

然而,吐槽归吐槽,在这小小的验证码背后,其实有着许多有趣的故事,屏幕上的方寸之间,其实有着智力上的激烈交锋。在验证码不断发展的背后,是一场场来势汹汹的技术变革,而这场变革,我们每个入都身在其中。

区分人与机器的验证码

想必大家一定见过类似右边的验证码图案。而熟悉的验证码技术背后,隐藏的是这样一个很深奥的问题:如何区分真人和机器?——即如何证明坐在电脑前的是一个活人而不是一段程序呢?

在这个问题上,一种解决方案是“图灵测试”,即“人类向计算机提问”。而验证码恰好相反,是“机器提问人类解答”,因而验证码也被认为是“反图灵测试”。

2008年,路易斯·冯·安等人提出了“全自动区分计算机和人类的公开图灵测试”,即CAPTCHA。

这个短语,正是验证码的名字。

而这就引发了一个新的问题:机器向人类提出的问题,能让机器人解答吗?如果机器人能够识别验证码,那不是意味着这个验证码不再能够验证“人类”和“机器”了?

从这以后,各种各样的验证码和验证码破解层出不穷,程序员们的创意和才智在这方寸之间得到了尽情发挥。而我们,也终于有幸体验到了买火车票之艰难。

程序员们智力的角逐

早期的验证码可能只是一串简单的ASOⅡ字符,比如黑客们用“|-|3|-|-()”“)-(3££0”代表“HELLO”。这个后来发展成了火星文(leetspeak),0(/口\)0。

后来验证码变成了图片显示字符串或者数字的形式,这也是我们最常见的验证码。

早期的验证码采用扭曲字符和梯度背景,然而好景不长,这样的验证码很快就被破解了:由于图片中字符与背景颜色之间差异较大,于是程序员们可以利用算法将图片中的每一个像素点的值提取出来,然后判断哪些是背景部分,哪些是字符部分。这样将字符与背景分离。

接着,将分离出来的字符与“训练库”(也就是存有这些字符的资料库)里的字符进行最终识别。而且由于英文只有26个字母,而阿拉伯数字只有10个,这样的验证码识别难度也大大降低。

如果一切顺利,根据上面的流程计算机能很容易地识别验证码,并不需要人。这样验证码,也就被破解了。

于是,喜闻乐见的是我们迎来了中文验证码,庞大的中文字符库保证了验证码识别的难度(还混用了拼音)。而不会中文的外国人则开始逆向思考验证码识别技术并进行有针对性的对抗。他们把各个字母粘连起来,这增加了算法上分隔每一个字符的难度。并且每次采用不同的字体也能增加模式匹配的难度。

而到了12306这个程度,考验的就不单纯是图案识别了,还有某些抽象思维的能力——比如我得知道“紫砂壶”到底是个啥,或者至少知道它长啥样,我才能选到正确的验证码图案。这,也就是我们俗称的“智商”……

然而,这样的图片验证码也并不是一劳永逸的,有人展示了用网络上的识图算法来机器识别12306图片验证码的一种思路。原理大概是这样的:首先将验证码的图片分割成一个个单独的图片,然后将这些图片上传到机器识图的网站上,网站会返回左边的答案。

接着,只需要让机器识别出验证码的“问题”,也就是需要点击的图片是什么“东西”——在这个例子里是“紫砂壶”——最后让计算机一一匹配就可以了。

并且他认为12306的这一方法其实并不靠谱,存在三个问题:

1.图片过于复杂、混淆过多、条件太诡异时会挡住大部分正常用户;

2.容易被枚举,题库太弱,不如字符组合可能性多;

3.破解门槛不一定高于字符型CAPTCHA。

对于这个分析,我“举双手双脚”赞成。我买不到票不是智商低,而是因为我们属于被挡住的“大部分正常用户”,嗯,一定是这样的。

然后现在,铁路总局已经表示,12306网站将调整图形验证码中图片的清晰度和分辨率,而且可能剔除根据后台统计出来大家反映最多的和错误率较高的图片验证码……

验证码还能干啥?

验证码也并非都是那么奇葩,它也可以用来做一些非常有意义的事情。

例如:卡耐基梅隆大学的路易斯·冯·安等人(对,就是前面提到的造出OAPTOHA这个短语的人)设计了一个名叫reOAPTOHA的系统,对古籍进行数字化。

reQAPTQHA将OOR(光学字符识别)软件无法识别的文字扫描图传给世界各大网站,用以替换原来的验证码图片;那些网站的用户在正确识别出这些文字之后,其答案便会被传回卡耐基梅隆大学。

PeCAPTCHA在2009年被Google收购,而Google将这一技术发扬光大,不仅用来识别古籍,还用来识别Google街景的街道地址。所以,有一段时间,你会发现google的验证码变成了某个门牌或者路标:

验证码的未来

“反人类”的验证码,从始至终对抗的就不是人类,而是有着庞大计算能力却在模式识别、抽象思维上很弱的计算机。

然而,随着人工智能技术的进步,计算机在模式识别上也越来越强大,验证码也不得不走上越来越“扭曲”“复杂”“反人类”的不归路。验证码难度的提升,本质上体现了人工智能技术的进步。

而目前,无论我们多么吐槽12306的验证码,但至少,我们还能够通过它证明我们是真人,而不是机器。这在某种程度上说明了人类在智能上的优越性,至少现在,我们还是比机器智能优越(或许有一部分小伙伴没法证明)。

目前,Google的算法在扭曲文本类验证码的识别率已经达到了99%,也就是说,这类验证码已经不能作为区分人类和机器的指标了,而总有一天,12306的验证码也会被破解,到那时,为了区分机器和人类,程序员们又该设计出什么样的验证码呢?

验证码的一生,可以说正是人工智能技术不断进步的一生。而正因为机器越来越聪明,所以人类将不得不面对更多的挑战。或许有一天,人类的造物终将超越人类自己,人工智能终将超越人类,到那一天,验证码或许不复存在了,而人类又该何去何从呢?

(责任编辑:曹伟 责任校对:司明婧)

猜你喜欢

程序员区分字符
区分“旁”“榜”“傍”
怎样成为一名优秀程序员
字符代表几
一种USB接口字符液晶控制器设计
消失的殖民村庄和神秘字符
程序员之子
加班