水务SCADA密钥管理实战:操作员UKEY认证与水务燃气统一密钥平台落地

水务SCADA涉及取水泵站、加压泵站、水厂处理、管网监测全链条——每套SCADA设备需要独立的操作员认证和通信加密密钥。安当CAS-KMS+ASP+HSM方案为水务燃气行业提供统一的密钥管理平台,从操作员UKEY认证、PLC/RTU设备密钥保护到管线监测数据加密。

水务SCADA密钥管理实战:操作员UKEY认证与水务燃气统一密钥平台落地

创建人:五台 最近更改时间:2026-07-27 11:34:44
6

摘要:水务SCADA涉及取水泵站、加压泵站、水厂处理、管网监测全链条——每套SCADA设备需要独立的操作员认证和通信加密密钥。安当CAS-KMS+ASP+HSM方案为水务燃气行业提供统一的密钥管理平台,从操作员UKEY认证、PLC/RTU设备密钥保护到管线监测数据加密。

客户痛点:水务SCADA系统的三重安全缺口

某省级水务集团管理着全省23座自来水厂、47个加压泵站和超过1800公里的供水管网。2025年的内部安全审计发现三个典型问题:

问题1:SCADA操作员认证薄弱。 取水泵站和加氯间的工控机使用同一套密码登录,5名操作员共用账号。一旦密码泄露,攻击者可以远程操作全线的泵站设备——包括调整加氯量(直接影响水质安全)和启停取水泵(影响供水压力)。工控机操作系统为Windows 7,无屏幕保护锁定,操作员离岗时系统仍处于已登录状态。

安当解法: ASP企业身份认证服务平台通过RADIUS协议对接SCADA系统,每名操作员分配独立UKEY智能密码钥匙。操作员须插入UKEY并输入6-16位PIN码才能登录。ASP认证延迟<50ms,不影响SCADA操作的实时性。UKEY通过国密认证安全芯片保护私钥——即便PIN码被窃取,没有物理UK也无法登录。

问题2:密钥分散管理。 各水厂的PLC和RTU设备密钥使用Excel文件管理,加密密钥自2019年系统上线以来从未更换过。生产网与管理网之间未做严格隔离,一台感染勒索病毒的办公电脑可以通过网络嗅探到PLC的通信密钥。

安当解法: CAS-KMS统一密钥管理平台将所有水厂的PLC/RTU设备密钥纳入HSM硬件保护。密钥在FIPS 140-2/3认证的HSM内生成和存储,管理员通过API调用密钥服务但无法接触密钥明文。KSP配置90天自动轮换策略,密钥到期自动更换。

问题3:业务系统各自为政。 水务和燃气分属不同事业部,各自建设密钥管理系统——两套系统互不兼容,运维团队需要维护两套HSM和两套密钥管理界面。

安当解法: CAS-KMS的项目隔离功能在同一平台上划分"水务密钥空间"和"燃气密钥空间"。两套业务共享同一HSM信任根,但密钥互不可见。运维团队维护一套平台即可覆盖两套业务。

安当三层解决方案

┌─────────────────────────────────────────────────────────────┐
│  第一层:操作员身份认证(ASP + UKEY)                        │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ · 每个操作员分配独立UKEY(国密芯片,SM2证书)         │   │
│  │ · 登录时须UKEY+PIN双因子认证                          │   │
│  │ · ASP通过RADIUS对接SCADA系统                          │   │
│  │ · 认证延迟<50ms,不影响SCADA实时操作                    │   │
│  │ · 审计日志记录每次登录:谁+什么时间+哪个泵站+哪个设备    │   │
│  └─────────────────────────────────────────────────────┘   │
├─────────────────────────────────────────────────────────────┤
│  第二层:PLC/RTU设备密钥管理(CAS-KMS + HSM)               │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ · 所有设备密钥在HSM内生成,API调用但不接触明文         │   │
│  │ · 按水厂/泵站独立密钥项目空间                          │   │
│  │ · 密钥自动轮换(90天),到期前7天系统推送告警           │   │
│  │ · CAS审计日志:每次密钥操作可追溯至具体操作人            │   │
│  └─────────────────────────────────────────────────────┘   │
├─────────────────────────────────────────────────────────────┤
│  第三层:管线监测数据加密(TDE + KSP)                       │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ · 管网压力传感器/流量计数据SM4加密存储                │   │
│  │ · TDE驱动层加密,对SCADA应用完全透明                   │   │
│  │ · 性能影响<3%,45Gb/s硬件加速                          │   │
│  │ · DBA只能看到密文                                      │   │
│  └─────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────┘

