如何保护配置文件中的敏感信息,比如数据库密码

2022-02-28 16:28:25 +08:00
 cppc

我们产品部署在甲方数据中心,同事(以下简称 A,算是项目经理)反馈甲方要求不得保存明文敏感信息:

我提出方案有

  1. 数据加密: 配置文件中的敏感信息加密保存,解密密钥保存在配置文件中。A 的意见:加密密钥也属于密码、密钥。
  2. 用管分离: 使用密码库,配置中心之类的基础设施,我们拉取配置信息。A 的意见: 连接配置中心需要用户名 /口令,也是密码;配置中心连数据库需要数据密码,也是密码。

我不确定是 A 自己没有理解需求,还是甲方确实这么提出,这不就无限套娃么。

我们的客户是金融行业,请问这方面有无具体的技术规范?如果我的方案可行,要怎么样才具有说服力呢?

PS: A 坚持认为自己已经跟甲方沟通好了,不愿意再去询问具体要求

8422 次点击
所在节点    信息安全
76 条回复
xuanbg
2022-02-28 16:33:54 +08:00
密码做个 md5 差不多了,最多加点盐,可以避免和别人家被拖的库碰撞。别的如身份证号、手机号什么的,可以加密啊。至于密钥的管理么,你让他买硬件的密码机。这样只要密码机不被搬走,就不用担心泄密了。
LxnChan
2022-02-28 16:33:57 +08:00
用非对称式加密呢?或者用硬件 /生物识别解密工具(智能卡 /指纹等)?
sjzjams
2022-02-28 16:35:21 +08:00
AWS Key Management Service (KMS)
orcinus
2022-02-28 16:40:50 +08:00
解密密钥直接写代码里?
Jinnyu
2022-02-28 17:41:10 +08:00
提供个思路
写一个配置服务端和客户端 SDK
服务端从数据库里读取配置信息(密码加密)
客户端在启动时生成一个一次性的 RSA 密匙对, 随请求将公匙发送到服务端,
服务端通过公匙对配置进行加密 (可选整个配置加密或部分加密)
然后客户端接收到响应后通过私匙进行解密
这样可以保证客户端信息都是安全的
hhjswf
2022-02-28 18:08:44 +08:00
@Jinnyu 你这也不符合甲方需求,绕来绕去人家还不一定听得懂
hhjswf
2022-02-28 18:10:47 +08:00
A 是产品吗?甲方要个月亮是不是也得给他摘呀。需求评审不通过砍了,太离谱了
cppc
2022-02-28 18:13:39 +08:00
@Jinnyu 配置服务器也需要读配置文件,它也得解决自己的配置文件的安全问题,不过你提供思路解决了配置服务器和客户端交换信息的问题,我觉得解决了部分问题
3dwelcome
2022-02-28 18:16:54 +08:00
要不考虑用 login session 吧,为每个用户分配一个 session 登录,就和银行的实时 U 盾差不多,会过期。

密码最大的问题,就是不会过期。同时也没身份鉴别功能,一旦泄露后,谁用这个密码登录的,你都不清楚,不好追责。
cppc
2022-02-28 18:17:05 +08:00
@hhjswf 说实话,我就觉得离谱,我跟他说这种甲方的项目经理其实不懂这些技术,得我们自己去输出技术方案,才能占据主动,但是他比较闷骚,不愿意去沟通
wolfie
2022-02-28 18:18:28 +08:00
甲方数据中心 不就属于生产环境吗。
启动脚本覆盖参数啊。
des
2022-02-28 18:19:26 +08:00
要不试试用证书验证?或者智能卡?
IceBay
2022-02-28 18:20:20 +08:00
开个玩笑,把密码分割,交由不同人保存不同部分。
Jinnyu
2022-02-28 18:21:44 +08:00
@hhjswf #6 我明白, 因为当时我这也是这样要求的,
解决方案是我在代码中写了部分规则, 每天按照一定的规则去生成密匙
angryfish
2022-02-28 18:23:42 +08:00
不设置密码就不需要保存密码了,逃!
Jinnyu
2022-02-28 18:24:24 +08:00
@hhjswf #6 而且这个问题本来就是鸡生蛋 蛋生鸡
Vieufoux
2022-02-28 18:25:05 +08:00
Vault
ysc3839
2022-02-28 18:25:17 +08:00
这要求就是想要外部解密吧?那你的方案都不可行。最简单的是弄成启动时要求输入密码,然后密码保存在内存中。更安全的话用智能卡,每次解密都去请求智能卡。
swulling
2022-02-28 18:25:21 +08:00
这个其实很简单,比如你的配置文件是
EncryptCredentials=xxxx 或者 EncryptPassword=xxxx

代码里写死解密的密码是 123 ,然后解密后拿到密码 /密钥就行

国内很多金融都是这样的,配置文件里不能放明文的密码,需要根据代码里的解密密码解密一下。这种项目做多了就知道套路了。

很多公司还要求这个 Encrypt 方法是国密 SM4
swulling
2022-02-28 18:26:14 +08:00
从安全的角度看就是脱裤子放屁,但是人家就有这个要求~

做了好多这种项目了,都是一些银行和金融机构。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/836944

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX