为什么谷歌只靠点勾就能鉴别出真人还是机器人?
如果你用过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的机器人在开始做出动作之前,会出现明显的处理延迟。
目前来看,这种验证的效果非常好,但是如果你使用鼠标的动作非常流畅,并且期待验证码,你有时可以骗过这个检测,让系统把你错认成机器人。一旦如此,你就要处理更难以识别的验证码,需要对图像的场景有着更清晰的了解。
这样来看,比起眯起眼睛认验证码,我们偶尔皮一下,装一波机器人也是挺有意思的一件事呢。