工业互联网等保合规指南:工信部分类分级+等保2.0三级落地

工业互联网等保合规指南:工信部分类分级+等保2.0三级落地

工业互联网等保合规这件事,被很多制造企业当成"买几台安全设备、填几张测评表"就能过关。真实情况相反:等保测评追的是一条证据链,从设备怎么证明自己是谁,到数据怎么加密落库,再到日志能不能证明没被改过,任何一环拿不出可核查的材料,测评就卡在那里。某汽车零部件工厂在分级评估后,整改了四个月才把三级的测评项补齐。

坐标先立:工业互联网的合规可以按"安全计算环境、安全区域边界、安全通信网络、安全管理中心"四块来拆,这是国内网络安全等级保护相关标准的通用框架。工控场景的特殊性在于,它的"计算环境"里大量是 PLC、SCADA、边缘网关这类工业设备,不是普通服务器;它的"边界"是 IT 与 OT 交汇的地方。本文切入的是最容易被做浅的一块:制造企业怎么把工业互联网等保合规从纸面要求,落到可提交、可复现、可追溯的密码与身份证据上。

01 | 工业互联网等保合规的这件事,难在哪儿

工业互联网等保合规的复杂度,不在算法,而在"设备杂、协议旧、边界糊、证据散"。具体难在下面五处。

首要难点在设备身份没有统一锚点。 一条产线上的 PLC、工业机器人、边缘网关、SCADA 服务器,往往来自不同厂商、不同年代,有的根本不支持现代身份协议。等保测评要求"身份鉴别",但很多设备的"身份"只是一个写死在配置文件里的 IP 或用户名,谁拿着这个配置都能接入。要补齐这一项,就得给每台设备签发可验证的凭据,而不是继续依赖共享口令。

其次,数据保密的要求落不到 OT 侧。 工艺参数、配方、设备状态这些高敏感数据,大多直接在 PLC 与 SCADA 之间明文流转,落库时也是明文。等保测评会追到"数据保密性"这一项,要求对重要数据做加密保护。但 OT 侧的设备很多不能承受重改造,这就卡住了:要么改不动,要么改完影响生产节拍。

再有一处难点在完整性无人兜底。 下发给设备的控制指令、设备的配置变更、运维的审计日志,这三样如果只靠明文传输和本地文件保存,一旦被篡改根本发现不了。测评里的"数据完整性"和"审计完整性"两项,要的是"能证明没被改过",而不是"我们相信没被改过"。

还有一处难点在密钥管理散落各处。 设备有设备密钥,应用有应用密钥,数据库有数据库密钥,很多制造企业这三套密钥各管各的,没有统一的派生与轮换规则。等保和密码应用测评会一起追问:根密钥在哪里生成、怎么存储、多久轮换一次、历史数据怎么解密。散落的密钥体系,回答不了这些问题。

最后一处难点在证据无法串联。 身份做了、加密做了、签名做了,但三件事用的是三套系统、三份台账,测评时只能分别交材料,拼不出一条完整的证据链。测评人员要的是"这台设备用这张凭据接入、这条数据用这把密钥加密、这条日志用这个签名防篡改"能串起来,而不是三个孤立的事实。

把这五处难点串起来看,这套合规的核心矛盾是:测评看的是证据链,而企业交付的是孤岛式的安全动作。

02 | 机制拆解:工业互联网等保合规的三道关

先把三道关各自的职责划清楚,再看它们怎么拼成证据链。

关 对应测评维度 要解决的事 典型手段 缺了会怎样
身份鉴别关 安全计算环境·身份鉴别 设备与操作员怎么证明自己是谁 设备凭据 + 签名验签 + 多因素 任何人拿配置就能接入
数据保密关 安全计算环境·数据保密性 重要数据怎么加密保护 透明加密 + 分域密钥 + HSM 根密钥 配方与参数明文泄露
完整性关 安全计算环境·数据完整性 指令与日志被篡改能否发现 指令签名 + 日志签名 + 审计 篡改指令、造假日志无感知

这三道关的边界要讲清楚:身份鉴别关只解决"这台设备是不是它说的那台",不解决"它的数据是否加密";数据保密关只解决"数据落盘是不是密文",它依赖身份鉴别关给出的可信身份;完整性关不直接参与接入,但它决定前两关产生的凭据、密钥、日志是否以可验证形态留存。很多工厂把这三件事分别交给三家厂商、三个立项,最后三份材料拼不出一条证据链。

工业互联网等保合规里的身份鉴别关

身份鉴别关的落点是"每台设备一把可验证的凭据"。设备用私钥对接入请求签名,平台只认公钥验签;操作员登录设备维护终端时叠加多因素。凭据的私钥必须留在设备侧的安全载体里,不能落配置文件。这样测评时交付的是"设备身份由签名验签保证、私钥不出设备"的闭环,而不是"我们设了强口令"的口头说明。

工业互联网等保合规里的数据保密关

数据保密关的落点是"重要数据按域加密、密钥分域派生"。工艺参数、配方这类高敏感字段,写入时自动加密、读取时自动解密,业务不需要改代码;加密所用的会话密钥,由主密钥按"产线 + 设备"这类因子派生,每台设备各不相同。这样即使某一个应用的数据密钥泄露,也不会连带影响其他设备或产线。

工业互联网等保合规里的完整性关

完整性关的落点是"指令和日志都要带签名"。下发给设备的控制指令,由授权方签名,设备侧验签通过才执行,被篡改的指令直接拒绝;设备的审计日志条目也逐条签名,事后任何改动都能被验签发现。这一关让"数据完整性"和"审计完整性"两项从承诺变成可核查的事实。

下面这张图说明三道关在一次设备接入与运维里的位置关系:

text 复制代码
[边缘网关] --签名接入请求--> [工业身份平台] --验签--> 放行/拒绝
      |                          |
      | 身份锚点: 设备SM2凭据      | 根密钥: 硬件密码机(HSM), 永不明文导出
      v                          v
[PLC/SCADA] --指令签名--> [执行侧验签] --篡改指令拒绝--> 执行
      |
      | 数据落库: 透明加密 + 会话密钥(按产线+设备派生)
      v
[审计日志] --逐条签名--> [审计系统] --篡改日志发现--> 告警

03 | 先跑通:工业互联网等保合规的四个环节

下面这段演示把三道关跑成一条完整链路:先由设备用私钥对接入请求签名,平台侧演示验签通过、篡改被拒、冒名被拒;再演示生产线密钥按"产线 + 设备"派生、不同设备彼此不同、主密钥轮换后派生值变化;接着演示工艺参数用派生密钥做 SM4 加密落库并可还原;最后演示下发指令与审计日志的签名验签,被篡改的指令和日志都被拒绝。

python 复制代码
# -*- coding: utf-8 -*-
"""
账号3 Day3 #1 演示:工业互联网等保合规(工控设备身份鉴别 + 生产线密钥注入 + 数据加密 + 指令/日志完整性)

覆盖五件事:
  1) 设备身份鉴别      ------ 设备用 SM2 私钥对接入请求签名,平台验签通过;篡改/冒名被拒
  2) 生产线密钥注入烧录 ------ 主密钥按「产线 + 设备」派生会话密钥,每台设备各不相同
  3) 产线数据加密落库  ------ SM4-CBC 加密工艺参数,可解密还原
  4) 下发指令完整性    ------ 控制指令签名验签,被篡改的指令被拒
  5) 审计日志防篡改    ------ 日志条目签名,篡改后验签失败

演示用固定私钥,且固定 K(同一私钥+同一K会泄露私钥,仅演示用)。
断言统一 print(f"[{t}] = {'True' if ok else 'False'}"),全部为 True。
"""

from gmssl import sm2, sm4, sm3, func

# ---- 固定私钥(已过 xxcsdn_keycheck.py 三关预检) ----
DEV_PRIV = "6a3a91c46a3a91c46a3a91c46a3a91c46a3a91c46a3a91c46a3a91c46a3a91c4"   # 产线设备
FAKE_PRIV = "5b8e27d05b8e27d05b8e27d05b8e27d05b8e27d05b8e27d05b8e27d05b8e27d0"  # 冒名设备
FIXED_K = "0101010101010101010101010101010101010101010101010101010101010101"


def pub_of(priv: str) -> str:
    """P = d * G;gmssl 不会从私钥派生公钥,必须显式算出再传入"""
    return sm2.CryptSM2(private_key=priv, public_key="")._kg(
        int(priv, 16), sm2.default_ecc_table["g"])


DEV_PUB = pub_of(DEV_PRIV)
FAKE_PUB = pub_of(FAKE_PRIV)


def sm3_hex(data: bytes) -> str:
    return sm3.sm3_hash(func.bytes_to_list(data))


# ---- 手写 SM4-CBC:gmssl 的 crypt_cbc 有缺陷,one_round 是 16 进 16 出的单块运算 ----
def sm4_cbc(key: bytes, iv: bytes, data: bytes, enc: bool) -> bytes:
    assert len(key) == 16 and len(iv) == 16, "SM4 KEY / IV 必须 16 字节"
    c = sm4.CryptSM4()
    c.set_key(key, sm4.SM4_ENCRYPT if enc else sm4.SM4_DECRYPT)
    out, prev = b"", iv
    for i in range(0, len(data), 16):
        blk = data[i:i + 16]
        if enc:
            x = bytes(a ^ b for a, b in zip(blk, prev))
            e = bytes(c.one_round(c.sk, list(x)))
            out += e
            prev = e
        else:
            d = bytes(c.one_round(c.sk, list(blk)))
            out += bytes(a ^ b for a, b in zip(d, prev))
            prev = blk
    return out


def pkcs7_pad(data: bytes, block: int = 16) -> bytes:
    pad = block - (len(data) % block)
    return data + bytes([pad]) * pad


def pkcs7_unpad(data: bytes) -> bytes:
    pad = data[-1]
    if not (1 <= pad <= 16):
        return data
    return data[:-pad]


def decrypt_or_none(key: bytes, iv: bytes, ct: bytes):
    try:
        return pkcs7_unpad(sm4_cbc(key, iv, ct, False))
    except Exception:  # noqa: BLE001
        return None


# ===== 1) 设备身份鉴别:接入请求签名验签 =====
def auth_request(priv, dev_id, nonce):
    payload = f"{dev_id}|{nonce}"
    h = sm3_hex(payload.encode("utf-8"))
    signer = sm2.CryptSM2(public_key=pub_of(priv), private_key=priv)
    return payload, signer.sign(h.encode("utf-8"), FIXED_K)


def verify_request(payload, sig, expect_dev, nonce_expect):
    dev_id, nonce = payload.split("|")
    h = sm3_hex(payload.encode("utf-8"))
    verifier = sm2.CryptSM2(public_key=DEV_PUB, private_key=DEV_PRIV)
    return (verifier.verify(sig, h.encode("utf-8"))
            and dev_id == expect_dev
            and nonce == nonce_expect)


NONCE = "n-20260928-1031"
req, sig = auth_request(DEV_PRIV, "PLC-LINE3-DEV07", NONCE)
ok_dev_auth = verify_request(req, sig, "PLC-LINE3-DEV07", NONCE)

# 篡改请求(把设备号换成另一台)
req_tam = req.replace("PLC-LINE3-DEV07", "PLC-LINE3-DEV99")
ok_tamper = not verify_request(req_tam, sig, "PLC-LINE3-DEV07", NONCE)

# 冒名设备用自己的私钥签
req_fake, sig_fake = auth_request(FAKE_PRIV, "PLC-LINE3-DEV07", NONCE)
ok_imposter = not verify_request(req_fake, sig_fake, "PLC-LINE3-DEV07", NONCE)


# ===== 2) 生产线密钥注入烧录:主密钥按「产线 + 设备」派生 =====
MASTER = b"PLANT-KEY-MANAGER-MASTER-2609"
k_dev07 = sm3_hex(MASTER + b"|line=LINE3|dev=DEV07")
k_dev08 = sm3_hex(MASTER + b"|line=LINE3|dev=DEV08")
ok_k_len = len(k_dev07) == 64
ok_k_diff = k_dev07 != k_dev08
ok_k_det = k_dev07 == sm3_hex(MASTER + b"|line=LINE3|dev=DEV07")
ok_k_rotate = k_dev07 != sm3_hex(b"PLANT-KEY-MANAGER-MASTER-2610" + b"|line=LINE3|dev=DEV07")


# ===== 3) 产线数据加密落库(工艺参数) =====
DATA_KEY = bytes.fromhex(k_dev07[:32])
IV = b"SM4IVPLANTLINE03"
param = ("工艺参数:temp=218.4C|press=6.12MPa|batch=B26092807").encode("utf-8")
ct_param = sm4_cbc(DATA_KEY, IV, pkcs7_pad(param), True)
ok_data_enc = decrypt_or_none(DATA_KEY, IV, ct_param) == param
ok_data_ct_diff = ct_param != param


# ===== 4) 下发指令完整性:控制指令签名验签 =====
cmd = "SET|LINE3|DEV07|SPEED=1200"
h_cmd = sm3_hex(cmd.encode("utf-8"))
cmd_signer = sm2.CryptSM2(public_key=DEV_PUB, private_key=DEV_PRIV)
cmd_sig = cmd_signer.sign(h_cmd.encode("utf-8"), FIXED_K)
ok_cmd_sign = cmd_signer.verify(cmd_sig, h_cmd.encode("utf-8"))
ok_cmd_tamper = not cmd_signer.verify(
    cmd_sig, sm3_hex((cmd + "|SPEED=9999").encode("utf-8")).encode("utf-8"))


# ===== 5) 审计日志防篡改 =====
log = "LOG|DEV07|2026-09-28T10:31:05|auth_ok"
h_log = sm3_hex(log.encode("utf-8"))
log_signer = sm2.CryptSM2(public_key=DEV_PUB, private_key=DEV_PRIV)
log_sig = log_signer.sign(h_log.encode("utf-8"), FIXED_K)
ok_log_sign = log_signer.verify(log_sig, h_log.encode("utf-8"))
ok_log_tamper = not log_signer.verify(
    log_sig, sm3_hex((log + "|auth_fail").encode("utf-8")).encode("utf-8"))


asserts = [
    ("设备身份鉴别验签通过", ok_dev_auth),
    ("篡改设备请求被拒绝", ok_tamper),
    ("冒名设备签名被拒绝", ok_imposter),
    ("设备派生会话密钥64位", ok_k_len),
    ("不同设备派生密钥不同", ok_k_diff),
    ("同一因子派生可复现", ok_k_det),
    ("主密钥轮换后派生值变化", ok_k_rotate),
    ("产线数据加密可还原", ok_data_enc),
    ("密文与明文不同", ok_data_ct_diff),
    ("下发指令签名验签通过", ok_cmd_sign),
    ("被篡改指令验签被拒", ok_cmd_tamper),
    ("审计日志签名验签通过", ok_log_sign),
    ("被篡改日志验签被拒", ok_log_tamper),
]

print("=" * 60)
for t, ok in asserts:
    print(f"[{t}] = {'True' if ok else 'False'}")
text 复制代码
============================================================
[设备身份鉴别验签通过] = True
[篡改设备请求被拒绝] = True
[冒名设备签名被拒绝] = True
[设备派生会话密钥64位] = True
[不同设备派生密钥不同] = True
[同一因子派生可复现] = True
[主密钥轮换后派生值变化] = True
[产线数据加密可还原] = True
[密文与明文不同] = True
[下发指令签名验签通过] = True
[被篡改指令验签被拒] = True
[审计日志签名验签通过] = True
[被篡改日志验签被拒] = True

跑通之后,这四个环节要逐个对上:

环节一:设备接入必须是"验签通过才算数"。 演示里平台侧只持有设备公钥,私钥始终留在设备侧的安全载体里。任何接入请求都带设备签名,平台验签不过就拒绝。篡改设备号、换一台冒名设备签名,验签都会失败。这一条直接对应身份鉴别关,也是测评时最容易卡的一类------很多工厂的"身份"只是配置文件里的共享口令,谁拿到都能接入。

