2020-09-23 08:22 浏览量:1064
1.为什么需要对数据进行脱敏
为了便于市场研究人员和数据挖掘人员利用客户信息、订单数据来分析客户购买行为,需要提供一个与生产环境数据真实性相近的数据,进行数据建模测试新分析算法或功能,同时IT人员测试、修补程序也需要将生产数据复制到测试和开发环境中,以便进行程序的测试。因此一些企业会将大量的敏感客户数据、订单数据拷贝到开发、测试、数据分析环境,但并没有采取任何对数据脱敏的措施。
据安全情报供应商Risk Based Security (RBS) 的2019年Q3季度的报告,2019年1月1日至2019年9月30日,全球披露的数据泄露事件有5183起,泄露的数据量达到了79.95亿条记录!从数据泄露事件数量来看,整体呈现出递增趋势,其中2019年泄露事件(5183)比2018年(3886)上涨33.3%。2019年泄露记录数量(37.66亿)比2018年(79.95亿)上涨112%。
从政策法规方面无论是欧盟的GDPR法案还是国家互联网信息办公室发布的《数据安全管理办法(征求意见稿)》,都有明确对个人隐私信息的保存、使用的规定和处罚措施。欧盟在2018年出台《通用数据保护条例》(GDPR),规定了企业如何收集、使用和处理欧盟公民的个人数据。2019年5月28日,国家互联网信息办公室发布的《数据安全管理办法(征求意见稿)》中,明确要求对于个人信息的保存和提供要经过匿名化处理,以切实降低在数据应用中个人信息可能存在的泄露风险。
2.数据脱敏定义及分类
百度百科对数据脱敏的定义为:指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。
从个人理解来说,数据脱敏就是为原始数据创建结构类似但不真实的数据的方法,以便将数据在开发、测试、培训、分析等非生产环境下的使用。在数据脱敏中只是改变数据值但数据的格式和原始数据保持一致,需要注意的是原始数据不能探测到或者经过转换还原出原始数据。数据脱敏将被广泛应用于遵守政策、法规需求、防止数据泄露、防止数据被意外接触等方面。
数据脱敏工具通过将真实敏感数据按照数据脱敏规则进行转换、处理,去除敏感信息,从而帮助组织实现生产数据的依法依规共享。数据脱敏可以通过各种不同的方法进行实现,但是这些方法都必须遵循数据脱敏的五项基本原则。
1)防逆向破解原则
无论采用哪种脱敏方法,都不能够通过破解方法获取到原始敏感数据。
2)表征原始数据原则
脱敏后数据要保持一定的真实性以便数据能够应用开发、测试、分析的环境。例如对姓名处理,脱敏后形式类似王*凯,而不能采用随意的值来替换姓名。
3)引用完整性原则
经过脱敏后数据要保持引用完整性,例如对银行卡号进行脱敏处理(银行卡号是一个主键)所有引用了银行卡号信息的实体,经过脱敏处理后要能够关联到一起。
4)防数据推理原则
数据脱敏不需要将所有的数据进行脱敏处理,只处理被定义为敏感数据内容。但需要注意的是有些非敏感数据能够被用来重新生成敏感数据或者能够回溯到敏感数据,这些非敏感数据同样需要进行脱敏处理。
5) 自动化原则
针对一个数据源只需要配置一次,就可以重复进行脱敏处理。开发和测试环境的数据需要能够及时反映生产数据的变化。分析数据也需要每天甚至每小时来生成。如果不是通过自动化的方式进行,那么数据脱敏就是一个低效且耗费成本的工作。
3.数据脱敏核心算法
常用的脱敏有混淆、替换、置空、加密:
混淆算法:打乱现有数据的位置,使数据不再表示其原有的含义。
可以使用java的Collection类对数据内容的ArrayList进行顺序打乱,经实际试验效果不太好,无法保证数据项顺序和原来顺序完全不一致。
任意替换:替换敏感数据的内容,使数据看上去和原始数据类似,但实际上两者没有任何关联。常用于姓名替换、数值替换、日期替换及卡号替换等。
置空算法:删除敏感数据将其置空。
数据加密:敏感数据进行加密处理,加密后的数据与原始数据差异较大。
可以使用的数据脱敏算法包括:MD5加密、AES对称加密、FPE格式保留加密等方法。
4.数据脱敏工具技术架构设计
数据脱敏类型可以分为静态脱敏和动态脱敏:
静态数据脱敏(SDM),是数据存储时脱敏,存储的是脱敏数据。一般用在非生产环境,如开发、测试、外包和数据分析等环境。
动态数据脱敏(DDM),在数据使用时脱敏,存储的是明文数据或直接存储密文。一般用在生产环境,动态脱敏可以实现不同用户拥有不同的脱敏策略。
其总体技术架构如下:
数据脱敏技术架构整体可以划分为管理端、执行端。执行端又分为静态脱敏执行端和动态脱敏执行端。管理端负责数据源维护、敏感数据扫描规则配置、数据脱敏规则配置、脱敏任务管理、日志查看、扫描结果查看等核心功能。数据脱敏执行端(Excecutor)负责处理具体脱敏工作,按照管理端数据源、脱敏规则配置,进行脱敏任务执行。
静态数据脱敏是比较常见的脱敏任务,也有很多常见的开源工具能够实现数据的静态脱敏。比如DataX工具。动态脱敏技术,通常是基于数据库中间件技术来实现的,这里可以采用了Apache ShardingSphere 生态圈中的 ShardingSphere-JDBC来实现。
5.数据脱敏技术的实现
通过程序对敏感数据的自动识别,能够自动识别的敏感字段包括:电话号码,姓名、地址、邮件、身份证号、银行卡号等。识别数据的方法使用到了正则表达式和关键字识别,身份证号、邮箱、电话号码都可以采用正则表达式的方法来识别。
电话号码识别,正则表达式((((010)|(0[2-9]\d{1,2}))[-\s]?)[1-9]\d{6,7}$)|((\+?0?86\-?)?1[3|4|5|7|8][0-9]\d{8}$)
银行卡号识别,正则表达式(([13-79]\d{3})|(2[1-9]\d{2})|(20[3-9]\d)|(8[01-79]\d{2}))\s?\d{4}\s?\d{4}\s?\d{4}(\s?\d{3})?$
身份证号识别,正则表达式 [1-9]\d{5}(19|20)\d{9}[0-9Xx]$
邮箱识别,正则表达式 [a-zA-Z0-9_%+-]{1,}@[a-zA-Z0-9-]{1,}\.[a-zA-Z]{2,4}$
姓名、地址采用关键字识别方法,例如姓名中内置三百个姓来做姓名的自动识别,地址中通过街道、区、市、县、村、栋等关键字来匹配。
这里我们使用了Python来实现敏感数据的扫描,只需要配置数据库连接参数,就能自动进行全库扫描。在进行全库扫描时为了防止占用的资源会比较多,通常会设置自动扫描参数,参数包括扫描最大数据量、采样数据量等,当表的数据量少于最大数据量这个阀值时,会进行全表扫描配置。另外一个参数是采样数据量,当表的数据量超过最大数据量时,会对表的数据进行采样,选取其中的一定量的数据(采样数据量)进行扫描。扫描的同时需要对扫描到的敏感数据记录下来。记录的信息包括:数据库IP、数据库用户、数据库、扫描表、扫描字段、敏感数据内容、敏感数据类型、敏感数据率等。
数据动态脱敏使用ShardingSphere分布式治理子功能模块。它通过对用户输入的SQL进行解析,并依据用户提供的脱敏配置对SQL进行改写,从而实现对原文数据进行加密,并将原文数据(可选)及密文数据同时存储到底层数据库。在用户查询数据时,它又从数据库中取出密文数据,并对其解密,最终将解密后的原始数据返回给用户。Apache ShardingSphere分布式数据库中间件屏蔽了数据脱敏过程,让用户无需关注数据脱敏的实现细节,像使用普通数据那样使用脱敏数据。先看下动态数据脱敏的的实现原理:
在使用 ShardingSphere-JDBC进行动态脱敏配置时,有几项关键的脱敏规则配置。
1)数据源配置,可以使用了Druid来做数据源配置,配置多个数据源。ShardingSphere-JDBC可以兼容的数据库连接池比较多,类似于DBCP,C3P0,BoneCP,Druid,HikariCP都可以用来和shardingsphere配合使用。采用Druid做为数据库连接池需要设置驱动、数据库连接地址、用户名、密码即可,filter参数为Druid连接池参数,用于配置监控sql语句的执行。
2)加密器配置, ShardingSphere-JDBC内置了AES/MD5两种加密算法。这里采用了AES对称加密算法,当然用户还可以通过实现ShardingSphere提供的接口,自行实现一套加解密算法。
3)脱敏表配置,比如要把user表中的用户密码进行加密存储。在脱敏表的列配置中plainColumn对应字段存储密码明文、cipherColumn对应字段存储加密后密码。对应的开发人员使用的是逻辑列pwd,开发人员在进行开发过程中,直接面向pwd进行编程即可,不需要关注是否进行加密和解密问题。下面是开发人员使用的mybatis进行的配置,直接使用的pwd字段进行开发。如下图:
来源:BigDataplus