Ente Locker 共享功能完全指南:端到端加密下的用户共享、公开链接与 Ente Paste
【免费下载链接】ente💚 End-to-end encrypted cloud for everything.项目地址: https://gitcode.com/GitHub_Trending/en/ente
本指南系统讲解 Ente Locker 的全部共享能力:与 Ente 用户安全共享集合(端到端加密)、通过公开链接与任何人(包括非 Ente 用户)分享集合与单个条目,以及使用 Ente Paste 快速分享一次性敏感文本。读完本文,你将掌握三种共享方式的适用场景、完整操作流程、密钥流转与安全边界,并能在真实使用中做出正确的共享决策。
共享的三种方式总览
Ente Locker 的所有共享数据都保持端到端加密(E2EE)。数据在设备上加密后才上传到 Ente 服务器,服务器与第三方都无法读取明文内容。围绕这一原则,Locker 提供了三种互补的共享途径:
| 共享方式 | 目标对象 | 是否需要对方注册 Ente | 典型场景 |
|---|---|---|---|
| 与 Ente 用户共享集合 | 拥有 Ente 账号的人 | 是 | 家庭成员、可信协作者之间的私密共享 |
| 集合公开链接 | 任意人 | 否 | 在浏览器中分享一组条目的只读视图 |
| 条目公开链接 | 任意人 | 否 | 把某个具体文档单独发给不使用 Ente 的人 |
| Ente Paste | 任意人 | 否 | 一次性、24 小时自毁的短文本传递 |
在开始之前,需要先理解 Locker 的共享粒度模型:与 Ente 用户共享的最小单位是"集合"(Collection),而不是单个条目。若想与某个 Ente 用户共享单个条目,需先把条目放入某个集合,再共享整个集合;而公开链接则同时支持条目级与集合级两种粒度。
与 Ente 用户共享集合
工作原理
当您把一个集合共享给另一位 Ente 用户时,底层发生的流程是:
- 您的设备使用对方的公钥加密共享密钥;
- 只有对方的设备能够解密这些密钥;
- 对方在自己的 Locker 应用中收到共享集合;
- Ente 服务器全程无法接触解密后的内容。
这个流程在 Locker 的共享界面中有直接的源码对应。在 share_collection_bottom_sheet.dart 中,所有者通过"添加邮箱"入口(addEmail)发起共享,随后界面会展示所有参与者的列表(_buildShareesList),每个参与者显示其邮箱、头像以及角色徽标,并在人数超过 4 人时自动出现滚动条——这与文档所述"查看谁有访问权限"的功能一一对应。
共享一个集合
- 打开要共享的集合;
- 点击共享按钮;
- 选择Share with Ente user;
- 输入对方的 Ente 邮箱地址;
- 点击Share。
共享成功后,该集合中的所有条目都会一并共享给对方。
管理共享集合
查看谁有访问权限:打开已共享的集合 → 点击共享按钮 → 查看访问者列表。共享底部弹窗(ShareCollectionBottomSheet)的标题即"共享集合"(shareCollection),其"已共享给"(sharedWith)区块就是访问者列表的具体实现。
移除访问权限:打开集合 → 点击共享按钮 → 点击对方邮箱右侧的三个点 → 选择Remove access→ 确认移除。
接收共享集合
当别人共享集合给您时:
- 您会收到通知;
- 共享集合出现在您的Shared with me(与我共享)分区中;
- 点击即可查看共享的条目。
通过公开链接分享集合与条目
工作原理
公开链接(Public Links)让您可以把单个条目或整个集合分享给任何人,对方无需 Ente 账号,直接在浏览器中打开即可查看。其安全模型的核心是:
- 创建链接时生成一个包含解密密钥的唯一 URL;
- 任何持有链接的人都能在浏览器中查看内容;
- 密钥位于 URL 的 fragment(
#之后)部分,永远不会发送给 Ente 服务器; - 查看内容不需要任何 Ente 账号。
这一点在源码中有直接佐证。在 collections_service.dart 的getPublicUrl方法中,公开 URL 由服务端生成的url与 Base58 编码后的集合密钥拼接而成:
String getPublicUrl(Collection c) { final PublicURL url = c.publicURLs.firstOrNull!; final Uri publicUrl = Uri.parse(url.url); final cKey = getCollectionKey(c.id); final String collectionKey = Base58Encode(cKey); final String urlValue = "${publicUrl.toString()}#$collectionKey"; return urlValue; }密钥被编码进#后的 fragment,浏览器不会把 fragment 随请求发送到服务器,从而实现了"链接在手、密钥在手"的模型。
公开链接的可配置属性
公开链接并不只是一个裸 URL。在 Locker 的PublicURL数据模型中(见 public_url.dart),每个链接都携带一组服务端可配置的属性:
| 属性 | 类型 | 默认值 | 含义 |
|---|---|---|---|
url | String | - | 链接地址 |
deviceLimit | int | - | 允许访问的设备数上限 |
validTill | int | 0 | 过期时间戳(微秒),0 表示永不过期 |
enableDownload | bool | true | 是否允许查看者下载内容 |
enableCollect | bool | false | 是否允许向该链接投递/收集内容 |
enableJoin | bool | false | 是否允许通过链接加入集合 |
passwordEnabled | bool | false | 链接是否受密码保护 |
nonce/opsLimit/memLimit | String? / int? / int? | null | 密码加密时的密钥派生参数 |
其中hasExpiry与isExpired两个 getter 表明:当validTill非零时链接存在过期时间,过期后(validTill早于当前时间)链接即失效。管理链接的界面(ManageSharedLinkWidget,见 manage_links_widget.dart)还提供了链接过期时间与设备数上限的选择器,说明链接并非一次性创建就固定不变,而是可以持续管理。
创建公开链接
为单个条目创建:
- 长按要分享的条目;
- 点击共享按钮;
- 点击Share link;
- 复制并分享链接。
为集合创建:
- 打开要分享的集合;
- 点击共享按钮;
- 点击Share link;
- 复制并分享链接。
在共享底部弹窗的源码中,所有者操作区(_buildOwnerActions)会根据集合是否已有公开链接来切换按钮文案:没有链接时显示"创建链接"(linkLabel),已存在链接时显示"管理链接"(manageLink)。创建成功后立即把完整 URL(含 fragment 密钥)交给系统分享面板:
Future<void> _createAndSharePublicLink() async { final result = await CollectionActions.enableUrl(context, widget.collection); if (result && mounted) { setState(() {}); if (_hasPublicLink) { final url = CollectionService.instance.getPublicUrl(widget.collection); await shareText(url, context: context); } } }另外值得注意的是,_buildOwnerActions中公开链接入口仅对非"未分类"(uncategorized)类型的集合显示——未分类集合不提供公开链接。
删除公开链接
删除条目的链接:
- 长按条目;
- 点击共享按钮;
- 点击Delete link;
- 确认删除。
删除集合的链接:
- 打开集合;
- 点击共享按钮;
- 点击Delete link;
- 确认删除。
删除后,链接立即失效,任何人都无法再访问。
用 Ente Paste 分享敏感短文本
当您需要把一段敏感文本快速交给他人、又不希望留下持久副本时,Locker 会引导您使用 Ente Paste:
- 文本在浏览器中完成加密,Ente 只见过密文;
- 链接在被读取一次后自动销毁,或在24 小时后过期,先到先失效;
- 每次分享都是一次性链接,非常适合密码、验证码、临时凭据等场景。
Locker 的定位是"存储"(storage),Paste 的定位是"传输"(transit)——两者配合使用。完整的 Paste 使用说明参见 Ente Paste 介绍 与 发送你的第一条 Paste,其加密原理见 加密如何工作,常见问题见 Ente Paste FAQ。
内容共享能力对照表
不同内容类型支持的共享方式各有不同,官方给出的对照关系如下:
| 内容 | 与 Ente 用户共享 | 公开链接共享 | Ente Paste |
|---|---|---|---|
| 集合(Collections) | 是 | 是 | 否 |
| 条目(Items) | 否 | 是 | 否 |
| 文本(Text) | 否 | 否 | 是 |
据此可以总结出选择原则:想与其他 Ente 用户共享,请先把条目组织进集合再共享集合;想与任何人(包括非 Ente 用户)共享条目或集合,请创建公开链接;想共享一段短文本,请使用 Ente Paste。
安全模型与注意事项
与 Ente 用户共享:密钥按账号单独加密
共享给另一位 Ente 用户时,解密密钥会专门为对方的账号加密,只有对方的设备可以解密查看内容。Ente 员工、被入侵的服务器、中间人攻击者都无法读取明文。
公开链接:密钥在 URL 中,链接即权限
公开链接把解密密钥内嵌在 URL 中(位于 fragment),这意味着:
- 任何拿到链接的人都能查看内容,链接可以被随意转发;
- 无法追踪"谁"查看了链接——Ente 为保护隐私不追踪查看者身份,只能告知有多少设备访问过该链接;
- 如果通过公开链接分享了密码等敏感信息,请务必在使用后删除链接;
- 链接不用时应及时删除。
撤销与生命周期
- 当您移除某个 Ente 用户的访问权限后,对方立即失去查看能力,内容从其 Locker 中消失;
- 删除公开链接后,链接立即失效;公开链接的撤销与用户权限的撤销相互独立,需要分别处理;
- 更新已共享条目时,接收方下次打开即可看到最新内容,但不会收到更新通知;公开链接的查看者下次访问时看到的也是当前版本;
- 若您删除一个已共享的集合:作为所有者,集合会从所有共享用户的账号中移除;作为查看者,您只是把自己从共享集合中移除,所有者与其他用户不受影响;
- 如果所有者删除账号,其所有共享集合将对共享用户不可访问。需要持续访问时,应提前请所有者转移所有权,或自行保存重要条目的副本。
相关阅读
- 与用户共享集合的详细教程
- 公开链接的详细教程
- 共享 FAQ:涵盖加密如何工作、能否查看访问者、如何撤销访问等高频问题
- 加密原理:XChaCha20/XSalsa20 + Poly1305 + Argon2id 的底层实现
- Ente Paste 文档:一次性文本共享的完整说明
【免费下载链接】ente💚 End-to-end encrypted cloud for everything.项目地址: https://gitcode.com/GitHub_Trending/en/ente
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考