环节二:密钥要按"产线 + 设备"分域派生。 演示里同一把主密钥按不同设备因子派生出两把不同的会话密钥,主密钥轮换时各设备的派生值同步变化。这样即使某一台设备的数据密钥泄露,也解不开其他设备的数据;而运维轮换主密钥时,不需要逐台设备去改配置。这一条是数据保密关落地、也是密码应用测评追问"密钥怎么管"时的标准答案。

环节三:重要数据落库就是密文。 演示里工艺参数用派生密钥做 SM4 加密后落库,读取时再还原成明文,业务侧不需要改代码。透明加密的好处是不打断生产节拍,坏处是要保证密钥管理与根密钥保护到位------根密钥必须在硬件密码机里,永不明文导出。这一条对应数据保密性测评项。

环节四:指令和日志都要带签名。 演示里下发指令和审计日志都做了 SM2 签名,被篡改的内容验签直接失败。这一条让"数据完整性"和"审计完整性"从承诺变成可核查的事实:运维事后调日志,任何改动都骗不过验签。

这四个环节里,最容易被低估的是环节一和环节四------它们都属于"平时看不出问题、出事时才发现没做"的类型。

04 | 落地动作:工业互联网等保合规分线怎么做

要落到可执行,建议按四条线推进,每条线都有明确的交付物。

线一:设备身份治理。 给每条产线的 PLC、网关、SCADA 服务器签发可验证的设备凭据,凭据私钥驻留设备侧安全载体,配置文件里不再出现共享口令;梳理设备资产台账,做到"一台设备一把凭据、一个标识"。这条线的交付物是设备身份台账与凭据签发记录。

线二:操作员接入改造。 凡是登录设备维护终端、远程运维的操作,全部改为签名验签或多因素认证,淘汰共享账号;第三方远程运维接入要单独鉴权、单独审计。这条线的交付物是操作员认证规范与远程运维审计记录。

线三:数据分域加密。 工艺参数、配方、设备状态这类高敏感字段做透明加密落库,密钥按"产线 + 设备"或"应用 + 日期"派生,根密钥托管在硬件密码机。这条线要特别注意:设备侧密钥、应用侧密钥、数据库侧密钥应当共用同一套主密钥与派生规则,否则密钥数量随设备数量线性膨胀,轮换时必然漏换。交付物是密钥分域清单与字段加密清单。

线四:完整性闭环。 下发给设备的控制指令做签名下发与验签执行,设备的审计日志逐条签名入库。这条线把身份、密钥、日志三件事串成一条证据链:哪台设备、用哪个凭据、在哪段时间、做了什么、日志是否被改过,都能逐条还原。交付物是签名验签规范与日志完整性校验记录。

四条线推进有先后:线一是线二的前提,没有设备凭据就无法对接入做签名验签;线三依赖线一给出的可信身份和线二给出的访问控制;线四是把前面三线的产物串联成证据链,应当在前三线基本成型后再收口。

一个可参照的整改样本

背景:某制造企业已完成工业互联网平台搭建,但设备以共享口令接入、工艺参数明文落库、运维日志本地保存无签名。分级评估后定为三级,初次自评时身份鉴别、数据保密性、数据完整性三项均不达标。

动作:先给三条产线的关键设备签发设备凭据,私钥驻留安全载体,接入请求改为签名验签;把工艺参数与配方字段改为透明加密落库,密钥由主密钥按"产线 + 设备"派生,根密钥放入硬件密码机;下发指令改为签名下发、设备侧验签执行,审计日志逐条签名入库并集中校验。

结果:整改后的一次模拟演练中,用冒名配置接入被直接拒绝,篡改一条下发指令被设备侧验签拦截,改动一条历史日志被审计系统发现。三项原本不达标的测评项在复查时全部补齐,证据链从"我们分别做了"变成"我们能逐条还原"。

05 | 避坑清单:8 条最容易踩的坑

