实现差分隐私技术的简单应用
2020-05-23 本文已影响0人
爱看时事的通信崔
大数据时代,数据发布是信息资源共享的最重要途径之一,然而如果考虑不到数据保护的话,就会导致隐私信息泄露问题,甚至造成严重后果。为有效应对隐私泄露问题,人们通常采用以下几种方式:一是通过失真等降低数据敏感性--数据脱敏;二是通过“去标识化”实现隐私保护--匿名化;三是通过加噪声来抵抗差分攻击--差分隐私。
这其中,数据脱敏简单地删除敏感字段,其使用性差,而且仍然存在隐私泄露隐患。匿名化技术不断被发现存在漏洞和缺陷,其不可靠性比较差。差分隐私技术对比前两者,具有严格的数学模型,安全性级别可量化可证明,是当前最热门的隐私保护技术之一。
对于差分隐私技术,我们不需要掌握它复杂的数学原理,只需要清楚差分隐私技术比较可靠,学会如何应用即可。
下面我们通过一段Python代码来演示。
假设公司提供的人事资料供大家查询,资料中包括姓名和薪水信息,其中姓名是公开的,而薪水是需要隐私保护的。
数据见下表:
姓名 | 薪水 |
---|---|
王二 | 5000 |
张三 | 6000 |
李四 | 7000 |
Python代码的具体实现如下:
import numpy as np # 导入numpy库
def get_noisy_digit(value, epsilon):
# 符合普拉斯分布的噪声
# 数学公式无需完全理解
u = np.random.random() - 0.5
noisy_digit = 0.0 - value/epsilon*np.sign(u)*np.log(1.0-2*np.abs(u))
return np.rint(noisy_digit)
if __name__ == '__main__':
company_salary = {'王二':5000,'张三':6000,'李四':7000} # 真实的人力资源数据
noisy_salary = company_salary.copy() # 新建的人力资源数据
value = 3000 # 薪水最大差距3000
epsilon = 4 # 隐私保护预算,值越小泄露风越小,噪声越大
for i in pseudo_val:
noisy_salary[i] = (noisy_salary[i] + get_noisy_digit(value, epsilon)) # 逐个加噪声
print('真实的数据如下:{}'.format(company_salary))
print('差分隐私后的数据如下:{}'.format(noisy_salary))
运行代码后,得到结果如下:
真实的数据如下:{'王二': 5000, '张三': 6000, '李四': 7000}
差分隐私后的数据如下:{'王二': 6052.0, '张三': 6306.0, '李四': 7188.0}
可以看到,薪水数据经过差分隐私技术处理,发生了明显变化,从而有效的保护了薪水隐私。