Ente 端到端加密云平台全景入门:Photos、Auth、Locker 产品矩阵与加密架构解析
Ente(发音 en-tay)是一个完全开源的端到端加密云平台,目标是让用户在不信任服务商的前提下,也能在云端私密、可靠、安全地存储数据。本篇指南以仓库根目录的 docs/docs/index.md 为骨架,结合 README.md、architecture/README.md 及各产品文档,系统介绍 Ente 的产品矩阵(Photos、Auth、Locker)、加密架构核心原理、快速上手与自托管路径,以及贡献与支持渠道。读完你将掌握 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,二者都永不离开设备。
上传流程:
- 每个文件及其元数据用随机生成的
fileKey加密; - 每个
fileKey用其所属集合的collectionKey加密(集合不存在则新建并随机生成collectionKey,集合元数据如名称、路径等也用该 key 加密); - 每个
collectionKey再用你的masterKey加密; - 上述全部密文推送到服务器存储。
下载流程则是逆序解密:先用 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):注册时生成,
recoveryKey与masterKey互相加密并存于服务器。忘记密码时,在完成邮箱验证后输入recoveryKey,客户端用它解密masterKey,成功后即可设置新密码(派生新keyEncryptionKey并重新加密上传masterKey); - 一次性令牌(oneTimeToken):验证邮箱归属时由服务器生成,短时有效且只能使用一次;
- 认证令牌(authToken):成功认证后由服务器生成,用于访问私有 API,且返回时会被你的
publicKey加密(encryptedAuthToken),只有你的privateKey能解密。因此,只有同时验证了邮箱归属并且知道密码的人,才能获得可用于认证的有效authToken; - 令牌加密(Token Encryption):Auth 应用遵循相似架构,每个令牌用随机
tokenKey加密,tokenKey再用authKey加密(authKey由masterKey加密)。下载时依次用masterKey→authKey→tokenKey逐层解密。
实现细节:libsodium 与 Argon2
architecture/README.md 的 Implementation Details 一节指出,Ente 依赖密码学库 libsodium 的高层 API:
crypto_secretbox_keygen:生成所有随机密钥(masterKey、recoveryKey、collectionKey、fileKey及 Auth 的authKey、tokenKey,均为 256 位);crypto_box_keypair:生成publicKey/privateKey密钥对;crypto_pwhash:从密码派生keyEncryptionKey,使用OPSLIMIT_SENSITIVE与MEMLIMIT_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.go 与 cli/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.yaml 与 museum.yaml 默认值。仓库中对应的实际配置模板可参考 server/config/compose.yaml、server/config/example.yaml 与 server/config/example.env,完整的安装、配置与运维说明见 docs/docs/self-hosting/。
自托管后,移动端应用可通过自定义服务器端点连接到你自己的实例(相关步骤见 docs/docs/self-hosting/installation/post-install/)。数据迁移方面,可从 Google Takeout 等服务导入照片到 Ente Photos(见 迁移指南),也可从其他验证器提供商导入验证码到 Ente Auth(见 Auth 迁移指南)。
历史与命名:为什么叫"Ente"
README.md 与 docs/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 验证器,还是希望深度研究一套生产级的端到端加密实现,本仓库都提供了完整可验证的答案。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust4.21 K638- DDeepSeek-V4.1-FlashDeepSeek-V4.1-Flash 是一个多模态混合专家(MoE)模型,拥有 5520 亿骨干参数,并支持最多一百万 token 的上下文长度。该模型原生支持图像和文本输入,并以自回归方式生成文本Python240
jforgamejforgame是一个一站式游戏服务器开发框架。包含游戏服务器开发所需要的各种组件,比如网关,socket服务端与客户端,自定义高效消息编解码,游戏热更新,游戏通用工具等等。包含游戏服,跨服,匹配服,后台管理系统等实现,同时提供大量业务案例以供学习。亦可用于其他socket应用,例如及时聊天等。Java291
fizz-gateway-nodeAn Aggregation API Gateway in Java . FizzGate 是一个基于 Java开发的微服务聚合网关,是拥有自主知识产权的应用网关国产化替代方案,能够实现热服务编排聚合、自动授权选择、线上服务脚本编码、在线测试、高性能路由、API审核管理、回调管理等目的,拥有强大的自定义插件系统可以自行扩展,并且提供友好的图形化配置界面,能够快速帮助企业进行API服务治理、减少中间层胶水代码以及降低编码投入、提高 API 服务的稳定性和安全性。Java210
certd开源SSL证书管理工具;全自动证书申请、更新、续期;通配符证书,泛域名证书申请;证书自动化部署到阿里云、腾讯云、主机、群晖、宝塔;https证书,pfx证书,der证书,TLS证书,nginx证书自动续签自动部署JavaScript190
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python300