KaleidoTalk

🔐 在变幻中守护私密对话的万花筒
每一次对话,都像万花筒里的一次转动——独一无二,稍纵即逝,美丽,且只有你自己能看见。
Ed25519 + X25519 AES-256-GCM TLS + Cover Traffic BIP39 单词指纹 GPL v3

📥 立即体验 KaleidoTalk

当前稳定版本:V2.3 | 适用于 Windows / Linux / macOS

⬇️ 下载 release.zip

解压后运行 python run_server.py 启动服务端,python run_client.py 启动客户端

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

🎨 为什么叫 KaleidoTalk?

KaleidoTalk = Kaleidoscope(万花筒)+ Talk(对话) —— 这是一个为隐私而生的名字,每一个字母都藏着我们对端到端加密的理解。

🌀 变幻与唯一性

万花筒每转动一次,图案就彻底改变,永不再重复。KaleidoTalk 每条消息使用一次性临时密钥,同一句话发两次,密文也完全不同。

🧩 碎片与整体

Ed25519、X25519、AES-256-GCM、HKDF、PBKDF2——每个零件都很普通,组合在一起却呈现出令人惊叹的安全图景。

📦 筒内与筒外

通信内容只有参与对话的人能看见。对服务器、ISP、任何第三方而言,它只是一个无法窥视的“圆筒”。

✨ 童年的纯粹

万花筒是玩具,是童年对“美”和“惊奇”的体验。我们不是在做一个冷冰冰的安全产品,而是在创造一个令人惊叹的数字世界。

💡 光

万花筒依赖光。“Privacy is a human right”——隐私是人权——就是这束光,照亮了那些碎片,让它们呈现出意义。

—— 你的每一次对话,都只属于你自己。 ——

✨ 功能特性

🔒 端到端加密

Ed25519身份密钥 + X25519密钥交换,消息仅收发双方可解密。服务器只存储密文,无法读取任何通信内容。

🛡️ 掩护流量 (Cover Traffic)

所有数据包固定为 2048 字节,真实数据填充随机字节;心跳包以随机间隔(3.3~6.7 秒)持续发送,有效防御基于包长度和时间间隔的流量分析。

🔐 TLS 传输加密

自签名证书 + TOFU 信任模型,首次连接通过 BIP39 单词核对证书指纹,防止中间人攻击。

🗄️ 双模式私钥存储

可选择将私钥加密存放于服务器(多设备登录),或仅本地存储,私钥永不离开本机。

🆔 单词式指纹验证

公钥指纹转换为 6 个英文单词(BIP39 词表),便于通过电话、当面等安全渠道核对身份。

📨 离线消息队列

好友离线时自动缓存消息,上线后立即送达,不错过任何重要对话。

🚦 邀请码 & 封禁防护

支持邀请码注册机制,IP/用户封禁,注册/登录限流,管理员可远程管理黑白名单。

🖥️ 跨平台 GUI

基于 CustomTkinter 的现代图形界面,支持系统托盘、消息闪烁提醒,开箱即用。

🔐 加密协议细节
组件算法用途
身份密钥Ed25519数字签名,验证消息发送者身份
密钥交换X25519 (ECDH)协商临时共享密钥
对称加密 + 认证AES-256-GCM消息加密和完整性校验
密钥派生HKDF-SHA256从 ECDH 共享密钥派生 AES key 与 nonce
密码存储PBKDF2-SHA256 (600k 迭代)服务端存储密码哈希,抵抗暴力攻击
传输层加密TLS 1.2+ (RSA 2048)保护客户端‑服务器通信(自签名证书 + TOFU)

📬 消息加密流程: 临时X25519密钥对 → ECDH交换 → HKDF派生密钥 → AES-256-GCM加密 → Ed25519签名 → 接收方验证签名并解密。

💡 这正是 KaleidoTalk 名字的“变幻”含义:每条消息的临时密钥都是全新的,加密图案永不重复。

📦 安装与运行

环境依赖

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

🚀 启动服务器

python run_server.py

首次启动需要设置管理员密码,用于保护服务器密钥(自动生成在 server_keys/)。

💬 启动客户端

python run_client.py

默认连接 127.0.0.1:5555,可手动修改服务器地址。注册、登录后即可与在线用户端到端加密通信。

🛠️ 管理员命令 (admin.py)

# 生成邀请码
python admin.py invites add --count 5 --uses 1 --length 8

# 设定注册需要邀请码
python admin.py invites set-require true

# 封禁IP / 用户
python admin.py ban ip 192.168.1.10 --duration 3600
python admin.py ban user alice
python admin.py list-bans
📁 项目文件结构 (v2.3 重构后)
KaleidoTalk/
├── run_client.py # 客户端启动入口
├── run_server.py # 服务端启动入口
├── src/
│ ├── client/ # 客户端逻辑与 GUI
│ ├── server/ # 服务端核心(命令、会话、存储)
│ ├── common/ # 共享模块(加密、网络、定长包协议)
│ └── admin.py # 管理员脚本
├── requirements.txt
├── LICENSE
├── NOTICE
└── licenses/ # 第三方许可证
运行时生成: users.json, user_keys.json, bans.json, invites.json, local_keys/, server_keys/
🔏 安全信任模型

🆔 服务器指纹 (TLS + Ed25519)

首次连接时核对服务器 TLS 证书指纹(BIP39 单词),通过后自动记录。后续连接自动比对,防止中间人攻击。服务器 Ed25519 公钥通过 TLS 通道安全下发,无需用户额外确认。

👥 用户指纹验证

双方通信前可通过安全渠道(当面/电话)比对指纹单词(如 "apple zebra ..."),验证通过后自动信任,后续消息解密显示。

🔐 本地信任库防篡改

信任记录使用 HMAC-SHA256 完整性保护,防止恶意篡改。

📄 许可证

KaleidoTalk 是自由软件,采用 GNU General Public License v3.0 授权。
你可以在遵守 GPLv3 条款的前提下自由使用、修改和分发。

KaleidoTalk Copyright (C) 2026 Bangze Han
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.

🎓 第三方库致谢 (详见 NOTICElicenses/ 目录):
cryptography (Apache 2.0) , pystray (LGPLv3) , Pillow (HPND) , customtkinter (MIT)

🌟 参与贡献

欢迎提交 Issue、Pull Request 或 ⭐ Star 支持项目。
项目目前处于稳定开发状态,所有功能已在 Python 3.10+ 测试通过。