端到端加密的数字信托与隐私托管平台 | End-to-End Encrypted Digital Trust & Privacy Custody Platform
Aeterna 是一个注重隐私和安全的数字信托托管平台。通过零知识加密架构和心跳监测机制,确保您的重要信息在 90 天失联后安全传递给指定的收信人。所有加密操作在浏览器端完成,服务器仅存储密文,真正实现零知识安全。
Aeterna 采用客户端加密方案,确保服务器对用户数据一无所知。密钥对在浏览器中生成,私钥由用户下载保管,服务器仅存储加密后的密文。即使数据库完全泄露,攻击者也无法解密任何内容。
技术实现:使用 ECC (椭圆曲线加密) 生成密钥对,采用 AES-GCM 对称加密保护信托内容,私钥以 PKCS#8 格式导出并由用户离线保管。图片自动转换为 Base64 后加密,确保完整性。
系统自动追踪用户活跃状态,每次登录更新心跳时间戳。当用户连续 90 天未登录时,系统将自动向指定收信人发送加密信托包。在失联前的第 75、83、89 天,系统会发送提醒邮件,用户可通过邮件链接重置心跳,避免误触发。
工作原理:后台定时任务每日扫描心跳记录表,计算距离上次活跃的天数。分阶段邮件提醒让用户有充足时间响应,确保只在真正失联时触发分发。
参考主流邮件客户端设计的三段式布局,让信托创建过程直观易懂。用户可以创建多份独立的信托(最多 2 份),为每份信托指定不同的收信人(最多 2 位),支持富文本编辑和图片上传。主题和正文分离,信息层次清晰。
使用限制:为确保服务质量和存储成本,每个用户最多创建 2 条信托,最多添加 2 位收信人。这些限制在后端和前端都有强制执行。
收信人无需注册或登录,可直接访问解密页面。支持文本粘贴和文件拖拽两种输入方式,所有解密操作在浏览器端完成,保护隐私。解密前会先显示加密密文预览,证明数据确实存在且未被篡改。
安全设计:解密页面不与服务器通信,所有操作都在本地完成。收信人需要同时拥有私钥和加密数据包才能解密,确保双因素保护。
首次登录的用户会看到 5 步交互式引导流程,帮助理解完整使用流程。引导包括:欢迎页流程图、创建信托演示、强制私钥下载、添加收信人指导、以及发送私钥给收信人的最佳实践。引导完成后使用 localStorage 持久化状态,不会重复显示。
设计理念:通过渐进式引导降低学习成本,强制私钥下载环节确保用户不会遗漏关键步骤。用户可以选择跳过引导(带确认提示),但建议完整体验以理解平台工作原理。
管理员可以通过 /admin 路径访问后台,查看用户监控、信托列表、收信人列表、邮件队列等信息。支持单个删除和批量删除操作,以及用户删除功能(级联删除所有关联数据)。管理员权限通过邮箱白名单控制,确保只有授权人员可以访问。
权限控制:管理员邮箱在后端代码中硬编码,登录时自动识别并赋予 admin 角色。管理后台入口隐藏,需要直接访问 URL 才能进入。
架构理念:Aeterna 采用适配器模式(Adapter Pattern)解耦平台依赖,实现跨平台部署能力。通过抽象层定义统一接口,不同平台的具体实现作为可替换的适配器,开发者可以通过环境变量快速切换认证和存储方案。
支持的平台:
| 功能模块 | 支持的平台 | 环境变量配置 |
|---|---|---|
| 认证 | Manus OAuth(默认) Supabase Auth Clerk |
AUTH_PROVIDER=manusAUTH_PROVIDER=supabaseAUTH_PROVIDER=clerk |
| 存储 | Manus S3(默认) AWS S3 Cloudflare R2 本地文件系统 |
STORAGE_PROVIDER=manus-s3STORAGE_PROVIDER=aws-s3STORAGE_PROVIDER=cloudflare-r2STORAGE_PROVIDER=local |
部署灵活性:
- ✅ 5 分钟切换认证方案(修改 1 行环境变量)
- ✅ 10 分钟切换存储方案(修改 1 行环境变量)
- ✅ 支持 Vercel、Railway、Docker、自建服务器等多种部署方式
- ✅ 开发环境可使用本地存储,生产环境使用云服务
详细的部署指南请参考 DEPLOYMENT.md。
框架与工具:React 19 提供现代化的组件开发体验,TypeScript 确保类型安全,Wouter 作为轻量级路由解决方案。Tailwind CSS 4 配合 shadcn/ui 组件库实现一致的视觉风格。
状态管理与通信:TanStack Query (React Query) 处理服务器状态缓存和同步,tRPC 11 提供类型安全的端到端 API 通信,无需手动编写 API 类型定义。
运行时与框架:Node.js 22+ 配合 Express 4 提供稳定的服务器环境。支持 MySQL、PostgreSQL 等多种数据库,Drizzle ORM 提供类型安全的数据库操作。
认证与会话:默认使用 Manus OAuth 实现无密码邮箱登录,用户通过 Magic Link 验证身份。JWT 令牌存储在 HTTP-only Cookie 中,防止 XSS 攻击。也可切换到 Supabase Auth 或 Clerk。
密钥生成:使用 Web Crypto API 的 ECDH P-256 算法在浏览器中生成密钥对。私钥以 PKCS#8 格式导出为 PEM 编码文件,用户下载保管。
内容加密:采用 AES-GCM 256-bit 对称加密算法,提供认证加密(AEAD)特性。加密后的数据包含密文、初始化向量(IV)和认证标签,全部使用 Base64 编码存储。
| 表名 | 说明 | 关键字段 |
|---|---|---|
users |
用户表 | id, email, name, role (admin/user), created_at |
heartbeats |
心跳记录表 | id, user_id, last_active_at, status, updated_at |
wills |
信托表 | id, user_id, subject, encrypted_content, recipient_ids (JSON), public_key, encrypted_aes_key, iv |
emergency_contacts |
收信人表 | id, user_id, name, email, relationship, created_at |
email_queue |
邮件队列表 | id, recipient_email, subject, body, status, scheduled_at |
关系设计:用户与信托、收信人、心跳记录都是一对多关系。信托表的 recipient_ids 字段存储 JSON 数组,支持一份信托发送给多位收信人。删除用户时级联删除所有关联数据。
- Node.js: 22.13.0 或更高版本
- 包管理器: pnpm (推荐) 或 npm
- 数据库: PostgreSQL 14+ 或 Supabase
1. 克隆项目
git clone https://github.com/yourusername/aeterna.git
cd aeterna2. 安装依赖
pnpm install3. 配置环境变量
创建 .env 文件并配置以下变量:
# 数据库连接
DATABASE_URL=postgresql://user:password@host:5432/database
# OAuth 配置 (Manus)
VITE_APP_ID=your_app_id
OAUTH_SERVER_URL=https://api.manus.im
VITE_OAUTH_PORTAL_URL=https://oauth.manus.im
# JWT 密钥
JWT_SECRET=your_jwt_secret_min_32_chars
# 管理员邮箱 (可选,在代码中配置)
# 在 server/db.ts 中的 ADMIN_EMAILS 数组添加管理员邮箱4. 初始化数据库
pnpm db:push5. 启动开发服务器
pnpm dev访问 http://localhost:3000 查看应用。
首次登录后,系统会自动显示 5 步交互式引导:
- 欢迎页:了解平台的 3 步核心流程(创建信托 → 保存私钥 → 添加收信人)
- 创建信托:体验信托创建表单(演示用,不会真正保存)
- 下载私钥:强制下载演示私钥文件,理解私钥的重要性
- 添加收信人:了解如何指定信托接收人
- 发送私钥:学习如何安全地将私钥发送给收信人
完成引导后,可以开始正式使用平台。如需重新查看引导,可以清除浏览器 localStorage 中的 onboarding_completed 标志。
步骤说明:
- 登录账户:使用邮箱接收 Magic Link 登录,无需密码
- 添加收信人:在"管理联系人"页面添加接收人(最多 5 位)
- 创建信托:点击"我的信托"→"创建新信托"
- 填写内容:选择收件人、填写主题和正文、可选上传图片
- 生成密钥:首次创建时自动生成密钥对
- 下载私钥:务必下载并安全保存私钥文件(丢失无法找回)
- 加密保存:点击"加密并保存"完成创建
重要提示:每个用户最多创建 2 条信托。私钥是解密信托的唯一凭证,丢失后无法恢复。建议多地备份(离线存储、保险箱等)。
查看流程:
- 进入"我的信托"页面,查看已创建的信托列表
- 点击要查看的信托,默认显示加密密文预览
- 点击"输入私钥解密查看",粘贴私钥内容
- 解密后显示完整内容和图片
编辑信托:点击信托列表中的"Edit"按钮,修改后重新加密保存。编辑时需要输入私钥进行解密。
解密步骤:
- 访问解密页面:从邮件链接或直接访问
/decrypt - 准备材料:需要私钥文件和加密数据包(JSON 格式)
- 上传文件:拖拽或粘贴私钥和加密数据包
- 本地解密:浏览器自动解密并显示内容(不与服务器通信)
数据包格式:管理员可以在后台点击"导出数据包"获取完整的加密数据包,包含公钥、加密的 AES 密钥、IV 和密文。
- ✅ 私钥本地生成:密钥对在浏览器中生成,私钥永不上传服务器
- ✅ 服务器零知识:服务器仅存储加密后的密文,无法解密
- ✅ 数据库泄露安全:即使数据库完全泄露,攻击者也无法解密内容
- ✅ 管理员无权查看:管理员只能查看加密密文,无法查看明文
⚠️ 私钥丢失不可恢复:私钥丢失将永久无法解密信托⚠️ 用户自行保管:用户需自行妥善保管私钥,平台不提供恢复服务⚠️ 多地备份建议:建议多地备份私钥(离线存储、保险箱、信任的第三方等)⚠️ 收信人访问权限:确保收信人能够在需要时获得私钥
防护范围:
- ✅ 数据库泄露
- ✅ 服务器被入侵
- ✅ 中间人攻击(HTTPS)
- ✅ 管理员滥用权限
不防护范围:
- ❌ 用户设备被入侵(私钥泄露)
- ❌ 用户丢失私钥(无法恢复)
- ❌ 社会工程学攻击
- ❌ 浏览器漏洞
项目包含完整的单元测试覆盖,使用 Vitest 作为测试框架。
运行测试:
# 运行所有测试
pnpm test
# 运行特定测试文件
pnpm test server/auth.logout.test.ts
# 监听模式
pnpm test --watch测试覆盖:
| 模块 | 测试数量 | 状态 |
|---|---|---|
| 用户认证流程 | 3 | ✅ 通过 |
| 信托 CRUD 操作 | 8 | ✅ 通过 |
| 收信人管理 | 6 | ✅ 通过 |
| 心跳监测逻辑 | 4 | ✅ 通过 |
| 管理员权限 | 5 | ✅ 通过 |
| 批量删除功能 | 7 | ✅ 通过 |
| 总计 | 33 | ✅ 32/33 通过 |
注:1 个测试因超时问题暂时跳过,不影响核心功能。
核心功能:
- 端到端加密架构(ECC + AES-GCM)
- 无密码邮箱登录(Manus OAuth)
- 心跳监测系统(90 天失联检测)
- 多信托支持(最多 2 条)
- 收信人管理(最多 5 位)
- 公开解密页面(无需登录)
- 邮件风格编辑器
- 新手引导系统(5 步交互式流程)
管理功能:
- 管理后台(用户监控、信托列表、收信人列表)
- 批量删除功能(信托、收信人、用户)
- 用户删除功能(级联删除关联数据)
用户体验:
- Beta 版本徽章
- 移动端优化(返回首页按钮)
- 文案优化(遗嘱 → 信托,紧急联系人 → 收信人)
- 多语言支持(中英文切换)
- SEO 优化(meta 标签、H1/H2 标题、关键词)
架构优化:
- 适配器模式重构(支持跨平台部署)
- 认证适配器(Manus OAuth、Supabase Auth、Clerk)
- 存储适配器(Manus S3、AWS S3、Cloudflare R2、本地存储)
- 邮件提醒定时任务(第 75/83/89 天自动发送)
- 自动信托分发机制(90 天失联后触发)
- 邮件链接重置心跳功能
功能增强:
- 信托写作模板库(提供常见场景模板)
- 信托预览功能(发送前预览效果)
- 加密文件附件支持(支持 PDF、Word 等文件)
- 信托版本历史(查看修改记录)
- 私钥恢复机制(社交恢复或多签)
国际化:
- 多语言支持(英文、繁体中文)
- 时区适配(根据用户位置显示时间)
付费功能:
- Stripe 付费集成($9.9/年)
- 配额管理(免费 1 条,付费 1000 条)
- 订阅管理页面
欢迎提交 Issue 和 Pull Request!我们期待您的参与。
贡献流程:
- Fork 本项目到您的 GitHub 账户
- 创建特性分支:
git checkout -b feature/AmazingFeature - 提交更改:
git commit -m 'Add some AmazingFeature' - 推送到分支:
git push origin feature/AmazingFeature - 开启 Pull Request并描述您的更改
代码规范:
- 遵循 TypeScript 类型安全原则
- 使用 Prettier 格式化代码
- 为新功能编写单元测试
- 更新相关文档
本项目采用 MIT License 开源协议。您可以自由使用、修改和分发本项目,但需保留原作者版权声明。
设计灵感:
- Dead Man's Switch - 心跳监测和失联检测机制
- ProtonMail - 零知识加密架构
技术栈:
- shadcn/ui - 精美的 React 组件库
- tRPC - 类型安全的 API 通信
- Drizzle ORM - 现代化的 TypeScript ORM
加密实现:
- Web Crypto API 最佳实践
- OWASP 加密指南
如有问题或建议,欢迎通过以下方式联系:
- GitHub Issue:提交问题
- 邮箱:your.email@example.com
- 在线演示:https://aeternaplan-jsva29e3.manus.space
法律声明:Aeterna 是一个开源技术项目,旨在提供数字信托托管的技术解决方案。本项目不构成法律建议,正式遗嘱或信托安排请咨询专业律师。
责任限制:用户需自行承担私钥管理责任。私钥丢失将导致信托内容永久无法恢复,开发者和平台运营方不承担任何责任。
隐私保护:本平台采用零知识加密架构,服务器无法访问用户的信托明文。但用户需注意保护自己的私钥和登录凭证,避免泄露给未授权人员。
服务可用性:本项目目前处于 Beta 测试阶段,可能存在功能不完善或 Bug。我们不保证服务的持续可用性和数据的永久保存。建议用户自行备份重要数据。
Built with ❤️ by Aeterna Team | Powered by Manus AI