PoW 验证码来了!Cap 用比特币同款算法完成 CAPTCHA 人机验证

原始链接在: PoW 验证码来了!Cap 用比特币同款算法完成 CAPTCHA 人机验证 - 小众软件

这大概是比特币除了赚钱以外,最有用的一集啊。

Cap 是一个轻量级的开源 CAPTCHA 人机验证工具,只有 20kb,与传统验证码主要考验人类不同,它无需用户拼图、选字,只需一键验证,仅仅消耗1秒钟左右。@Appinn

Cap 采用与比特币相同的 SHA-256 工作量证明算法,通过消耗机器(浏览器或机器人)的算力,有效提升机器刷流量成本,从根本上减少机器人访问。

直接上演示

通过鼠标点击验证码之后,会有一个计算的过程。这个过程就是正在进行的 SHA-256 工作量证明:

Cap 工作原理

  1. 初始化
    • 当 Cap 加载时,会在网页中注册一个专属的验证码组件,并通过 Shadow DOM 技术与页面其他部分隔离,保证安全和独立性。
  2. 发起验证
    • 当需要验证时,Cap 会向服务器请求生成一个包含多个挑战的“挑战集合”。
    • 每个挑战包含一个独特的“盐值”(salt)和一个哈希目标前缀。
    • 用户需要找到一个“随机数”(nonce),把它和盐值组合后,经过 SHA-256 算法哈希,要求结果以指定前缀开头。
    • Cap 会同时产生多个挑战,以便更快、更稳定地计算和显示进度。
  3. 计算答案
    • Cap 利用浏览器中的 Web Worker 并行计算,加快解题速度。
    • 计算方式就是不断尝试不同的随机数(nonce),把它与盐值拼在一起,用 SHA-256 算法算出哈希值,检查前缀是否符合目标。
    • 成功找到符合要求的哈希值后,解题过程结束。
  4. 兑换令牌
    • 成功解题后,Cap 会把结果发送回服务器进行验证。
    • 验证通过后,服务器会发放一个令牌,作为人机验证成功的证明。

Cap 用和比特币“挖矿”类似的方式,要求你的浏览器做一小段运算,通过后就证明你不是机器人,整个过程高效、安全、无需传统验证码的繁琐操作。

注意:用后即抛,无需担心用户浏览器的挖矿问题,Cap 需要自己部署在自己的服务器中。

一反常态

Cap 的验证过程非常有意思,它不再要求用户证明自己是人类,可以看懂人类的文字、图片,因为现在 AI 也能看懂了。反而要求用户使用算力,无需证明什么。

这样的情况下,正常用户访问几个页面所消耗的算力可以忽略不计,但机器人用户同时访问成千上万个页面所消耗的算力,就需要真金白银了。

而眼下,算力就是黄金啊。

这将从根本上提升机器用户成本,让其得不偿失。

妙啊。

基准测试

Cap 文档提供了一个基准测试结果,在不同设备下:

Tier 设备 Chrome 消耗时间 Safari 消耗时间
Low-end Samsung Galaxy A11 4.583s
Low-end iPhone SE (2020) 1.282s
Mid-range Google Pixel 7 1.027s
Mid-range iPad (9th gen) 1.401s
High-end Google Pixel 9 0.894s
High-end MacBook Air M3 0.312s 0.423s

测试条件:

  • 挑战难度: 4
  • 挑战数量: 50
  • 盐/挑战大小: 32
  • 基准数量: 50

意味着一台比较现代的手机,大概会消耗1秒钟的时间,就能完成以上测试条件下的计算。难度可调。

获取

感兴趣的同学,可以前往研究。


原文:https://www.appinn.com/cap-pow-captcha/

CAPTCHA 是什么?

全自动区分计算机和人类的图灵测试(英语:Completely Automated Public Turing test to tell Computers and Humans Apart,简称 CAPTCHA),又称验证码或确认码,是一种区分用户是机器或人类的公共全自动程序。在 CAPTCHA 测试中,作为服务器的计算机会自动生成一个问题由用户来解答。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于机器无法解答 CAPTCHA 的问题,回答出问题的用户即可视为人类。

实际上,在 Cap 下的 CAPTCHA,可能需要换一个名字了

PoW 是什么?

工作量证明(Proof-of-Work,PoW)是一种对应服务与资源滥用、或是拒绝服务攻击的经济对策。

