OneNobleSoul/noblechat

GitHub: OneNobleSoul/noblechat

NobleChat 是一个基于混合网络和后量子加密的端到端加密私信通讯系统,旨在抵御服务器端的消息内容读取与流量分析。

Stars: 0 | Forks: 0

# NobleChat 通过真正的混合网络(mix network)进行的端到端加密私信通讯,并采用混合后量子加密。 [![ci](https://static.pigsec.cn/wp-content/uploads/repos/cas/99/993938d8ce5e902ccfb9d6747725c320d855dea3235ed9a304cedf0d94c9321f.svg)](https://github.com/OneNobleSoul/noblechat/actions/workflows/ci.yml) [![codeql](https://static.pigsec.cn/wp-content/uploads/repos/cas/01/012b2ad66de0339b9c849fcea167111ab7684f26de5aa41d30a65cc889d29175.svg)](https://github.com/OneNobleSoul/noblechat/actions/workflows/codeql.yml) [![license: AGPL-3.0](https://img.shields.io/badge/license-AGPL--3.0-blue.svg)](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代理, 加密通信, 即时通讯, 后量子密码学, 测试用例, 混合网络, 版权保护, 端到端加密, 网络安全, 自定义脚本, 请求拦截, 隐私保护, 零知识证明