技术实现

1. SCADA操作员UKEY认证的实施步骤

水务SCADA的操作员认证不能影响控制系统的实时性——调度员调整加氯量后,指令必须在100ms内到达PLC执行器。ASP认证延迟<50ms,可满足这一时延要求。

以下为ASP通过RADIUS协议对接水务SCADA系统的完整实施代码:

import requests, time, hashlib

class WaterSCADAAuth:
    """水务SCADA系统ASP+UKEY双因素认证"""
    
    def __init__(self, asp_endpoint, radius_secret):
        self.asp = asp_endpoint          # https://asp.andang.cn/api/v1
        self.radius_secret = radius_secret
        self.session_store = {}          # 本地会话缓存
    
    def authenticate_operator(self, station, operator, uk_serial, pin_hash):
        """
        泵站操作员UKEY+PIN双因素认证
        
        参数:
            station: 泵站编号,如 WTP_JIADING_01
            operator: 操作员工号
            uk_serial: UKEY序列号(19位字母数字)
            pin_hash: PIN码的SHA256哈希
        返回:
            token或拒绝原因
        """
        # Step 1: 验证UKEY证书有效性(CAS在线OCSP查询,耗时<10ms)
        cert_check = requests.post(
            "https://cas.andang.cn/api/v1/cert/verify",
            headers={"X-Request-ID": f"{station}-{int(time.time())}"},
            json={
                "cert_serial": self._get_cert_serial(uk_serial),
                "verify_method": "ocsp"
            },
            timeout=5
        )
        if not cert_check.json().get("valid"):
            self._log_audit(operator, station, "UKEY证书已吊销或过期")
            return {"status": "denied", "reason": "UKEY证书无效,请联系统管理员"}
        
        # Step 2: ASP双因素认证(密码+UK硬件双重校验)
        auth_resp = requests.post(
            f"{self.asp}/auth/mfa",
            json={
                "username": operator,
                "password": self._get_user_password(operator),
                "uk_serial": uk_serial,
                "pin_hash": pin_hash,          # UKEY内部校验PIN,不在网络传输
                "mfa_type": "ukey_pin",
                "system": "SCADA_WATER",
                "station": station
            },
            timeout=5
        )
        if auth_resp.status_code != 200:
            self._log_audit(operator, station, f"认证失败: {auth_resp.text}")
            return {"status": "denied", "reason": "认证失败,请检查UK和PIN码"}
        
        # Step 3: 获取操作员权限范围
        permissions = requests.post(
            f"{self.asp}/authorization/check",
            json={
                "username": operator,
                "system": "SCADA_WATER",
                "station": station
            }
        ).json()
        
        # Step 4: 签发会话Token(8小时,与值班时间对齐)
        token_resp = requests.post(
            f"{self.asp}/session/create",
            json={
                "username": operator,
                "auth_method": "ukey_pin_double_factor",
                "system": "SCADA_WATER",
                "session_hours": 8,
                "permissions": permissions.get("allowed_equipment", []),
                "max_session_extensions": 1
            }
        )
        
        session_token = token_resp.json()["access_token"]
        self.session_store[session_token] = {
            "operator": operator,
            "station": station,
            "login_time": time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()),
            "expires_at": token_resp.json()["expires_at"]
        }
        
        # Step 5: 写入审计日志
        self._log_audit(operator, station, "UKEY+PIN双因子认证通过")
        
        return {
            "status": "approved",
            "token": session_token,
            "operator_name": permissions.get("display_name"),
            "authorized_equipment": permissions.get("allowed_equipment", []),
            "expires_at": token_resp.json()["expires_at"]
        }
    
    def validate_session(self, token):
        """验证会话Token是否有效"""
        return self.session_store.get(token) is not None
    
    def _log_audit(self, operator, station, message):
        log = {
            "timestamp": time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()),
            "operator": operator,
            "station": station,
            "event": message,
            "system": "SCADA_WATER"
        }
        # 异步写入ASP审计日志
        requests.post(f"{self.asp}/audit/log", json=log, timeout=2)
    
    def _get_cert_serial(self, uk_serial):
        """根据UKEY序列号查询设备证书序列号"""
        return f"CERT-{uk_serial}"
    
    def _get_user_password(self, username):
        """从AD/LDAP获取用户密码哈希"""
        return requests.get(
            f"{self.asp}/identity/{username}/password-hash"
        ).json().get("password_hash")

# 实施示例
auth = WaterSCADAAuth("https://asp.andang.cn", "radius_secret_2026")
result = auth.authenticate_operator(
    station="WTP_JIADING_01",
    operator="WANG.WU",
    uk_serial="UK-E3A7B2C1D9F4",
    pin_hash=hashlib.sha256(b"123456").hexdigest()
)
print(f"认证结果: {result['status']}")
if result['status'] == 'approved':
    print(f"操作员: {result['operator_name']}")
    print(f"可操作设备: {', '.join(result['authorized_equipment'])}")

产品亮点: ASP已通过公安部第三研究所网络安全产品专用认证,支持OAuth2.0/RADIUS/FIDO标准协议,用户容量200,000+,核心验证吞吐量140次/秒,平均认证延迟<50ms。UKEY通过国密认证安全芯片保护私钥,支持SM2/SM3/SM4国密算法全栈。

2. 水务燃气统一密钥项目管理

CAS-KMS通过项目管理功能在同一平台上隔离水务和燃气的密钥空间。以下为API实施步骤:

# 步骤1:创建水务事业部密钥项目
curl -X POST https://cas.andang.cn/api/v1/projects/create \
  -H "Authorization: Bearer <admin_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "project_name": "WATER_SCADA_PROD",
    "organization": "水务事业部",
    "algorithm_policy": ["SM4_256", "SM2", "SM3"],
    "hsm_protection": true,
    "key_rotation_days": 90,
    "roles": {
      "admin": "water_admin@watergroup.com",
      "operator": "water_operator@watergroup.com",
      "auditor": "water_auditor@watergroup.com"
    },
    "access_control": {
      "mfa_required": true,
      "ip_whitelist": ["10.88.1.0/24", "10.88.2.0/24"],
      "allowed_hours": "00:00-23:59"
    }
  }'
# 响应
# {"project_id": "proj_water_scada", "hsm_key_ref": "HSM-WATER-ROOT", "status": "active"}

# 步骤2:创建燃气事业部密钥项目(与水务完全隔离)
curl -X POST https://cas.andang.cn/api/v1/projects/create \
  -H "Authorization: Bearer <admin_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "project_name": "GAS_SCADA_PROD",
    "organization": "燃气事业部",
    "algorithm_policy": ["SM4_256", "SM2", "SM3"],
    "hsm_protection": true,
    "key_rotation_days": 90,
    "roles": {
      "admin": "gas_admin@gasgroup.com",
      "operator": "gas_operator@gasgroup.com",
      "auditor": "gas_auditor@gasgroup.com"
    },
    "access_control": {
      "mfa_required": true,
      "ip_whitelist": ["10.89.1.0/24", "10.89.2.0/24"],
      "allowed_hours": "00:00-23:59"
    }
  }'
# 响应
# {"project_id": "proj_gas_scada", "hsm_key_ref": "HSM-GAS-ROOT", "status": "active"}

# 验证:水务Admin尝试访问燃气密钥(应被拒绝)
curl -X GET https://cas.andang.cn/api/v1/keys/list \
  -H "Authorization: Bearer <water_admin_token>" \
  -H "X-Project: GAS_SCADA_PROD"
# 响应 403: {"error": "access_denied", "message": "无权访问指定项目"}

产品亮点: 水务Admin只属于WATER_SCADA_PROD项目的admin角色,访问GAS_SCADA_PROD的API时CAS自动返回403。三员分离(管理员/操作员/审计员)满足等保三级对不同角色权限分离的要求。HSM同时为两套业务提供统一的硬件信任根——水务和燃气的根密钥在同一个物理HSM上逻辑隔离存储。

3. 管线监测数据TDE加密

SCADA系统采集的管网压力、流量、水质数据需要持久化存储,TDE透明加密在存储层保护:

-- 步骤1:检查管网监测数据库当前加密状态
SELECT table_schema AS 数据库,
       table_name AS 数据表,
       encryption_status AS 加密状态,
       encryption_algorithm AS 加密算法,
       key_id AS 密钥ID
FROM tde_catalog.encryption_status
WHERE database_name = 'pipeline_monitor';

