端到端加密项目 KaleidoTalk V3.0:你的聊天记录,只有你能看见

⚠️ 法律提示及免责声明

KaleidoTalk 是一个开源的端到端加密聊天软件,仅供技术学习和合法用途。作者不运营任何公开的 KaleidoTalk 服务器。如果您计划在公网部署本软件,请自行确保符合所在地法律法规。详细的合规声明请参阅 COMPLIANCE.md。


✨ V3.0 新增亮点(基于真实代码对比)

特性V2.2(基线)V3.0(新增强)
传输加密明文 TCP + JSON 长度头TLS 1.2+ 自签名证书+ TOFU 信任
密钥轮换固定 X25519 密钥(生命周期内不变)X25519 密钥每24 小时自动轮换,支持多版本共存
账户冻结不可逆冻结(凭恢复密钥),被盗后永久锁定
流量混淆固定大小 JSON 包(长度头)所有包固定2048 字节+ 随机填充 + 随机心跳(3.3–6.7s)
GUI 界面传统 Ctk 文本框聊天现代气泡聊天 UI(头像、未读红点、深色主题、托盘闪烁)
配置管理硬编码参数服务端config.json+ 客户端持久化配置
管理员工具admin.py(邀请码/封禁)新增freeze_account.py独立冻结工具
测试覆盖无集成测试包含端到端集成测试(密钥轮换、冻结流程)

注意:V2.2 已具备Ed25519+X25519+AES-GCM 加密双模式私钥存储(服务器托管 / 本地)、BIP39 指纹单词验证离线消息DoS 防护邀请码注册,这些基础能力在 V3.0 中保留并增强。


🧩 功能概览(V3.0)

功能说明
端到端加密Ed25519 + X25519 + AES-256-GCM,消息仅收发双方可解密
密钥自动轮换每天生成新的 X25519 密钥,历史消息不受未来密钥泄露影响
不可逆账户冻结注册时生成恢复密钥,账户被盗后可永久冻结,任何人无法解冻
双模式私钥存储服务器加密托管(跨设备登录)或完全本地存储(永不离开设备)
TLS + TOFU 信任传输层 TLS 加密,首次连接时显示 BIP39 单词验证证书指纹,无 CA 依赖
流量混淆固定包长 + 随机填充 + 随机心跳,抵抗流量分析
用户指纹验证通过 BIP39 单词核对好友身份,防止中间人攻击
离线消息队列用户上线后自动接收离线期间的消息
IP / 用户封禁管理员可封禁恶意 IP 或用户,支持临时 / 永久
DoS 防护注册 / 登录频率限制,自动封禁异常 IP
现代 GUI基于 CustomTkinter 的气泡聊天界面,支持深色主题、系统托盘、任务栏闪烁

🔐 核心加密协议(V3.0 增强)

V3.0 在原有加密体系上加入了密钥轮换TLS

组件算法用途
身份密钥Ed25519数字签名,验证消息发送者身份
密钥交换X25519ECDH 协商共享密钥(支持多版本)
对称加密AES-256-GCM消息加密,同时提供认证
密钥派生HKDF-SHA256从 ECDH 共享密钥派生 AES key 和 nonce
密码存储PBKDF2-SHA256 (600k 迭代)服务端存储密码哈希
传输层TLS 1.2+(自签名证书)保护客户端与服务器之间的通信,防止窃听

消息加密流程(V3.0)

  1. 发送方生成临时 X25519 密钥对
  2. ECDH 与接收方最新公钥(根据key_id选择)协商共享密钥
  3. HKDF 派生 AES key 和 nonce
  4. AES-256-GCM 加密消息
  5. 使用发送方的 Ed25519 私钥对(临时公钥 + 密文 + tag)签名
  6. 将加密包(携带key_id)通过 TLS 发送给服务器
  7. 服务器转发给接收方(TLS 加密通道)
  8. 接收方根据key_id找到对应的历史 X25519 私钥,验证签名并解密

密钥轮换机制

  • 客户端启动后检查上次轮换时间,若超过 24 小时则自动生成新 X25519 密钥对。
  • 新密钥加密后上传服务器,并用 Ed25519 签名认证。
  • 服务器保留最近多个密钥版本,确保旧消息仍可解密。
  • 轮换过程对用户完全透明。

账户冻结机制

  • 注册时生成 Ed25519 恢复密钥对(私钥保存在本地local_keys/<username>_recovery.priv)。
  • 若账户被盗,用户可使用恢复密钥签名一条冻结指令发送给服务器。
  • 服务器验证签名后,将账户标记为frozen,并强制踢出所有在线会话。
  • 该操作不可逆,服务器管理员也无法解冻。

🏗️ 工程实现与架构解析(V3.0)

整体架构

