首页
/ Ente 端到端加密云平台全景入门:Photos、Auth、Locker 产品矩阵与加密架构解析

Ente 端到端加密云平台全景入门:Photos、Auth、Locker 产品矩阵与加密架构解析

2026-09-10 10:21:24作者:薛曦旖Francesca

Ente(发音 en-tay)是一个完全开源的端到端加密云平台,目标是让用户在不信任服务商的前提下,也能在云端私密、可靠、安全地存储数据。本篇指南以仓库根目录的 docs/docs/index.md 为骨架,结合 README.mdarchitecture/README.md 及各产品文档,系统介绍 Ente 的产品矩阵(Photos、Auth、Locker)、加密架构核心原理、快速上手与自托管路径,以及贡献与支持渠道。读完你将掌握 Ente 平台的整体脉络、三大产品的定位差异,以及其端到端加密体系从密钥派生到数据加密的完整链路。

Ente 端到端加密架构总览图,展示数据在上传前即用设备本地密钥加密

什么是 Ente:一个端到端加密的云平台

根据 docs/docs/index.md 的官方定义,Ente 是一个端到端加密(end-to-end encrypted)平台,用于在云端私密、可靠、安全地存储数据,用户无需信任服务提供商。其核心理念是:你的数据在离开设备之前就已被加密,密钥只掌握在你自己手中。

在这一底层平台之上,Ente 已经开发和发布了三款应用:

  • Ente Photos —— Google Photos 和 Apple Photos 的端到端加密替代品;
  • Ente Auth —— Authy 的免费 2FA(两步验证)替代品;
  • Ente Locker —— 面向文档和敏感信息的安全存储空间。

这三款产品共享同一套加密基础设施和账号体系。仓库根目录的 README.md 进一步说明:这是一个 monorepo(单仓库),包含全部源代码——覆盖 iOS / Android / F-Droid / Web / Linux / macOS / Windows 各平台的客户端应用,以及驱动它们的服务端。

作为可信度佐证,README 中声明其源代码与密码学实现曾接受过多家外部机构的独立审计,包括德国网络安全公司 Cure53、法国密码学专家 Symbolic Software,以及印度渗透测试公司 Fallible。这些审计结论也呼应了 architecture/README.md 中"我们的源代码已经过审计,以验证这些密钥仅对你可用"的表述。

产品矩阵:三款应用与更多探索

Ente Photos:旗舰产品

README.md 将 Ente Photos 描述为旗舰产品,其功能清单包括:

  • 3 倍数据复制(跨多家云厂商冗余存储);
  • 人脸识别与语义搜索;
  • 私有分享与协作相册;
  • 家庭计划(Family Plans);
  • 便捷的导入与更便捷的导出(export);
  • 后台自动上传(background uploads)。

这一切都建立在跨平台端到端加密之上。Ente Photos 为付费服务,但提供 10GB 免费存储额度;用户也可以克隆本仓库选择自托管。详细用户指南见 docs/docs/photos/index.md,其中列出了 Getting Started、Features、FAQ 与 Troubleshooting 四类帮助文档,以及 Discord 社区、support@ente.com 邮件、GitHub issue 等支持渠道。

Ente Auth:免费的 2FA 验证器

README.md 中有一段产品缘起:约两年前,在构建 Ente Photos 的过程中,团队发现市面上缺乏开源的端到端加密验证器应用,而他们恰好已具备构建它的全部基础模块,于是便动手开发了 Ente Auth。

Ente Auth 官方文档 将其定义为"免费的、跨平台的、端到端加密的验证器应用",用于安全存储你的 2FA 验证码。它与传统验证器(如 Authy)的关键差异在于:所有验证码令牌在离开设备前均已加密。README 明确声明 Ente Auth 免费,且将永远免费

Ente Locker:重要文档与敏感信息的保险箱

Ente Locker 官方文档 将其定位为"存储、分享和传承你最重要数字信息的私密空间"。它同样端到端加密,适用于 iOS、Android 及 Web。

Locker 的可存储内容涵盖:

  • 身份文件:护照、身份证、驾照、出生证明;
  • 财务记录:纳税申报、账单、合同、保险单;
  • 账户凭据:你最不能丢失的重要账户信息;
  • 医疗记录:保险卡、疫苗接种记录、处方;
  • 实体文件位置:追踪重要纸质文件的存放位置。

Locker 最具特色的功能是 Legacy(遗产传承):你可以添加可信联系人,或创建带有实体恢复单的 Legacy Kits;当恢复流程启动时你会收到通知,并可在等待期内阻止未经授权的访问尝试,从而确保家人在意外发生时能访问重要信息,同时防止未经授权者窃取。官方文档强调"没有其他加密存储应用提供此功能"。

Locker 的定价在 docs/docs/locker/index.md 中有明确说明:

  • 免费计划:最多 100 个项目与 1GB 总存储;
  • 付费计划(任一 Ente 订阅):最多 1000 个项目与 10GB 总存储(Locker 存储与 Photos 存储相互独立,任何 Ente Photos 订阅都包含 Locker 的付费上限)。

Locker 与现有工具是互补而非替代关系:密码管理器用于日常账户,Locker 用于最不能丢失的重要账户;Ente Photos 存照片记忆,Locker 存护照、税单等敏感扫描件;Ente Auth 存 TOTP 验证码,Locker 存 2FA 备份与恢复码;云盘存日常文件,Locker 存不希望被云厂商扫描的敏感文档。

生态延伸:Ensu 与更多

除三大产品外,仓库还包含 Ensu——Ente 的本地优先 AI 聊天应用,直接在设备上运行大语言模型(LLM),无需账号、无追踪、无限流、零成本,推理全部发生在设备本地 CPU/GPU 上,对话永不离开设备。它是 Ente Labs 的实验性项目,目前免费。从仓库结构还可以看到 Ente Cast(投屏)、Ente Paste 等更多实验性能力,以及覆盖桌面端(desktop/)、移动端(mobile/)、Web 端(web/)、Rust 核心库(rust/)和 CLI 工具(cli/)的完整工程体系。

加密架构核心:密钥如何保护你的数据

"端到端加密"是 Ente 平台的立身之本。architecture/README.md 用一整份文档详细解释了其密码学设计,下面按层次拆解。

第一层:主密钥体系(Key Encryption)

  • masterKey(主密钥):注册时由客户端为你生成,永远不会以未加密形式离开你的设备
  • keyEncryptionKey(密钥加密密钥):由你选择的密码派生而来,同样永不离开设备

注册时(主设备流程),你的 masterKey 会被 keyEncryptionKey 加密,得到的 encryptedMasterKey 上传至服务器存储。在新设备(次设备)登录时,服务器会把你主设备上传的 encryptedMasterKey 交还给你;你输入密码后派生 keyEncryptionKey 并解密得到原始 masterKey。若解密失败,客户端即知密码错误。由此形成的隐私推论是:只有你知道密码 → 只有你能派生 keyEncryptionKey → 只有你能访问 masterKey

第二层:数据加密(Data Encryption)

Ente 中的每项数据都属于一个 collection(集合)——它可以是文件夹(如"相机"、"截图")或相册(如某次聚会),在 Auth 中则是一个默认的根集合。每个集合有 collectionKey,每条数据有 fileKey,二者都永不离开设备。

上传流程

  1. 每个文件及其元数据用随机生成的 fileKey 加密;
  2. 每个 fileKey 用其所属集合的 collectionKey 加密(集合不存在则新建并随机生成 collectionKey,集合元数据如名称、路径等也用该 key 加密);
  3. 每个 collectionKey 再用你的 masterKey 加密;
  4. 上述全部密文推送到服务器存储。

下载流程则是逆序解密:先用 masterKey 解密 collectionKey,再用 collectionKey 解密 fileKey,最后用 fileKey 解密文件与元数据。整条链路的隐私保证层层递进:只有你能访问 masterKey,因此只有你能解密 collectionKey,进而只有你能解密 fileKey 和文件本身。

第三层:分享(Sharing)

分享复用数据加密的框架,区别在于把集合的 collectionKey 用接收者的 publicKey(公钥) 加密后下发。注册时应用会生成一对 publicKey/privateKey:公钥明文存储于服务器,私钥则被 masterKey 加密后存于服务器(encryptedPrivateKey)。

