🛡️ 第一章 信息安全的基本概念
📄 一句话概括

既不"一律放行"也不"一律加码",而是按风险给验证强度——这就是基于风险的身份认证;而老牌的 CAPTCHA 正在从"出题考你"退向"在后台看你"。

📝 本节和前面几节的关系

上一节(使用一次性密码安全性更高)解决了"加一道锁"。但立刻冒出一个新问题:每一道锁都要人付出代价(见 成本、便利性、安全性的考量),全场景强锁的结果是没人愿意用。

这一节给的答案就是"不要一律":让强度跟着风险走。另外还要单独处理一个任务——把自动化的尝试挡在门外,这是 CAPTCHA 的老本行,也是本节要看它的现状。

一、核心思想:把统一的麻烦换成分层的麻烦

先看两种极端,它们都有问题:

极端一:一律放行。所有人都能直接进 → 攻击者的成本最低。 极端二:一律加码。所有人每次都要做最严格的验证 → 用户被拖累,然后开始找绕过办法。

基于风险的身份认证(RBA) 走在中间:平时零打扰,一旦信号异常才多要一道证明。

也就是说,判断的不是"这个人是谁",而是"这次登录像不像本人"。这就把安全成本从"所有人都付固定代价"变成了"异常时付临时代价"。

二、看哪些信号

风险评分用的信号,通常是这几类:

信号 说明 常见权重
设备 是不是常用设备、有没有被标记过 高
地点 地理位置的跳变(上一分钟在北京,这一分钟在国外) 高
网络 IP 的声誉、是不是代理/数据中心出口 高
时间 是不是本人惯常的活跃时段 中
行为 打字节奏、鼠标轨迹、操作习惯 中
历史 近期失败次数、是否刚被重置口令 中

关键不是说"某一个信号可不可疑",而是"这些信号凑不凑得成一个故事"。

举例:新设备 + 新地点 + 深夜 → 这三个凑在一起就是"有人拿到了口令,在别的地方试"的典型形状。 而 公共 WiFi 单独出现并不高分——因为设备和地点都是常用的,很可能是本人出差在酒店。

这就是为什么风险引擎不能只看单项——单看"IP 可疑"会把咖啡店的共用出口全拦下。

三、风险分怎么变成动作

风险分出来后,动作通常是三档:

风险分 动作 说明
低 直接放行 零打扰,这是绝大多数情况
中 加一步验证 再要一个因子,或让用户确认一次
高 拦截,改走人工 不让进,同时通知本人

这里有一个很值得记住的设计思想:

"拦截"不是终点,"拦截并通知本人"才是完整动作。

因为被拦下的可能是本人(比如真的在国外出差)。通知是给本人一个补救通道,也是给安全团队一个线索——如果本人说"不是我",那这就是一起确认的账号失守,后面的处置(改口令、停会话、查痕迹)才有依据。

四、CAPTCHA:它想解决的是什么

CAPTCHA 的老本行不是"认证",而是区分人机——它的目的是让自动化脚本没法批量地做某件事(注册、提交、试口令)。

它的判断依据,历史上是"出题":扭曲的文字、选图、拼图。背后的假设是"人做得出来,机器做不出来"。

这个假设在十多年前就动摇了——深度学习之后,识别变形文字和图片对机器已经不是难事。于是它转向了第二条路:

五、CAPTCHA 的现状:从"考你"到"看你"

现在的验证码方案基本都不再主要靠"出题",而是在后台收集信号、给会话打分:

这个转向的背后是一条现实判断:

已经不能再靠"解题能力"来区分人和机器了,只能改为"验证运行环境、验证身份和意图"。

而"出题"这条路还有一个更根本的毛病:它一直在惩罚真人。无障碍问题(视障用户难以完成图片题)、时间成本(全体用户为此付出的总时间极其可观),都是它的固有代价。

所以本节的结论应该写成两句:

  1. CAPTCHA 作为"防自动化"的手段,仍在用,但效力已经明显下降——它更像一道减速带,不是一堵墙。
  2. 它的定位应该被重新认识:真正在意的地方(登录、支付、接口),限速、行为风控、服务端鉴权比让人点图更有用。

六、动手 Demo:风险评分与 CAPTCHA 评估

下面这个 Demo 先给八个登录场景算风险分,再单独评估 CAPTCHA 的几种用途。

W_NEWDEV, W_NEWLOC, W_NIGHT, W_BADIP, W_FAIL = 30, 25, 20, 35, 15

def action(s):
    if s >= 60:
        return "拦截并人工联系"
    if s >= 30:
        return "放行但加一步验证"
    return "直接放行"

实跑输出:

============================================================================================
一、风险分与处置(新设备+30 新地点+25 深夜+20 可疑IP+35 近期失败+15)
============================================================================================
  场景                                          风险分  处置
  ----------------------------------------------------------------------------------------
  平时同一台电脑、同一城市、上班时间登录        0       直接放行
  在家换了台新手机登录                          30      放行但加一步验证
  出差在外地登录公司系统                        25      直接放行
  凌晨 3 点从没见过的国家登录                   80      拦截并人工联系
  连续 3 次口令输错后从陌生 IP 再试             50      放行但加一步验证
  换了新电脑、人在外地、还是深夜                75      拦截并人工联系
  公共 WiFi 下登录,设备与地点都是常用的        35      放行但加一步验证
  常用设备常用地点,但一次性导出全部客户        0       直接放行

