法律提示及免责声明KaleidoTalk 是一个开源的端到端加密聊天软件仅供技术学习和合法用途。 作者不运营任何公开的 KaleidoTalk 服务器。如果您计划在公网部署本软件请自行确保符合所在地法律法规。 详细的合规声明请参阅 COMPLIANCE.md功能概览KaleidoTalk 实现了以下核心功能功能说明端到端加密Ed25519 X25519 AES-256-GCM消息仅收发双方可解密双模式私钥存储可选择将私钥加密存放于服务器跨设备登录或完全本地存储用户信任验证通过指纹公钥哈希验证好友身份防止中间人攻击离线消息队列用户上线后自动接收离线期间的消息IP / 用户封禁管理员可封禁恶意 IP 或用户支持临时 / 永久封禁DoS 防护注册 / 登录频率限制自动封禁异常 IP跨平台 GUI基于 CustomTkinter 的图形界面支持 Windows/Linux/macOS核心加密协议设计KaleidoTalk 采用了一套完整的现代加密体系各组件协同工作组件算法用途身份密钥Ed25519数字签名验证消息发送者身份密钥交换X25519ECDH 协商共享密钥对称加密AES-256-GCM消息加密同时提供认证密钥派生HKDF-SHA256从 ECDH 共享密钥派生 AES key 和 nonce密码存储PBKDF2-SHA256 (600k 迭代)服务端存储密码哈希消息加密流程一条消息从发送到接收经历了以下步骤发送方生成临时 X25519 密钥对通过 ECDH 与接收方公钥协商共享密钥使用 HKDF 派生 AES-256-GCM 所需的 key 和 nonce加密消息明文得到密文和认证标签使用发送方的 Ed25519 私钥对临时公钥 密文 tag进行签名将加密包发送给服务器服务器转发给接收方接收方验证签名确认消息确实来自发送方使用自己的 X25519 私钥解密得到明文这套流程保证了机密性只有接收方能解密完整性任何篡改都会被 GCM 检测身份认证Ed25519 签名确保发送者身份真实前向安全每次使用临时密钥对历史消息不受未来密钥泄露影响工程实现与架构解析整体架构KaleidoTalk 采用经典的客户端 - 服务器C / S模型[客户端A] --加密信道-- [服务器] --加密信道-- [客户端B]服务器负责用户认证、消息转发、离线消息存储无法解密消息内容客户端负责密钥生成、消息加密 / 解密、信任库管理模块划分KaleidoTalk/ ├── client.py # 客户端GUI 核心逻辑 ├── server.py # 服务端多线程、会话管理 ├── crypto_utils.py # 加密模块密钥生成、加解密 ├── network.py # 通信协议JSON 长度头 ├── admin.py # 管理员脚本邀请码、封禁管理 └── COPYING # GPL v3许可证通信协议采用简单的4 字节长度头 JSON 消息体格式def send_msg(sock, obj): data json.dumps(obj).encode(utf-8) length len(data) sock.sendall(struct.pack(I, length) data) def recv_msg(sock): raw sock.recv(4) length struct.unpack(I, raw)[0] data sock.recv(length) return json.loads(data.decode(utf-8))服务端关键设计多线程模型每个客户端独立线程互不阻塞Token 认证登录后下发随机 token后续请求携带 token单点登录新登录踢掉旧连接离线消息队列用户离线时消息暂存上线后批量推送DoS 防护IP 级别的注册 / 登录频率限制持久化封禁admin.py可封禁 IP / 用户封禁信息持久化到bans.json客户端关键设计信任库服务器指纹和好友指纹存储于本地使用 HMAC - SHA256 防篡改消息缓存若发送时对方公钥未知消息暂存获取公钥后自动发送指纹验证首次通信时要求用户通过安全渠道核对指纹快速上手指南环境要求Python 3.8依赖库cryptography、pystray、Pillow、customtkinter下载源码访问项目 GitHub 仓库GitHub - hbzsoft/KaleidoTalk: Secure end-to-end encrypted chat software with cover traffic · GitHub方法一下载 ZIP推荐无需 Git点击绿色的 Code按钮选择Download ZIP解压到任意文件夹例如桌面方法二使用 Git 克隆适合有 Git 经验的用户git clone https://github.com/hbzsoft/KaleidoTalk.git cd KaleidoTalk安装 Python如已安装可跳过如果电脑没有 Python访问 https://python.org/downloads/下载 Python 3.8 或更高版本安装时务必勾选Add Python to PATH这一步很重要安装完成后打开终端cmd 或 PowerShell输入python --version显示版本号即表示安装成功。安装依赖在项目文件夹内打开终端执行pip install cryptography pystray Pillow customtkinter如果下载速度慢可以使用国内镜像源pip install cryptography pystray Pillow customtkinter -i https://pypi.tuna.tsinghua.edu.cn/simple启动服务器python server.py首次启动会要求设置管理员密码请务必记住后续管理需要用到。看到类似以下输出表示服务器启动成功服务器已启动 0.0.0.0:5555 服务器 ed25519 指纹: xxxxxx...启动客户端打开另一个新的终端在项目文件夹内执行python client.py客户端启动后会弹出登录窗口点击「连接」服务器地址默认127.0.0.1:5555本机测试点击「注册」创建账号用户名 3-20 位字母数字密码至少 8 位含字母数字注册成功后返回登录窗口登录管理员命令可选admin.py提供服务器管理功能仅在服务器本机运行# 生成邀请码5个每个只能用1次长度8位 python admin.py invites add --count 5 --uses 1 --length 8 # 开启邀请码注册新用户需要邀请码才能注册 python admin.py invites set-require true # 封禁IP3600秒 1小时 python admin.py ban ip 192.168.1.10 --duration 3600 # 封禁用户 python admin.py ban user alice # 查看封禁列表 python admin.py list-bans # 解封 python admin.py unban ip 192.168.1.10 python admin.py unban user alice常见问题Q: 提示python 不是内部或外部命令A: Python 没有正确安装或未添加到 PATH。请重新安装 Python并勾选Add Python to PATH。Q: 提示pip 不是内部或外部命令A: 同上Python 未正确安装。或者尝试使用python -m pip install ...代替pip install ...。Q: 客户端连接服务器失败A: 确保服务器已经启动显示了服务器已启动的提示并且客户端填写的地址和端口正确。本机测试使用127.0.0.1:5555。Q: 注册时提示邀请码无效A: 管理员可能开启了邀请码注册。请联系服务器管理员获取邀请码或让管理员执行python admin.py invites set-require false关闭邀请码要求。Q: 端口被占用怎么办A: 可以修改server.py最后一行start_server(0.0.0.0, 5555)中的端口号客户端连接时填写对应端口即可。技术亮点亮点完整的加密体系从身份密钥到消息加密形成闭环灵活的私钥存储用户可选择服务器托管或完全本地存储信任网络通过指纹验证建立信任防止 MITM 攻击工程健壮性DoS 防护、封禁系统、离线消息队列等未来计划支持文件传输分块加密传输支持群聊群组密钥分发支持更友好的 UI考虑迁移到 Qt 或 Web 版支持端到端加密的音视频通话许可证与致谢KaleidoTalk 采用GNU General Public License v3.0开源任何人可以自由使用、修改、分发但必须公开源代码。