一般要求用户进行一些耗时适当的复杂运算,并且答案能被服务方快速验算,以此耗用的时间、设备与能源做为担保成本,以确保服务与资源是被真正的需求所使用。此概念最早由Cynthia Dwork和Moni Naor于1993年的学术论文提出,而工作量证明一词则是在1999年由Markus Jakobsson与Ari Juels. 所发表。现时此技术成为了加密货币的主流共识机制之一,如比特币所采用的技术。

补一张对比表格:

CAPTCHA 开源 免费 私有化部署 快速 对人类简单 误差率小 检查点支持 GDPR/CCPA 可定制 机器人很难 易于集成
Cap :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :yellow_square: :white_check_mark:
Cloudflare Turnstile :cross_mark: :white_check_mark: :yellow_square: :yellow_square: :white_check_mark: :cross_mark: :yellow_square: :white_check_mark: :cross_mark: :yellow_square: :white_check_mark:
reCAPTCHA :cross_mark: :yellow_square: :cross_mark: :white_check_mark: :cross_mark: :yellow_square: :cross_mark: :yellow_square: :cross_mark: :cross_mark: :white_check_mark:
hCAPTCHA :cross_mark: :yellow_square: :yellow_square: :cross_mark: :cross_mark: :yellow_square: :cross_mark: :yellow_square: :cross_mark: :yellow_square: :white_check_mark:
Altcha :white_check_mark: :white_check_mark: :white_check_mark: :yellow_square: :white_check_mark: :white_check_mark: :cross_mark: :white_check_mark: :white_check_mark: :yellow_square: :yellow_square:
FriendlyCaptcha :cross_mark: :cross_mark: :white_check_mark: :yellow_square: :white_check_mark: :white_check_mark: :cross_mark: :white_check_mark: :white_check_mark: :yellow_square: :yellow_square:
MTCaptcha :cross_mark: :yellow_square: :yellow_square: :cross_mark: :cross_mark: :yellow_square: :cross_mark: :white_check_mark: :cross_mark: :cross_mark: :yellow_square:
GeeTest :cross_mark: :cross_mark: :cross_mark: :yellow_square: :yellow_square: :yellow_square: :cross_mark: :white_check_mark: :cross_mark: :yellow_square: :yellow_square:
Arkose Labs :cross_mark: :cross_mark: :cross_mark: :cross_mark: :cross_mark: :cross_mark: :cross_mark: :white_check_mark: :yellow_square: :cross_mark: :cross_mark:
2 个赞

浪费真正想要访问的用户算力设置个门槛,跟denuvo加密有什么区别呢?只有正版用户受伤的世界达成了。

门槛极低呀。

门槛低了防不住,还是要把门槛调高。这不是门槛的问题,在我看来就是个逆天的技术。就好比微软说,windows盗版用户太多了,就把性能做烂点bug留多点,确保少部分花得起钱花得起时间的用户才能用(他们确实这么做了)。

2 个赞

目的不是防住,而是提升机器人的成本。
因为真人1分钟开一个网页,机器人1秒开1000个网页

2 个赞

电费战士登场,如果说reCaptcha在使用验证码做数据标记,现在是纯纯费电,从经济学原理上讲,给App设置一个1块钱的门槛确实相比免费可以过滤掉一部分人,但对于机器人来说这个成本有多大作用尚未可知,毕竟传统的验证码破解又不是免费,大量的使用打码平台,这种也是有成本的。

现在换成工作量证明是否一定程度上也减少了绕过的技术成本,不看好这种方式的前景,经济学原理不能解决验证码问题,加密货币之所以有效其难度是相当高的,回报也相当高,且具有独占性。

对于真实用户,点击访问链接后。
网页是2秒加载完毕,还是2.5秒加载完毕(延迟0.5秒),打开是额外的CPU占用是1%还是50%(需要占用额外的49%CPU负荷)区别不大,毕竟大部分时候CPU占用都只有10~20%。一个持续0.5秒的50%占用不算什么。

对于爬虫,本来一台设备可以模拟100个用户,2秒内采集100次。
使用Pow加入算力需求,最多只能撑住4个运算同时跑,2.5秒内只能采集4次了。如果他还想维持2秒100次采集,需要一个性能强25倍的单台设备,或者25台同样性能的设备。这个成本可就太高了

而使用CAPTCHA的话,机器识别的一次性成功率超过97%,额外的算力需求也极低。CAPTCH只能让自动爬虫降速一点点。比如只能减速到2秒80次。