仍采用经典的 C/S 模型,但 V3.0 增加了TLS 传输加密覆盖流量模块:

[客户端A] <--TLS + 固定包--> [服务器] <--TLS + 固定包--> [客户端B]
  • 服务器:用户认证、消息转发、离线存储,无法解密消息内容
  • 客户端:密钥管理、加密/解密、信任库、自动轮换

模块划分(V3.0 新增)

KaleidoTalk/ ├── run_client.py # 客户端入口 ├── run_server.py # 服务端入口 ├── admin.py # 管理员脚本(邀请码、封禁) ├── freeze_account.py # 独立账户冻结工具 ← 新增 ├── reset.bat # 重置脚本 ├── src/ │ ├── client/ │ │ ├── chat_client.py # 客户端核心逻辑(含轮换、冻结) │ │ └── chat_gui.py # 现代气泡 UI │ ├── server/ │ │ ├── config.py # 配置文件加载 ← 新增 │ │ ├── server.py # 服务器主循环(TLS + 覆盖流量) │ │ ├── server_commands.py # 命令处理(含 rotate_key, freeze_account) │ │ ├── server_session.py # 会话管理、DoS │ │ └── server_storage.py # 数据持久化 │ ├── common/ │ │ ├── crypto_utils.py # 加密原语 │ │ ├── padding.py # 固定包协议(分片、重组、心跳)← 新增 │ │ └── network.py # 旧版长度头协议(兼容) ├── test/ # 集成测试 ← 新增 └── requirements.txt

通信协议(V3.0 升级:覆盖流量)

V3.0 引入padding.py,所有数据包封装为2048 字节固定长度:

  • 包格式[1字节类型][2字节长度][2字节序号][2字节总数][变长数据][随机填充]
  • 分片与重组:支持大数据分片发送和接收端重组
  • 心跳:每隔 3.3~6.7 秒发送纯填充包,保持流量模式恒定
  • 目的:有效抵抗基于包大小和发送时序的流量分析

服务端新增特性

  • TLS 自签名证书:启动时自动生成,TOFU 信任模型
  • 配置文件config.json可设置主机、端口、安全参数、日志级别等
  • 密钥轮换支持:处理rotate_key命令,存储多版本密钥
  • 账户冻结:处理freeze_account命令,验证恢复签名并冻结

客户端新增特性

  • 自动密钥轮换:定时任务检查并执行轮换
  • 恢复密钥保存:注册时生成.priv文件并提示备份
  • 现代 GUI:气泡消息、头像、未读红点、右键菜单、托盘闪烁

🚀 快速上手指南(V3.0)

环境要求

  • Python 3.8+
  • 依赖:cryptography,pystray,Pillow,customtkinter

下载与安装

git clone https://github.com/hbzsoft/KaleidoTalk.git cd KaleidoTalk pip install -r requirements.txt

启动服务器

python run_server.py

首次启动设置管理员密码(用于保护服务器私钥)。启动后,TLS 证书自动生成,日志显示服务器指纹。

启动客户端

python run_client.py
  • 点击「连接」,输入服务器地址(默认127.0.0.1:5555
  • 首次连接会弹出TLS 证书的 6 个 BIP39 单词,请通过安全渠道与管理员确认,然后「信任」
  • 注册账号(用户名 3-20 位字母数字,密码至少 8 位含字母数字)
  • 注册成功后,系统提示保存恢复密钥(重要!)
  • 登录后即可与在线用户聊天

管理员命令(V3.0)

# 邀请码管理 python admin.py invites add --count 5 --uses 1 --length 8 python admin.py invites set-require true python admin.py invites list # 封禁管理 python admin.py ban ip 192.168.1.10 --duration 3600 python admin.py unban ip 192.168.1.10 python admin.py ban user alice python admin.py list-bans # 用户管理 python admin.py users list python admin.py users delete alice

紧急冻结账户

python freeze_account.py --server 127.0.0.1:5555 --username alice --recovery-key local_keys/alice_recovery.priv

警告:此操作不可逆,请确认后再执行。


🧪 技术亮点(V3.0)

  1. 传输加密 + 覆盖流量:TLS 保护信道,固定包和心跳掩盖元数据
  2. 密钥生命周期管理:自动轮换,多版本共存,降低泄露影响
  3. 用户自救机制:不可逆冻结,为极端情况提供最后防线
  4. 去中心化信任:TOFU + BIP39 单词,无需 CA
  5. 工程完备性:配置文件、集成测试、独立冻结工具、完整文档

📅 未来计划

  • 文件传输(分块加密)
  • 群聊(组密钥分发)
  • 音视频通话(WebRTC)
  • 移动端客户端

📄 许可证与致谢

KaleidoTalk 采用GNU General Public License v3.0开源。