# CryptoDesign **Repository Path**: Yan_zer/crypto-design ## Basic Information - **Project Name**: CryptoDesign - **Description**: 密码学课程设计,主要实现了基于国密算法(sm2、sm3、sm4)的安全实时聊天系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-12-22 - **Last Updated**: 2026-01-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 密信通 - 基于国密算法的安全即时通讯系统 ## 项目简介 密信通(CryptoChat)是一个基于中国国家密码算法(SM2/SM3/SM4)的安全即时通讯系统,采用 C/S 架构设计,实现了端到端加密的聊天功能。本项目是密码学课程的课程设计,旨在展示如何在实际应用中集成和运用国密算法。 ## 核心特性 ### 🔐 密码算法 - **SM2**:非对称加密算法,用于密钥交换和数字签名 - **SM3**:密码哈希算法,用于消息摘要和完整性校验 - **SM4**:对称加密算法(支持 GCM/CBC/CTR 模式),用于消息加密 ### 💬 功能特性 - 私聊与群聊支持 - 文件传输(图片、文档等) - 好友关系管理 - 离线消息存储与推送 - 密钥自动协商与更新 ## 项目架构 ``` crypto-design/ ├── client/ # 客户端模块 │ ├── main_client_01.py # 客户端入口 │ ├── gui_controller_02.py # GUI 业务逻辑控制器 │ ├── crypto_engine_04.py # 密码算法引擎 │ ├── key_manager_05.py # 会话密钥管理器 │ ├── network_handler_06.py # 网络通信处理器 │ ├── local_storage_07.py # 本地数据存储 │ └── 03_gui_views/ # GUI 视图层 │ ├── root_window.py # 根窗口 │ ├── login_window.py # 登录窗口 │ ├── register_window.py # 注册窗口 │ └── chat_window.py # 聊天窗口 ├── server/ # 服务端模块 │ ├── start_server_01.py # 服务端入口 │ ├── user_manager_02.py # 用户管理 │ ├── message_router_03.py # 消息路由 │ └── database_handler_06.py # 数据库操作 ├── common/ # 公共模块 │ └── data_serializer.py # 数据序列化 ├── test/ # 测试模块 └── keys/ # 密钥文件目录 ``` ## 环境要求 - **Python 3.10+** - **GmSSL**:用于 SM2 算法的系统级支持 - Windows:从 [GmSSL 官网](https://gmssl.org/) 下载安装 - Linux:`apt install gmssl` 或从源码编译 - **依赖包**:`pip install -r requirements.txt` ## 快速开始 ### 1. 安装依赖 ```bash pip install -r requirements.txt ``` ### 2. 配置 GmSSL 确保 `gmssl` 命令在系统 PATH 中可用: ```bash # Windows 示例(假设安装在默认目录) # 需要将 C:\Program Files\GmSSL\bin 添加到系统 PATH # 验证安装 gmssl version ``` ### 3. 启动服务端 ```bash cd server python start_server_01.py ``` 默认配置: - 服务地址:`0.0.0.0` - 服务端口:`6666` ### 4. 启动客户端 ```bash cd client python main_client_01.py ``` ## 使用说明 ### 用户注册 1. 点击"注册"按钮进入注册页面 2. 输入用户名、密码(需满足强度要求) 3. 阅读并同意用户协议 4. 点击注册完成账号创建 ### 用户登录 1. 输入用户名和密码 2. 点击登录进入主界面 ### 聊天功能 - **私聊**:选择好友进行一对一加密聊天 - **群聊**:创建或加入群组进行多人讨论 - **文件发送**:点击附件图标发送图片或文件 - **好友管理**:添加、删除好友 ### 系统管理员 系统内置管理员账号 **密信通**,用于系统通知和群组管理。 ## 技术实现 ### 密钥交换流程 系统采用 SM2 临时密钥协商机制: 1. 通信双方各自生成临时 SM2 密钥对 2. 交换临时公钥,计算共享秘密 3. 使用 SM3-KDF 派生 SM4 会话密钥 4. 使用派生密钥进行 SM4-GCM 加密通信 ### 消息协议 消息采用 JSON 格式传输,关键字段: ```json { "type": "message_type", "from": "sender_username", "to": "receiver_username", "content": { "ciphertext": "base64_encrypted_data", "iv": "initialization_vector", "tag": "authentication_tag" }, "timestamp": "iso_format_time" } ``` ### 数据库存储 - **用户信息** (`users`):用户名、密码哈希、SM2 公钥 - **好友关系** (`friendships`):用户间好友关联 - **群组信息** (`groups`):群名称、创建者 - **群组成员** (`group_members`):群组成员关系 - **离线消息** (`offline_messages`):未送达消息暂存 ## 开发说明 ### 模块职责 | 模块 | 职责 | |------|------| | `gui_controller_02.py` | 协调 GUI 与业务逻辑,处理用户交互 | | `crypto_engine_04.py` | 提供 SM2/SM3/SM4 加密解密接口 | | `key_manager_05.py` | 管理会话密钥的生命周期 | | `network_handler_06.py` | 处理与服务端的消息收发 | | `local_storage_07.py` | 本地消息和密钥的持久化存储 | ### 密码算法调用示例 ```python from crypto_engine_04 import SM3Hasher, SM4, GenShareKey # SM3 哈希 hasher = SM3Hasher() digest = hasher.hash_string("hello world") # SM4-GCM 加密 sm4 = SM4(key=session_key, iv=random_iv) ciphertext = sm4.encrypt(plaintext, aad=aad_data) # SM2 密钥协商 gk = GenShareKey() shared = gk.compute_shared_secret_x(private_key, peer_public_key) session_key = gk.derive_sm4_session_key(private_key, peer_public_key) ``` ### 测试 ```bash # 运行服务端测试 python -m test.test_server_start # 运行客户端测试 python -m test.test_batabase # 运行密码算法测试 python -m test.test_sm.sm4 python -m test.test_sm.sm2 ``` ## 常见问题 ### GmSSL 未找到 确保 GmSSL 已正确安装并添加到系统 PATH: ```bash # Windows PowerShell $env:Path += ";C:\Program Files\GmSSL\bin" # Linux/macOS export PATH=$PATH:/usr/local/gmssl/bin ``` ### 会话密钥协商失败 1. 检查双方网络连接 2. 确认 GmSSL 正常工作 3. 查看客户端日志定位具体错误 ### 群消息无法收发 1. 确认已加入群组 2. 检查群密钥是否正确同步 3. 验证是否为群成员 ## 开发进度 | 功能 | 状态 | |------|------| | 用户注册/登录 | ✅ 已完成 | | 私聊加密 | ✅ 已完成 | | 群聊功能 | ✅ 已完成 | | 文件传输 | ✅ 已完成 | | 好友管理 | ✅ 已完成 | | 离线消息 | ⚠️ 待完善 | | 群密钥轮换 | ⚠️ 待完善 | ## 协议 本项目仅供学习和研究使用。 ## 贡献者 感谢所有为本项目做出贡献的开发者。