静态脱敏系统身份认证方案

静态脱敏系统身份认证方案

一份能过审计的静态脱敏系统身份认证方案,要管住的不只是脱敏规则,而是发起作业的那个身份。某制造企业有一条固定流程:把生产库的副本先脱敏,再交给测试团队用。去年一次内部检查发现,有人用一个测试库账号直接连到脱敏系统的源库配置页面,把一份还没脱敏的客户名单导了出去。复盘时才发现,脱敏系统本身「谁在操作、能碰哪些库」这件事,从来没有被单独管过------大家都在关心脱敏算法准不准,没人问过「执行脱敏的是谁」。

坐标先立:脱敏是数据处理里承上启下的一段。GB/T 37964《信息安全技术 个人信息去标识化指南》关注的是去标识化后数据还能不能被重新识别;GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》在身份鉴别与访问控制两项上要求账户按最小权限分配、及时清理多余或过期账户;GB/T 39786《信息安全技术 信息系统密码应用基本要求》把身份鉴别列为四个层面之一。本文切入的是最容易被当成算法问题的那一块------静态脱敏系统身份认证方案到底要管住哪几类身份,才经得起一次核查。

01 | 静态脱敏系统身份认证方案这件事,难在哪儿

难点不在「脱敏算法准不准」,而在算法之外那些说不清的地方。下面五处是最常被核查点到的。

首要难在把脱敏当成一道算法题。 一提脱敏,讨论立刻集中在规则怎么配、字段怎么替换。可真正把整份客户名单搬走的那次事故,问题不在算法,而在于「谁有权接触源库」。合规审计中如何应用静态脱敏系统,往往也从这一步开始:先问谁动了数据,再问数据被怎么处理。

其次难在发起作业的往往不是人。 脱敏作业多数由调度器定时发起,用的是一把服务账号凭据,而不是某个员工的登录。这把凭据如果和自然人共用一套权限,那么「谁执行了这次脱敏」在事后根本无法还原。登录认证中如何应用静态脱敏系统,指的正是这条从凭据到执行者的链路要能对上。

再有一处难在作业账号权限过大。 为了让脱敏跑通,很多团队给作业账号同时开了源库的读权限和目标库的写权限,甚至顺手给了生产库。一旦这把凭据泄露,攻击者拿到的不是一个脱敏工具,而是一把能横穿多个库的钥匙。

第四处难在作业令牌一签就是长期有效。 一次授权配置好,凭据就在那里放着,一年也不换。作业本身只跑几十分钟,凭据却长期挂着,暴露面被无谓地放大。身份认证中如何应用静态脱敏系统,一个绕不开的动作就是让凭据的有效期对齐作业时长。

最后一处难在作业记录只有日志、没有台账。 日志是流水,能证明「发生过一次访问」;台账是结论,要能回答「这一批处理了多少行、列、从哪个库到哪个库、由谁发起」。两者不能互相替代,只留日志的团队在核查时会发现,能拼出过程却给不出结论。

把这五处串起来看,核心矛盾是:核查要的是「抽一次作业能复算」,而现实给的往往是「一段说不清是谁发起的处理过程」。

02 | 机制拆解:静态脱敏系统身份认证方案的四条线

一套能被核对的静态脱敏系统身份认证方案,通常围绕四条线组织:身份谱系线、授权边界线、作业时效线、证据留痕线。四条线指向四个不同的问题,缺一条就会在某一类追问上卡住。

线 回答的问题 核对方式 缺了会怎样
身份谱系线 这次作业是谁发起的 三类主体凭据分离、各成一路 执行者无法还原
授权边界线 这个身份能碰哪些库 只读源库、只写目标库,越界即拒 一把凭据横穿多库
作业时效线 这次授权能用到什么时候 令牌绑定作业、一次性、到期即失效 凭据长期挂着
证据留痕线 这批数据到底处理了什么 台账整体签名,行数列数入库 只留流水、给不出结论

