FairEmail 密码存储机制与应用级锁定(生物识别/PIN)
邮箱密码存储:Android Keystore 保护
这是 FairEmail 隐私设计中最被低估但最关键的细节之一。FairEmail 不会把你的邮箱密码明文存储在 SQLite 数据库或配置文件中——它使用 Android 平台的硬件安全模块(Android Keystore)来保护密码。
具体做法
- FairEmail 生成一个随机主密钥(AES-256 密钥)
- 这个主密钥存储在 Android Keystore 中——Android Keystore 会用硬件安全模块(HSM / Titan M 芯片)加密它
- 邮箱密码、应用专用密码等敏感数据用这个主密钥加密后,才存入 FairEmail 的本地 SQLite 数据库
为什么这样安全
Android Keystore 是 Android 平台上最安全的存储机制:
- 即使设备被 root,其他 App 也无法读取存储在 Android Keystore 中的密钥
- 即使你的设备被连接到电脑用 ADB 调试,也无法直接提取密钥
- 主密钥本身就是随机生成的,不包含任何可预测的模式
什么情况下密码会被暴露
在理论上,以下情况可能导致密码暴露:
- 设备解锁状态下被物理接触到
- 使用旧版 Android 系统(5.0~7.0)的某些已知漏洞可能绕过 Keystore 保护
- FairEmail 被植入了恶意代码(FairEmail 开源可审计,降低了这种风险)
但以上都是极端场景,正常使用中 FairEmail 的密码存储是足够安全的。
设置导出的额外加密
FairEmail Pro 的「导出设置」功能会导出所有账户配置、身份设置等——导出文件本身也会被加密。导出时你需要设置一个加密口令,导入时需要用这个口令解锁。
导出加密口令和 Android Keystore 主密钥是两套独立的密钥——导出文件可以在任何设备上用这个口令打开,不受 Android Keystore 约束。所以导出口令本身也需要设置得足够强壮。
Pro 功能:应用级生物识别锁定
FairEmail 本身没有密码或生物识别锁——任何能解锁你手机的人都能打开 FairEmail 查看邮件。Pro 功能的应用级锁定补上了这个缺口:
支持的锁定方式
- 指纹(Fingerprint)
- 面部识别(Face recognition,Android 10+)
- PIN 码(数字 PIN,4~16 位)
- 密码(字母数字组合,4~32 位)
启用方法
- 打开 FairEmail 设置
- 找到「安全」或「锁定」相关选项(不同版本位置可能略有不同)
- 选择你想要的锁定方式(推荐生物识别)
- 首次启用时会要求你验证设备密码(这是 Android 的强制要求)
- 设置生效
锁定触发条件
FairEmail 的锁定逻辑是:当 FairEmail 从后台重新切回前台时,需要验证。如果 FairEmail 刚被打开就被切走,很快切回来可能不会触发(短时间内视为同一会话)。
锁定和系统解锁的关系
FairEmail 的应用级锁定和 Android 屏幕锁是两套独立机制:
- Android 屏幕锁负责保护整个设备
- FairEmail 应用级锁额外保护 FairEmail 这个 App(给了第二道防线)
- 如果手机设置了智能解锁(如蓝牙可信设备附近自动解锁),FairEmail 的应用级锁会独立工作——即使手机被解锁,FairEmail 打开仍需要生物识别
其他安全设置
自动崩溃报告
FairEmail 默认不发送崩溃报告。你可以在设置中手动启用,但这意味着会把崩溃时的一些技术信息(如设备型号、FairEmail 版本、Android 版本)发送给开发者。不会包含邮箱密码、邮件内容等敏感数据。
选择明文连接
FairEmail 在某些场景下(如连接旧式企业 IMAP 服务器)允许使用不加密的连接。这是一个高级选项——不加密意味着邮箱密码和邮件内容会在网络上以明文传输,任何中间网络设备都可能读取。只有在绝对确认网络环境可信(如企业内部物理隔离网络)时才考虑使用。
自签名证书
FairEmail 会验证 SSL/TLS 服务器证书。遇到自签名证书时,会弹出警告:「这个证书无法验证,继续连接可能存在风险」。你可以选择忽略(接受这个证书),但这意味着在连接期间 FairEmail 无法检测中间人攻击。