关于加密:金融互联网公司如何保证用户私人信息安全

71次阅读

共计 2794 个字符,预计需要花费 7 分钟才能阅读完成。

海绵宝宝的懊恼

海绵宝宝十分喜爱网上购物,这让他感觉到被资本腐烂的高兴。

然而有一件事他始终感觉很麻烦,疾速上的收件单写满了他的个人信息,撕起来还很麻烦。

快递单号:202202181111
收件人姓名:海绵宝宝
收件人手机:138 8888 8888
收件人地址:太平洋比基尼海滩比奇堡镇贝壳街 124 号的波萝屋
备注:暗号是天王盖地虎

你有没有遇到过和海绵宝宝一样的懊恼呢?又是怎么解决的呢?

用户信息隐衷平安

今天上线的需要

小明往年 26 岁,是一名普普通通的上班族。在某互联网公司做技术开发。

“小明啊,有一个简略的需要。”,产品经理笑着朝小明走来。

“哦,又是简略的需要?”小明看了一下产品,“需要文档写了吗?”

“简略的很,写啥文档呀。”,产品经理接着说,“和上次相似,加一个商品交易记录列表就行。这个需要很急哈,今天能上线吧?”

“相似个锤子,上次的需要不也是做了一周。你把文档写分明,过一下需要,排期另说。”,小明也不受骗。

在具体设计实现之后,小明开始进行开发阶段。

写的还算比较顺利:

public void doTransaction(TransactionDto dto) {
    // 输入日志
    log.info("进行交易:{}", JSON.toJSON(dto));

    // 执行业务解决

    // 执行落库
}

TransactionDto 中蕴含了商品购买者的姓名、手机号、寓居地址以及交易的相干信息。

数据库中间接把响应的明文存储,页面间接列表展示。

这个需要很简略,小明想着,就等着测试验证了。

用户信息安全

不过在代码评审的时候,项目经理却提出了一个问题,你的代码爱护用户的信息安全了吗?

(1)不应该日志中明文输入用户私人信息

(2)不应该页面中明文展现用户私人信息

(3)不应该在数据库中明文存储用户私人信息

并且以快递单号为例子,他应该如下:

快递单号:202202181111
收件人姓名:海 ** 宝
收件人手机:138 **** 8888
收件人地址:太平洋比基尼海滩比奇堡镇 ********
备注:暗号是天王盖地虎

这样的益处很显著,就算收件人不去撕掉这张单号,也不会裸露太多用户个人信息。

小明有些不了解,“不让日志输入,那怎么排查问题啊?”

“你能够输入脱敏信息。禁止日志输入,就是防止能够查看日志的人,透露用户个人信息。”

“那页面不让明文展现,经营怎么解决日常问题呢?”

“页面能够增加明文显示的按钮,限定对应的权限,并且记录操作日志。”

“数据库不让存储明文,那怎么玩啊?”

“你能够去理解下可逆加密。”,项目经理顿了顿,“重写吧,再给你 2 天工夫。”

“好吧”,小明有些失落。

技术实现的调整

日志脱敏脱敏

对于日志脱敏,小明能想到的最间接的办法,就是重载类的 toString() 方然,而后用工具类脱敏敏感信息。

不过他的共事老马给他举荐了一个基于注解的脱敏工具包,用起来还算不便:

https://github.com/houbb/sensitive

  • 基于注解的日志脱敏。
  • 能够自定义策略实现,策略失效条件。
  • 常见的脱敏内置计划。
  • java 深拷贝,且原始对象不必实现任何接口。
  • 反对用户自定义注解。
  • 反对基于 FastJSON 间接生成脱敏后的 json

数据库可逆加密

为了防止开发者、DBA、歹意攻击者等透露数据库信息,数据库中的敏感信息须要进行加密。

比方数据库中的手机号

phone 13066668888

须要调整为如下:

phone_chiper  BABABABABABABABBABABABA   # 加密之后的密文
phone_mask    130****8888               # 手机号掩码
phone_hash    FFFFFFFFFFFFFFFFFFFFFFFF  # 手机号哈希

加密算法要求是可逆加密,如 AES/3DES/SM4 等。

掩码能够和下面的脱敏保持一致,次要用户初步的信息确认等。

哈希个别用于精准查问,采纳 MD5/SHA 等常见单向哈希即可。

你是一名黑客,你看到了数据库中的掩码 + 哈希,且晓得他们哈希算法是 MD5 哈希,能够获取对应的手机号明文吗?

答案是能够的,所以咱们在 抉择哈希算法实现的时候要思考这些问题

如何获取明文,又如何防止这个问题呢?

欢送小伙伴在评论区留言。

页面的功能设计

产品在敏感信息方面,如果是一个老手,可能会要求明文展现,或者明文导出。

如果你作为安全部门,或者项目经理,肯定要把相干的需要给间接的明文的需要砍掉。

产品经理:砍我能够,砍需要不行。

安全部门:数据必须保障平安。

项目经理:咱们加一个明文查看的按钮性能,增加权限管制,记录查看日志。不影响业务,又保障数据安全。

前后端开发:……

架构层面

当然,下面的状况,可能只是小明作为一名开发的日常。

那如果是一家公司呢?

如果你作为已加电商 / 金融公司的技术架构,你会如何爱护用户信息的平安隐衷呢?

加密机服务

当公司的业务规模达到肯定水平时,咱们的利用往往就不再是单体,目前支流的是微服务架构。

每一家金融公司,都会有一个加密机服务,用于对立提供下面小明遇到的业务问题。

为不同类型的敏感数据,提供相应的脱敏、可逆加密、哈希服务。

为什么须要

咱们把这些实现,写成一个工具类放在代码里不就行了吗?为什么还要搞一个加密机服务呢。

先说比拟常见的起因:

(1)进步工作效率

有对立的加密服务和对应的 SDK 之后,能够缩短迭代周期。

研发的技术水平参差不齐,节约了他们学习 + 编写的工夫。

测试的程度也是相似,同样也能够节约测试验证的工夫。

而这,也正是公共服务最大的魅力。

(2)架构之美

如果没有对立的加密服务,每个开发来一套,会导致每个零碎的差别比拟大。

整体的数据信息就会乌七八糟,当须要数据整合,或者对立的加密降级时,代价会十分高。

(3)家贼难防

现在的公司,都在一直的减弱研发的生产权限

一家正规的公司,严格依照流程,是不会呈现删库跑路的事件的。

代码编写,须要功能测试 + 代码覆盖率 +code review,防止研发植入业务无关代码。

脚本执行,须要业务端发动 + 项目经理审核 +DBA 审核,防止歹意操作。

生产公布变更,须要上线打算 + 审核,防止歹意操作。

日志查看,支流的都是 ELK 平台,研发无登录生产机器的权限。

生产性能,研发没有应用权限。

这一套组合拳下来,就是让研发作为一个纯纯的工具人,只能做事,像防贼一样防着研发。

一名研发到职,齐全晓得零碎的秘钥 + 算法 + 零碎弱点,想获取用户隐衷信息也不是不可能。

然而如果引入加密机之后呢?

加密机会让公司的架构编写,技术水平没的说,技术平安有保障,绝对也比较稳定。

研发作为使用者,不晓得秘钥,不晓得算法,攻打也就无从谈起。

这又何尝不是一种技术者的悲痛。

小结

每一家公司都有爱护用户隐衷平安的任务,只惋惜事实中很多用户的隐衷平安仍然无奈保障。

对于一个国家,须要推广相应的法律合规。

对于一家公司,须要架构,安全部门,产研测的共同努力。

对于一位用户,咱们也要有爱护本人信息安全的意识。

心愿本文对你有所帮忙,如果喜爱,欢送点赞珍藏转发一波。

我是老马,期待与你的下次重逢。

正文完
 0