四条线的边界要讲清楚:身份谱系线管的是「你是谁」,授权边界线管的是「你能碰什么」,作业时效线管的是「这份权限多久作废」,证据留痕线管的是「做完之后留下什么」。四者要落在同一个作业编号上------身份有名称、授权有作用域、令牌带到期时刻、台账引用前面三者的摘要,同一条链路才对得上。这也是身份认证中如何应用静态脱敏系统里最先要理清的一层。

静态脱敏系统身份认证方案的身份谱系

脱敏系统里通常同时住着三类主体:自然人操作员、长期在位的服务账号、按批次生成的作业调度身份。三者的凭据必须各成一路,谁也不能替谁签。梳理身份谱系的第一步不是列人名,而是先把这三类分开------用服务账号的凭据签不出自然人会话,用自然人的登录签不动作业令牌。这一步做完,「谁发起了这次脱敏」才有确定答案。登录认证中如何应用静态脱敏系统,第一步也落在同一处:先把三类主体的凭据分开。

静态脱敏系统身份认证方案的授权边界

授权要回答的是「能碰哪些库」。作业身份的理想形状是单向的:对源库只读、对目标库只写,任何跨库的读写都判为越界。最容易出问题的是「为了让作业一次跑通」而顺手放宽------给作业账号同时开读和写,甚至给它生产库。正确的做法是把授权写成「主体加资源加动作加效力」的条目,显式拒绝优先,没有匹配条目一律拒绝,这样新增的库天然处于关闭状态。

静态脱敏系统身份认证方案的作业时效

作业往往只跑几十分钟,凭据却常常长期有效,这是暴露面被无谓放大的根源。做法是让令牌与作业绑定:令牌里写清作业编号、作用域与到期时刻,整体签名,并且一次性使用------同一作业令牌用过即作废,重放直接被拒。这样「这次授权能用到什么时候」就有了确定答案,而不是取决于凭据被配置成多久过期。

静态脱敏系统身份认证方案的证据留痕

留痕要能回答「处理了什么」。台账里要有作业编号、行数、列数、源库、目标库、发起主体与执行服务账号,并把整条台账整体签名。日志负责证明过程,台账负责给出结论,两者分工明确。台账一旦签名,改一个行数就会在核对时暴露,而不是等到季度审计才发现对不上。

下面这张图说明四条线在一次脱敏作业里的位置关系:

text 复制代码
[身份谱系] 操作员 / 服务账号 / 作业调度 --> 三类凭据分离 --> [谁发起 = 可还原]
                                        |
                                        v
[授权边界] 主体+资源+动作+效力 --> 显式拒绝优先 --> 无匹配即拒绝 --> [跨库即拒]
                                        |
                                        v
[作业时效] 作业号+作用域+到期时刻 --> [令牌整体签名] --> [一次性/到期即失效]
                                        |
                                        v
[证据留痕] 行数+列数+源库+目标库 --> [台账整体签名] --> [改一格即验签失败]
                                        |
                                        v
[核查]   验令牌 + 复算一条授权 + 验台账 --> [三项一致即通过]

03 | 先跑通:静态脱敏系统身份认证方案的四个验证点

下面这段演示把身份谱系、授权边界、作业令牌与台账签名串在同一段代码里跑一遍,用的是公开算法:SM2 签名、SM3 摘要、SM4 分组加密。代码只依赖 gmssl,可以直接复现。

python 复制代码
# -*- coding: utf-8 -*-
"""
W39 Day5 #2 · 静态脱敏系统身份认证方案
演示身份可分:三类主体(操作员/服务账号/作业调度)凭据分离 / 授权边界与越界拒绝 /
            作业令牌时效与一次性 / 作业台账整体签名 / 按主体派生会话密钥 / 写入报文加密
"""

from gmssl import sm2, sm4, sm3, func

# ---- 固定私钥(已过 xxcsdn_keycheck.py 三关) ----
PRIV_LEDGER = "7c4019ab7c4019ab7c4019ab7c4019ab7c4019ab7c4019ab7c4019ab7c4019ab"  # 作业台账签发方
PRIV_JOB = "5b8e27d05b8e27d05b8e27d05b8e27d05b8e27d05b8e27d05b8e27d05b8e27d0"     # 作业令牌签发方
PRIV_FORGE = "4d5f0c724d5f0c724d5f0c724d5f0c724d5f0c724d5f0c724d5f0c724d5f0c72"   # 冒名方
FIXED_K = "0101010101010101010101010101010101010101010101010101010101010101"


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


