新智元报道
来源:Quora
编辑:大明
如果你用过Google的一些服务,在提交请求和确认信息时一定遇到过验证页面。一般来讲,Google旗下服务的验证页面使用ReCapcha,就是让你在指定的框框里点个勾。目的很明确,就是要确认你是活生生的人,不是机器人bot。
简单吧?鼠标一按,简直轻松加愉快。但问题来了,在图像识别AI技术日新月异的现在,文字验证码几乎已被攻克,最先进的AI识别程序能够在1秒内轻松识别出足以“看瞎人眼”的、字体扭曲至极“验证码”文字,但是对于这个小小的勾选框,机器程序却似乎无能为力。
为什么对人来说简单之极的操作,对机器人程序而言却如此困难?
近日,“美国版知乎”Quora上的这个问题在HN论坛上引发热议。
目前排名第一的答案,获得4K点赞。
看似简单,背后是基于虚拟机的双重动态验证
回答者表示,就这么一个其貌不扬的勾选框,到底是有多复杂?是你想象不到的那种复杂。简单讲,就是Google搞了整个一套“虚拟机“来执行这个勾选框的验证任务。
这个虚拟机使用的是自己的语言,而且经过两次加密。
而且加密还不是一般意义上的简单加密,一般说用密码加密,实际上密码就是针对该加密的密钥。Google自己发明的语言中,用来解密的密钥会随着对语言的读取过程而变化,就连语言本身也会发生变化。
Google会将这个密钥与你访问的网址结合起来,所以不可能使用一个网站的验证来绕过另一个网站。而且会将验证其与浏览器中的“指纹”相结合,捕捉您的计算机中的微观变化,机器人很难重现这种变化(比如CSS规则)。
以上所有这些做法,目的就是为了让你很难理解Google的验证机制。你需要编写工具进行分析它。(实际上人们就是这么做的)。
结果发现,Google会记录和分析以下信息:
你的电脑所在的时区和当前时间 你的IP地址和大概的地理位置 电脑屏幕尺寸和分辨率 你在使用什么浏览器 你在使用什么插件 页面显示了多长时间 进行了多少次按键操作、鼠标点击和滚轮操作 还有其他一些我们不太了解的东西
谷歌收集详细个人信息作为验证的基础
系统会将所有这些数据与Google掌握的计算机用户的知识结合起来。现在的互联网,几乎每个人都使用谷歌旗下的产品和服务(搜索,邮件,广告,地图等等),谷歌会跟踪所有你的信息。所以,当你点击鼠标,在这个复选框上打勾的时候,Google会检查浏览器历史记录,看看这个点击行为是否符合“真人“的标准。
这对Google来说很容易,因为他们一直在暗中观察数十亿“真人“的行为。
那么为什么对机器人来说这个任务这么困难?因为现在存在大量凌乱的人类行为信息来模拟,而且这种模拟行为几乎是不可知的,并且在不断变化。
一个机器人可能必须要注册Google服务并在一台计算机上用上一段时间,才能让验证系统认为“这是个真人“,让自己的行为看上去与其他机器人不同。在按键,滚动鼠标和点击时可能需要做出适当的间隔和误操作等等。
这一切都非常难以破解,也很难教计算机学会这么做。验证系统的复杂性对垃圾邮件发送者来说是一笔经济成本。他们可能会在短时间内有过成功尝试,但如果每次成功都需要付出额外成本,(比方说)1美元,那这个买卖也就不值得做了。
“以真乱假”?鼠标移动过于顺滑,也会被当成机器人
下面还有一个更早的答案,点赞高达2.8w,回答明显更精炼一些。
其实这个勾选框是一种低安全性的双重检查,系统一般倾向于相信操作者是真人,问题是,验证机制是图像,而不是文本。如果是机器人,必须考察验证屏幕上的每个像素点,然后执行OCR操作,这是一个费时费力的过程。
定位勾选框的位置后,验证系统考察的实际鼠标移动的方式。如果是机器人往往是快速和平稳的,而人类的鼠标移动就相对生涩,此外,对整个屏幕进行OCR的机器人在开始做出动作之前,会出现明显的处理延迟。
目前来看,这种验证的效果非常好,但是如果你使用鼠标的动作非常流畅,并且期待验证码,你有时可以骗过这个检测,让系统把你错认成机器人。一旦如此,你就要处理更难以识别的验证码,需要对图像的场景有着更清晰的了解。
这样来看,比起眯起眼睛认验证码,我们偶尔皮一下,装一波机器人也是挺有意思的一件事呢。
Quora原问题页面:
https://www.quora.com/Why-can-t-a-bot-tick-the-Im-not-a-robot-box