-- 检查结果(加密前)
-- pipeline_monitor | t_pressure    | plaintext | NULL         | NULL
-- pipeline_monitor | t_flow        | plaintext | NULL         | NULL
-- pipeline_monitor | t_water_qual  | plaintext | NULL         | NULL
-- pipeline_monitor | t_pump_status | plaintext | NULL         | NULL

-- 步骤2:启用TDE SM4加密(零改造,不修改业务代码)
EXEC tde_enable_table_encryption
  @database_name = 'pipeline_monitor',
  @table_name = 't_pressure',
  @encryption_algorithm = 'SM4_256',
  @key_id = 'tde_pipeline_pressure_k1',
  @rotation_interval_days = 90,
  @mode = 'online';  -- 在线加密,不锁表

-- 步骤3:逐步加密其余各表
EXEC tde_enable_table_encryption @database_name='pipeline_monitor', @table_name='t_flow', @encryption_algorithm='SM4_256', @key_id='tde_pipeline_flow_k1', @mode='online';
EXEC tde_enable_table_encryption @database_name='pipeline_monitor', @table_name='t_water_qual', @encryption_algorithm='SM4_256', @key_id='tde_pipeline_qual_k1', @mode='online';
EXEC tde_enable_table_encryption @database_name='pipeline_monitor', @table_name='t_pump_status', @encryption_algorithm='SM4_256', @key_id='tde_pipeline_pump_k1', @mode='online';

-- 步骤4:验证加密状态
SELECT table_name, encryption_status, algorithm, key_id
FROM tde_catalog.encryption_status
WHERE database_name = 'pipeline_monitor' AND encryption_status = 'encrypted';

-- t_pressure    | encrypted | SM4 | tde_pipeline_pressure_k1
-- t_flow        | encrypted | SM4 | tde_pipeline_flow_k1
-- t_water_qual  | encrypted | SM4 | tde_pipeline_qual_k1
-- t_pump_status | encrypted | SM4 | tde_pipeline_pump_k1

TDE的性能影响实测(硬件:16核Intel Xeon Gold、64GB、MySQL 8.0):

操作 数据量 未加密 TDE加密后 影响
批量INSERT 1000行 4.46ms 4.59ms +2.9%
单行SELECT(索引) 1行 2.1ms 2.16ms +2.8%
范围查询 10000行 1994ms 2053ms +3.0%
TPC-C混合 基准 100% 97.2% -2.8%

安当方案 vs 传统做法对比

对比维度 传统做法 安当方案 客户价值
SCADA操作员认证 共享账号+静态密码 ASP+UKEY双因子 身份唯一可追溯
UKEY安全等级 普通USB存储 国密认证安全芯片 私钥不可复制
密钥管理方式 Excel文件+人工 CAS-KMS+HSM 密钥永不泄露
多业务密钥隔离 各自建设两套系统 项目隔离统一平台 运维成本降60%
密钥轮换 从未换过 KSP 90天自动轮换 零运维工作量
数据库加密 明文存储 TDE驱动层SM4加密 DBA只能看见密文
审计追溯 无操作记录 CAS全链路审计日志 满足等保三级
合规举证 自建技术文档 产品认证证书直接引用 举证成本降70%

方案价值总结

  1. 操作员身份100%可追溯: 每名操作员分配独立UKEY(国密认证安全芯片、SM2/SM3/SM4全算法、USB+NFC双接口、PIN码硬件保护)。ASP双因素认证覆盖所有SCADA操作站,认证延迟<50ms不影响实时控制。ASP已获公安部第三研究所网络安全产品专用认证。

  2. 密钥资产零泄露: CAS-KMS项目管理按事业部隔离水务和燃气密钥空间。HSM(FIPS 140-2/3+国密局双认证)硬件保护根密钥,验签时延<1ms。密钥90天自动轮换,到期前7天系统推送告警。CAS全链路审计日志记录每次密钥操作,满足等保三级追溯要求。

  3. 一套平台覆盖两套业务: CAS-KMS项目隔离功能使水务和燃气共享同一HSM信任根但密钥互不可见。统一运维界面减少60%管理成本。TDE已获国密局商用密码产品认证,驱动层透明加密对SCADA应用完全无感,性能影响<3%。

适用场景: 水务集团SCADA系统、燃气集团工控系统、城市生命线统一密钥管理平台、供水管网监测系统。


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