PUB_LEDGER, PUB_JOB = pub_of(PRIV_LEDGER), pub_of(PRIV_JOB)
PUB_FORGE = pub_of(PRIV_FORGE)


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, "SM4 KEY 必须 16 字节"
    assert len(iv) == 16, "IV 必须 16 字节(少一字节会 IndexError)"
    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


def dec_is(key: bytes, iv: bytes, ct: bytes, plain: bytes) -> bool:
    """判据是「还不出原文」,不能写 `is None`(用错密钥通常不抛异常)。"""
    return decrypt_or_none(key, iv, ct) == plain


# ======================================================================= #
# 业务逻辑区
# ======================================================================= #

MASTER = b"MASTER-KEY-FOR-SDM-AUTH-2026"
IV = b"16BYTEIVFORSDM01"          # 16 字节,数过
assert len(IV) == 16
NOW = "20261010T1200"             # 演示用的时间基准,固定值保证可复现

# 三类主体:自然人操作员、服务账号、作业调度身份,凭据各成一路
SUBJ_OP, SUBJ_SVC, SUBJ_JOB = "op:1007", "svc:masking", "job:20261010-01"

# 授权表:主体|资源|动作|效力。作业身份只读源库、只写目标库,生产库一律拒。
POLICY = (
    "op:1007|db:hr_src|read|allow;"
    "op:1007|db:prod|write|deny;"
    "svc:masking|db:mask_dst|write|allow;"
    "svc:masking|db:prod|read|deny"
)


def parse_policy(text: str):
    return [tuple(item.split("|")) for item in text.split(";")]


def authorize(rules, subj, res, act) -> bool:
    """显式 deny 优先;无匹配条目则默认拒绝。"""
    hit = [e for (s, r, a, e) in rules if s == subj and r == res and a == act]
    if not hit:
        return False
    return hit[0] == "allow"


def subject_key(master: bytes, subj: str) -> bytes:
    """按「主密钥 + 主体」派生 16 字节会话密钥,三类主体互不相同。"""
    return bytes.fromhex(sm3_hex(master + b"|subj=" + subj.encode("utf-8"))[:32])


# --- 1) 作业台账整体签名:行数、列数、主体、源目标库一并受保护 ---
LEDGER = ("job=20261010-01|rows=128400|cols=37|"
          "op=op:1007|svc=svc:masking|src=db:hr_src|dst=db:mask_dst")
ledger_signer = sm2.CryptSM2(public_key=PUB_LEDGER, private_key=PRIV_LEDGER)
h_lg = sm3_hex(LEDGER.encode("utf-8"))
sig_lg = ledger_signer.sign(h_lg.encode("utf-8"), FIXED_K)
ok_ledger = ledger_signer.verify(sig_lg, h_lg.encode("utf-8"))
ledger_tam = LEDGER.replace("rows=128400", "rows=98200")
ok_ledger_tamper = not ledger_signer.verify(
    sig_lg, sm3_hex(ledger_tam.encode("utf-8")).encode("utf-8"))
forge = sm2.CryptSM2(public_key=PUB_FORGE, private_key=PRIV_FORGE)
sig_lg_forge = forge.sign(h_lg.encode("utf-8"), FIXED_K)
ok_ledger_imposter = not ledger_signer.verify(sig_lg_forge, h_lg.encode("utf-8"))

# --- 2) 授权边界:操作员只读源库;服务账号只写目标库;越界一律拒绝 ---
rules = parse_policy(POLICY)
ok_op_read = authorize(rules, SUBJ_OP, "db:hr_src", "read") is True
ok_op_cross = authorize(rules, SUBJ_OP, "db:prod", "write") is False
ok_svc_write = authorize(rules, SUBJ_SVC, "db:mask_dst", "write") is True
ok_svc_cross = authorize(rules, SUBJ_SVC, "db:prod", "read") is False

# --- 3) 作业令牌:绑定作业号、作用域与到期时刻,整体签名,一次性 ---
job_signer = sm2.CryptSM2(public_key=PUB_JOB, private_key=PRIV_JOB)
token = ("job=20261010-01|scope=db:hr_src,db:mask_dst|nonce=N7F3|exp=20261010T1400")
h_jt = sm3_hex(token.encode("utf-8"))
sig_jt = job_signer.sign(h_jt.encode("utf-8"), FIXED_K)
ok_token = job_signer.verify(sig_jt, h_jt.encode("utf-8"))

_used = set()


def issue(nonce: str) -> bool:
    """一次性作业令牌:同一 nonce 只能用一次,重放即失效。"""
    if nonce in _used:
        return False
    _used.add(nonce)
    return True


ok_nonce_first = issue("N7F3") is True
ok_nonce_replay = issue("N7F3") is False
ok_token_expired = not ("20261010T1100" > NOW)     # 作业结束后令牌判失效

# --- 4) 按主体派生会话密钥:三类主体互不相同,主密钥轮换后变化 ---
k_op, k_svc = subject_key(MASTER, SUBJ_OP), subject_key(MASTER, SUBJ_SVC)
ok_derive_len = len(k_op) == 16
ok_derive_diff = k_op != k_svc
ok_derive_rotate = k_op != subject_key(b"NEW-MASTER-KEY-FOR-SDM-AUTH", SUBJ_OP)

# --- 5) 目标库写入报文加密落盘 ---
payload = (f"dst=db:mask_dst|{SUBJ_JOB}|rows=128400|batch=B2026101001").encode("utf-8")
ct = sm4_cbc(k_svc, IV, pkcs7_pad(payload), True)
ok_enc = dec_is(k_svc, IV, ct, payload)

asserts = [
    ("作业台账整体签名验签通过", ok_ledger),
    ("台账行数被改后签名被拒", ok_ledger_tamper),
    ("冒名方签名作业台账被拒", ok_ledger_imposter),
    ("操作员读取源库被放行", ok_op_read),
    ("操作员跨写生产库被拒绝", ok_op_cross),
    ("服务账号写目标库被放行", ok_svc_write),
    ("服务账号跨读生产库被拒绝", ok_svc_cross),
    ("作业令牌整体签名验签通过", ok_token),
    ("同一作业令牌不可重放", ok_nonce_replay),
    ("作业结束后令牌判定失效", ok_token_expired),
    ("按主体派生会话密钥为 16 字节", ok_derive_len),
    ("不同主体派生密钥不同", ok_derive_diff),
    ("主密钥轮换后派生值变化", ok_derive_rotate),
    ("目标库写入报文加密可解密还原", ok_enc),
]

# 首行必须是 '='*60:脚本靠它把「demo 输出块」与「ASCII 机制图」区分开
print("=" * 60)
for t, ok in asserts:
    print(f"[{t}] = {'True' if ok else 'False'}")
text 复制代码
============================================================
[作业台账整体签名验签通过] = True
[台账行数被改后签名被拒] = True
[冒名方签名作业台账被拒] = True
[操作员读取源库被放行] = True
[操作员跨写生产库被拒绝] = True
[服务账号写目标库被放行] = True
[服务账号跨读生产库被拒绝] = True
[作业令牌整体签名验签通过] = True
[同一作业令牌不可重放] = True
[作业结束后令牌判定失效] = True
[按主体派生会话密钥为 16 字节] = True
[不同主体派生密钥不同] = True
[主密钥轮换后派生值变化] = True
[目标库写入报文加密可解密还原] = True

逐段读一下这段代码在验什么。前三条验作业台账:整条台账(作业号、行数、列数、发起主体、源库、目标库)整体签名能验过;把行数由 128400 改成 98200 后签名立刻被拒;换一把私钥来签同样不被接受。第四到七条验授权边界:操作员读源库被放行,跨去写生产库被拒;服务账号写目标库被放行,跨去读生产库被拒------这四条说明「能碰哪些库」不是靠约定,而是每次判定都要过一遍条目。第八到十条验作业令牌:令牌整体签名能验过,同一个令牌用过一次就作废、重放直接被拒,早于时间基准的令牌被直接判失效。最后四条验派生与落盘:按主体派生出的会话密钥是 16 字节,三类主体彼此不同,主密钥轮换后派生值跟着变,目标库的写入报文加密后仍能还原。

