Ente Locker 集合共享指南:与 Ente 用户端到端加密共享文档集合的完整实践
2026/9/12 9:56:43 网站建设 项目流程

Ente Locker 集合共享指南:与 Ente 用户端到端加密共享文档集合的完整实践

【免费下载链接】ente💚 End-to-end encrypted cloud for everything.项目地址: https://gitcode.com/GitHub_Trending/en/ente

导读

本文以 Ente Locker 的「Share with Ente users」功能为主线,完整讲解如何将文档集合安全地共享给其他 Ente 用户:从端到端加密的工作机制、逐步骤的共享/管理/接收操作,到更新、撤销访问、删除集合等边界场景,并结合仓库源码(Web 前端共享服务、共享抽屉组件、服务端请求结构、Rust 密钥封装实现)剖析其底层实现。读完本文,你将掌握在 Ente Locker 中与家人或同事安全共享文档的标准做法,并理解为什么共享内容对服务器和第三方始终不可见。

共享的核心理念:面向用户的集合共享

Ente Locker 提供两类共享方式:与 Ente 用户共享集合(本文主题)与 公共链接(面向任意人的浏览器链接)。当你要与另一名拥有 Ente 账户的用户(例如家人、配偶或同事)在 Locker 应用内共享集合时,应使用前者。

与公共链接不同,「与用户共享」具备以下特征:

  • 接收者在其自己的 Locker 应用中直接看到共享集合,无需复制粘贴链接;
  • 集合内容针对接收者的账户单独加密,只有其设备能够解密;
  • 共享关系可随时查看、撤销,并支持接收者主动离开共享集合;
  • 共享集合为只读,只有所有者能添加或修改条目(见 FAQ:共享用户能否添加条目)。

[!IMPORTANT] 在 Locker 中,共享的粒度是集合而非单个条目。共享单项请先将其加入一个集合,或为该条目创建公共链接。

端到端加密的共享原理

根据官方 共享机制说明 与 加密文档,当你把集合共享给另一位 Ente 用户时,完整流程如下:

  1. 你的设备使用接收者的公钥加密集合的分享密钥;
  2. 只有接收者的设备能够解密这把密钥;
  3. 接收者在自己的 Locker 应用中收到共享集合;
  4. Ente 的服务器始终接触不到解密后的内容

这背后的密钥体系是:Locker 为每个集合生成独立的加密密钥(Collection keys),由此可以实现安全共享而不暴露你的主密钥——这是 加密机制 中强调的共享安全基石。所有共享信息(包括分享关系本身)均在加密范围内,Locker 对条目标题、内容、上传文件、集合名称、元数据以及共享信息执行全量端到端加密。

从源码层面可以进一步印证这一加密流程。Web 端共享服务 collection-sharing.ts 中,shareCollection的实现依次完成四件事:

// 1. 从本地缓存读取集合记录并解密集合密钥 const collectionKey = await decryptCollectionKey(collectionRecord); // 2. 根据邮箱获取接收者的公钥 const publicKey = await getPublicKey(email); // 3. 用接收者公钥对集合密钥做 box seal(非对称加密) const encryptedKey = await boxSeal(collectionKey, publicKey); // 4. 将密文与共享关系提交到服务端 const res = await fetch(await apiURL("/collections/share"), { ... });

请求体中携带collectionIDemail、角色role: "VIEWER"以及encryptedKey。服务端一侧的请求模型 collection.go 中,EncryptedKey字段带有binding:"required"约束,说明服务端只负责保存这串已经用接收者公钥封装好的密文,自身无法解读集合内容。

因此可以总结:服务端永远只会存储密文密钥,解密只可能发生在接收者设备上;这正是「Ente 的服务器永远无法访问解密内容」这一承诺的工程实现。

共享一个集合:逐步操作

按照官方文档 share-with-users.md 与 sharing/index.md 的操作指引,共享集合的标准步骤为:

  1. 打开要共享的集合;
  2. 点击共享按钮;
  3. 选择Share with Ente user
  4. 输入对方的 Ente 邮箱地址;
  5. 点击Share

共享成功后,集合中的全部条目都会被共享给该用户。若对方尚未使用 Locker,可先引导其完成 安装与注册(其邮箱必须是已注册的 Ente 账户)。

Web 端共享抽屉组件 LockerCollectionShareDrawer.tsx 揭示了输入邮箱时的一系列客户端校验与错误处理,可作为排障参考:

  • 邮箱格式校验:使用EMAIL_PATTERN = /^[^\s@]+@[^\s@]+\.[^\s@]+$/正则校验,非法邮箱提示enterValidEmail
  • 不能共享给自己:若邮箱与当前用户相同,提示cannotShareWithYourself
  • 不能重复添加:若该邮箱已在共享列表中,提示viewerAlreadyHasAccess
  • 402 错误:提示sharingRequiresPaidPlan(共享功能需要付费计划支持);
  • 404 错误:提示viewerEmailNotOnEnte,即该邮箱不是已注册的 Ente 账户。

因此,当共享失败时,可以优先核对:对方是否注册了 Ente 账户、当前账户是否满足共享的套餐要求、邮箱是否输入正确。

共享单个条目

Locker 不允许直接向其他 Ente 用户共享单个条目(参见 FAQ:能否共享单个条目)。有两种替代方案:

  1. 加入集合再共享:把该条目加入(或新建)一个集合,然后将整个集合共享给目标用户;
  2. 创建公共链接:为条目生成 公共链接,任何持有链接的人(无需 Ente 账户)都可在浏览器中查看。

