# e2e-chat **Repository Path**: iutils/e2e-chat ## Basic Information - **Project Name**: e2e-chat - **Description**: 点对点加密聊天 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-26 - **Last Updated**: 2026-05-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🔐 E2E Chat - 点对点端到端加密聊天 基于 **WebRTC** 数据通道 + **ECDH** 密钥协商 + **AES-GCM** 加密的真正点对点加密聊天应用。消息仅在通信双方设备上解密,服务器完全零知识。 ## 架构 ``` ┌──────────┐ WebRTC Data Channel (加密) ┌──────────┐ │ User A │ ◄─────────────────────────────► │ User B │ │ (Web/H5) │ │ (Web/H5) │ └────┬─────┘ └────┬─────┘ │ │ │ WebSocket (信令: SDP/ICE) │ ▼ ▼ ┌──────────────────────────────────────────────────────┐ │ Signaling Server (ws) │ │ 负责建立连接,不接触任何消息内容 │ └──────────────────────────────────────────────────────┘ ``` ## 安全特性 - **ECDH (P-256)** 密钥协商 - 双方各自生成密钥对,交换公钥后派生共享密钥 - **AES-256-GCM** 消息加密 - 每条消息使用随机 IV 加密,提供认证加密 - **P2P 直连** - WebRTC 建立后消息直连,不经过服务器 - **零知识服务器** - 信令服务器仅转发 SDP/ICE,无法解密任何消息 ## 快速开始 ### 1. 安装依赖 ```bash npm install ``` ### 2. 启动信令服务器 ```bash npm start ``` 服务器默认运行在 `ws://localhost:3001` ### 3. 打开客户端 用浏览器直接打开 `public/index.html`,或使用任意静态文件服务器: ```bash npx serve public ``` ### 4. 开始聊天 - **创建房间**:点击"创建新房间",获得6位房间号 - **加入房间**:另一个设备输入房间号点击"加入" - 双方建立 P2P 加密通道后即可聊天 ## H5 移动端访问 在手机浏览器中访问同一地址即可。应用已适配移动端: - 全屏布局,无缩放 - 安全区域适配 (刘海屏) - 触控优化 - 移动端键盘适配 ## 项目结构 ``` e2e-chat/ ├── server/ │ ├── package.json │ └── index.js # WebSocket 信令服务器 ├── public/ │ ├── index.html # 主页面 │ ├── css/ │ │ └── style.css # 响应式样式 │ └── js/ │ ├── crypto.js # ECDH + AES-GCM 加密模块 │ ├── chat.js # WebRTC + 信令通信模块 │ └── app.js # UI 交互模块 └── package.json ``` ## 技术栈 | 模块 | 技术 | |------|------| | 加密 | Web Crypto API (ECDH P-256 + AES-256-GCM) | | P2P 通信 | WebRTC Data Channel | | 信令 | WebSocket (ws) | | 前端 | 原生 JavaScript (无框架依赖) | | NAT 穿透 | STUN (Google STUN) | ## 注意事项 - 双方需要在同一信令服务器上 - 大多数情况下 STUN 足以建立 P2P 连接 - 复杂网络环境可能需要 TURN 中继服务器 - 每条消息使用随机 IV,支持前向安全性