Skip to content

ZZyizi/message

Repository files navigation

弱中心化加密即时通讯系统

基于 Tauri + Rust Core + Svelte 5 构建的弱中心化端到端加密即时通讯系统。

弱中心化 + 端到端加密 + 设备为核心身份的即时通讯协议与应用系统

核心特性

  • 端到端加密:X25519 密钥交换、AES-256-GCM 消息加密、Ed25519 数字签名
  • 去中心化身份:基于公私钥体系,无需手机号或邮箱注册
  • 多设备支持:设备授权绑定流程,安全设备撤销机制
  • 群聊系统:群密钥管理与成员变更时轮转
  • 离线消息补发:Pending 队列保留 7 天重试,自动补发未确认消息
  • 媒体存储:用户自持 OSS/R2 桶分布式存储,媒体不经 Relay 中转
  • 轻量 Relay:极简服务器职责 — 仅负责 WebSocket 转发、在线状态、加密消息缓存

技术栈

层级 技术 用途
桌面框架 Tauri v2 内存占用 20-80MB,原生性能
前端 SvelteKit + Svelte 5 现代响应式 UI,基于 runes
后端 Rust + tokio 异步运行时,密码学运算
数据库 SQLite (rusqlite) 本地消息存储
密码学 X25519, Ed25519, AES-256-GCM, BLAKE3, HKDF 完整密码学套件

系统架构

┌─────────────────────────────────────────────────────────────┐
│                        客户端                               │
│  ┌─────────────┐  ┌──────────────┐  ┌─────────────────┐  │
│  │   Svelte   │  │  Rust Core    │  │   后台守护进程   │  │
│  │      UI    │  │ crypto/sync   │  │   (Daemon)      │  │
│  └─────────────┘  └──────────────┘  └─────────────────┘  │
│         │                │                    │             │
│         └────────────────┴────────────────────┘             │
│                          │                                  │
│               ┌──────────▼──────────┐                      │
│               │    SQLite 数据库     │                      │
│               └─────────────────────┘                      │
└─────────────────────────────────────────────────────────────┘
                          │
                          │ WebSocket
                          ▼
┌─────────────────────────────────────────────────────────────┐
│                      Relay 服务器                           │
│  - WebSocket 连接管理                                        │
│  - 在线状态 (Redis)                                         │
│  - 加密消息缓存 (TTL 7 天)                                  │
│  - 群组密钥缓存                                             │
└─────────────────────────────────────────────────────────────┘

Rust 后端模块 (src-tauri/src/)

文件 说明
lib.rs 应用入口、AppState 管理 (db + identity)、日志初始化
main.rs Windows 子系统入口
crypto.rs 身份/设备密钥生成、会话密钥派生、AES-256-GCM、Ed25519、BLAKE3
db.rs SQLite 层:messages、groups、devices、pending_messages、identities
identity.rs 身份密钥管理,支持助记词备份/导出
message.rs 消息发送/获取/撤回操作,含 pending 队列
relay.rs WebSocket Relay 连接状态(当前为存根)
error.rs 自定义错误枚举,支持序列化

前端 (src/)

  • routes/+page.svelte - 主聊天界面,侧边栏导航(聊天、群组、设备、设置)
  • routes/+layout.svelte - 根布局,全局样式

项目状态

当前处于 阶段一:基础设施 建设阶段(早期开发)。

开发路线图

阶段 任务 状态
1. 基础设施 Tauri 项目初始化、Rust 密码学模块、SQLite 层 进行中
2. 身份与加密 身份/设备密钥生成、消息加解密 待开发
3. 消息系统 WebSocket 客户端、ACK 机制、离线补发、消息撤回 待开发
4. 群组系统 群组管理、群密钥轮转、群消息加解密 待开发
5. 多设备 设备绑定流程、设备撤销 待开发
6. 媒体系统 媒体上传/下载(OSS/R2) 待开发
7. 同步与后台 后台同步引擎、守护进程 待开发
8. UI 层 完整 Svelte UI 待开发
9. Relay 服务器 Rust Relay(axum + WebSocket) 待开发
10. 测试 集成测试 待开发

详细任务分解请查看 TODO.md

快速开始

环境要求

  • Node.js 18+
  • Rust 1.70+
  • Tauri CLI v2

开发

# 安装依赖
npm install

# 前端开发(SvelteKit 服务于 port 1420)
npm run dev

# Tauri 开发(带原生窗口)
npm run tauri dev

# 仅构建前端
npm run build

# 预览构建后的前端
npm run preview

Tauri 命令

npm run tauri build    # 构建生产版本
npm run tauri dev     # 启动开发模式

数据流

  1. 消息发送:Svelte UI → invoke('send_message') → Rust message.rs → SQLite + pending 队列
  2. 身份管理:通过助记词生成/导入 → 加密存储至 SQLite
  3. Relay 连接relay.rs 管理连接状态(WebSocket 存根)

安全说明

  • Relay 无法解密消息(仅转发加密数据)
  • 消息使用 Ed25519 签名保证完整性
  • 身份由用户控制的助记词备份保护
  • 当前密钥派生使用占位符零密钥 [0u8; 32]

协议文档

About

基于Tauri + Rust Core + Svelte 5构建的去中心化端到端加密即时通讯系统。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors