数据漂白算法研究

     你的手机是不是会经常会收到一些烦人的广告短信?垃圾邮件是不是经常会塞满你的电子信箱?如果你好奇,会问:这些人怎么会知道我的电话号码呢,怎么会知道我姓名呢?这是因为你的个人信息已经泄漏了。

    个人信息的泄漏轻则会影响你的心情,重则你的存款会被骗的精光!

    前段时间有一个陌生的人给我打电话,电话一接通就说:“您好,张先生,我是广东xx公证处的,三星公司为了回馈广大用户的信任与厚爱,举行了xx活动。我们随机抽取50位幸运用户,很高兴的通知您,您座机号中了一等奖,奖金xx万元!......”,一听就知道是骗子,刚才考虑问题思路突然被电话打断,一听又是骗子火气马上就上来了,冲着话筒一顿臭骂,“啪”的一声挂了电话。事后再想想感觉有些后怕,因为他知道你的姓名,知道你的基本信息等。我估计我挂了电话的这会儿他又在给别人打电话,继续他的诈'骗。现在社会上的诈'骗手段不断翻新,什么短信诈 骗、电话诈 骗到现在非常流行的电信诈 骗、金融诈 骗等等。电视上,记者采访那些被骗者,他们都有一个共同点,就是骗子在说出被骗者的姓名、年龄等基本信息后,被骗者都放松了警惕,能知道我这么详细信息的肯定是xx机构的客服,正是在这种心理暗示下一步一步的陷入了骗子的圈套。

    个人信息在我们的生活中随处可见,你去网吧上网要登记身份证,买个手机卡要身份证,甚至买把破菜刀切菜用,也要身份证。登记你的姓名、家庭住址、年龄、教育背景、电话等,ZF不知道你买的刀是切菜用还是别有用途,登记你的信息,以防万一。这些信息如果不加以保护很容易流失被别有用心的人利用。个人信息的倒卖已经成为一个灰色的产业链条。要说个人信息资料哪个行业最全,当然要数金融了,银行、证券交易所保存有海量的个人信息资料。

    现在国内的银行都注重业务,至于信息系统的开发维护都交给软件外包公司去做,下面这种情况就有可能造成个人资料外泄。

  •  银行将核心业务的外围系统承包给某软件外包公司
  •  系统开发完成后需要海量数据作系统的性能测试
  •  银行将生产环境上的备份数据库拷贝一份给开发商用于作性能测试
  •  有人拿到数据后倒卖给了别人。

我们的信息就这样泄漏了!

 

    可能不断发案的诈'骗引起了最神秘部门“有关部门”的注意,所以最近出台了《商业银行信息科技风险管理指引》,要求“商业银行在信息系统开发、测试和维护,以及服务外包过程中加强对客户信息的保护,防止敏感信息泄露”。为保护客户权益,满足商业银行风险监管和内控监管的要求,需要对开发环境和测试环境中的数据建立统一的管理规范,对于必须使用生产数据的系统开发、测试、维护项目,生产数据必须经过脱密,才能被加载到开发、测试或维护环境。此脱密过程称做“数据漂白

 我负责系统的概要设计和详细设计,也开发了一部分代码。对漂白方法进行汇总,比较优劣总结经验,为二期开发作准备。

个人信息总体可分为:

  1. 名称类:如客户姓名、公司名称等
  2. 联系方式类:如联系地址、联系电话、手机号码、E-mail等
  3. 密码类:如查询密码、取款密码(哈哈,如果能破解就发财了!!)
  4. 日期类:如生日等
  5. 证件类:如身份证、军官证、港澳台通行证、驾驶证等
  6. .....

数据漂白后的要求:

  1. 去掉隐私信息
  2. 保持数据脱密后的数据构成、合法性标准(如果目标系统需要对该数据字段进行校验的话 
  3. 持数据库的数据一致性和参考完整性
  4.  应用系统间关联使用的有效性
  5. 保持聚合字段、行/列计算字段有效性
  6. 脱密算法不可破解

     

  7. 开发难点:

    • 脱密算法不可破解或着破解难度相当大或着干脆算法不可逆
    • 保持各业务系统间数据的关联性
    • 漂白速度要快,总体时间控制在6小时之内
    • 数据漂白完成后要看起来像个东西,人名不能随便用几个汉字代替,地址不能用随机字母等

    保持各业务系统间数据的关联性,比如我在银行存了一笔钱,那么这笔信息会保存在核心业务数据库。如果我又在银行贷了一笔款,那么贷款信息会保存在个人信贷业务数据库。两者的数据必须比较保持一致

     

     

     

    脱密算法设计:

    •  随机算法(手机号码、电话号码等都用随机数替换,如18721773207,把187后面的数字随机换掉,公司地址、家庭地址从下表中随机一个地址替换)
    •  汉字编码位移算法(如GB2312汉字编码表,在取出的汉字编码上加上固定数字得到另外一个汉字)
    •  凯撒加密算法(看过“潜伏”么?余则成收到电报后要拿出一本书,用书上的字还原出电报的内容)

    脱密方式设计:

    •  编数据库脚本,用Java调用数据库漂白脚本

            思路:漂白脚本以文本文件形式存储于指定的文件夹中,在系统的初始化阶段将漂白脚本读取出使用java.sql.Statement对象execute(String sql)方法执行DDL语句,在数据库建立漂白脚本和用户函数,然后用java去调用。

    •  直接Java处理,把数据库的内容Select出来,数据加工完成后再放回去

           思路:在要漂白的数据库上建立连接,获得Connection对象,创建Statement对象

    Statement stmt = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);这样Select出来的结果集可以更新

     

     

    算法比较

     1、  随机算法

                 优点:算法不可逆

                 缺点:数据被全部打乱,数据间的关联全部丢失。

     

     2、  汉字编码位移算法

                 优点:折中方案

                 缺点:漂白出的数据有点不像真实数据(如人名:张三,漂白后可能是:饭傻)。

     

     3、  凯撒算法

                 优点:基本符合要求

                 缺点:要作大量的参数配置。

     

    脱密方式比较

     

      1、  数据库脚本

                 优点:漂白速度快

                 缺点:需要针对每个数据库编码不同的脚本(Infomix,DB2,Oracle)。

     

      2、  直接Java处理

                 优点:跨数据库

                 缺点:性能问题,跑的快不?。

     

     

          欢迎JavaEye高手提出自己的看法

你可能感兴趣的:(算法,金融,脚本,软件测试,三星)