寻求GDPR合规的0-10^7整数ID无种子无查表假名化方案
GDPR合规下0-10^7整数ID的假名化最优方案
方案一:分组仿射变换(抗小范围破解)
- 思路:把整个ID空间拆成多个独立小组,每个小组用不同的线性变换规则,单个小组的破解不会影响全局
- 具体操作:
- 把0到10^7的ID按固定大小分组,比如每1000个ID一组,总共10000组
- 给每个组配一对参数
a和b,注意a必须和组的大小(比如1000)互质(比如选3、7这种数),保证变换可逆 - 转换时先找到ID属于哪个组,用公式
假名ID = (a * 组内ID + b) mod 组大小 + 组起始值,或者把组标识嵌在高位方便还原
- 好处:
- 完全不需要随机种子或查找表,参数存好就能重复计算,迁移时直接同步参数就行
- 就算泄露几组ID映射,也只能破解单个小组的规则,没法拿到全局逻辑
- 新增/删除ID完全不影响,新ID落在哪个组就用哪个组的规则,新增组补参数就行
方案二:轻量级Feistel置换(高安全级)
- 思路:用Feistel网络这种经典的加密置换逻辑,纯计算实现,不需要查表,非线性特性让破解难度陡增
- 具体操作:
- 把ID转成64位整数(10^7只有24位左右,完全够存),拆成左右两个32位块L0、R0
- 跑3-5轮变换:每一轮做
Li = Ri-1; Ri = Li-1 XOR (Ri-1 * k1 + k2) mod 2^32,这里k1、k2是你自己定的密钥参数 - 最后把最后一轮的L和R拼起来就是假名ID
- 好处:
- 可逆、结果固定,只靠密钥参数,迁移时带密钥就行
- 非线性变换的雪崩效应,输入变一点输出大变,就算拿到不少映射对也很难逆向推导出规则
- 动态ID完全兼容,新增删除ID都不影响变换过程
为啥比你原来的方案好
你之前的拆分加常量取模是纯线性变换,只要拿到几组映射对,很容易反推出两个常量,整个逻辑就破了。上面两个方案要么用分组隔离风险,要么用非线性变换提升破解门槛,安全性高得多,还完全符合你的需求。
要注意的点
- 所有参数(分组的a/b、Feistel的k1/k2)一定要加密存好,参数泄露等于整个假名化逻辑失效
- 必须测试可逆性,确保能从假名ID还原回原ID,不然内部业务关联会出问题
- 跨系统迁移时,只要同步参数就行,不用搬任何映射表,完全满足迁移友好的要求
内容的提问来源于stack exchange,提问作者klobaska soslaninou
相关产品推荐
相关产品推荐