方案一保留了端到端加密的私密性,适合与特定用户私密共享;方案二牺牲了隐私(链接可被转发),适合与不使用 Ente 的人分享。在 共享方式概览 的对比表中可以看到,Locker 三类共享能力划分明确:

内容与 Ente 用户共享公共链接Ente Paste
集合
条目
文本

其中文本可通过 Ente Paste 以一次性链接分享。

管理共享集合:查看与移除访问

查看谁有访问权限

  1. 打开共享集合;
  2. 点击共享按钮;
  3. 查看拥有访问权限的人员列表。

Web 端实现中,fetchCollectionSharees通过GET /collections/sharees?collectionID=...拉取共享者列表(见 collection-sharing.ts)。共享抽屉会把「所有者」与「共享参与者」分组展示,当前用户会被置顶排序,参与者头像与显示名通过通讯录服务解析(参见 LockerCollectionShareDrawer.tsx)。

移除某个用户的访问权限

  1. 打开共享集合;
  2. 点击共享按钮;
  3. 点击该用户邮箱右侧的三个点菜单;
  4. 选择Remove access
  5. 确认移除。

对应后端调用为POST /collections/unshare(携带collectionIDemail),前端在确认对话框中二次确认后执行(collection-sharing.ts、LockerCollectionShareDrawer.tsx)。根据 FAQ:撤销访问的后果,移除后对方立即失去查看能力,共享集合会从对方的 Locker 中消失;但公共链接不受影响,需要单独删除。

此外,共享参与者也可以主动离开共享集合POST /collections/leave/{collectionID}),这与移除访问是两条不同的路径。

接收共享集合

当别人向你共享集合时,接收端体验如下(见 share-with-users.md):

  1. 你会收到一条通知;
  2. 共享集合出现在你的Shared with me区域;
  3. 点击即可查看共享的条目。

接收后你拥有的是只读访问:共享集合仅所有者可以增改条目,接收者无法添加或修改(见 FAQ:viewer 能否编辑)。

共享内容的生命周期:更新、删除与账户注销

理解共享内容的后续行为,有助于避免数据丢失或权限误解。以下是 共享 FAQ 中整理的边界场景:

更新共享条目

  • 与用户共享:你更新条目后,接收者下次打开时看到最新内容;更新不会发送通知;
  • 公共链接:访问者打开链接时看到的是当前版本。

删除共享集合

  • 你是所有者:集合从所有共享用户的账户中移除,他们失去访问权;
  • 你是接收者:只是将自己从共享集合中移出,其他用户与所有者不受影响。

删除共享集合时,其中的条目与普通集合遵循相同规则:可以选择保留条目或连同删除(删除的条目进入回收站)。

所有者注销账户

如果所有者删除自己的 Ente 账户,其全部共享集合将对接收者不可访问。如需长期保留访问,建议:

  • 在注销前请所有者转移所有权;
  • 对重要的共享条目提前创建自己的副本。

与公共链接的对比:如何选择

在动手共享之前,先明确两种方式的适用边界(参见 sharing/index.md 与 public-links.md):

维度与 Ente 用户共享公共链接
接收方是否需要 Ente 账户需要不需要
查看方式Locker 应用内任意浏览器
加密方式集合密钥用接收者公钥封装解密密钥内嵌于 URL 片段(fragment)
服务器可见性只存密文密钥在 URL 片段中,不会发送给服务器
访问控制可逐个移除、可离开仅能整体删除链接
典型场景家人、同事间的私密共享向不使用 Ente 的人分享

关于公共链接的一个常见认知点是「公共链接是否端到端加密」:内容在服务器上保持加密,但由于解密密钥就写在链接里,任何拿到完整链接的人都能解密查看(见 FAQ:公共链接加密)。因此公共链接适合非敏感内容,用完即删。

安全建议与最佳实践

结合 家庭设置指南 与 安全 FAQ,给出以下实践建议:

  1. 按集合粒度规划共享:为「家庭文件」「医疗」「应急信息」等建立独立集合,再按成员逐个共享,避免共享整个账户;
  2. 定期审查共享列表:在共享抽屉中检查谁仍拥有访问权限,及时移除不再需要的人;
  3. 不要在公共链接中放敏感信息:密码、证件扫描件等敏感条目应使用「与用户共享」,并仅在安全渠道传递;
  4. 删除不再使用的公共链接:链接可被任意转发,删除后立即失效;
  5. 共享集合对接收者是只读的:如果需要共同维护文档,接收者应在自己的账户中保存副本或自行建立集合。

进一步阅读

  • 共享功能总览:三种共享方式与适用范围对比
  • 公共链接:面向非 Ente 用户的浏览器分享
  • 共享 FAQ:共享加密、撤销访问、账户注销等边界场景
  • 加密机制:Locker 的端到端加密与密钥体系
  • 集合:集合的创建、组织与共享入口
  • 家庭设置指南:面向家庭场景的完整共享与继承方案
  • 源码实现:Web 共享服务、共享抽屉组件、服务端请求模型、Rust 密钥封装实现

【免费下载链接】ente💚 End-to-end encrypted cloud for everything.项目地址: https://gitcode.com/GitHub_Trending/en/ente

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

立即咨询