QR 码图案中隐藏的技术

QR 码 (Quick Response Code,快速响应码) 是 1994 年由原昌宏开发的二维条码。他当时任职于电装 (DENSO) 的一个部门,该部门后来分立为如今的电装 Wave (DENSO WAVE)。最初为汽车零部件库存管理而设计,随着智能手机的普及,QR 码已在支付、URL 分享、门票、名片交换等日常场景中无处不在。

那些黑白图案看似随机,实际上有着精密设计的结构。

QR 码的结构 - 三个地标

QR 码最显著的特征是三个角落的大方形图案 (定位图案)。

  • 定位图案:位于左上、右上和左下角。这些地标使摄像头能够瞬间检测 QR 码的位置、方向和倾斜度。从任何角度都能读取,因为这三个点建立了坐标系
  • 校正图案:较大的 QR 码中添加的小方块,用于畸变校正
  • 定时图案:连接定位图案的黑白交替线条。用于精确定位模块 (点) 坐标的参考线
  • 格式信息:记录纠错级别和掩码图案的区域
  • 数据区域:存储实际数据的区域

第四个角 (右下) 没有定位图案,因为三个点就足以确定位置和方向,第四个角用作数据区域更为高效。

纠错 - 脏码也能读取的秘密

QR 码最大的特点之一是强大的纠错能力。使用 Reed-Solomon 码,即使 QR 码部分脏污或损坏也能恢复数据。

  • L 级 (低):约 7% 损坏可恢复
  • M 级 (中):约 15% 损坏可恢复
  • Q 级 (四分之一):约 25% 损坏可恢复
  • H 级 (高):约 30% 损坏可恢复

在 QR 码中央放置公司 Logo 后仍能扫描,正是得益于这种纠错能力。被 Logo 遮挡的数据通过纠错码恢复。但 H 级的 30% 指的是“丢失后仍可恢复的码字比例”,并不意味着可以遮挡图案总面积的 30%。叠加 Logo 时应选择 H 级,并在面积上留出余量,再用实际的读取设备验证。

QR 码的安全风险

QR 码虽然方便,但也存在安全风险。

QR 码钓鱼 (Quishing)

在 QR 码中嵌入恶意 URL,将用户重定向到钓鱼网站的攻击。由于人类无法目视验证 QR 码内容,与直接输入 URL 相比,钓鱼更难被发现。

  • 在合法 QR 码上粘贴假 QR 码的物理攻击
  • 通过电子邮件或社交媒体发送假 QR 码的攻击
  • 替换公共场所 QR 码的攻击

调换 QR 码这种手法,在"把恶意内容混入正规的分发路径"这一点上,与软件的供应链攻击有着共通的结构。

防范措施

  • 扫描 QR 码后务必验证目标 URL
  • 使用短链接时要格外小心
  • 检查公共场所的 QR 码是否被覆盖粘贴
  • 为重要账户设置双因素认证,即使密码因 QR 码钓鱼而外流也能阻止非法登录
  • 使用 IP 确认验证连接信息,检查是否被重定向到可疑网站

QR 码的容量

QR 码能存储的数据量因版本 (大小) 和纠错级别而异。最大版本 40 (177x177 模块)、纠错级别 L 时:

  • 纯数字:最多 7,089 个字符
  • 字母数字:最多 4,296 个字符
  • 二进制:最多 2,953 字节
  • 汉字:最多 1,817 个字符

反映了 QR 码的日本起源,汉字 (Shift_JIS) 的高效编码模式被作为标准内置。

为什么叫"Quick Response"?

QR 码中的"QR"代表 Quick Response (快速响应)。开发者原昌宏需要在工厂生产线上高速扫描零部件,因此设计了一种比传统一维条码读取更快的二维码。定位图案的布局经过优化,可以从任何角度瞬间检测位置。

电装 Wave 持有 QR 码的专利,但宣布不行使专利权,允许任何人免费生成和使用 QR 码。这种"开放"策略是 QR 码在全球普及的重要推动力。

总结

QR 码诞生于日本的汽车工厂,如今已渗透到全球的日常生活中。通过三个定位图案实现高速检测、使用 Reed-Solomon 码实现强大纠错、标准支持汉字编码,那些黑白图案背后蕴含着精心设计的理念。

相关术语

钓鱼 QR 码钓鱼 (Quishing) 是利用 QR 码的钓鱼攻击方式。 HTTPS 验证通过 QR 码访问的 URL 是否使用 HTTPS 是基本的安全措施。 IP 地址 访问 QR 码 URL 时,DNS 解析会连接到 IP 地址。 加密 QR 码本身没有加密。其内容任何人都可以读取。

常见问题

二维码的3个方块是做什么用的?

称为定位图案,是相机瞬间检测二维码位置、方向和倾斜度的标记。3个点可以确定坐标系,因此从任何角度都能读取。

二维码加了Logo为什么还能扫描?

因为有里德-所罗门纠错码功能,最多可恢复30%(H级)的损坏。被Logo遮挡部分的数据通过纠错码恢复。

二维码是日本发明的技术吗?

是的。1994年由原昌宏先生为汽车零部件库存管理而开发。他当时任职于电装的一个部门,该部门后来分立为如今的电装Wave。已声明不行使专利权,任何人都可以免费使用。