凭牌 Tessera
本地优先的 Android 双因素验证器

验证码全部在你的设备上生成,条目密钥经 Android Keystore 主密钥加密后写入加密数据库。需要跨设备时,把端到端加密的备份同步到你自己选择的云——服务商只能看到密文。

Android 11+(API 30) Kotlin · Jetpack Compose GPL-3.0 开源 无广告 · 无统计 7 种同步后端

为「密钥不该离开你的手」而设计

不注册账号、不接入统计或广告 SDK,也没有中间服务器。所有网络请求都发往你自己填写的地址。

本地优先

数据库由 SQLCipher 加密,条目密钥由 Android Keystore 中的 AES-256-GCM 主密钥独立包裹,主密钥不出安全硬件。

自带云

WebDAV、S3 对象存储、GitHub 仓库、Gist、Gitee、Google Drive、OneDrive —— 7 种后端任选,可同时启用多个。

多账号

WebDAV、S3、Google Drive、OneDrive 都能配置多份账号/服务器/存储桶,各自独立同步,每种后端还能起备注名区分。

易迁移

支持 2FAS、Aegis、andOTP、Raivo、LastPass、Stratum、Google Authenticator 等来源导入,也可拍照或选图识别二维码。

现代界面

Jetpack Compose + Material 3,支持动态取色、分类折叠分组、模糊搜索与即将过期时淡入下一个令牌。

扫码入库

CameraX 实时扫码 + 相册图片识别,使用离线捆绑的 ML Kit 条码库,没有 Google Play 服务也能解码。

功能一览

除了标准的 TOTP,还有一些日常真正会用到的细节。

功能说明
TOTP 生成RFC 6238,支持 SHA1 / SHA256 / SHA512、6 / 7 / 8 位、自定义周期,兼容 Steam 字母表
服务图标内置 1954 张图标,按发行方名称归一化自动匹配,区分浅色 / 深色变体
云同步手动同步 + 后台自动同步(15 分钟 ~ 1 天);按条目版本号合并,删除以墓碑参与,绝不盲写覆盖
云端数据管理查看各后端上的备份,并可单独删除某一个后端的云端数据(不影响本机)
分类分类筛选、首页折叠分组、批量归类,分类数据随同步一起走
回收站软删除 + 保留期(默认 30 天),支持还原 / 彻底删除 / 清空
应用锁PIN(PBKDF2-HMAC-SHA256,21 万次迭代)+ 生物识别,锁定时自动唤起
隐私保护默认禁止截图(FLAG_SECURE,可在设置中开启);编辑条目不回填明文密钥
导出 / 导入支持 Tessera 专属备份格式,可选不加密或使用密码进行 AES-256-GCM 加密

安全设计

密钥的分层与隔离方式,决定了「即使云端被看光,也读不出一个验证码」。

请务必留存同步口令。云端的备份用你的同步口令加密,口令只保存在本机、不会上传。一旦遗忘,云端备份将无法解密——任何人也帮不了你。

下载与安装

发布包由 CI 自动构建并使用同一份密钥签名,按 ABI 拆分。不确定架构就选 universal。

产物适用
Tessera-<版本>-arm64-v8a.apk绝大多数现代手机(推荐)
Tessera-<版本>-armeabi-v7a.apk较旧的 32 位 ARM 设备
Tessera-<版本>-x86_64.apk / -x86.apk模拟器与 x86 设备
Tessera-<版本>-universal.apk一包通吃,体积略大

要求 Android 11(API 30)及以上。安装前请在系统中允许「未知来源应用」。本项目为个人开源项目,未上架任何应用商店。

常见问题

应用会上传我的验证码吗?

不会。验证码在设备本地按时间戳计算,不需要网络。除非你自己开启云同步,应用不会向外发送任何数据。

服务商能看到我的密钥吗?

看不到。同步包在设备上就完成了加密,云端只有密文。开发者同样无法解密——所以口令必须由你自己保管。

换手机怎么办?

先在新设备上设置同一个同步口令并绑定同一个云后端,再执行同步即可拉回条目;也可以先导出备份文件再导入。

为什么没有 iOS 版 / 网页版?

本项目目前只面向 Android。它是个人维护的开源项目,范围有意保持克制,以免削弱安全审查所需的透明度。

可以免费商用或二次分发吗?

可以,但需遵守 GPL-3.0:衍生作品同样开源、保留版权声明且不提供担保。详见 服务条款。