Skip to content
haliChinaPublic

About

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

2FA Authenticator — browser-local TOTP generation with no backend

在线使用 · 安全模型 · 本地运行

它是什么

一个纯静态、浏览器本地运行的 TOTP 验证器。它使用 Web Crypto API 根据 Base32 密钥生成 RFC 6238 动态验证码,支持扫描 otpauth:// 二维码、多账户管理和离线 PWA。

2FA Authenticator 从 Base32 密钥到 Web Crypto 和六位 TOTP 的本地数据流

核心能力

  • 本地生成验证码:HMAC-SHA1 计算在浏览器内完成
  • 标准 TOTP:6 位验证码、30 秒周期,兼容 RFC 6238
  • 二维码导入:识别本地 otpauth:// 二维码图片
  • 多账户管理:账户数据保存在当前浏览器
  • 离线 PWA:首次加载后可由 Service Worker 缓存静态资源
  • 严格网络边界:Vercel CSP 将 connect-src 限制为 'self'

使用方式

  1. 打开 2fa.userhali.com。
  2. 输入 Base32 密钥,或上传 otpauth:// 二维码图片。
  3. 填写账户名称并保存。
  4. 点击验证码卡片复制当前 6 位动态码。

本地运行

git clone https://github.com/haliChina/2fa.git
cd 2fa
python3 -m http.server 8080

然后访问 http://localhost:8080。直接双击 HTML 可能会限制 Service Worker,建议通过本地 HTTP 服务运行。

安全模型

Important

TOTP 密钥等价于生成验证码的长期凭据。任何能读取当前浏览器存储或执行同源脚本的人,都可能读取这些密钥。

  • 账户主副本保存在 localStorage,并写入同源 Cookie 作为恢复副本。
  • Cookie 不是 HttpOnly,因为浏览器端 JavaScript 需要读取;它不应被视为加密存储。
  • 项目没有后端,但部署平台仍会提供静态文件并可能记录常规访问日志。
  • 浏览器扩展、XSS、设备失窃或被攻陷的浏览器环境仍可能暴露密钥。
  • 清除站点数据或更换设备会丢失账户,请保留独立恢复码或安全备份。

支持范围

当前实现支持 Google Authenticator 兼容的 TOTP:

HMAC-SHA1 · 30-second period · 6 digits

暂不支持 HOTP、Steam Guard 等非标准或不同参数格式。

部署

仓库包含 vercel.json,可直接部署到 Vercel。安全响应头包括 CSP、HSTS、X-Frame-Options: DENY、nosniff 与受限 Permissions Policy。

License

当前仓库未包含明确的开源许可证文件。在复制、修改或再分发代码前,请先向维护者确认授权范围。

About

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages