Skip to content

卫星通信系统

版本: v3.2.0 | 状态: ✅ 生产就绪 | 5 IPC Handlers | 2 数据库表 | LEO 卫星加密消息

ChainlessChain 卫星通信系统实现了基于 LEO(低地轨道)卫星的加密消息传输,支持离线签名队列、紧急密钥撤销广播和灾难恢复。当传统网络不可用时,通过卫星链路保持关键通信能力。

系统架构

┌─────────────────────────────────────────────┐
│              SatelliteComm                  │
│      (消息加密 / Gzip 压缩 / 队列管理)       │
└──────┬──────────┬──────────┬────────────────┘
       │          │          │
       ▼          ▼          ▼
┌──────────┐ ┌──────────┐ ┌───────────────┐
│ LEO 卫星  │ │ 离线签名  │ │ 灾难恢复       │
│ Iridium  │ │ 队列同步  │ │ 种子短语恢复   │
│ 加密传输  │ │ 自动补发  │ │ 紧急密钥撤销   │
└──────────┘ └──────────┘ └───────────────┘
       │          │          │
       ▼          ▼          ▼
┌─────────────────────────────────────────────┐
│            SQLite 持久化                     │
│  satellite_messages / offline_signature_queue │
└─────────────────────────────────────────────┘

核心特性

  • 📡 卫星加密消息: 通过 Iridium 等 LEO 卫星发送加密消息
  • 📦 Gzip 压缩传输: 自动压缩消息内容,节省卫星带宽
  • 📝 离线签名队列: 离线环境下排队签名请求,恢复连接后自动同步
  • 🚨 紧急密钥撤销: 通过卫星广播紧急密钥撤销指令
  • 🔄 灾难恢复: 种子短语恢复方案,支持多设备恢复

发送卫星消息

javascript
const result = await window.electron.ipcRenderer.invoke(
  "satellite:send-message",
  {
    senderDid: "did:example:alice",
    recipientDid: "did:example:bob",
    content: "紧急通知:系统安全警报",
    provider: "iridium", // 卫星提供商
  },
);
// result.message = {
//   id: "uuid",
//   status: "sent",
//   compression: "gzip",
//   satellite_provider: "iridium",
// }

同步离线签名

javascript
const result = await window.electron.ipcRenderer.invoke(
  "satellite:sync-signatures",
);
// result = { success: true, synced: 5, remaining: 0 }

紧急密钥撤销

javascript
const result = await window.electron.ipcRenderer.invoke(
  "satellite:emergency-revoke",
  "key-compromised-001",
);
// result = {
//   success: true,
//   keyId: "key-compromised-001",
//   revoked: true,
//   broadcastedAt: 1709123456789,
// }

消息生命周期

创建 (queued) → 压缩 (gzip) → 加密 → 发送 (sent) → 接收 (received)

                                               失败 (failed) → 重试

IPC 接口完整列表

卫星通信操作(5 个)

通道功能说明
satellite:send-message发送卫星消息自动加密压缩,通过 LEO 发送
satellite:get-messages查询消息列表支持按状态过滤
satellite:sync-signatures同步离线签名将队列中的签名请求同步
satellite:emergency-revoke紧急密钥撤销通过卫星广播撤销指令
satellite:get-recovery-status查询恢复状态离线签名同步进度

数据库 Schema

2 张核心表:

表名用途关键字段
satellite_messages卫星消息存储id, sender_did, content_encrypted, status, provider
offline_signature_queue离线签名队列id, document_hash, signer_did, signature, synced

satellite_messages 表

sql
CREATE TABLE IF NOT EXISTS satellite_messages (
  id TEXT PRIMARY KEY,
  sender_did TEXT,
  recipient_did TEXT,
  content_encrypted TEXT,
  compression TEXT DEFAULT 'gzip',
  satellite_provider TEXT,
  status TEXT DEFAULT 'queued',          -- queued | sent | received | failed
  sent_at INTEGER,
  received_at INTEGER,
  created_at INTEGER DEFAULT (strftime('%s','now') * 1000)
);
CREATE INDEX IF NOT EXISTS idx_satellite_msgs_status ON satellite_messages(status);

offline_signature_queue 表

sql
CREATE TABLE IF NOT EXISTS offline_signature_queue (
  id TEXT PRIMARY KEY,
  document_hash TEXT NOT NULL,
  signer_did TEXT,
  signature TEXT,
  status TEXT DEFAULT 'pending',
  synced INTEGER DEFAULT 0,
  created_at INTEGER DEFAULT (strftime('%s','now') * 1000)
);
CREATE INDEX IF NOT EXISTS idx_offline_sig_status ON offline_signature_queue(status);

前端集成

SatelliteCommPage 页面

功能模块:

  • 统计卡片: 消息数 / 待同步 / 离线签名数
  • 发送表单: 输入收件人 DID 和消息内容,通过卫星发送
  • 消息列表: 展示状态、提供商、收件人信息
  • 同步操作: 触发离线签名同步

Pinia Store (satellite.ts)

typescript
const useSatelliteStore = defineStore("satellite", {
  state: () => ({
    messages: [],
    recoveryStatus: null,
    loading: false,
    error: null,
  }),
  actions: {
    sendMessage, // → satellite:send-message
    fetchMessages, // → satellite:get-messages
    syncSignatures, // → satellite:sync-signatures
    emergencyRevoke, // → satellite:emergency-revoke
    fetchRecoveryStatus, // → satellite:get-recovery-status
  },
});

关键文件

文件职责行数
src/main/security/satellite-comm.js卫星通信核心引擎~180
src/main/security/disaster-recovery.js灾难恢复模块~60
src/main/security/satellite-ipc.jsIPC 处理器(5 个)~130
src/renderer/stores/satellite.tsPinia 状态管理~90
src/renderer/pages/security/SatelliteCommPage.vue卫星通信页面~86

测试覆盖率

✅ satellite-comm.test.js                - 消息发送/查询/签名同步/撤销测试
✅ stores/satellite.test.ts              - Store 状态管理测试
✅ e2e/security/satellite-comm.e2e.test.ts - 端到端用户流程测试

相关文档

基于 MIT 许可发布