Skip to content

Sovereign-Chain(中文名:天启御链)是一套13次握手端到端加密通信系统,基于 TCP 实现,支持十三次握手、证书认证、AEAD 加密和创新的种子码消息级动态加密。 本项目适合教育、研究和高安全需求场景演示。

License

Notifications You must be signed in to change notification settings

XDDXMT/Sovereign-Chain

Repository files navigation

天启御链 / Sovereign-Chain

Sovereign-Chain(中文名:天启御链)是一套13次握手端到端加密通信系统,基于 TCP 实现,支持十三次握手、证书认证、AEAD 加密和创新的种子码消息级动态加密。 本项目适合教育、研究和高安全需求场景演示。


特性

  • 🔐 端到端加密(E2EE)

    • 使用 X25519 进行临时密钥交换
    • 使用 Ed25519 静态密钥进行身份签名
    • 使用 ChaCha20-Poly1305 进行 AEAD 加密
    • 使用 HKDF-SHA256 派生会话密钥
  • 十三次握手(Client ↔ Server)

    1. ClientHello : 客户端发送临时公钥和随机数 (client_eph_pub || nonce_c)
    2. ServerHello : 服务端发送临时公钥和随机数 (server_eph_pub || nonce_s)
    3. ServerCertSend : 服务端发送证书 (server_cert in PEM)
    4. ClientCertRequest: 服务端请求客户端证书 ("REQUEST_CLIENT_CERT")
    5. ClientCertSend : 客户端发送证书 (client_cert in PEM)
    6. SeedCode : 服务端发送32字节种子码 (核心创新点)
    7. KeyExchange1 : 服务端发送密钥交换扩展数据
    8. KeyExchange2 : 客户端发送密钥交换扩展数据
    9. KeyConfirm1 : 服务端发送密钥确认数据
    10. KeyConfirm2 : 客户端发送密钥确认数据
    11. ClientAuth : 客户端发送握手记录签名 (signature_client(transcript_so_far))
    12. ServerAuth : 服务端发送握手记录签名 (signature_server(transcript_so_far))
    13. SecureAck : 服务端发送加密的ACK(使用派生的密钥,证明密钥确认)
      步骤7(KeyExchange1)-10(KeyConfirm2)的执行顺序由步骤6中的order_seed随机决定,每次握手都可能采用不同的排列组合(共24种可能),有效防止流量分析和中间人攻击。
  • 🛡️ 证书管理

    • 自建 CA(根 CA)
    • 服务端 / 客户端证书签发
    • 握手中双方证书验证与签名验证
  • 高安全性

    • HKDF-SHA256 派生会话密钥
    • 独立的客户端-服务端、服务端-客户端对称密钥
    • 防重放和防篡改设计
  • 🔁 中转代理(Proxy)支持

    • 新增 client_proxy.pyproxy_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   # 客户端私钥

快速开始

1. 生成证书

python ca.py

生成 CA 根证书和服务端/客户端证书。

2. 启动服务端

python server.py

监听 5555 端口,等待客户端连接。

3. 启动客户端(直连服务端)

python client.py

客户端会与服务端完成十三次握手,建立安全通道,然后可发送加密消息。

4. 使用代理模式(中转)

启动代理服务端

python proxy_server.py

启动客户端代理

python client_proxy.py

客户端会与代理完成握手,代理再与真实服务器完成握手,中转模式下依然保持端到端加密。

13次握手示意图

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)
Loading

使用示例

msg> hello server
server: echo: hello server

msg> test123
server: echo: test123

所有消息都经过端到端加密和种子码二次加密,服务端无法篡改内容,客户端与服务端可互相验证身份。 在代理模式下,客户端与真实服务器之间仍保持完整加密和身份验证。


安全设计说明

  1. 十三次握手确保双方身份验证和密钥确认:

    • 步骤1-2:交换临时公钥和随机数,建立共享密钥基础
    • 步骤3-5:双向证书验证(服务端证书 → 客户端证书请求 → 客户端证书)
    • 步骤6:种子码传输(核心创新点,实现消息级加密)
    • 步骤7-8:密钥交换扩展(增强前向安全性)
    • 步骤9-10:密钥确认(防止中间人攻击)
    • 步骤11-12:双向身份认证(签名验证握手完整性)
    • 步骤13:加密确认(证明密钥已正确安装)
  2. 会话密钥派生

    • 使用 X25519 生成共享密钥
    • 通过 HKDF-SHA256 派生两个独立密钥:
      • 客户端→服务端加密密钥
      • 服务端→客户端加密密钥
  3. 种子码动态加密(创新)

    • 每条消息使用种子码+计数器派生独立密钥
    • 实现真正的消息级安全隔离
    • 即使会话密钥泄露,也无法解密历史消息
    • 破解单条消息不影响其他消息安全
  4. 加密与认证

    • 使用 ChaCha20-Poly1305 进行 AEAD 加密
    • 每条消息包含唯一序列号防止重放攻击
    • 握手记录签名防止篡改
  5. 证书体系

    • 自签名 CA 根证书
    • 服务端/客户端证书包含 Ed25519 公钥
    • 握手中验证证书链和签名
  6. 中转代理设计

    • 客户端通过代理与真实服务器通信
    • 代理完成独立握手并保持端到端加密
    • 支持双向加密转发,确保数据安全与完整性
    • 可用于调试、负载分发或隐藏服务器 IP
  7. 随机握手(创新)

    • 步骤7(KeyExchange1)-10(KeyConfirm2)的执行顺序由步骤6中的order_seed随机决定
    • 每次握手都可能采用不同的排列组合(共24种可能),有效防止流量分析和中间人攻击

依赖

pip install cryptography

备注

  • 本项目为教育 / 实验用途,包含创新的种子码消息级加密技术
  • 种子码动态加密技术理论上可应用于各种安全通信场景

更新日志:更新日志

About

Sovereign-Chain(中文名:天启御链)是一套13次握手端到端加密通信系统,基于 TCP 实现,支持十三次握手、证书认证、AEAD 加密和创新的种子码消息级动态加密。 本项目适合教育、研究和高安全需求场景演示。

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages