OneNobleSoul/noblechat
GitHub: OneNobleSoul/noblechat
NobleChat 是一个基于混合网络和后量子加密的端到端加密私信通讯系统,旨在抵御服务器端的消息内容读取与流量分析。
Stars: 0 | Forks: 0
# NobleChat
通过真正的混合网络(mix network)进行的端到端加密私信通讯,并采用混合后量子加密。
[](https://github.com/OneNobleSoul/noblechat/actions/workflows/ci.yml)
[](https://github.com/OneNobleSoul/noblechat/actions/workflows/codeql.yml)
[](LICENSE)
NobleChat 会在浏览器中对每条消息进行端到端加密,并通过 Sphinx 风格的混合网络(mix network)进行路由,因此服务器永远无法看到消息内容,也无法将真实消息与掩护流量区分开来。密钥在您的设备上生成,且永远不会离开您的设备。
## 状态
这是一个正在进行中的项目,而非一个已完成的产品。各个独立的加密原语取自已通过审计的 `@noble` 库,但它们在此处的组合方式(Sphinx 层、数据包和邮箱格式、账户及多设备模型)尚未经过独立的安全审计。在进行此类审查之前,请勿依赖它来保护真实的机密信息。请参阅 [SECURITY.md](SECURITY.md) 了解如何报告问题。
对它背后的理念还不熟悉?运行中的应用程序在 `/info.html` 提供了一个通俗易懂的动画说明。
## 包含的内容
- 混合后量子密钥交换(X25519 + ML-KEM-768)和混合签名(Ed25519 + ML-DSA-65)。
- 真正的混合网络(mix network):分层 mix 节点和 provider、泊松混合(Poisson mixing)、固定大小的数据包以及掩护流量。每个节点作为独立进程运行,并且只能获知其自身的跃点。
- 零知识网关:它仅处理不透明的洋葱数据包、邮箱 ID、公开的联系卡片、密码哈希以及不透明的(由客户端加密的)联系人二进制大对象(blob)。
- 具有密码登录的账户、多设备扇出(fan out)以及由 PostgreSQL 支持的持久离线投递:消息会保存在加密邮箱中,直到收件人重新连接。
- 1:1 和群组聊天、加密的文件和图片附件、阅后即焚图片、消息回复、表情符号回应以及为所有人删除消息(delete-for-everyone)。
- 通过 WebRTC 进行语音和视频通话,其信令通过相同的通道进行端到端传输。
- 可切换的传输方式:内置混合网络(mix network),或通过可选的 nym-client sidecar 接入公共的 Nym mixnet。如果无法访问 sidecar,网关会回退到内部网络,并在其重新连接后自动恢复使用 nym。
- 管理面板,用于公告、维护模式、审核、服务器事件日志、运行时统计、mix 节点健康状态以及传输方式切换。
- 可安装的客户端:一个 PWA(桌面端、Android、iOS 主屏幕),外加由 CI 生成的原生桌面端和 Android 构建。
## 架构
```
browser client --ws--> gateway --http--> mix node L1 -> L2 -> L3 -> provider
(crypto) (accounts, (each is a separate process,
mailboxes, holds only its own key)
web, admin) |
delivers back to the gateway,
which pushes to the recipient
```
- `packages/crypto` 混合 PQ 原语,AEAD,KDF。
- `packages/sphinx` 固定大小的洋葱数据包格式。
- `packages/net` mix 路由器、目录、网络序列化、客户端辅助程序。
- `packages/protocol` 内容和信封组帧。
- `apps/server` 网关(HTTP、WebSocket、账户、管理、PostgreSQL)。
- `apps/node` 单个 mix 节点进程。
- `apps/web` 浏览器客户端和 PWA。
- `clients/desktop` Electron shell,`clients/mobile` Capacitor shell。
## 快速开始(自托管)
需要 Docker 和 Docker Compose。
```
cp .env.example .env
# 编辑 .env 并为每个 secret 设置强值
docker compose up -d --build
```
网关将在 http://127.0.0.1:8790 上启动(仅限环回地址;如果该端口被占用,请在 `.env` 中设置 HTTP_PORT)。在它前面放置一个反向代理(例如 Caddy 或 nginx)以实现 TLS。如果您的代理位于不同的 compose 项目中,请使用 `docker-compose.override.yml` 将 `noblechat` 服务附加到其网络,而不是直接暴露端口。该 compose 文件还会启动 mix 节点、provider 以及一个 PostgreSQL 数据库。
要通过公共 Nym mixnet 而非内部网络进行路由,请在 `.env` 中设置 `NYM_CLIENT_URL=ws://nym-client:1977`。这将启动内置的 nym-client sidecar,它会在 Nym 网络上注册一个身份(其数据存在于一个命名卷中,因此地址在重启后依然保持稳定)。一旦管理面板显示 sidecar 已连接,即可在其中切换传输方式。然后,客户端将按需加载 Nym Web 客户端并通过 mixnet 发送数据;将 `NYM_CLIENT_URL` 留空则可使一切保持在内部网络上运行。
## 开发
需要 Node.js 20 或更高版本。
```
npm install
npm test # unit tests for crypto, sphinx, and the router
npm run build:web # bundle the browser client
```
`npm run smoke` 会像真实的浏览器客户端一样,端到端驱动一个正在运行的部署(注册、订阅、通过 mix 发送、验证发件人签名、上传/下载文件)。请先启动 compose 技术栈,然后:
```
SMOKE_URL=http://localhost:8790 npm run smoke
```
## 客户端
在任何现代浏览器中打开部署 URL。要将其作为应用安装:
- 桌面端(Chrome 或 Edge):使用地址栏中的安装图标。
- Android(Chrome):菜单,然后选择“添加到主屏幕”(Add to Home screen)。
- iPhone(Safari):分享,然后选择“添加到主屏幕”(Add to Home Screen)。
带有标签的发布版本还会构建原生的桌面安装程序(AppImage、dmg、exe)以及一个 Android apk,并将它们附加到 GitHub 发布中。iOS 作为主屏幕 Web 应用运行;原生的 App Store 构建将需要 Apple 开发者账户。
## 安全
请私下报告漏洞。请参阅 [SECURITY.md](SECURITY.md)。
## 贡献
欢迎您的贡献。请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 和[行为准则](CODE_OF_CONDUCT.md)。
## 许可证
AGPL-3.0。请参阅 [LICENSE](LICENSE)。
标签:MITM代理, 加密通信, 即时通讯, 后量子密码学, 测试用例, 混合网络, 版权保护, 端到端加密, 网络安全, 自定义脚本, 请求拦截, 隐私保护, 零知识证明