现场演示时最能说明问题的不是「签名验过」,而是第六条和第九条:服务账号试图跨读生产库被判拒绝,说明授权边界是逐条判定的,而不是「给了一把钥匙就随便开」;作业令牌用过即作废,说明一次授权只对应一次作业,而不是一把长期挂着的凭据。这两条把「最小必要」和「一次性」从制度要求变成了当场能跑出来的结果。

要注意一处工程细节:演示里用的是固定 K 的 SM2 签名,目的是让每次输出一致、便于复现;真实系统里签名随机数必须由密码模块内部产生,同一私钥配同一个 K 会泄露私钥,这一点在技术评审时经常被追问。

04 | 落地动作:静态脱敏系统身份认证方案分四条线怎么做

身份谱系线,动作是把操作员、服务账号、作业调度身份三类主体分开登记,各自持有独立凭据。验收点:服务账号的凭据签不出自然人会话,自然人登录也签不动作业令牌。

授权边界线,动作是把作业身份的授权写成条目,源库只读、目标库只写,跨库一律拒绝。验收点:拿作业身份去读生产库必须被拒;新增一个库时若未显式放行,默认应当关闭。这一步做扎实,静态脱敏系统身份认证方案才算把「能碰什么」这条线立住。

作业时效线,动作是让令牌与作业绑定,写清作业编号、作用域与到期时刻并整体签名,一次性使用。登录认证中如何应用静态脱敏系统所需要的「一次一凭据」,正是靠这条约束落地。验收点:同一个令牌用第二次必须失败;作业结束后的令牌必须判失效。

证据留痕线,动作是把每次作业的编号、行数、列数、源库、目标库、发起主体收进台账并整体签名。验收点:改台账里任意一格,验签必须失败;拿一个作业编号,必须能查出这一批处理了多少行。

整改样本(某制造企业)。 背景:测试前的脱敏流程里,作业账号同时持有源库读权限与生产库读权限;凭据配置后长期不换;事故发生后只能翻日志,说不清是谁发起的。动作:先把三类主体分开登记、各自发凭据(三周);再把作业账号的权限收成「源库只读加目标库只写」,跨库一律拒绝(四周);随后给令牌加上作业绑定、到期时刻与一次性约束(三周);最后把每次作业收成带签名的台账并接入核对流程(三周)。结果:抽查任意一次脱敏,团队能当场说清是谁发起、碰了哪些库、处理了多少行;作业账号即便泄露,也拿不到一份未脱敏的原始数据。整个整改周期约三个月,主要工作量在把散落的库权限重新梳理成条目。

05 | 避坑清单:静态脱敏系统身份认证方案的 9 条常见坑

踩得最多的坑按后果严重度排序如下。判断是否避开,靠的是当场能跑出来的结果,而不是流程文档里写过。

# 坑 后果 怎么验证避开了
1 只谈脱敏规则不管执行身份 谁动过数据说不清 三类主体分开登记
2 服务账号与自然人共用权限 执行者无法还原 两类凭据互不通用
3 作业账号同时读写多库 一把凭据横穿多库 源库只读、目标库只写
4 跨库访问默认放行 生产库被顺手读到 无匹配条目一律拒绝
5 作业令牌长期有效 暴露面被无谓放大 到期即失效
6 令牌可重复使用 一次授权被反复用 同一令牌用过即作废
7 只留日志不留台账 给不出结论 台账带行数列数并签名
8 台账只存不签名 事后可被改 改一格即验签失败
9 会话密钥全局共用 一处泄露处处可用 按主体派生互不相同

