智能水表密钥注入实战:CJ/T188数据安全与生产线密钥烧录全链路

智能水表在产线阶段需要逐台烧录通信密钥——每台40秒,60万台水表需要约6700人天。安当CAS-KMS+HSM方案通过RESTful API批量密钥派生,单次API调用处理2000+水表密钥注入,密钥在HSM内生成永不离开硬件。

智能水表密钥注入实战:CJ/T188数据安全与生产线密钥烧录全链路

创建人:五台 最近更改时间:2026-07-28 11:55:31
1

摘要:智能水表在产线阶段需要逐台烧录通信密钥——每台40秒,60万台水表需要约6700人天。安当CAS-KMS+HSM方案通过RESTful API批量密钥派生,单次API调用处理2000+水表密钥注入,密钥在HSM内生成永不离开硬件。

业务背景

某水表制造企业年产智能水表60万台,销往全国30个城市的水务集团。每台水表出厂前需要烧录通信密钥——水务集团要求使用SM4算法加密水表与采集器之间的通信数据,密钥由水务集团统一分发管理。

当前生产线流程:水务集团将密钥文件(U盘)寄送到工厂 → 工程师在烧录工位上逐台复制密钥 → 每台水表烧录约40秒 → 完成后填写纸质记录表。60万台水表约需6700人天。

安全缺口分析

  1. 密钥分发链路不可控: U盘在快递过程中可能被复制或替换。某批次水表密钥曾在物流环节丢失,导致5000台已发货水表的密钥需要远程更换
  2. 产线操作无审计记录: 纸质记录表无法追溯"谁在什么时间烧录了哪台水表的什么密钥"
  3. 密钥从未轮换: 使用AKA协议的水表使用出厂时烧录的固定密钥,运行5年从未更换

安当方案设计

产线密钥注入架构

水务集团KSP                 水表产线                      城市水表
┌─────────────┐     ┌──────────────────┐     ┌──────────────┐
│ HSM根密钥    │     │ CAS-KMS批量API    │     │ 水表终端      │
│ 派生表具密钥 │────▶│ MES系统对接       │────▶│ 密钥写入安全区 │
│ 密钥不离开   │     │ HS内部派生        │     │ SM4加密通信   │
│ 硬件        │     │ 每台独立派生因子    │     │ 90天自动轮换  │
└─────────────┘     └──────────────────┘     └──────────────┘
                        │
                        ▼
                 ┌──────────────┐
                 │ CAS审计日志   │
                 │ 每台水表记录  │
                 │ 谁+时间+密钥ID│
                 └──────────────┘

密钥派生机制

每台水表的密钥通过HKDF-SM3派生函数生成:

派生因子 = 水表ID + 批次号 + 生产日期
                    ↓
     HKDF-SM3(根密钥, 派生因子, 输出长度=32字节)
                    ↓
    每台水表独立密钥SK_i(完全不同)
    
水表1因子:METER-00001:BATCH-2026Q3:20260711 → SK_1
水表2因子:METER-00002:BATCH-2026Q3:20260711 → SK_2(完全不同)

实施路径

1. CAS-KMS批量密钥派生API

import requests, json

class WaterMeterKeyInjector:
    """水表产线密钥批量注入"""
    
    def __init__(self, cas_url, project_token):
        self.cas = cas_url
        self.token = project_token
    
    def batch_derive(self, meters, batch_id):
        """
        批量派生水表密钥(HSM内部完成)
        meters: [{"meter_id": "MTR-001", "city": "SHANGHAI"}, ...]
        """
        payload = {
            "batch_id": batch_id,
            "meter_type": "WATER_NB_IOT",
            "derivation_algorithm": "HKDF_SM3",
            "key_algorithm": "SM4_256",
            "master_key_ref": "HSM-WATER-MASTER",
            "meters": meters
        }
        
        resp = requests.post(
            f"{self.cas}/keys/batch-derive",
            headers={"Authorization": f"Bearer {self.token}"},
            json=payload,
            timeout=120
        )
        
        if resp.status_code == 200:
            result = resp.json()
            return {
                "batch": batch_id,
                "count": len(meters),
                "hsm_ms": result.get("hsm_duration_ms", 0),
                "keys": result.get("derived_keys", [])
            }
        return {"error": resp.text}

# 产线应用:单批2000台水表
injector = WaterMeterKeyInjector(
    "https://cas.andang.cn",
    "water_prod_token"
)

meters = [{"meter_id": f"MTR-SH-{i:06d}", "city": "SHANGHAI"} 
          for i in range(2000)]
result = injector.batch_derive(meters, f"SH-BATCH-{batch_num}")
print(f"完成{result['count']}台,HSM耗时{result['hsm_ms']}ms")

2. 密钥烧录状态验证

-- 查询批次烧录状态
SELECT batch_id, COUNT(*) AS total, 
       SUM(CASE WHEN status='success' THEN 1 ELSE 0 END) AS success,
       ROUND(AVG(hsm_duration_ms), 2) AS avg_hsm_ms
FROM cas_audit.key_injection_log
WHERE batch_id = 'SH-BATCH-20260711'
GROUP BY batch_id;

-- SH-BATCH-20260711 | 2000 | 2000 | 1.24

验证方法

# 验证单台水表密钥是否已正确派生
curl -X POST https://cas.andang.cn/api/v1/keys/verify \
  -H "Authorization: Bearer <token>" \
  -d '{"key_ref": "MTR-SH-000001_key", "verify_method": "challenge"}'

方案价值

  1. 产线效率从40秒/台降到毫秒级: CAS批量API单次2000+水表,HSM内部完成密钥派生
  2. 密钥零泄露: 密钥在HSM内生成,产线系统不接触明文
  3. 每台水表独立审计: CAS记录每台水表的密钥派生时间、操作人、批次号

适用场景: 智能水表产线、智能燃气表产线、热量表产线、物联网终端设备密钥注入


联系电话: 158-3060-0995 | 邮箱: marketing@andang.cn | 官网: https://www.andang.cn/