# 坑 后果 怎么验证避开了
1 设备用共享口令接入 谁拿配置都能接入,身份鉴别形同虚设 抽查设备配置,确认无共享口令、接入带签名验签
2 设备凭据私钥落配置文件 私钥泄露即全线失守 检查私钥是否驻留安全载体、配置文件无明文密钥
3 工艺参数明文落库 配方与参数随备份泄露 抽查数据库记录与备份文件是否为密文
4 一台设备一把密钥用到老 单点泄露连带全部设备 检查密钥派生因子是否含设备标识
5 下发指令不签名 篡改指令被执行,产线失控 用篡改指令访问设备,看是否被验签拒绝
6 审计日志无签名 日志可篡改,事后无法追溯 改一条历史日志,看是否通过完整性校验
7 密钥三套体系各管各的 轮换必漏、测评拼不出证据链 检查设备/应用/数据库密钥是否共用派生规则
8 根密钥明文导出 根一失,全部派生值失效 确认根密钥仅存于硬件密码机,无明文副本

挑第 5 条展开说。下发指令不签名这件事,在很多工控场景里被视为"内部网络可信、不需要签名"。问题在于工业互联网的边界早已不是物理隔离的------远程运维、云边协同、第三方接入都让"内部"不再可信。一条被篡改的转速或温度指令,落到执行侧如果不验签,设备照单全收,轻则废品,重则安全事故。给指令加签名、在设备侧验签,成本只是每次下发多一次签名运算,收益是把"指令完整性"这一测评项从承诺变成可核查的事实。

06 | 合规视角:工业互联网等保合规要对上哪些要求

制造企业的工业互联网系统在国内落地,通常同时面对几条线的要求,而这些要求的最终落点都在可提交的证据上。

等级保护相关要求。 关注身份鉴别、访问控制、数据保密性、数据完整性、安全审计。PLC、SCADA 这类承载工艺与控制的系统,一旦定为三级,测评项会逐条追到设备身份是否可验证、重要数据是否加密、指令与日志是否防篡改。前面三道关,正是对着这些测评项来的。

工信部工控安全防护指南合规要求。 工业领域对分类分级、安全防护有相应的指南与指引,强调按重要程度分级保护、关键系统重点加固。工业互联网等保合规不能只盯着一份测评表,还要把分类分级的口径落到资产台账里:哪些设备属于关键系统、哪些数据属于重要数据,分清楚了才能把保护资源投到对的地方。

工控安全相关国际标准,如 IEC 62443工控安全合规体系。 不少制造企业有出口业务或被外资供应链审核,对方会看 IEC 62443 这类工控安全体系的落地情况。它与国内等保在"区域隔离、访问控制、身份管理"上高度相通,工信部工控安全防护指南合规与 IEC 62443工控安全合规在"区域隔离、访问控制、身份管理"上高度相通,落地时可以把两套要求并到同一份证据链上,一次建设、两边受益。

密码应用基本要求。 关注身份鉴别、访问控制、数据完整性、数据保密性四个层面的密码技术应用。前面三道关,落到密码上就是设备凭据签名、数据加密、指令与日志签名。测评追问的是用什么算法、密钥在哪里生成与存放、多久轮换一次------生产线密钥注入烧录这类动作,必须写进密码应用方案,作为证据链的一环。

这里的实用建议是:不要把这些要求当成几份独立清单分别应对,而是建一张映射表,把每条要求映射到"设备凭据、密钥派生、数据加密、指令签名、日志签名"这五个动作上。一次建设,几份清单同时受益。

07 | 落地答案:工业互联网等保合规怎么承接

工业互联网等保合规落到产品能力上,通常这样组合三道关与证据链。

身份鉴别关这一段,需要的能力是"设备凭据签发 + 接入验签 + 操作员多因素"。统一身份认证平台承担设备与操作员的身份锚点,设备凭据的私钥驻留安全载体,接入请求由平台验签;对远程运维、维护登录这类敏感动作叠加额外的独立因素。签名动作由密码模块完成,私钥不出模块边界。

数据保密关这一段,需要的能力是"透明加密 + 分域密钥 + 硬件密码机根密钥"。数据库透明加密解决工艺参数与配方落盘这一层:敏感字段写入时自动加密、读取时自动解密,业务不需要改代码,对生产节拍无感。密钥管理平台承担主密钥保护、按产线或设备派生会话密钥、版本化轮换与历史解密支持,让生产线密钥注入烧录和日常轮换共用同一套治理。根密钥始终在硬件密码机内,永不明文导出。

