相关词

  • MFA 多因素认证
  • RSA 加密
  • Google Authenticator
  • TOTP 算法
  • 雪花算法
  • NTP 时间校对

前言

相信各位都碰到过这样的场景:在银行 App 登录或转账时,需要验证指纹或一次性短信;在 Google、GitHub 等网站登录时,除了密码外还需输入动态验证码。这些操作统称为多因素认证(MFA),旨在通过多重验证提升安全性。

这些看起来多余的操作,都是因为时代的眼泪以及种种原因导致的:

  • 人类记忆的局限性:75%的人会重复使用密码,60%的密码能被 AI 在 1 秒内破解(数据来源:2024 年 IBM 安全报告)
  • 数据信息的泄漏:光是 2024 年“RockYou2024”密码泄露事件,就暴露了全球 99 亿条明文密码,相当于平均每位网民泄露约 1.3 条密码记录

由于数据泄露事件频发,NIST(美国国家标准与技术研究院)等机构推动了 MFA 成为行业标准。

三个维度因素

如今,几乎大部分商家都采用了类似 MFA 概念的安全实践,现代 MFA 系统通常构建于三个相互独立的安全维度之上,下面简单列举一些常见的维度因素

认知维度

认证方式安全性用户体验成本技术说明
普通密码★☆☆☆☆★★★★★★☆☆☆☆安全学中的老年人
12 字符复杂密码★★☆☆☆★★☆☆☆★☆☆☆☆Ab.cd0109x1-
图形解锁图案★★★☆☆★★★★☆★☆☆☆☆3×3 点阵共 389,112 种组合,易被旁观者窃取
安全问题★☆☆☆☆★★★☆☆★★☆☆☆重复性其实很高,容易忘记

物理维度

认证方式安全性用户体验成本技术说明
Google Authenticator★★★★☆★★★★☆★☆☆☆☆TOTP 算法,离线工作
扫码★★★★☆★★★☆☆★☆☆☆☆除了需要下载对应 app 外,目前应该是最常用的方案
邮件验证码★★☆☆☆★★★☆☆★★☆☆☆依赖邮箱安全性,易受钓鱼攻击
短信验证码(SMS)★★★☆☆★★★☆☆★★☆☆☆依赖运营商网络,易受 SIM 交换攻击(NIST 已建议淘汰)

生物维度

认证方式安全性用户体验成本技术说明
声纹识别★★★☆☆★★★☆☆★★☆☆☆分析语音参数,环境噪音影响精度
超声波指纹识别★★★★☆★★★★★★★★☆☆指纹
面部识别★★★★☆★★★★☆★★★★☆iPhone Face ID 使用 30,000 个红外点,FAR<1/1,000,000
虹膜扫描★★★★★★★★☆☆★★★★☆266 个特征点识别,需主动配合
手掌识别★★★★★★★★☆☆★★★★☆日立 VeinID 技术,活体检测
在国内,使用最多的物理因素就是验证码了,不过由于商家对隐私的不注重以及喜欢二次利用的特性,笔者不是很喜欢那种必须验证手机号的应用

Google Authenticator

这是一款谷歌旗下常用于海外网站和海外应用敏感操作验证的工具,目前已成为海外最常用的物理验证因素之一,核心特点包括:

  1. 可离线使用

    通过 RFC 6238 标准的TOTP 算法以及预共享密钥与本地时间生成动态验证码,无需网络连接

  2. 数据安全

    密钥仅存储于用户设备的本地和密钥派发方,两者会在每个步长时间内(通常 30s)计算得出新密钥,进行对比从而验证身份

  3. 操作简单

    通过扫描服务端生成的二维码密钥完成账户关联,一次关联,无有效期限制,理论一个码可终身使用

  4. 开源且支持跨平台

    覆盖多端,且与所有符合 RFC 6238 的服务兼容,如 AWS、GitHub、Coinbase 等(需用户自行搭建)

Google Authenticator 老版本界面截图,展示动态验证码生成

尽管 Google Authenticator 具有显著优势,但仍存在以下问题

  • 国内用户需通过非官方渠道(如 APK 或第三方商店)下载 Google Authenticator,存在一定不便
  • 部分浏览器扩展版本(如第三方 Web 插件)界面较简陋,且手机端配置环境较复杂
  • 在网络不稳定时,App 可能因同步延迟偶尔显示加载动画,影响用户体验
  • 必须登录 Google 账号才能启动云同步功能,不支持其他导出密钥的方式

为了避免被上面问题困扰,笔者开发了一个简化版本的 Web Authenticator 应用 提供给各位使用以及测试

Web 版验证器

Web 版具备以下功能:

  1. NTP 时间补偿:统一使用 Google 的 ntp 服务对计时做时间校对
  2. 多种识别方式:支持手动输入密钥、扫码识别密钥、上传图片识别密钥等多种方式
  3. 离线使用:利用 PWA 特性,除首次需网络外,后续使用不需联网,支持无网访问,但可能在 IE 等老版浏览器下出现异常
  4. 数据安全:密钥存于用户本地浏览器 IDB,数据传输采用 TLS 协议,结合 RSA 或其他非对称加密算法确保安全。Web 版遵循基本隐私保护原则,数据不上传至服务器
  5. 布局优化:使用更现代更易读的 UI 布局以及操作,拖拽特性优化,可多方向拖拽,页面简介
  6. 完全开源:项目放置于GitHub 且开源,代码极简,易上手
  7. 一键部署:支持 docker 一键部署,已测试 wind 和 Mac 运行正常

web图例

手机端图例

总结

TOTP 验证兼顾隐私性、安全性和易用性,是笔者认为比较理想的物理认证方式。Web 版验证器通过开源、离线支持和现代 UI,降低了使用门槛,已测试支持 GitHub、AWS 等平台的 TOTP 验证,同时应用层面代码对于开发人员来说难度也不高,非常适合学习。

最后,补充下链接防止失效

Github:https://github.com/sansan-mei/2fa-next

线上地址:mh33.top/2fa

PS:本篇文章相关项目代码仅供学习使用

本文由mdnice多平台发布


三_清
113 声望1 粉丝