通过设计让二维码更安全:信任首次扫描模型(TOFS)
Source: Dev.to
作者:Colten Jacob,2026年1月
QR 码已经悄然成为现代计算中最强大的交互方式之一。一个小小的方块就能发起支付、打开菜单、登录账户或重定向到网站。如今,数十亿人每天都会扫描 QR 码——常常在公共场所,且往往不假思索。
这种便利伴随着一个严重缺陷:QR 码从未为敌对环境而设计。它们最初是为工厂和库存系统而发明的,而不是为公共墙面、咖啡馆和支付终端等任何人都能在几秒钟内更换贴纸的场景。于是,基于 QR 码的网络钓鱼、支付重定向和欺诈行为激增。
本文提出一个简单却强大的解决方案:首次扫描信任(Trust‑On‑First‑Scan,TOFS)——一种在不破坏可用性的前提下,为 QR 扫描引入持久信任和篡改检测的模型。
QR码的核心问题
-
QR码不是标签。
它是一个指令。 -
当你扫描它时,手机会执行其中的内容:
- 打开 URL
- 发起支付
- 启动应用
- 下载文件
大多数扫描器会立即执行,用户无法判断是否:
- QR码被更改,
- 目标被替换,或
- 贴纸被更换。
这就产生了安全工程师所称的 替换攻击:攻击者不需要入侵网站,只需更换 QR码。
常见的攻击目标包括:
- 停车计时器
- 餐厅菜单
- UPI 海报
- 活动票据
- 大楼入口
一个看起来完全合法的 QR码就足以重定向资金、窃取凭证或传播恶意软件。
为什么现有防御无法解决此问题
我们已经有:
- HTTPS
- Google Safe Browsing
- Antivirus
- App sandboxing
但 QR 攻击在裂缝中滑过,因为大多数 QR 欺诈使用:
- 真正的浏览器
- 真正的支付应用
- 真正的网页
…只是错误的目的地。没有技术上的“恶意软件”。这是一个 信任问题,而不是代码问题。
借鉴已验证的安全理念
- SSH 使用它。
- 蓝牙配对使用它。
- 某些证书系统使用它。
思路很简单:第一次连接到某个对象时进行验证;此后,任何更改都会被视为可疑。
二维码缺乏等价的概念——这正是 Trust‑On‑First‑Scan (TOFS) 所提供的。
什么是 Trust‑On‑First‑Scan?
TOFS 是一种轻量级的 QR 扫描信任框架。它包含四个部分:
- 首次扫描确认
- 目标指纹
- 本地信任存储
- 过期与不匹配检测
它们共同使 QR 码具备防篡改的可见性。
TOFS 的工作原理
1. 首次扫描 = 明确信任
当 QR 码第一次被扫描时,手机 不会 立即打开它,而是显示:
- 完整的域名
- 将要打开的应用(浏览器、UPI 等)
- 使用的协议(https、upi 等)
用户点击 “信任并打开”。这就是用户唯一需要思考的时刻。
2. 创建指纹
扫描器根据以下信息生成加密指纹:
- QR 内容
- 最终解析后的目的地(包括所有重定向)
- 目标应用
该指纹唯一标识此 QR 实际指向的位置。
3. 本地存储指纹
手机会保存:
- 指纹
- 域名
- 时间戳
- 过期日期
这就成为该 QR 码的可信身份。
4. 以后扫描自动完成
-
如果指纹匹配: QR 码立即打开,无提示,零摩擦。
-
如果有任何变化: 手机会警告:
“此 QR 码已更改。目的地与您之前信任的不同。”
这可以防止贴纸调换、重定向支付 QR、被劫持的菜单链接等情况。
为什么过期很重要
Public QR codes change over time:
- Cafés change menus.
- Parking operators change vendors.
- Websites get sold.
- Domains get hijacked.
TOFS 包含过期策略,例如:
- café QR: 30 天
- parking QR: 7 天
- bank poster: 180 天
过期后,二维码只需重新确认,即可防止陈旧的信任变成漏洞。
为什么这应该放在操作系统中
单独的二维码扫描应用并不能解决这个问题。人们使用以下方式进行扫描:
- 相机应用
- Google Lens
- 支付应用
因此,TOFS 必须嵌入 系统二维码框架(Android、iOS、UPI QR 处理程序等),就像 HTTPS 警告或下载提示一样。它是一个 平台级安全层,而不是对现有安全机制的替代。
TOFS 不 替代的内容
- Safe Browsing
- 防病毒软件
- UPI 验证
- TLS
它 补充 了这些系统缺乏的功能:记住二维码本应是什么的记忆。防火墙阻止恶意站点;TOFS 阻止错误的站点。
为什么这很实用
TOFS 要求:
- 无新 QR 格式
- 无新硬件
- 无网络调用
- 无云存储
一切都在本地:哈希、时间戳、警告屏幕。这使得它能够大规模部署。
最终思考
QR 码赢得了可用性之战。它们无处不在,因为它们使用起来毫不费力。但毫不费力而缺乏记忆是危险的。Trust‑On‑First‑Scan 为 QR 码提供了它们一直缺乏的东西:随时间推移的身份感。这一单一的改变将 QR 码从盲目的指令转变为可验证的工具——这就是让全球界面安全的方式。
