Nodecrypt 完整加密流程
sequenceDiagram
participant C as 客户端
participant S as 服务器
participant O as 其他客户端
Note over C,S: 阶段1: 服务器身份验证 (RSA-2048)
C->>S: WebSocket连接
S->>C: RSA-2048公钥
Note over C,S: 阶段2: 客户端-服务器密钥交换 (P-384 ECDH)
C->>S: P-384 ECDH公钥
S->>C: P-384公钥 + RSA签名
Note over C: 验证RSA签名并派生AES-256密钥
Note over S: 从P-384 ECDH派生AES-256密钥
Note over C,S: 阶段3: 房间认证
C->>S: 加入请求 (房间哈希,AES-256加密)
Note over S: 将客户端添加到房间/频道
S->>C: 成员列表 (其他客户端ID,加密)
Note over C,O: 阶段4: 客户端间密钥交换 (Curve25519)
Note over C: 为每个成员生成Curve25519密钥对
C->>S: Curve25519公钥包 (AES-256加密)
S->>O: 转发客户端C的公钥
O->>S: 返回其他客户端的Curve25519公钥
S->>C: 转发其他客户端的公钥
Note over C,O: 阶段5: 密码增强密钥派生
Note over C: 客户端密钥 = ECDH_Curve25519(自己私钥, 对方公钥) XOR SHA256(密码)
Note over O: 客户端密钥 = ECDH_Curve25519(自己私钥, 对方公钥) XOR SHA256(密码)
Note over C,O: 阶段6: 身份验证
C->>S: 用户名 (用客户端密钥ChaCha20加密)
S->>O: 转发加密用户名
O->>S: 用户名 (用客户端密钥ChaCha20加密)
S->>C: 转发加密用户名
Note over C,O: 双方客户端现在验证彼此身份 Note over C,O: 阶段7: 安全消息传输 (双层加密)
Note over C: 1. ChaCha20加密(消息内容)<br/>2. AES-256加密(传输层包装)
C->>S: 双层加密消息
Note over S: 解密AES-256传输层<br/>提取ChaCha20加密数据<br/>无法解密消息内容
S->>O: 转发ChaCha20加密数据
Note over O: 解密AES-256传输层<br/>ChaCha20解密获得消息内容
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 流川
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果

