简易 Android 加密,无需账户或订阅
Source: Dev.to
为什么离线加密可以省去账户
大多数人在构建 Android 加密应用时会先列出一份熟悉的清单:强加密、易用的用户体验、也许还有云备份、密码重置以及用于恢复的账户系统。
如果你的目标是真正的离线加密,这份清单就失效了。没有云后端,你就不可能实现密码重置或账户登录。这正是重点所在。
在传统应用中,“密码重置”之所以存在,是因为系统:
- 知道你是谁(你拥有账户)
- 拥有可信的渠道来验证你(邮件、短信)
- 保存足够的状态以便进行重置
这种模式之所以可行,是因为公司掌控着基础设施。如果你忘记密码,能够重置仅仅是因为有第三方持有密钥。对许多产品而言,这没问题——便利性很重要,且有支持工具可以帮助找回忘记的密码。
权衡: 其他人拥有控制权。
离线加密应用完全在本地运行:
- 没有账户
- 没有服务器
- 没有云备份
- 没有可以介入的中心权威
加密密钥在设备本地、由你的密码派生。不存在账户数据库,也没有主密码重置。
这意味着:
- 如果你忘记密码,就没有重置方式。
- 如果你想要云恢复,就等于把控制权交给他人。
- 如果你想在不信任服务器的前提下获得强保护,你就必须自行承担责任。
这不是缺陷或遗漏的功能,而是安全模型的必然结果。
架构选择
有账户和云服务器的情况
- 你可以进行密码重置,使用更便利。
- 你放弃了独立性和绝对控制权。
完全离线加密的情况
- 你获得了独立性和控制权。
- 你失去了密码重置和服务器端恢复的能力。
两种方式没有绝对的优劣,它们代表了不同的权衡。当目标是本地加密且不依赖第三方时,你必须选择独立性。
密码重置的安全影响
如果可以进行密码重置,就会引入另一条攻击面:
- 控制你邮箱的攻击者可以触发重置。
- 存储托管密钥的公司可能被胁迫。
- 被攻破的服务器可能被滥用来执行恢复机制。
当没有服务器可以重置你的密码时,就不存在可被利用的恢复渠道。本地加密的结构性现实很简单:
只有正确的密码才能解锁数据。
责任与权衡
在构建离线加密之前,需要了解:
- 必须选择一个强密码。
- 忘记密码就意味着失去访问权限。
- 责任从云端转移到用户自身。
这听起来很严苛,但却是事实。真正的密码学不与身份证件、支持工单或重置链接协商,只响应正确的密钥。
权衡摘要
| 方法 | 获得 | 失去 |
|---|---|---|
| 有账户 | 恢复 | 控制 |
| 离线加密 | 控制 | 恢复 |
两者都是合法的选择。对于 Vaelri Vault,我们选择了独立性和本地控制。
离线加密的好处
离线加密还能将你的数据与外部业务生命周期解耦。云服务可能会:
- 更改政策
- 被收购
- 停止运营
- 更改 API
本地存储的数据不受这些影响。只要应用还能运行且你拥有密码,数据就始终可访问。
独立性以失去恢复为代价。这不是缺陷——这正是目标所在。