在 Ente Locker 中安全存储账号凭据(Secret):字段、流程、加密原理与最佳实践
2026/9/10 22:01:13 网站建设 项目流程

在 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 的完整流程

官方文档给出的标准操作步骤为:

  1. 打开 Ente Locker;
  2. 点击+按钮;
  3. 选择Secret
  4. 依次填写字段:
    • Name:可识别名称(如 "Gmail"、"Bank Account");
    • Username:账号的用户名或邮箱;
    • Password:账号密码;
    • Notes:任意附加信息(可选);
  5. 选择一个或多个集合(Collection);
  6. 点击Save保存。

集合(Collection)是 Locker 的组织单元,负责对条目分组并控制共享范围。每个集合拥有独立的加密密钥(见 加密说明 中的 "Collection keys" 一节),因此将 Secret 放入某个集合后,只能由该集合的成员解密查看。Web 端的集合选择器 CollectionSelector 支持勾选多个集合,甚至可以当场新建集合并自动选中(onCreateCollection回调创建成功后调用onToggle(newCollectionID))。

此外,Locker 支持对已创建的条目进行编辑:长按条目后点击编辑按钮,修改完成后点击 Save;删除操作则将条目移入回收站,保留 30 天后才永久删除(详见 信息类型 FAQ 与 回收站)。

四、两个高频交互细节:密码隐藏与一键复制

4.1 密码默认隐藏,点按眼睛图标显示

出于防偷窥考虑,Secret 的密码字段默认以密文形式展示。在 Web 端,密码框右侧的可见性切换按钮由 ItemFormFields.tsx 实现,点击后在VisibilityIconVisibilityOffIcon之间切换;移动端则通过TextInputComponentisPasswordInput: 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::cryptoargonsealedsecretbox)被用于文件分享链接的加密封装:分享片段(fragment)经 Argon2 派生密钥后,文件密钥由secretbox加密,再经sealed(非对称封装)绑定到会话密钥。该文件还附有单元测试(lib.rs 测试用例),验证加密-解密往返的一致性。这说明 Locker 的密码学栈在整个 ente 项目中是统一且可被测试验证的。

从 安全 FAQ 可以进一步确认账号级保护机制:

  • 恢复密钥:注册时生成的 24 词助记短语,忘记密码时用于恢复账号;
  • 双因素认证(2FA):在Settings > Account > Two-factor authentication中开启,支持 TOTP 与 WebAuthn/FIDO2 硬件安全密钥;
  • Legacy 继承:可通过 Legacy 把账号恢复能力传递给家人,即使发生意外也不会让关键凭据永久失联。

六、最佳实践:如何用好 Secret

官方文档给出的使用建议可以归纳为四条:

  1. 每个账号使用唯一密码:为每个账号保存不同的密码,避免一处泄露牵连全局;
  2. 定期更新:保持已存凭据与当前真实密码一致,账号密码变更后及时同步到 Locker;
  3. 善用 Notes:在备注中记录安全问题答案、恢复邮箱、网站 URL 等找回账号所需的关键信息;
  4. 用集合组织:按 "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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询