在 Ente Locker 中安全存储账号凭据(Secret):字段、流程、加密原理与最佳实践
【免费下载链接】ente💚 End-to-end encrypted cloud for everything.项目地址: https://gitcode.com/GitHub_Trending/en/ente
Ente Locker 是 ente 生态中面向"重要账号凭据"的端到端加密存储模块,其 Secret(账号凭据)类型允许你把银行账户、主邮箱、关键服务的用户名与密码集中保存在一个加密空间内。本文以 account-credentials.md 为主线,结合移动端、Web 端与 Rust 核心层的真实实现,完整讲解 Secret 的可存字段、创建与编辑流程、密码隐藏/复制等交互细节、凭据加密的技术原理,以及它与常规密码管理器协同使用的方法。
一、Secret 是什么:Locker 中的"账号凭据"条目
在 Ente Locker 中,可以存储四种信息条目(Item):Document(文档)、Note(笔记)、Secret(账号凭据)和 Thing(实体物品位置记录),详见 信息类型索引。其中Secret专门用于保存网站与服务的登录信息——即账号的用户名与密码。
从 Web 端的传输层代码可以确认,"账号凭据"在客户端与服务端的通信协议(wire format)中对应account-credential类型,由 info-type-wire.ts 将其映射为内部类型accountCredential:
const internalTypeByWireType = new Map<string, LockerInfoInternalType>([ ["note", "note"], ["physical-record", "physicalRecord"], ["account-credential", "accountCredential"], ["accountCredential", "accountCredential"], ... ]);与文档、笔记等类型一样,Secret 同样遵循端到端加密:数据在离开设备前完成加密,服务端只持有密文,详见 加密说明。
二、每条 Secret 可以存储哪些字段
官方文档定义了四个字段,其中前三个为必填,Notes 为可选:
| 字段 | 用途 | 示例 | 是否必填 |
|---|---|---|---|
| Name | 账号的可识别名称 | "Gmail"、"Bank Account" | 必填 |
| Username | 登录标识(用户名或邮箱) | you@example.com | 必填 |
| Password | 账号密码 | 强随机密码 | 必填 |
| Notes | 附加信息:安全问题答案、恢复邮箱、网站 URL 等 | 选填 | 可选 |
移动端实现位于 account_credentials_page.dart,页面为四个字段分别创建了独立的输入控制器:
final TextEditingController _nameController = TextEditingController(); final TextEditingController _usernameController = TextEditingController(); final TextEditingController _passwordController = TextEditingController(); final TextEditingController _notesController = TextEditingController();Web 端对应的表单组件在 ItemFormFields.tsx 的accountCredential分支中,Password 字段使用type={showPassword ? "text" : "password"}实现明文/密文切换。
移动端的表单校验逻辑(validateForm)要求 Name、Username、Password 三者均非空才能保存,Notes 允许留空并在创建时被归一化为null(createInfoData):
@override bool validateForm() { return _nameController.text.trim().isNotEmpty && _usernameController.text.trim().isNotEmpty && _passwordController.text.trim().isNotEmpty; }三、创建一条 Secret 的完整流程
官方文档给出的标准操作步骤为:
- 打开 Ente Locker;
- 点击+按钮;
- 选择Secret;
- 依次填写字段:
- Name:可识别名称(如 "Gmail"、"Bank Account");
- Username:账号的用户名或邮箱;
- Password:账号密码;
- Notes:任意附加信息(可选);
- 选择一个或多个集合(Collection);
- 点击Save保存。
集合(Collection)是 Locker 的组织单元,负责对条目分组并控制共享范围。每个集合拥有独立的加密密钥(见 加密说明 中的 "Collection keys" 一节),因此将 Secret 放入某个集合后,只能由该集合的成员解密查看。Web 端的集合选择器 CollectionSelector 支持勾选多个集合,甚至可以当场新建集合并自动选中(onCreateCollection回调创建成功后调用onToggle(newCollectionID))。
此外,Locker 支持对已创建的条目进行编辑:长按条目后点击编辑按钮,修改完成后点击 Save;删除操作则将条目移入回收站,保留 30 天后才永久删除(详见 信息类型 FAQ 与 回收站)。
四、两个高频交互细节:密码隐藏与一键复制
4.1 密码默认隐藏,点按眼睛图标显示
出于防偷窥考虑,Secret 的密码字段默认以密文形式展示。在 Web 端,密码框右侧的可见性切换按钮由 ItemFormFields.tsx 实现,点击后在VisibilityIcon与VisibilityOffIcon之间切换;移动端则通过TextInputComponent的isPasswordInput: true属性(account_credentials_page.dart)提供同样的输入掩码能力,查看模式下密码字段以isSecret: true渲染(buildViewFields)。
4.2 复制到剪贴板
每个字段旁都提供了复制按钮,方便将值粘贴到登录表单中。Web 端的复制逻辑位于 ItemDetailView.tsx,通过navigator.clipboard.writeText(value)写入剪贴板,并在失败时记录错误日志、弹出提示;复制成功后还会短暂标记copiedField,在界面上给出"已复制"的反馈。
在移动端,复制密码的路径为:点开 Secret 查看详情 → 点击密码字段旁的复制图标,密码即被复制到剪贴板(参见 信息类型 FAQ)。
五、端到端加密:Secret 背后的安全机制
Secret 之所以适合存放"最不能丢"的凭据,核心在于 ente 的零知识(zero-knowledge)架构。官方加密文档 encryption.md 明确了以下技术细节:
- 加密算法:XChaCha20 与 XSalsa20;
- 完整性认证:Poly1305 MAC;
- 密钥派生:Argon2id。
其工作流程为:你在设备上创建或编辑条目 → 设备使用你的加密密钥在本地加密 → 密文上传至 ente 服务器 → 需要查看时下载密文并在设备上解密。条目标题、内容、上传的文件、集合名称、元数据乃至共享信息全部加密,ente 员工同样无法读取。加密实现基于 libsodium,并已通过德国安全公司 Cure53 的审计。
在仓库的 Rust 核心层 rust/crates/locker/src/lib.rs 中可以看到同一套密码学原语(ente_core::crypto的argon、sealed、secretbox)被用于文件分享链接的加密封装:分享片段(fragment)经 Argon2 派生密钥后,文件密钥由secretbox加密,再经sealed(非对称封装)绑定到会话密钥。该文件还附有单元测试(lib.rs 测试用例),验证加密-解密往返的一致性。这说明 Locker 的密码学栈在整个 ente 项目中是统一且可被测试验证的。
从 安全 FAQ 可以进一步确认账号级保护机制:
- 恢复密钥:注册时生成的 24 词助记短语,忘记密码时用于恢复账号;
- 双因素认证(2FA):在
Settings > Account > Two-factor authentication中开启,支持 TOTP 与 WebAuthn/FIDO2 硬件安全密钥; - Legacy 继承:可通过 Legacy 把账号恢复能力传递给家人,即使发生意外也不会让关键凭据永久失联。
六、最佳实践:如何用好 Secret
官方文档给出的使用建议可以归纳为四条:
- 每个账号使用唯一密码:为每个账号保存不同的密码,避免一处泄露牵连全局;
- 定期更新:保持已存凭据与当前真实密码一致,账号密码变更后及时同步到 Locker;
- 善用 Notes:在备注中记录安全问题答案、恢复邮箱、网站 URL 等找回账号所需的关键信息;
- 用集合组织:按 "Work"、"Banking"、"Social Media" 等维度建立集合,把相关账号归组,便于查找与共享。
七、何时使用 Locker,何时使用密码管理器
Ente 官方对两者的定位非常明确:Locker 与密码管理器是互补关系,而非替代关系。
- 密码管理器:负责日常账号与每日登录场景,提供浏览器自动填充(autofill);
- Ente Locker:负责"最不能失去访问权"的关键账号——银行、主邮箱、核心服务。这些凭据受端到端加密保护,必要时还能通过 Legacy 传递给家人。
需要留意当前版本的能力边界(详见 信息类型 FAQ):Locker目前不支持从其他密码管理器导入密码,也没有浏览器扩展或自动填充集成;因此高频、需要 autofill 的日常账号仍建议交给专门的密码管理器,而把关键凭据收进 Locker。这一"分工"策略也正是官方推荐的使用方式:密码管理器管日常便利,Locker 管关键资产安全。
八、相关 FAQ 速查
- 如何从其他密码管理器导入密码?
- Locker 有浏览器集成吗?
- 我的密码是如何加密的?
- 如何复制密码?
【免费下载链接】ente💚 End-to-end encrypted cloud for everything.项目地址: https://gitcode.com/GitHub_Trending/en/ente
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考