Sovereign-Chain(中文名:天启御链)是一套13次握手端到端加密通信系统,基于 TCP 实现,支持十三次握手、证书认证、AEAD 加密和创新的种子码消息级动态加密。 本项目适合教育、研究和高安全需求场景演示。
-
🔐 端到端加密(E2EE)
- 使用 X25519 进行临时密钥交换
- 使用 Ed25519 静态密钥进行身份签名
- 使用 ChaCha20-Poly1305 进行 AEAD 加密
- 使用 HKDF-SHA256 派生会话密钥
-
✨ 十三次握手(Client ↔ Server)
- ClientHello : 客户端发送临时公钥和随机数 (client_eph_pub || nonce_c)
- ServerHello : 服务端发送临时公钥和随机数 (server_eph_pub || nonce_s)
- ServerCertSend : 服务端发送证书 (server_cert in PEM)
- ClientCertRequest: 服务端请求客户端证书 ("REQUEST_CLIENT_CERT")
- ClientCertSend : 客户端发送证书 (client_cert in PEM)
- SeedCode : 服务端发送32字节种子码 (核心创新点)
- KeyExchange1 : 服务端发送密钥交换扩展数据
- KeyExchange2 : 客户端发送密钥交换扩展数据
- KeyConfirm1 : 服务端发送密钥确认数据
- KeyConfirm2 : 客户端发送密钥确认数据
- ClientAuth : 客户端发送握手记录签名 (signature_client(transcript_so_far))
- ServerAuth : 服务端发送握手记录签名 (signature_server(transcript_so_far))
- SecureAck : 服务端发送加密的ACK(使用派生的密钥,证明密钥确认)
步骤7(KeyExchange1)-10(KeyConfirm2)的执行顺序由步骤6中的order_seed随机决定,每次握手都可能采用不同的排列组合(共24种可能),有效防止流量分析和中间人攻击。
-
🛡️ 证书管理
- 自建 CA(根 CA)
- 服务端 / 客户端证书签发
- 握手中双方证书验证与签名验证
-
⚡ 高安全性
- HKDF-SHA256 派生会话密钥
- 独立的客户端-服务端、服务端-客户端对称密钥
- 防重放和防篡改设计
-
🔁 中转代理(Proxy)支持
- 新增
client_proxy.py
和proxy_server.py
,可在客户端和真实服务器之间作为中转 - 完整支持 13 次握手和加密通信
- 支持透明数据转发,客户端无需修改原逻辑即可接入代理
- 可用于负载分发、调试或隐藏真实服务器地址
- 新增
-
🌱 种子码消息级动态加密(创新)
- 在握手阶段传输64字节种子码
- 每条消息使用种子码+计数器派生独立密钥
- 实现真正的消息级安全隔离
- 即使会话密钥泄露,也无法解密历史消息
-
🎲 随机握手(创新)
- 步骤7(KeyExchange1)-10(KeyConfirm2)的执行顺序由步骤6中的order_seed随机决定
- 每次握手都可能采用不同的排列组合(共24种可能),有效防止流量分析和中间人攻击
随机握手示例:
2025-08-25 19:09:42,081 - INFO - Generated step order: ['KEYCONFIRM2', 'KEYEXCHANGE1', 'KEYCONFIRM1', 'KEYEXCHANGE2']
2025-08-25 19:09:42,081 - INFO - Step 12/13: Sending KeyConfirm2
2025-08-25 19:09:42,081 - INFO - Step 9/13: Waiting for KeyExchange1
2025-08-25 19:09:42,081 - INFO - Step 11/13: Waiting for KeyConfirm1
2025-08-25 19:09:42,081 - INFO - Step 10/13: Sending KeyExchange2
.
├── ca.py # 证书签发端 (生成 CA、server、client 证书)
├── server.py # 服务端
├── client.py # 客户端
├── client_proxy.py # 客户端中转代理
├── proxy_server.py # 代理服务端
├── ca_cert.pem # CA 根证书
├── ca_key.pem # CA 私钥
├── server_cert.pem # 服务端证书
├── server_key.pem # 服务端私钥
├── client_cert.pem # 客户端证书
└── client_key.pem # 客户端私钥
python ca.py
生成 CA 根证书和服务端/客户端证书。
python server.py
监听 5555 端口,等待客户端连接。
python client.py
客户端会与服务端完成十三次握手,建立安全通道,然后可发送加密消息。
启动代理服务端
python proxy_server.py
启动客户端代理
python client_proxy.py
客户端会与代理完成握手,代理再与真实服务器完成握手,中转模式下依然保持端到端加密。
sequenceDiagram
participant Client
participant Server
Note over Client, Server: 天启御链加密握手步骤 (13步)
Client->>Server: 1. CLIENTHELLO (client_eph_pub, nonce_c)
Server->>Client: 2. SERVERHELLO (server_eph_pub, nonce_s)
Server->>Client: 3. SERVERCERTSEND (server_cert PEM)
Server->>Client: 4. CLIENTCERTREQUEST
Client->>Server: 5. CLIENTCERTSEND (client_cert PEM)
Client->>Server: 6. SEEDCODE
Note over Client, Server: 基于种子码随机排列以下4步顺序 (24种可能)
rect rgba(0, 255, 0, 0.1)
Note over Client, Server: 以下为1.2.5.4更新前标准顺序,但更新后不保证每次都一样
Server-->>Client: 7. KeyExchange1 (extra data 1)
Client-->>Server: 8. KeyExchange2 (extra data 2)
Server-->>Client: 9. KeyConfirm1 (confirm data 1)
Client-->>Server: 10. KeyConfirm2 (confirm data 2)
end
Client->>Server: 11. CLIENTAUTH (signature over transcript)
Server->>Client: 12. SERVERAUTH (signature over transcript)
Server->>Client: 13. SECUREACK (encrypted ACK)
Note over Client, Server: 安全通信通道建立完成
Client->>Server: DATA (double-encrypted application data)
Server->>Client: DATA (double-encrypted application data)
msg> hello server
server: echo: hello server
msg> test123
server: echo: test123
所有消息都经过端到端加密和种子码二次加密,服务端无法篡改内容,客户端与服务端可互相验证身份。 在代理模式下,客户端与真实服务器之间仍保持完整加密和身份验证。
-
十三次握手确保双方身份验证和密钥确认:
- 步骤1-2:交换临时公钥和随机数,建立共享密钥基础
- 步骤3-5:双向证书验证(服务端证书 → 客户端证书请求 → 客户端证书)
- 步骤6:种子码传输(核心创新点,实现消息级加密)
- 步骤7-8:密钥交换扩展(增强前向安全性)
- 步骤9-10:密钥确认(防止中间人攻击)
- 步骤11-12:双向身份认证(签名验证握手完整性)
- 步骤13:加密确认(证明密钥已正确安装)
-
会话密钥派生:
- 使用 X25519 生成共享密钥
- 通过 HKDF-SHA256 派生两个独立密钥:
- 客户端→服务端加密密钥
- 服务端→客户端加密密钥
-
种子码动态加密(创新):
- 每条消息使用种子码+计数器派生独立密钥
- 实现真正的消息级安全隔离
- 即使会话密钥泄露,也无法解密历史消息
- 破解单条消息不影响其他消息安全
-
加密与认证:
- 使用 ChaCha20-Poly1305 进行 AEAD 加密
- 每条消息包含唯一序列号防止重放攻击
- 握手记录签名防止篡改
-
证书体系:
- 自签名 CA 根证书
- 服务端/客户端证书包含 Ed25519 公钥
- 握手中验证证书链和签名
-
中转代理设计:
- 客户端通过代理与真实服务器通信
- 代理完成独立握手并保持端到端加密
- 支持双向加密转发,确保数据安全与完整性
- 可用于调试、负载分发或隐藏服务器 IP
-
随机握手(创新):
- 步骤7(KeyExchange1)-10(KeyConfirm2)的执行顺序由步骤6中的order_seed随机决定
- 每次握手都可能采用不同的排列组合(共24种可能),有效防止流量分析和中间人攻击
pip install cryptography
- 本项目为教育 / 实验用途,包含创新的种子码消息级加密技术
- 种子码动态加密技术理论上可应用于各种安全通信场景
更新日志:更新日志