草庐IT

iOS16的Automatic Verification功能

paperclouds 2023-03-28 原文

原文链接:
https://app.myzaker.com/news/article.php?f=weixin_mp&pk=62b18a1d8e9f0932611c814b

如果经常在互联网上冲浪,想必各种稀奇古怪的验证码多多少少都会给你留下深刻的印象。无论是谷歌在九宫格图片里让你识别斑马线、还是在 12306 让你在 " 一模一样 " 的图片里找不同,验证码就是这样一个让人又爱又恨的存在,爱的是其确实让垃圾邮件、机器人变少了,而恨的则是实在是太不人性化。

在诸多奇葩的验证码里填写出正确答案,如今也越来越成为用户上网时的烦恼。正所谓用户有需求,就会有人拿出解决方案。继 WWDC22 上苹果方面推出 iOS 16 后,日前来自 XDA 开发者论坛的相关消息显示,在 iOS 16 的开发者预览版中,官方悄然提供了一个名为 Automatic Verification(自动验证)的功能,可以让 iCloud 代替用户处理 APP 或网站中的验证码(CAPTCHA)。

简单来说,苹果在 iOS 16 中带来的这个功能,等于说是用机器来帮人验证自己不是机器。为什么会这么说呢?其实这就要从验证码的起源说起。早期的互联网其实是自由开放以及混乱无序的,作为当时全球最为知名的产品,雅虎邮箱也是上世纪末绝大多数用户连接网络世界的窗口,因此自然也成为了黑产眼中的香饽饽,他们编写脚本自动注册了大量的雅虎邮箱、用于发送垃圾邮件。

彼时,这一问题被雅虎的研究人员写到了《我们无法解决的十大问题》这篇文章中,而在 2001 年卡耐基梅隆大学学生 Luis von Ahn 参加雅虎的主题讲座时,听到垃圾邮件泛滥一事后设计出了 "CAPTCHA"(全自动公共图灵测试),也就是如今大家熟知的 " 验证码 " 体系。而验证码技术的核心理论,就是区分正常人与机器,所提出的问题要容易被人解答、并且让机器无法解答。

最终,Luis von Ahn 发现人类可以用肉眼,轻易地识别出在图片中、被扭曲过、污染过的文字信息,而当年电脑并不能做到这一点。随即在 Luis von Ahn 这一方案的基础上,雅虎方面推出了 EZ-Gimpy 字符验证码机制。早期验证码中往往会出现一条不规则横线覆盖在需要识别的词汇上,这其实就是在借助早期计算机视觉技术不发达的缺陷,让机器识别不出被 " 污染 " 的词汇。

作为一个反向的 " 图灵测试 ",在 PC 互联网时代早期其确实起到了不小的作用,遏制了黑产利用自动化程序实现暴力破解、恶意注册、刷票、批量操作的目的。毕竟黑产是一个典型讲究成本收益的 " 生意 ",只要收益不能覆盖成本就自然会知难而退。彼时,黑产粗糙的自动化脚本面对字符验证码确实是一筹莫展,例如当时百度贴吧使用的反 " 爆吧 " 工具就有发贴需要验证码的步骤。

但随着 OCR(光学字符识别)与计算机视觉技术的发展,机器在图像识别上的能力升级,使得单纯基于字符的验证码逐渐失效。特别是在二十一世纪的第二个十年,机器学习技术上了一个台阶后,卷积神经网络(CNN)以及生成对抗网络(GAN)在业界大规模应用后,在海量的数据样本的 " 喂养 " 下,让图片验证码也已经落伍了。

无论字符的变形程度再高、再厉害,只需用图像分割技术切到一定的颗粒度,再用卷积神经网络算法就能准确地识别出来。甚至根据一项腾讯安全在多年前的爆料信息表明,国内当时就已有黑产团队实现了对字符验证码 98% 的 " 爆破 " 几率。

为此,互联网厂商也纷纷升级了验证码相关技术。既然纯粹的字符、图片已被攻克,而其核心又是区分人类与机器,那么验证码与相关知识的结合,也使得 " 做题家 " 模式开始出现,让用户需要根据问题去寻找验证码的正确答案。

这一时期,想必有些玩家可能听过 EA 旗下 Origin 平台骰子验证码的大名。这个验证码要求用户从六张骰子图中,找到一张结果相加等于特定数字的图片,而且要求在限定时间里连续答对 15 次。此外,最 " 经典 " 的则莫过于 12306 的验证码识图了,其不仅让机器束手无策、更是难倒了许多用户。而这些,也使得好好的验证码变成了考验用户知识积累、观察能力,以及手速的玩意。