============================================================================================
二、把 CAPTCHA 单独拎出来看
============================================================================================
  用途                      过去      现在        说明
  ----------------------------------------------------------------------------------------
  挡住自动脚本批量注册      过去有效  现在中等    AI 解题已能过图片格;只能靠行为信号拦一部分
  挡住撞库尝试              过去有效  现在中等    限速和风控比图形验证更管用
  挡住人类手工灌水          过去有效  现在弱      人来点几下就过,对真人几乎没成本
  保护高价值接口            不适用    不适用      该用服务端鉴权与限速,不是让用户点图

  ④ 基于风险的思路,本质是把【统一的麻烦】换成【分层的麻烦】:
     平时零打扰,一旦信号异常才多要一道证明。
     表里第 7 行(公共 WiFi)风险分不高,就是因为设备地点都对——
     风控要看的不是单个信号有多吓人,而是它们凑不凑得成一个故事。

  ⑤ 第 8 行是个提醒:设备、地点、时间全正常,风险分算出来是 0,
     但这一次的行为是【一次性导出全部客户】。
     所以风险引擎不能只看【是谁在登录】,还要看【登进来之后在干什么】。

  ⑥ CAPTCHA 这一节要记住的是一条趋势:
     图形验证码的门槛在 2025—2026 年已被 AI 大幅削平,
     行业正在从【出题考你】转向【在后台看你是谁】——
     无声校验、设备证明、行为信号,用户什么都感觉不到。

读这个输出:两个地方值得停下来看。

第一,第 5 行"连续 3 次口令输错后从陌生 IP 再试"只有 50 分——比"换了新电脑 + 在外地 + 深夜"(75 分)低。说明分数不是按"看起来多吓人"给的,而是按信号的组合给的。单看"输错 3 次"并不算高危(谁都有忘口令的时候)。

第二,第 8 行风险分是 0,但它显然很危险——设备、地点、时间全正常,只是登录之后做了"一次性导出全部客户"。这一行是刻意留的提醒:风险引擎不能只盯登录那一刻,登录之后的异常行为(大量导出、权限提升、批量删除)同样是信号,而且往往更接近真相。

七、⚠️ 2026 现状

30 秒实验

打开你任意一个常用服务的"登录记录 / 设备管理"页面(邮箱、社交账号基本都有),做三件事:

  1. 看列表:有没有你不认识的设备或地点?名字是不是都是你自己起的?
  2. 想一下:如果看到一条陌生的记录,你知道该怎么处理吗(在哪里退出该会话、在哪改口令)?
  3. 对自己做个风险评估:你现在的这套账号,是"平时零打扰"还是"每次都很麻烦"?如果是后者,有没有更省事但同样安全的方式(比如换成通行密钥)?

这三步做完,你其实就完成了一次"人工版的 RBA 复盘"——风险引擎做的就是同样的事,只是它看得比你多、比得快。

常见误区

  1. 错误:验证越严格越好,每次都加验证最安全。——纠正:每次加验证的结局是被绕过——用户会共用账号、会常驻登录、会用别的方式把这一步省掉。分层的目的正是"把麻烦留给异常,不留给日常"。

  2. 错误:CAPTCHA 能挡住机器人。——纠正:现在的常规做法已经能通过绝大多数图形验证。它的现实定位是减速带——能拦住最简单的脚本,挡不住有心人。真正有效的是限速、行为风控、以及服务端的鉴权设计。

  3. 错误:风险分高就该直接拒绝。——纠正:被拒的可能是本人(出差、换手机、刚重装系统)。完整动作是"拦截 + 通知本人 + 给出恢复路径"——既不让攻击者进去,也不把真实用户关在门外。

  4. 错误:登录成功就说明没问题了。——纠正:登录只是开始。设备、地点、时间全正常的会话,也可能做出异常的行为(大量导出、批量删除、权限提升)。风控要覆盖整个会话生命周期,而不是只盯登录那一下。

自测三问(点开对答案) 1. 为什么"公共 WiFi 登录"在 Demo 里只拿到 35 分(加一步验证),而"新设备 + 新地点 + 深夜"拿到 75 分? —— 因为**判断依据是信号的组合,不是单项的吓人程度**。公共 WiFi 只贡献了"网络可疑"一项,而设备与地点都是常用的——很像本人出差;后者则是三个信号同时异常,**凑成了"有人拿着你的口令在别处试"的形状**。 2. 为什么说 CAPTCHA 的防线正在"从屏幕前移到屏幕后"? —— 因为**用"解题能力"区分人机已经不成立了**(模型解题比人快)。于是方案转向那些用户看不见的信号:浏览器环境、设备证明、行为特征、来源声誉——**用户什么都不用做,系统在后台已经判断完了**。 3. 如果一个账号的登录信号全部正常,还有必要做行为监控吗? —— **非常有必要**。Demo 第 8 行就是例子:设备、地点、时间全对,但行为是"一次性导出全部客户"。**登录异常只是失守的一种表现,而且未必是最早出现的那一种**——很多真实的失守,第一个信号是"登录后干了不该干的事"。

相关笔记