3 个赞

你知道现在AI识别验证码成本有多低嘛 :joy:10年前4位验证码已经低至4块钱2W次

1650这种级别的GPU都能对4位验证码实现50QPS了。0.05秒识别一个。1秒50次认证。
3050大概1秒100次

而算力证明的目的就是把1650级别的平台压到1秒2次认证。3050级别到1秒4次认证。对于一般用户,打开一个网页多个不到半秒的时间,没区别。

而对于自动化采集的想要实现1秒100次,成本从1块3050,到25块3050了,成本提高25倍。
这就要掂量一下是否划算了。

1 个赞

自动化采集数据的本质是"公开"的互联网访问和"私有"的互联网权益的矛盾;

这其实是互联网底层矛盾, 理想主义来说, 我们需要的是重新设计一套互联网的行业逻辑;

应该是公开可访问数据的使用目的的矛盾
数据提供主体公开数据的目的,是让客户了解数据背后的信息,进行需求和信息的匹配,进而转化为商品服务的销售;
而自动化采集获取数据的目的,并不是作为客户去提供转化的可能,而是批量获取信息以供其他主体参考、决策甚至争夺数据提供主体的潜在客户。
举个例子就是餐饮店老板把餐牌挂在门口是让顾客点菜的,不是给竞争对手抄的;如果是人手抄也就不说什么了,让无人机进进出出拍照谁能忍?
——
除此之外,自动化采集也会占用数据提供主体的带宽,产生流量费用;那PoW验证码算是一种“以牙还牙”式的应对策略:你消耗我流量费,那我消耗你电费。

4 个赞

主要很多时候不是自动化采集公开数据,而是自动化注入数据……
比如自动化注册账户,自动化批量尝试登录大量账户
本来设计上是一个几万人的论坛,用户的数据表也就几万行,每天注册登录的也就几百人,数据库负载不高。
结果自动化程序1天注册了1个亿的账户,再批量登录着1个亿的账户,直接数据库卡死了。

标题为啥说得好像 PoW 验证码是 Cap 发明的一样?在它之前 PoW 验证码就有一箩筐了呀…… 这个标题起得很不好。

例如 Anubis,早就被 Linux、Gitlab、ArchLinux 等一众每天访问量超万的开源社区广泛使用好几个月了。

而且这个和传统图形、操作类验证码比较完全没有意义,解决的是不同场景问题(准入速度 vs 准入资格)。真要说技术上超前,还不如 Cloudflare 的基于行为和 AI 的识别方案……

4 个赞

最恶心的是微软、推特之类网站,让你按箭头选椅子的那种验证码

来个调用WebGPU真的会挖矿的 :rofl:

实际成效还需要在大型项目中具体观察,如果对于小众论坛这种体量上什么验证码都无所谓,用户体量小,这个成本是针对所有用户的,跟游戏反盗版一个性质,使用Denuvo加密,防破解效果确实很好,但其他方面就比较差,口碑也差。

游戏D加密和这个还有有区别的。
D加密对于游戏玩家的性能劣化是持久的。
类似于某种论坛验证措施会让所有访问用户的每次操作都要延迟几毫秒到几十毫秒。
明显验证码并不是这样的,他只对用户一定时间内的第一次访问起作用。

如果用游戏加密类比,Pow验证应该是某种游戏加密措施,让游戏每天第一次启动的时间多延长了1秒,来验证游戏是否是正版。这个成本还是可以接受的。

而验证码则属于游戏每天第一次启动时需要输入激活key在本地激活一次,来验证游戏是否是正版。(而这个key已经被破解了,有正确率超过97%的算号器)

D加密之所以恶心,就是他不是只影响启动时,而是随机都在增加用户的额外性能支出。

anubis 遇到过几次,偶尔也会导致卡好几秒的情况,现在可能是设置改了,没遇到过了

快进到用专用芯片加速工作量计算:rofl:

1 个赞

去年七八月份的时候,碰到过 PoW 的验证码。那个网站是为了防止多开批量操作,所以算力需求设置的挺高,过一次验证码就要CPU满载几十秒,很离谱。

但是这一类验证码相对于以前的视觉验证码,其实在 Anti-Bot / Anti-Sybil 方面反而更差了,因为 PoW 算法总会被逆向,逆向后就是十分无脑的 FPGA / GPU 化,然后那些刷量脚本反而过验证过得更快了。

谢谢,咋添加到WordPress上,评论时要验证