leaderboard 排行榜 category 分类浏览 code 独立开发者 notifications 通知中心 download 下载 App

登录

2fa-二次验证

2fa-二次验证

正式版
category 实用工具 / 密码与安全 update 1.0.0-rc-6 (10002006) storage 9.17MB
file_download
7
下载量
chat_bubble_outline
0
评论数
favorite_border
2
收藏数
schedule
-
更新时间

photo_library 应用截图

warning

应用警告

知名安全ROM GrapheneOS自带Accrescent推荐的TOTP工具。 支持将Aegis里的TOTP密钥转移到这块软件内。 开源地址:https://codeberg.org/979/2fa,开发者为Aleks Babkov Yatsenko

new_releases 更新日志

新增了 ClientSecret003,该密钥使用 AEGIS-256 对账户进行加密,并通过 HKDF-SHA3-512 生成每个文件的专用密钥。更多详情请参阅 README。 新增了 .2fa 文件的第 3 版,该版本使用 AEGIS-256 代替了 XChaCha20-Poly1305。 修复了一个影响 .2fa 文件内部保存方式的 5.1 / 中等严重性漏洞。利用该漏洞需要对设备文件系统拥有特权访问权限(例如物理取证访问)。已添加警告界面提示用户重新进行设置,且旧版存储处理机制将在 1.0.0 版本中移除。 修复了主题应用图标。

description 应用介绍

2fa 的唯一目的是提供被称为“一次性密码”的单次使用验证码。它是一款双因素身份验证器,这一概念并不新鲜。市面上有许多其他身份验证器和替代方案,虽然功能更多,但在安全性和隐私保护方面却不如我们。我们开发 2fa 的初衷,是充分利用您设备的硬件安全特性,结合最新的加密标准,确保您的账户安全。该应用支持离线使用,并具备其他身份验证应用所不具备的独特功能。 功能 支持 TOTP、HOTP 及 Steam Guard 验证码。 可通过二维码、OTPAuth 链接、文件或相册添加账户。 高度可自定义,支持账户配色与图标包,包含纹理和渐变色选项。 高级安全功能,如生物识别解锁、屏幕保护、安全剪贴板、退出时锁定以及意图拦截。 自动备份,并支持手动导出和导入账户(格式为 .2fa 或 Aegis .json)。 以及更多其他功能 安全性 所有账户均经过加密,并以我们自有的格式(扩展名 .2fa)存储在应用的内部目录中。无论文件是用于内部还是导出,该格式均保持一致。两者之间的唯一区别在于加密密钥的来源。 账户采用 AEGIS-256 算法进行加密。对于导出和自动备份,加密密钥是通过使用 Argon2id 算法并采用极高强度参数对您的密码短语进行哈希运算生成的,但我们同时强制执行最低密码短语强度要求,即便是我们允许的最弱密码短语,破解也需要数百年时间。 您打开应用时用于解密账户的加密密钥并非来自密码短语。在设置过程中,您需要在屏幕上滑动手指以生成熵值。我们将该熵值通过 SHA3-512 进行哈希运算以生成您的账户密钥,随后再次对结果进行 SHA3-512 哈希运算以生成自动备份密钥。这两个密钥共同存储在我们称为“ClientSecret”的对象中。两者均在任何数据写入之前通过单次操作生成,因此 ClientSecret 绝不会以部分填充零字节的状态存在。如果您后续选择使用密码短语启用自动备份,仅备份密钥会被覆盖。 当应用对内部账户文件进行加密或解密时,不会直接使用 ClientSecret 密钥。每个密钥长度为 512 位,是 AEGIS-256 所需长度的两倍,这为系统提供了比单纯使用该密码算法更大的安全余量。该密钥会通过 HKDF-SHA3-512 算法,结合全新的随机盐值和特定版本的标签,生成针对该特定文件的 256 位密钥和随机数。盐值与文件一同存储,以便在解密时重新推导。这保证了即使来自同一个 ClientSecret,也绝不会有两个文件共享相同的密钥和随机数对。 当然,ClientSecret 必须存储在某个地方。我们使用 AES-GCM(Android KeyStore 中最安全的加密算法)对其进行加密,并尝试在安全元件(Secure Element)上生成尽可能大的密钥。如果失败,我们会降低密钥长度;如果安全元件完全不可用,则在可信执行环境(Trusted Execution Environment)中重复该过程。 在 KeyStore 生成过程中,若您使用生物识别功能,系统会设置某些特殊标志,这些标志可能导致密钥失效。当您的锁屏界面发生变化、私密空间发生变更、设备进行系统更新,或应用长时间未被打开时,都可能触发此情况。 这些触发条件取决于设备的软件和固件,因此未必每次都会触发。若密钥失效,ClientSecret 将永久无法访问。因此我们强烈建议启用自动备份。这些备份采用相同的 .2fa 格式,存储在相同的内部目录中,但使用您自选的密码短语进行加密。一旦密钥失效,这就是您取回账户的唯一途径。若无自动备份或先前导出的备份,您的账户将永久丢失。这是系统设计使然。 此外,我们还添加了若干功能,以防止您的数据以您意想不到的方式泄露。以下是其中一些可能需要稍作说明的功能。 隐身键盘:您的键盘通常会记住您输入的内容以提升预测准确性,这意味着您的账户名称、发卡行和密钥可能会被存储在键盘词典中。此功能通过在您使用本应用时指示键盘停止学习,从而防止这种情况发生。 安全剪贴板:当您复制代码时,系统可能会在剪贴板预览、建议中显示该代码,甚至将其同步到其他设备。此功能会将复制的代码标记为“高度敏感”,以便系统自动隐藏它们。如果您希望键盘或系统自动填充代码,请保持此功能关闭。 退出时锁定: 当应用进入后台时,我们会安全地从内存中清除 ClientSecret 以及您所有的账户名称、签发机构、备注和密钥。这意味着每次打开应用时,您都需要重新进行身份验证。 阻止 Intents:在 Android 系统中,其他应用可以向您的应用发送数据,例如分享图片或链接。我们利用此功能,让您能够通过从其他应用分享二维码图片或 OTPAuth 链接来添加账户。图像解码和二维码解析分别由 Android 和 ZXing 处理,而非由我们负责。如果这两者中存在漏洞,恶意应用可能会专门构造数据来触发它。启用此功能将完全拦截来自其他应用的所有传入数据,从而关闭该攻击面,但代价是无法在双因素认证中进行数据共享。我们最终计划用我们自己的 Rust 实现来替换图像解码和二维码解析。

apps 相关应用