n-shadloo/communication-platform

GitHub: n-shadloo/communication-platform

一个面向国家级断网场景的自托管端到端加密通信平台,通过消除所有外部运行时依赖,确保在小规模私密群体中仍可进行加密私信、群聊和语音通讯。

Stars: 2 | Forks: 0

# 通信平台 一个私有、自托管的消息平台,提供端到端加密的私信、群聊和持久的纯语音房间,专为在全国性互联网断网中生存而构建。 [![许可证: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE) ## 存在的意义 当一个国家切断国际连接时,主流即时通讯软件就会停止工作:它们的服务器、推送基础设施、CDN 和 STUN/TURN 中继都位于该国境外,因此人们会在最需要私人通讯的时候失去它。这里的每一个设计决策都源于消除这种依赖——在运行时,系统不联系任何 CDN,不使用 FCM 或 APNs,不依赖公共 STUN/TURN,不请求外部 CA,也不调用第三方 API。唯一的部署方案是一个私有、仅限邀请的实例,通过单台 VPS 为一个小圈子提供服务;它不是公共服务,也不开放注册。 ## 功能特性 - 两个用户之间的私信。 - 最多支持约 50 名成员的群聊。 - 独立、持久的纯语音房间。 ## 安全模型 内容——消息、附件、群组状态和语音音频——在客户端进行加密。服务器是一个盲中继:它存储并路由不透明的、经过填充的密文和公钥,不强制执行任何与安全相关的操作。交叉签名材料和设备列表记录以 blob 的形式通过,服务器从不对其进行解析或验证;每一项重要的检查都在客户端进行,依据的是服务器从未持有过的密钥。没有任何内容加密密钥会到达服务器,尽管它确实持有基础设施密钥——TLS 私钥、JWT 签名密钥和 LiveKit API 密钥。 客观的局限性:如果攻击者掌握了主机的实时 root 权限,就可以观察到哪个已验证的连接向每个设备队列中存入和提取了数据,这足以还原出谁在何时与谁进行了交谈。社交图谱和通讯时间节点无法免受此类攻击者的监视,而单机架构也无法保护它们。 完整的威胁模型、密钥清单和残余风险: [backend/SECURITY.md](backend/SECURITY.md)。 ## 架构 ``` flowchart LR C["Flutter client
Android · Web"] N["nginx
TLS 1.3"] D["Daphne
ASGI"] A["Django + DRF
Channels"] P[("PostgreSQL 16")] R[("Redis 7")] L["LiveKit SFU"] T["coturn
TURN"] C -->|"HTTPS · WSS"| N N --> D D --> A A --> P A --> R N -->|"/rtc"| L A -.->|"join token"| L C -.->|"encrypted audio"| T T -.-> L ``` | 层级 | 技术 | |---|---| | 客户端 | Flutter 3.44.7, Dart 3.12.2 — 仅限 Android 和 Web 平台 | | 服务端 | Python 3.12, Django 6.0, Django REST Framework, 运行在 Daphne 上的 Channels 4 | | 数据库 | PostgreSQL 16, 仅限本地回环 | | 缓存与通道层 | Redis 7, 仅限本地回环 | | 语音 | 自托管 LiveKit SFU, 自托管 coturn | | 边缘层 | nginx, 预分发的私有 CA 下的 TLS 1.3 | ## 仓库布局 | 路径 | 维护者 | 内容 | |---|---|---| | [`backend/`](backend/) | [Nima Shadloo](https://github.com/n-shadloo) | Django 服务器与系统架构:包括 `accounts`、`devices`、`vault`、`messaging`、`attachments`、`voicerooms`、`realtime`、`core` 和 `config` 应用,以及用于单台 VPS 部署的 `ops/` 产物 | | [`frontend/`](frontend/) | [realSeyed](https://github.com/realSeyed) | 适用于 Android 和 Web 的 Flutter 客户端,包含所有客户端加密功能 | `backend/vendor/wheels` 是一个大小为 26 MB 的已提交缓存,包含锁定版本且经过哈希验证的 Python wheels。这是为了满足“无外部依赖”的约束条件所必需的——服务器必须能够在没有互联网访问的情况下进行安装和重新构建——而不是仓库臃肿的体现。 ## 文档 | 文档 | 涵盖内容 | |---|---| | [backend/README.md](backend/README.md) | 协议与传输、身份验证、WebSocket 网关、语音、附件、填充桶 (padding buckets)、数据保留、完整环境变量表以及本地开发 | | [backend/SECURITY.md](backend/SECURITY.md) | 威胁模型、精确的密钥不变量、服务器被查封时泄露的信息以及残余风险 | | [backend/CLIENT_CONTRACT.md](backend/CLIENT_CONTRACT.md) | 每一项安全属性在客户端的实现规范;是客户端开发的权威标准 | | 各应用 API 参考 | [accounts](backend/accounts/API.md) · [devices](backend/devices/API.md) · [vault](backend/vault/API.md) · [messaging](backend/messaging/API.md) · [attachments](backend/attachments/API.md) · [voicerooms](backend/voicerooms/API.md) · [realtime](backend/realtime/API.md) · [core](backend/core/API.md) | | [frontend/docs/README.md](frontend/docs/README.md) | 客户端工程契约索引:威胁模型、加密协议、MLS 配置、UI 规范、同步引擎和平台说明 | ## 当前状态 已完成并附带测试:上述九个后端应用——账户与设备注册、设备级 JWT 身份验证、交叉签名与经典 + ML-KEM 预密钥分发、持久信封队列、分桶附件、语音房间令牌生成以及 `/ws` 网关——连同用于将它们部署到单台 VPS 的 `ops/` 产物。 尚未完成:基础架构之外的前端部分。它目前拥有一个设计系统、一个自适应的应用程序外壳、带有故障保护(fail-closed)引导程序的环境配置以及一个本地存储层;它还没有聊天、群组、语音或加密功能。目前尚未进行外部安全审计,且 API 接口仍在调整中——如有变更,请以 [backend/CLIENT_CONTRACT.md](backend/CLIENT_CONTRACT.md) 为权威标准。 ## 许可证 Apache License 2.0 — 详见 [LICENSE](LICENSE)。版权所有 2026 Nima Shadloo。 第三方组件保留其各自的条款:`backend/vendor/wheels` 包含受各自许可证约束的第三方 Python 包,`frontend/assets/fonts/vazirmatn/` 捆绑了受 SIL OFL 1.1 许可的 Vazirmatn 字体。
标签:Django, Flutter, LiveKit, WebRTC, 即时通讯, 抗审查, 搜索引擎查询, 测试用例, 端到端加密, 自托管, 逆向工具