显然,验证码技术的问题就出现在了这里,随着攻防双方不断在技术端的升级,使得其对用户的友好性已经逐渐消失,并变得极为 " 反人类 "。同时,也有部分厂商借助验证码技术来实现商业目的,许多朋友可能遇到过谷歌、Meta、Twitter 的九宫格图片验证方式,即 " 选出下图中的 xxx" 类型的的验证码,虽然表面上是让用户标识出特定物品,但背地里是却借助用户积累数据来训练自己的 AI 模型。

因此在相当长的一段时间里,许多用户对于验证码可谓是厌烦透顶。为此,验证码技术再次升级为行为验证模式或者说无知识型验证,如今各平台常用的滑块验证就是其中的典型,其特色就是采集用户数据,并借助基于人类固有的生物特征以及操作环境信息,来综合决策判断屏幕前到底是人还是机器。

比如说看起来简单的滑块验证,尽管看似就是将拼图拼完整,但是这其中的原理是人类拖动滑块通常是先快后慢,需要先快速拖到缺口附近、再在缺口附近进行精准校验,而机器则往往是匀速拖动这一滑块。

那么问题来了,既然行为验证更为先进,为什么目前还有许多 APP 和网站依然在使用传统的图文验证码呢?原因其实很简单,Web 前端因为代码都是明文形式的脚本语言,行为验证模式的核心就是将不可信的 Web 前端打造成可信的客户端,这就需要代码混淆与行为数据加密的支持。然而遗憾的是,很多基于 Web 的 APP 或网站并没有这样的技术能力。

无论如何,过去的二十年间互联网行业关于验证码的攻防,就一直都带有非常明显的身份特征,黑产方面希望攻破验证码系统来实现批量化的推送垃圾广告、机器人等等行为,而互联网厂商则希望用验证码技术来保护账号体系的安全和稳定。尽管苹果方面目前并未公开 Automatic Verification 这一功能的原理,但其无外乎还是生成对抗网络、卷积神经网络等人工智能技术的应用。

诚然,这一自动验证功能确实能够在一定程度上,帮助用户从绞尽脑汁填写验证码的苦海中脱离,但从技术伦理的角度出发,这可能是一个非常危险的举措。毕竟在第三方开发者的视角,自动验证功能与黑产的自动化脚本其实并没有本质的区别,同样违反了验证码技术是用于区分人和机器行为的宗旨。

有关iOS16的Automatic Verification功能的更多相关文章

  1. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  2. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  3. ruby-on-rails - Cucumber 是否只是 rspec 的包装器以帮助将测试组织成功能? - 2

    只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您

  4. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  5. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  6. ruby - 为什么不能使用类IO的实例方法noecho? - 2

    print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上

  7. ruby-on-rails - rails 功能测试 - 2

    在Rails自动生成的功能测试(test/functional/products_controller_test.rb)中,我看到以下代码:classProductsControllerTest我的问题是:方法调用products()在哪里/如何定义?products(:one)到底是什么意思?看代码,大概意思是“创建一个产品”,但是它是如何工作的呢?注意我是Ruby/Rails的新手,如果这些是微不足道的问题,我深表歉意。 最佳答案 如果您查看test/fixtures文件夹,您会看到一个products.yml文件。这是在您创建

  8. ruby-on-rails - 功能测试 Authlogic? - 2

    在我的一些Controller中,我有一个before_filter检查用户是否登录?用于CRUD操作。application.rbdeflogged_in?unlesscurrent_userredirect_toroot_pathendendprivatedefcurrent_user_sessionreturn@current_user_sessionifdefined?(@current_user_session)@current_user_session=UserSession.findenddefcurrent_userreturn@current_userifdefine

  9. 深度学习12. CNN经典网络 VGG16 - 2

    深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG

  10. ruby - Ruby 中允许 "p *1..10"打印出数字 1-10 的功能是什么? - 2

    require'pp'p*1..10这会打印出1-10。为什么这么简洁?您还可以用它做什么? 最佳答案 它是“splat”运算符。它可用于分解数组和范围并在赋值期间收集值。这里收集赋值中的值:a,*b=1,2,3,4=>a=1b=[2,3,4]在此示例中,内部数组([3,4])中的值被分解并收集到包含数组中:a=[1,2,*[3,4]]=>a=[1,2,3,4]您可以定义将参数收集到数组中的函数:deffoo(*args)pargsendfoo(1,2,"three",4)=>[1,2,"three",4]

随机推荐