文章总结: 这篇文章介绍了GoogleAuthenticatorDesktop,一个开源的桌面端双因素认证器,完整兼容GoogleAuthenticator迁移协议。该工具提供完全离线、开源透明的解决方案,支持多种导入导出方式,使用AES-256-GCM加密和Argon2id密钥派生确保数据安全。文章详细说明了其设计背景、核心特性、安全设计、技术栈和使用方法,并提供了项目地址和构建指南。 综合评分: 85 文章分类: 安全工具,应用安全,数据安全
设计背景
在寻找将 Google Authenticator 账户迁移到桌面端的解决方案时,发现市面上的工具存在以下问题:
-
在线工具
需要将敏感的 TOTP 密钥上传到第三方服务器,存在泄露风险
-
命令行工具
对普通用户不友好,操作繁琐
-
其他桌面端
不支持
otpauth-migration://批量迁移协议,不支持分组显示,不支持原始密钥获取
本项目的目标:提供一个完全离线、开源透明、支持原生迁移协议的桌面解决方案,让用户可以安全地将手机上的 Google Authenticator 账户一键迁移到桌面端。
核心特性
完整迁移支持
| 协议 | 说明 | 支持 |
| — | — | — |
| otpauth-migration:// | Google Authenticator 导出的批量迁移二维码 | ✅ |
| otpauth://totp/ | 标准 TOTP 单账户二维码 | ✅ |
| otpauth://hotp/ | 标准 HOTP 单账户二维码 | ✅ |
功能一览
-
账户管理
添加、删除、分组、搜索
-
验证码生成
TOTP/HOTP,支持 6/8 位,SHA1/SHA256/SHA512/MD5
-
导入方式
扫描二维码图片、剪贴板粘贴、手动输入
-
导出迁移
生成标准迁移二维码,可导回手机端
-
系统托盘
关闭窗口最小化到托盘,后台常驻
-
主题切换
浅色 / 深色 / 跟随系统
安全设计
本地存储加密
所有敏感数据(TOTP 密钥、账户信息)均使用 AES-256-GCM 认证加密存储在本地 SQLite 数据库中,绝不上传任何数据。
数据流: 明文 → AES-256-GCM 加密 → Base64 编码 → SQLite
密钥派生
采用 Argon2id 算法(2015年密码哈希竞赛冠军)从用户密码派生加密密钥:
| 参数 | 值 | 说明 | | — | — | — | | 内存消耗 | 64 MB | 抵抗 GPU/ASIC 暴力破解 | | 迭代次数 | 1 | 平衡安全与性能 | | 并行度 | 4 | 利用多核 CPU | | 输出长度 | 32 字节 | AES-256 密钥 |
设备绑定
未设置密码时,使用设备唯一标识(主机名 + 用户目录 + 系统信息)生成加密密钥,数据库文件复制到其他设备无法解密。
密码保护
- 可选启用密码保护
- 支持自动锁定(1-30 分钟无操作)
- 密码验证失败不泄露任何信息
技术栈
| 层级 | 技术 | | — | — | | 后端 | Go 1.21+ | | 前端 | Vue 3 + Element Plus | | 框架 | Wails v2 | | 数据库 | SQLite (modernc.org/sqlite, 纯 Go) | | 加密 | AES-256-GCM + Argon2id | | 二维码 | goqr + gozxing (多算法容错) |
平台支持
| 平台 | 系统托盘 | 说明 | | — | — | — | | Windows | ✅ | 完整系统托盘支持 | | Linux | ✅ | 完整系统托盘支持 | | macOS | ➖ | 使用 Dock 图标(关闭窗口隐藏到 Dock,点击 Dock 图标重新显示) |
macOS 说明:由于 Wails 框架与第三方系统托盘库存在符号冲突,macOS 版采用原生 Dock 操作体验:
点击关闭按钮 → 隐藏窗口(应用不退出)
点击 Dock 图标 → 显示窗口
Cmd+Q或菜单「文件 → 退出」→ 完全退出应用
快速开始
从源码构建
# 安装 Wails CLI
go install github.com/wailsapp/wails/v2/cmd/wails@latest
# 克隆项目
git clone https://github.com/yourname/google-authenticator-desktop.git
cd google-authenticator-desktop
# 开发模式
wails dev
# 构建发布版
wails build
使用方法
-
迁移账户
在手机 Google Authenticator 中选择「导出账户」,截图或拍照保存二维码
-
导入桌面
菜单「文件 → 转移验证码 → 导入迁移码」,选择图片或从剪贴板粘贴
-
设置密码
菜单「编辑 → 设置」启用密码保护(推荐)
项目结构
google-authenticator/
├── main.go # 主入口 + 菜单
├── app.go # 后端 API
├── tray_desktop.go # 系统托盘 (Windows/Linux)
├── tray_darwin.go # 系统托盘 (macOS 空实现)
├── internal/
│ ├── platform/ # 平台特定实现
│ │ ├── platform_windows.go # Windows (消息框、进程检测、图标)
│ │ └── platform_unix.go # macOS/Linux
│ ├── storage/ # 数据存储层
│ │ ├── database.go # SQLite 操作
│ │ └── crypto.go # AES-256-GCM + Argon2id
│ ├── otp/ # OTP 算法
│ │ └── otp.go # TOTP/HOTP 生成
│ ├── migration/ # 迁移协议
│ │ ├── migration.go # otpauth:// 解析
│ │ └── parser.go # otpauth-migration:// 解析
│ └── qrcode/ # 二维码处理
│ └── qrcode.go # 扫描 + 生成
└── frontend/ # Vue3 前端
└── src/App.vue
安全声明
-
所有数据仅存储在本地,不包含任何网络请求
-
加密实现使用 Go 标准库和经过广泛审计的
golang.org/x/crypto -
请妥善备份
如果忘记密码且未导出账户,数据将无法恢复
许可证
MIT License
致谢
- Wails – 优秀的 Go + Web 桌面框架
- Element Plus – Vue 3 UI 组件库
- dim13/otpauth – 迁移协议参考实现
by rabbitmask © 2025
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:ParrotSecurity RabbitMask《Google Authenticator Desktop》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论