展开说第 3 条。作业账号同时持有多个库的读写权限,是最常见、也最容易被合理化的一条:为了让脱敏一次跑通,配权限的人会把源库、目标库、有时还有临时库一起开给同一把凭据。代价是这把凭据一旦泄露,攻击者拿到的不是脱敏工具,而是一把能横穿这些库的钥匙。正确做法是把授权收成「源库只读、目标库只写」两条,跨库一律拒绝------合规审计中如何应用静态脱敏系统,检验的正是这条边界是不是真的成立。

06 | 合规视角:静态脱敏系统身份认证方案要对上哪些要求

网络安全等级保护。 GB/T 22239-2019 对身份鉴别与访问控制有明确要求:应授予管理用户所需的最小权限、应及时删除或停用多余的与过期的账户、应防止鉴别信息被窃听。落到本文场景,就是四件事------三类主体分开、作业身份最小权限、凭据到期即失效、鉴别信息走加密通道。合规审计中如何应用静态脱敏系统,通常也是从这四条入手。

商用密码应用安全性评估。 GB/T 39786 把身份鉴别列为四个层面之一,关注鉴别过程本身能不能被核对。落到脱敏作业,就是三条动作:令牌整体签名保完整性、按主体派生密钥保访问控制、台账整体签名保数据完整性。身份认证中如何应用静态脱敏系统,落到密评就是鉴别过程本身要能被核对。测评会追问算法、密钥存放位置与轮换周期。

个人信息去标识化。 GB/T 37964 关注的是去标识化之后的数据还能不能被重新识别。这条要求把「脱敏做得准不准」和「谁能碰脱敏前的数据」绑在一起------如果执行身份管不住,算法再严谨也挡不住一份原始名单被直接导出。

个人信息保护法的一般要求。 处理个人信息应遵循最小必要原则。落到本文场景,就是只取做脱敏所必需的那几项字段与那几行数据,并且把「谁有权在什么条件下触碰原始数据」写成可核对的条目,而不是靠一句内部通知。

07 | 落地答案:静态脱敏系统身份认证方案怎么承接

静态脱敏系统身份认证方案的落地,落到产品能力上通常这样组合四段。评估顺序建议倒过来:先看一次作业能不能被复算,再看支持多少种脱敏规则------复算不上,规则再多也只是一份处理清单。

身份谱系这一段,需要的能力是「多类主体分别登记与凭据分离」。操作员、服务账号、作业调度身份各持独立凭据,签出的凭证互不通用;这样「谁发起了这次作业」才是可还原的。安当在这一段提供的能力落在凭据登记与鉴别上,关键词是「可还原」。

授权边界这一段,需要的能力是「条目化授权与缺省拒绝」。作业身份按主体、资源、动作、效力四要素授权,源库只读、目标库只写,跨库一律拒绝;新增库默认关闭,要开必须显式写一条。登录认证中如何应用静态脱敏系统,靠的正是这条边界能把作业身份限制在最小范围内。

作业时效这一段,需要的能力是「令牌签名加一次性加到期失效」。令牌与作业绑定,用过即作废,到期自动失效;这样凭据的暴露面被收窄到一次作业的时长,而不是长期挂着。合规审计中如何应用静态脱敏系统,同样会追问这份凭据的有效期是不是对齐了作业时长。

证据留痕这一段,需要的能力是「作业台账整体签名」。每次作业的编号、行数、列数、源库、目标库、发起主体一并入库并签名,改一格即失败。身份认证中如何应用静态脱敏系统,最后都要落到这条能交得出去的台账上。

08 | 验收清单与下一步

上线前建议逐项过一遍这张表,任何一项答不上来就不要接受「脱敏已经做好了」的结论。

# 验收项 通过标准
1 主体分类登记 三类主体各自成册
2 凭据分离 两类凭据互不通用
3 执行者可还原 从作业号能查到发起主体
4 最小权限 作业身份仅限源库读
5 目标库限写 作业身份仅限目标库写
6 缺省拒绝 无匹配条目一律拒绝
7 显式拒绝优先 拒绝条目覆盖放行条目
8 令牌绑作业 令牌内含作业编号与作用域
9 令牌整体签名 改一个字即验签失败
10 令牌一次性 用过即作废
11 令牌有时效 到期即失效
12 台账带规模 行数、列数入库
13 台账整体签名 改一格即验签失败
14 主密钥保护 在硬件密码机内、无明文副本
15 会话密钥派生 不同主体密钥不同
16 落盘加密 写入报文密文与明文不同