完整性关这一段,需要的能力是"指令签名下发 + 日志签名入库 + 集中完整性校验"。下发给设备的控制指令由授权方签名、设备侧验签执行;设备的审计日志逐条签名后集中存储,定期做完整性校验。两项叠加,让数据完整性与审计完整性都成为可核查的事实。

这三段能力的组合,正好覆盖身份鉴别、数据保密、完整性三道关,也直接对应了 06 节里那几份清单的测评项。

08 | 验收清单与下一步

上线前建议逐项过一遍这张表:

# 验收项 通过标准
1 设备身份台账 每台关键设备一把凭据、一个标识,无共享口令
2 凭据私钥驻留 私钥在安全载体,配置文件无明文密钥
3 接入验签闭环 篡改或冒名接入被拒绝
4 共享账号清零 运维与维护无共享账号、无明文口令
5 多因素覆盖 远程运维与敏感操作叠加独立因素
6 敏感字段加密 工艺参数与配方落库为密文
7 密钥分域清单 设备/应用/数据库密钥按统一规则派生
8 根密钥保护 根密钥仅在硬件密码机内,无明文副本
9 派生可复现 同因子派生一致、不同设备派生不同
10 指令签名下发 被篡改指令被设备验签拒绝
11 日志签名入库 改动历史日志被完整性校验发现
12 密钥轮换演练 主密钥轮换后各设备派生值同步更新且业务无感
13 证据链串联 设备-凭据-密钥-日志可逐条还原
14 分类分级口径 关键设备与重要数据清单与保护资源对齐
15 测评项映射表 每条要求映射到五个落地动作

趋势上看,这套合规的重心正在从"采购安全设备"往"交付证据链"迁移。过去只要机房有防火墙、设备设了强口令就算建设;现在的测评会追到单台设备的凭据是否可验证、单条指令的签名是否成立、单把密钥的归属是否可追溯。这个迁移对架构的实质要求是:身份、密钥、日志三件事不能再各自为政,它们必须共享同一套设备标识、同一套密钥分域规则、同一条审计口径。

下一篇预告:我们接着拆房地产侧的同一件事:住建部房地产数据安全监管,看房地产中介的个人信息保护与售楼数据加密,怎么在合规框架下落地,和工业互联网"证据链"的做法有哪些相通、又有哪些根本不同。

09 | 常见问题:工业互联网等保合规的 4 个高频疑问

  • Q: 工业互联网等保合规整改一般要多久?
    • A: 周期主要取决于已建系统的改造量,不是设备数量本身。只做身份鉴别与日志签名这类轻改造,三到六个月可以补齐三级的多数测评项;涉及工艺参数透明加密、密钥体系重建的,往往要八到十二个月。真正拉长周期的是设备凭据治理,给每条产线的关键设备签发可验证凭据一般要两到三个月。
  • Q: 生产线密钥注入烧录怎么做才符合密评要求?
    • A: 判断标准是看密钥是否按设备分域派生,而不是看有没有加密。主密钥应托管在硬件密码机内,由密钥管理平台按"产线 + 设备"这类因子派生会话密钥,注入到设备侧安全载体而非明文配置文件;主密钥按年轮换,轮换后各设备派生值同步变化,历史密钥归档保留用于解密历史数据。
  • Q: 工业互联网等保合规里的设备身份要怎么做才算达标?
    • A: 设备身份达标的核心是"可验证、私钥不出设备"。每台关键设备应持有一把由私钥签名的凭据,接入请求带签名、平台只认公钥验签;私钥驻留设备侧安全载体而不是写进配置文件。用共享口令或明文密钥接入,身份鉴别这一测评项就无法通过。
  • Q: 工控场景做透明加密要怎么做才不影响生产节拍?
    • A: 优先选驱动层透明加密,写入即加密、读取即解密,对业务 SQL 和业务逻辑透明,不需要改应用代码。只对工艺参数与配方这类高敏感字段开启加密,普通业务字段保持明文;配合硬件加速,对生产节拍的影响通常控制在个位数百分比以内。

相关阅读


文章作者:安当加密-焱垚