离线签名流程设计

离线签名是整个 Keystore 认证体系的安全基石。本章围绕签名请求、离线环境构建、签名时机三个子课题,从架构边界、分层职责、数据流与控制流、信任链路、选型权衡、风险点、落地步骤、验收标准八个维度展开,建立可工程落地的离线签名流程设计框架。

4.1 签名请求:发起边界与请求结构

4.1.1 边界定义

签名请求的边界划分决定了信任的起始点。典型架构中,签名请求由在线业务系统(如认证网关、交易服务)发起,经严格结构化后通过 单向数据二极管 或 人工介质传输 进入离线环境。在线侧不能反向访问离线侧,只能向离线侧写入请求。

边界属性要求风险点
网络隔离离线环境无任何 TCP/IP 出站能力隐蔽信道(如 DNS 隧道)
介质传递使用光盘/专用加密 U 盘,单次写入介质重用导致数据残留
请求格式统一 JSON Schema,包含请求 ID、待签名的数据哈希、元数据(时间戳、业务批次)格式不一致导致签名失败或歧义

4.1.2 请求结构示例

{
  "signRequest": {
    "requestId": "REQ-2025-07-001",
    "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "metadata": {
      "timestamp": "2025-07-01T12:00:00Z",
      "businessType": "certificate_renewal",
      "batchSize": 1
    }
  },
  "challenge": "c1d3...9f0a"
}

4.1.3 信任链路起点

签名请求的信任链始于请求生成方的身份认证。推荐采用 HMAC-SHA256 对请求体计算摘要,并将摘要附加至请求文件。离线环境在读取请求时先验证 HMAC,确认请求未被篡改且来自已注册的发起方。

选型权衡: 使用 HMAC 而非非对称签名主要是为了运算速度与密钥管理简化,但需确保离线环境内预置相同的 HMAC 密钥,该密钥的注入应在离线环境构建阶段完成。

4.2 离线环境构建:分层与组件职责

离线环境是签名执行的核心堡垒。采用 物理隔离 + 角色分层 架构,从上至下分为三个逻辑层:

  1. 请求接入层:负责接收介质、校验请求完整性、写入待签名队列。
  2. 签名执行层:持有 HSM / 加密机 / 冷钱包,执行实际签名操作。
  3. 结果输出层:将签名结果加密打包,通过单向方式回传至在线网络。

4.2.1 组件职责矩阵

组件职责安全约束
介质写入机光盘/加密 U 盘刻录请求文件仅支持写入,无读回能力
校验服务验证 HMAC、解析 JSON、计算请求指纹需独立可信硬件(TEE)
签名队列按优先级存储待签请求,支持人工审核队列数据结构需加密存储
签名引擎调用 Keystore(HSM/冷钱包)执行签名签名引擎与 Keystore 之间使用专用加密通道
输出打包机对签名结果进行数字信封封装公钥来自在线 CA,私钥保存在离线环境

4.2.2 构建步骤(落地参考)

  1. 采购硬件:HSM(FIPS 140-2 Level 3 或以上)、空气间隙网关、光盘刻录机。
  2. 网络部署:离线网络完全断开,采用光纤单向同步卡(Data Diode)连接结果输出。
  3. 操作系统加固:最小化安装,禁用所有对外端口,仅保留 tty 登录。
  4. 密钥注入:在物理安全人员监护下,使用智能卡 + 密钥分割技术注入 HSM。
  5. 功能验证:使用 mock 请求测试完整签名链,确认输出结果可在在线侧验证通过。

4.3 签名时机:触发条件与同步周期

签名时机决定了业务延迟与安全风险的平衡。主要分为三种触发模式:

  • 实时轮询:离线环境定期(例如每 30 秒)扫描介质插入事件,一旦发现新请求立即签名。适用于高吞吐场景,但会增加在线侧等待超时窗口。
  • 人工触发:由安全运维人员通过双人控制(Two‑Person Rule)手动执行签名脚本。适用于重大证书签发或高风险交易,延迟以分钟计。
  • 定时批处理:按固定窗口(如每天 02:00 AM)集中签名全天累积的请求。适合批量续期场景,降低运维频率。

4.3.1 数据流与控制流

离线签名流程数据流与控制流 在线业务网络 签名请求发起方 请求打包 介质写入(光盘 / 加密 U 盘) 离线签名环境 请求校验(HMAC) 签名队列 签名引擎(HSM / 冷钱包) 结果打包(数字信封) 输出介质(只读回传) 控制流:请求发起 → 介质写入(单向)→ 校验入队 → 签名 → 结果打包 → 介质回传 信任链路:HMAC 验证 → HSM 硬件背书 → 数字信封签名结果

4.3.2 签名时机选型权衡

触发模式延迟安全性运维成本适用场景
实时轮询秒级中(需频繁扫描介质状态)低(自动化)交易签名、高频需求
人工触发分钟级高(双人操作)高(需值守)重大证书、大额交易
定时批处理小时级高(减少人员介入)低(Crontab)批量续期、非实时

4.4 风险点与应对

  • 密钥不可用: HSM 故障或密钥被误删 → 采用 密钥分割与多方恢复,至少 2/3 分片才能重建。
  • 签名队列溢出: 高峰期请求堆积 → 设计背压机制,在线侧削峰;离线队列使用环形缓冲区,超时请求回滚。
  • 介质丢失/损坏: 请求或结果介质在传输中损坏 → 请求侧留存数据指纹,离线侧可请求重发(通过单向介质再写一次)。
  • 时间同步攻击: 即使离线无网络,仍需通过 GPS 或 NFC 时间源同步,防止重放攻击 ➔ 签名中嵌入时间戳并由 HSM 硬件时钟保障。

4.5 落地步骤与验收标准

4.5.1 落地步骤

  1. 选定签名触发模式(建议混合:轮询 + 人工 Override)。
  2. 部署单向数据写入设备(Data Diode 或光盘写入机)。
  3. 安装 HSM,注入密钥并配置签名策略(例如仅允许指定哈希算法)。
  4. 编写校验、签名、打包脚本,集成至离线工作站。
  5. 搭建模拟在线环境,执行端到端签名测试。
  6. 培训运维人员双人操作流程,进行红蓝对抗演练。

4.5.2 验收标准

  • 功能验收: 100 次离线签名请求,在线侧验证签名通过率 100%,无错误签名输出。
  • 安全验收: 物理隔离测试:离线环境无法 ping 通任何外部 IP;介质注入测试:恶意修改请求文件后 HMAC 校验失败,签名引擎拒绝执行。
  • 性能验收: 实时轮询模式下,从请求写入介质到签名结果返回在线侧平均耗时 ≤ 60 秒;定时批处理模式下,1,000 条请求在 5 分钟内完成签名。
  • 可靠性验收: 连续运行 72 小时无中断;模拟 HSM 故障,密钥恢复时间 ≤ 30 分钟。
注意: 离线环境构建完成后,不可再连接任何网络进行配置更新。所有补丁和策略变更必须通过物理介质(如光盘)由双人监督执行,变更记录永久保存。

本章通过对签名请求结构、离线环境分层设计及签名时机三种模式的深入分析,构建了可工程化的离线签名流程框架。下一阶段将聚焦第 5 章“密钥生成与存储分层设计”,进一步细化 HSM 与软件密钥仓库的协作边界。