数据脱敏不是打码那么简单:聊聊敏感数据脱敏与可逆脱敏,到底该怎么选?

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 数据脱敏不是打码那么简单:聊聊敏感数据脱敏与可逆脱敏,到底该怎么选?

数据脱敏不是打码那么简单:聊聊敏感数据脱敏与可逆脱敏,到底该怎么选?

作者:Echo_Wish


前几天有个做数据平台的朋友跟我吐槽:

“生产库权限收得很严,测试环境也禁止访问真实数据,结果开发天天抱怨数据不真实,BUG复现不了。”

这其实是很多企业都会遇到的问题。

一边是数据安全。

另一边是业务效率。

尤其是在大数据平台、数据中台、数据仓库、AI训练平台越来越普及的今天,数据流转的范围越来越大。

开发要数据。

测试要数据。

算法训练要数据。

BI分析要数据。

供应商联调还要数据。

如果全部使用真实数据,风险巨大。

如果全部打码处理,又可能失去业务价值。

于是就出现了两个经常被拿出来讨论的方案:

  • 脱敏(Irreversible Masking)
  • 可逆脱敏(Reversible Masking)

很多人以为这俩只是技术实现不同。

其实背后反映的是企业对于数据价值与数据安全的权衡。

今天咱们就聊透这个话题。


一、先搞明白:什么叫脱敏?

最简单的理解:

把敏感信息变成看不懂的信息。

例如用户手机号:

13812345678

变成:

138****5678

或者:

***********

或者:

HASH值

这样即使数据泄露,也无法直接看到真实信息。

常见敏感字段包括:

类型 示例
手机号 13812345678
身份证 320**
银行卡 6222**8888
姓名 张*
邮箱 abc*@qq.com
地址 北京市**

二、什么叫可逆脱敏?

可逆脱敏本质上是:

数据被隐藏了,但在授权条件下可以恢复。

比如:

13812345678

经过加密后变成:

U2FsdGVkX19rX8...

普通人看不懂。

但是拥有密钥的人:

decrypt()

即可恢复:

13812345678

这就是可逆脱敏。


三、很多企业其实在假脱敏

我见过不少项目这样写:

def mask_phone(phone):
    return phone[:3] + "****" + phone[-4:]

输出:

138****5678

开发觉得安全了。

实际上呢?

一点都不安全。

为什么?

因为:

前三位 + 后四位

已经暴露了7位信息。

手机号总共11位。

只剩4位未知。

组合数:

10000

暴力枚举几秒钟就搞定。

所以很多所谓脱敏:

其实只是界面展示脱敏。

并不是数据安全脱敏。

这是两个概念。


四、真正不可逆脱敏:Hash方案

如果业务根本不需要恢复数据。

推荐直接Hash。

例如:

import hashlib

def hash_phone(phone):
    return hashlib.sha256(phone.encode()).hexdigest()

phone = "13812345678"

print(hash_phone(phone))

输出:

a1f9fbd6......

特点:

优点

  • 无法恢复
  • 安全等级高
  • 适合数据分析

缺点

  • 不能找回原值
  • 客服无法查询用户

例如:

用户投诉订单

客服看到:

a1f9fbd6...

完全不知道是谁。


五、可逆脱敏的核心:加密

很多业务其实必须找回原值。

例如:

电商客服

查看订单
联系用户

银行风控

风险核查

医疗系统

患者追踪

这种场景只能采用可逆脱敏。

下面用AES演示。

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64

key = b"1234567890123456"

def encrypt(text):
    cipher = AES.new(key, AES.MODE_ECB)

    encrypted = cipher.encrypt(
        pad(text.encode(), AES.block_size)
    )

    return base64.b64encode(encrypted).decode()


def decrypt(cipher_text):
    cipher = AES.new(key, AES.MODE_ECB)

    decrypted = unpad(
        cipher.decrypt(
            base64.b64decode(cipher_text)
        ),
        AES.block_size
    )

    return decrypted.decode()


phone = "13812345678"

cipher_text = encrypt(phone)

print(cipher_text)

print(decrypt(cipher_text))

输出:

3M4fT9....
13812345678

这就是典型可逆脱敏。


六、真正先进的方案:Tokenization

近几年金融行业特别喜欢这种方式。

思路很简单:

建立映射表。

原始数据:

13812345678

映射为:

TK_9847321

数据库存:

TK_9847321

真实手机号存入安全库。

例如:

token_map = {
   
    "TK_001": "13812345678"
}

业务系统看到:

TK_001

安全中心看到:

13812345678

这种方式有几个好处:

  • 不暴露原数据
  • 可恢复
  • 不依赖加密算法

很多支付系统都在这么干。


七、大数据平台到底该选哪种?

这是很多架构师最纠结的问题。

我的经验是:

不要想着一种方案打天下。

应该分层处理。

第一层:展示脱敏

给运营看:

138****5678

降低误操作风险。


第二层:分析脱敏

给数据仓库:

SHA256(phone)

保证统计能力。

例如:

COUNT(DISTINCT HASH_PHONE)

完全没问题。


第三层:业务脱敏

给客服系统:

Token

需要权限才能解密。


第四层:核心脱敏

给AI训练平台:

完全匿名化

姓名:

张三

变:

用户A

地址:

北京市朝阳区

变:

华北地区

最大程度避免隐私泄露。


八、为什么未来可逆脱敏会越来越危险?

很多企业有个误区:

加密了就安全。

其实不是。

问题出在:

密钥管理

如果密钥泄露:

加密 = 裸奔

过去几年大量数据泄漏事件都不是算法被破解。

而是:

密钥放Git
密钥写配置文件
密钥写代码

导致直接解密。

所以未来趋势其实不是:

更强加密

而是:

更少可逆

能不可逆就不可逆。

能匿名化就匿名化。

只有业务必须恢复时才允许可逆。

这是数据治理成熟度的重要体现。


九、我的一点思考

这些年做大数据平台、数据治理和数据安全项目,我越来越认同一个观点:

最安全的数据,不是加密的数据,而是不存在的数据。

很多企业喜欢囤数据。

觉得以后可能有用。

手机号存十年。

身份证存十年。

日志永远不删。

最终形成一个巨大的“数据炸药库”。

平时看不出问题。

一旦泄漏,损失巨大。

所以真正成熟的数据治理应该遵循三个原则:

第一原则:最小采集

能不收集就不收集。

第二原则:最小存储

能删就删。

第三原则:最小暴露

能脱敏就脱敏。


写在最后

脱敏和可逆脱敏,从来不是谁先进谁落后的问题。

而是业务价值与数据安全之间的一场长期博弈。

如果数据永远不需要恢复,那么Hash脱敏就是最好的选择。

如果业务必须恢复,那么加密或Tokenization才有价值。

但请记住一句话:

脱敏解决的是“看不见”,可逆脱敏解决的是“看得见但受控制”,而真正的数据安全,解决的是“即使泄漏也没有价值”。

当越来越多企业开始建设数据中台、AI平台和统一数据湖的时候,脱敏已经不是一个技术细节,而是决定企业数据资产能否安全流通的基础设施。

数据的价值在于流动,而数据安全的价值,在于让这种流动能够持续。只有在安全与效率之间找到平衡,企业的数据战略才真正具备长期生命力。

目录
相关文章
|
1月前
|
数据采集 人工智能 编解码
YOLO不是“魔法”,是你自己也能跑通的一条工程流水线:Python从标注到训练全实战
YOLO不是“魔法”,是你自己也能跑通的一条工程流水线:Python从标注到训练全实战
329 2
YOLO不是“魔法”,是你自己也能跑通的一条工程流水线:Python从标注到训练全实战
|
1月前
|
存储 人工智能 自然语言处理
拒绝“大模型幻觉”:一文彻底搞懂 RAG(检索增强生成)技术全流程
本文深入解析RAG(检索增强生成)技术,直击大模型落地私有知识场景的核心痛点——如何让LLM精准、低成本、高时效地基于企业文档作答。从文本分片、向量化索引,到召回重排、增强生成,系统拆解五大关键步骤,揭示RAG作为“AI外挂”的底层逻辑与工程实践精髓。
拒绝“大模型幻觉”:一文彻底搞懂 RAG(检索增强生成)技术全流程
|
25天前
|
数据采集 安全 算法
数据不出库,也能一起算?我用隐私计算做了一次跨机构联合分析,终于明白它为什么火了
数据不出库,也能一起算?我用隐私计算做了一次跨机构联合分析,终于明白它为什么火了
158 1
|
1月前
|
SQL 分布式计算 大数据
权限全靠管理员拍脑袋?聊聊数据平台里的ABAC和RBAC到底该怎么落地
权限全靠管理员拍脑袋?聊聊数据平台里的ABAC和RBAC到底该怎么落地
234 2
|
29天前
|
存储 分布式计算 固态存储
数据堆成山才想治理?别等磁盘爆了才后悔:聊聊数据生命周期管理那些事
数据堆成山才想治理?别等磁盘爆了才后悔:聊聊数据生命周期管理那些事
162 0
|
1月前
|
数据采集 人工智能 运维
数据出了问题别再全员背锅了:聊聊数据血缘如何成为合规与排障的“监控摄像头”
数据出了问题别再全员背锅了:聊聊数据血缘如何成为合规与排障的“监控摄像头”
143 0
|
7月前
|
弹性计算 运维 监控
运维编排OOS:自动化运维实战
运维编排OOS通过模板化、自动化方式,实现云上运维任务的高效、安全执行。本文详解OOS核心概念、系统与自定义模板、典型场景实践、监控联动及安全控制,并提供常用模板库,助力企业快速构建标准化、智能化的自动化运维体系,降本增效,保障业务稳定。
742 0
|
关系型数据库 MySQL Linux
实现MySQL数据库的定时自动备份脚本。
拿走,不谢,这个脚本配方(指引)保证你的数据库数据像蛋糕店一样地天天更新,还能确保老旧的蛋糕(数据)不会堆积满仓库。这下可好,数据安全有保障,数据库管理员也能轻松一点,偶尔闲下来的时候,煮杯咖啡,看个剧岂不美哉?别忘了偶尔检查一下你的自动备份是否正常工作,以防万一蛋糕机器出了点小差错。
939 20
|
前端开发
echarts使用transform缩放后导致图标模糊
echarts使用transform缩放后导致图标模糊
|
测试技术 开发者 Python
使用Python解析和分析源代码
本文介绍了如何使用Python的`ast`模块解析和分析Python源代码,包括安装准备、解析源代码、分析抽象语法树(AST)等步骤,展示了通过自定义`NodeVisitor`类遍历AST并提取信息的方法,为代码质量提升和自动化工具开发提供基础。
1672 9