接收者侧的流程:用 privateKey 解密 collectionKey → 用 collectionKey 解密各 fileKey → 用 fileKey 解密文件。Verification ID 是公钥的人类可读表示,双方可在应用内比对,若一致则验证了两端之间端到端加密链路的安全性。

第四层:恢复与认证(Recovery & Authentication)

  • 恢复密钥(recoveryKey):注册时生成,recoveryKeymasterKey 互相加密并存于服务器。忘记密码时,在完成邮箱验证后输入 recoveryKey,客户端用它解密 masterKey,成功后即可设置新密码(派生新 keyEncryptionKey 并重新加密上传 masterKey);
  • 一次性令牌(oneTimeToken):验证邮箱归属时由服务器生成,短时有效且只能使用一次;
  • 认证令牌(authToken):成功认证后由服务器生成,用于访问私有 API,且返回时会被你的 publicKey 加密(encryptedAuthToken),只有你的 privateKey 能解密。因此,只有同时验证了邮箱归属并且知道密码的人,才能获得可用于认证的有效 authToken
  • 令牌加密(Token Encryption):Auth 应用遵循相似架构,每个令牌用随机 tokenKey 加密,tokenKey 再用 authKey 加密(authKeymasterKey 加密)。下载时依次用 masterKeyauthKeytokenKey 逐层解密。

实现细节:libsodium 与 Argon2

architecture/README.md 的 Implementation Details 一节指出,Ente 依赖密码学库 libsodium 的高层 API:

  • crypto_secretbox_keygen:生成所有随机密钥(masterKeyrecoveryKeycollectionKeyfileKey 及 Auth 的 authKeytokenKey,均为 256 位);
  • crypto_box_keypair:生成 publicKey/privateKey 密钥对;
  • crypto_pwhash:从密码派生 keyEncryptionKey,使用 OPSLIMIT_SENSITIVEMEMLIMIT_SENSITIVE 参数;若因内存不足失败,会逐步将前者加倍、后者减半重试;当内存上限被降至低于服务器接受的 128 MiB 下限时,客户端将不允许该设备注册。内部使用 Argon2 v1.3
  • crypto_secretbox_easy:加密各类密钥,内部采用 XSalsa20 流密码 + Poly1305 MAC;
  • crypto_secretstream_*:分块加密文件数据(Auth 中为令牌数据),内部采用 XChaCha20 + Poly1305;
  • crypto_box_seal:分享时用接收者公钥加密 collectionKey、以及加密下发的 authToken,内部使用 X25519 密钥交换 + XSalsa20 + Poly1305;
  • randombytes_buf:每次哈希/加密都生成新的盐与随机数;
  • Verification ID 通过将公钥的 SHA-256 值转换为 BIP39 助记词短语生成。

在仓库中,这套密码学能力被封装为跨平台实现:rust/ 目录下的 Rust 核心(如 rust/crates/core/rust/crates/ensu-crypto/)通过 FRB、N-API、UniFFI、WASM 等绑定(见 rust/bindings/)为各端客户端提供服务;CLI 工具中则有 Go 实现的加解密逻辑,例如 cli/internal/crypto/crypto.gocli/internal/crypto/stream.go,并配有 cli/internal/crypto/crypto_test.go 测试。

快速上手:客户端使用与自托管部署

从客户端开始

根据 docs/docs/index.md 的 Getting Started 建议:阅读 Ente Photos 文档Ente Auth 文档Ente Locker 文档,即可获取各平台安装指引、功能说明与用法。安装后的核心流程都非常简单——以 Auth 为例,添加账号即可开始保存 2FA 验证码;以 Locker 为例,依次完成安装、注册(可用既有 Ente 账号)、添加第一条文档/笔记/凭据、家庭设置四个步骤。

自托管快速入门

若想自己部署整套服务,自托管快速入门文档 提供了官方路径。它强调:Ente 的完整源代码(包括服务端)均已开源,且与生产环境运行的是同一套代码

系统要求

  • 至少 1GB 内存与 1 个 CPU 核心;
  • Docker Compose。

一键启动命令

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ente/ente/main/server/quickstart.sh)"

该命令会在当前目录创建 my-ente 目录,拉取所需镜像并提示启动容器集群。启动后即可访问各 Web 应用:

  • Ente Photos Web 应用:http://<机器IP>:3000(本机可用 http://localhost:3000);
  • 公共相册链接由独立的 Albums 应用提供:http://<机器IP>:3002
  • Ente Auth:http://<机器IP>:3003