趋势上看,静态脱敏系统身份认证方案的重心,正在从「规则配得全不全」走向「一次作业能不能被复算」。过去交一份脱敏规则清单就算交差;现在核查会随机抽一次作业,要求团队当场说清是谁发起、碰了哪些库、处理了多少行。这个迁移对平台的实质要求是:身份、授权、时效、台账四件事必须落在同一个作业编号上,而这是整套脱敏流程能不能经得起核查的起点。

下一篇预告:同一工作日的另一篇,我们转到另一类系统,看防勒索系统合规审计------为什么「有没有备份」和「备份能不能被验证」,在审计里是两件不同的事。

09 | 常见问题:静态脱敏系统身份认证方案的 4 个高频疑问

  • Q: 静态脱敏系统身份认证方案第一次落地要怎么做才不返工?
    • A: 结论是先把三类主体分开,再收授权边界,最后才接脱敏规则。主体不分开,执行者就还原不出来;授权不收窄,作业账号迟早会被配成一把横穿多库的钥匙。这两件事定完,接规则只是把处理逻辑挂上去。反过来先配规则,往往要在权限梳理处推倒重来。
  • Q: 合规审计中如何应用静态脱敏系统,重点要准备哪些材料?
    • A: 结论是准备两类可复算的材料:一类是授权条目,证明作业身份只读源库、只写目标库;另一类是作业台账,写清行数、列数、源库、目标库与发起主体。前者回答「能碰什么」,后者回答「碰了什么」,两样都有,审计时才不用临时翻日志。
  • Q: 登录认证中如何应用静态脱敏系统的作业账号,凭证该配多久?
    • A: 结论是让凭证的有效期对齐作业时长,而不是按季度或年度来配。作业通常只跑几十分钟,凭据长期有效只会放大暴露面。做法是令牌与作业绑定、一次性使用、到期即失效;这样即便凭据被截获,过期之后也派不上用场。
  • Q: 身份认证中如何应用静态脱敏系统,服务账号和操作员要不要共用一套凭据?
    • A: 结论是不能共用。服务账号由调度器持有、按批次运行,操作员由自然人持有、按需触发;两者共用一套凭据,等于把「谁发起了这次作业」这个问题永久地抹掉了。分开之后,台账里同时记下发起主体与执行服务账号,链路才是完整的。

相关阅读


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

相关推荐
安当加密03011 个月前
IEC62351与GB/Z 25320合规解读:电力通信安全与能源局工控安全如何满足
国密·工控安全·iec62351·gb/z 25320·电力通信安全
安当加密03011 个月前
政务OA国密改造:电子公文SM2签名与UKEY认证合规路径
国密·sm2签名·ukey·政务oa·电子公文
安当加密03011 个月前
电力纵向加密认证与调度数据网隔离实战:从接入防护到隔离装置选型
国密·电力监控系统·纵向加密认证·隔离装置·调度数据网
安当加密03011 个月前
政务云密码应用与密评合规:四层面产品全景图与落地路径
国密·政务云·密评·密码应用·四层面
安当加密03012 个月前
矿山安全监测数据防篡改:防爆区密钥存储到CCC Ex认证
国密·工控安全·密钥管理·数据防篡改·矿山安全
2601_966377132 个月前
公安部176号令10月1日实施,数达安全提供密评+数据安全风险评估一站式合规解决方案
风险评估·国密·国密算法·密评·数评·一站式密评密改
安当加密2 个月前
电子病历数据库TDE加密:分级评价达标与泄露追溯防护
数据安全·国密·tde·透明加密·数据库加密
安当加密4 个月前
汽车密钥管理系统怎么设计?从HSM到云端KMS的完整架构方案
国密·kms·hsm·密钥管理·汽车安全
zhz52144 个月前
服务器等保加固实施报告
运维·服务器·信创·国密·等保