邮箱验证码需通过 sudo docker compose logs 查看集群日志获取。官方提醒:若要修改端点、存储桶配置或服务器配置,请修改 my-ente 下的 compose.yamlmuseum.yaml 默认值。仓库中对应的实际配置模板可参考 server/config/compose.yamlserver/config/example.yamlserver/config/example.env,完整的安装、配置与运维说明见 docs/docs/self-hosting/

自托管后,移动端应用可通过自定义服务器端点连接到你自己的实例(相关步骤见 docs/docs/self-hosting/installation/post-install/)。数据迁移方面,可从 Google Takeout 等服务导入照片到 Ente Photos(见 迁移指南),也可从其他验证器提供商导入验证码到 Ente Auth(见 Auth 迁移指南)。

历史与命名:为什么叫"Ente"

README.mddocs/docs/index.md 记录了平台的历史:Ente 由 Vishnu Mohandas(Ente 的 CEO)创立,源于对大科技公司隐私问题的关切。其核心判断是:大科技公司没有动力自我纠正,而通过端到端加密的跨平台应用,人们可以在不牺牲功能的前提下重新夺回对自己数据的控制权。

命名背后有一个有趣的双关故事:

  • 在 Vishnu 的母语 马拉雅拉姆语(Malayalam) 中,"ente" 意为 "我的",因此 "Ente Photos" 字面意思就是"我的照片";
  • 后来他发现 "ente" 在德语中意为"鸭子"。这个意外的巧合促成了最终定名,并催生了吉祥物 "Ducky"(鸭子),象征着社区与团队的趣味性和友好氛围。

docs/README.md 还说明,这些帮助文档本身就是开源项目的一部分,社区成员可以以类似维基的方式直接编辑,实时站点在 PR 合并后数分钟内更新。

贡献、社区与支持

docs/docs/index.md 指出,支持 Ente 不一定要会编程:传播口碑、反馈意见、报告 bug、帮助翻译、贡献文档与社区指南都是重要的贡献方式。仓库根目录的 CONTRIBUTING.md 进一步列出了贡献路径:

  • 传播口碑:被官方视为"最具影响力的贡献";
  • 参与社区:Ente 的开发者和用户聚集在 Discord、Mastodon、X/Twitter 与 GitHub Discussions 等平台;
  • 翻译:通过 Crowdin 项目为移动端和 Web/桌面端贡献本地化字符串(约 90% 翻译完成后应用会启用该语言);
  • 撰写文档:帮助文档以"类维基"方式开放编辑,详见 docs/README.md
  • 代码贡献:官方建议保持改动小而聚焦,涉及 UX 变更应先沟通;特别强调"写代码不是瓶颈,验证才是",请确保测试所触碰的一切并附上前后对比截图。

获取帮助的渠道同样明确:若产品使用中遇到文档未覆盖的问题,可发送邮件至 support@ente.com;社区支持可在 Discord 服务器提问。若发现安全漏洞,应按 SECURITY.md 中的负责任披露流程,通过邮件或安全公告渠道私密报告,而不要公开 issue。

总结

docs/docs/index.md 出发可以看到,Ente 是一个以"端到端加密"为核心、以"隐私不应以牺牲功能为代价"为理念的全栈开源平台:Photos、Auth、Locker 三大产品共享同一套分层密钥加密体系(masterKey → collectionKey → fileKey),并依托 libsodium、Argon2 等成熟密码学原语实现;全部源码以 monorepo 形式开源,支持一键自托管;同时构建了翻译、文档、社区等多种低门槛贡献通道。无论你是想寻找 Google Photos 的私密替代品、一个永不收费的 2FA 验证器,还是希望深度研究一套生产级的端到端加密实现,本仓库都提供了完整可验证的答案。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.15 K
2.78 K
kernelkernel
deepin linux kernel
C
34
18
docsdocs
暂无描述
Markdown
904
5.82 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
931
1.86 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
862
1.36 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.95 K
1.03 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.38 K
1.47 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
535
605
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
549
398
leetcodeleetcode
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Markdown
77
23