有趣的奇葩需求:如何设计一个开发人员自己都无法解读的信息存储方案?

2017-09-23 10:51:20 +08:00
 woffee

最近接了一个 HR 项目,主要就是人事部门那边对公司员工进行管理,也就增删改查什么的,不难。

除了一个奇葩点的需求:

涉及到员工的工资、公积金等信息,只有授权人员才能看。重点就是:开发、运维、数据库管理人员也都不能知道这些信息。

很有意思吧。

我首先想到的就是像密码一样加密处理。可是密码不需要展示出来,而工资信息是需要展示给人事看的。所以开发人员自己设计的解密规则,自己当然能解密。

所以求助下社区内的大佬,寻求一个合理的解决方案,或者这是否涉及到某些算法。

多谢各位~

4324 次点击
所在节点   科技
29 条回复
zj299792458
2017-09-23 10:54:15 +08:00
开发人员不知道密码怎么解密,后门?
greenskinmonster
2017-09-23 10:55:34 +08:00
开发完了,灭口。
Thoxvi
2017-09-23 10:56:39 +08:00
同态加密?

听说性能不怎么好诶
kslr
2017-09-23 10:56:54 +08:00
拿开发祭奠上天再投入使用
oott123
2017-09-23 10:59:21 +08:00
这简单啊,数据库里只记个引用,比如这个工资存放在档案室第三个柜子第二排第四个文件夹第六页第四十二行,请自行查阅~

开玩笑的。正经方法也不少,比如使用非对称加密,私钥存在硬件里,俗称加密狗。开发完了把狗交出去,开发人员也看不到了。
sharkli
2017-09-23 11:00:17 +08:00
工资都写 10000 其它都根据工资算不就行了。开发完 hr 自己录入重新修改工资。
哪怕 2000 人这也没多大工作量,反正 hr 比较闲。
lcorange
2017-09-23 11:07:48 +08:00
自己想的 low 办法,hr 那里有份密码,数据库不存,工资 base64 一下,密码 base64 一下,按位加后再 base64 一下,放进数据库,hr 想看的时候再反向操作一遍。

正经如 5L 所说,非对称加密一下,安心,估计库也不少,让 hr 存好私钥好了
Mogugugugu
2017-09-23 11:12:57 +08:00
开发人员设计加密规则加密,程序上线后,正式的数据库不对开发人员开放,如需线上数据库数据,可以联系运维或者数据库管理人员导出,导出后清空指定表的数据。这样,开发看不到正式的数据,运维和数据库管理人员虽然能看到数据,但是不知道加解密规则,所以也是无法看到数据的。其他的授权什么的,正常做就好了。
ipconfiger
2017-09-23 11:17:53 +08:00
5 楼的办法是正道, 另加密算法的正道就是知道算法你也没有办法的才叫加密, 就算是对称加密, 你没有密钥, 即使代码是你写的你也没法知道存的是什么, 除非你另外加了后门在加密前截取了内容.
nousername2030
2017-09-23 11:36:58 +08:00
开发又不需要真实数据,有什么奇葩的。
imn1
2017-09-23 11:42:38 +08:00
这个很难么?难道银行数据库管理人员知道我的银行密码?
gamexg
2017-09-23 11:43:41 +08:00
不在乎一些操作会出现性能损失可以实现。

每个有权限操作的用户、用户组都有自己的独立非对称密钥(公钥+密钥),密钥用用户自己的密码加密后保存到服务器。

数据库每条的需要保密的字段都用独立对称密钥加密后保存。然后这些独立密钥在用每个有权限访问用户、用户组的公钥加密后保存到服务器。

这样甚至可以做到一些用户只有只读权限,做法就是增加一个签名机制,保密字段必须携带有权限用户的公钥签名,否则不被认可。


新增的步骤是:
1.根据需要生成多个 对称加密私钥 X,然后用有权限人、组的公钥加密这些私钥并保存到服务器
2.用多个 对称加密私钥 X 分别加密每条加密数据并保存到数据库

这样读取的步骤是:
1.用户密码解密用户的私钥
2.用户的私钥解密 (加密保密字段的私钥)
3.用 (加密保密字段的私钥) 解密保密私钥

写的步骤是:
1.用户密码解密用户私钥
2.用户私钥解密 (加密保密字段的私钥)
3.用 (加密保密字段的私钥)解密保密密钥


缺陷是一些统计功能会比较悲剧,需要全部从数据库读取出来在程序内做统计。不过工资等数据量不是很大,一般还可以接受。
gamexg
2017-09-23 11:50:26 +08:00
这样读取的步骤是:
1.用户密码解密用户的私钥
2.用户的私钥解密 (加密保密字段的私钥)
3.用 (加密保密字段的私钥) 解密保密字段

写的步骤也当作新增吧,重新生成新的密钥安全性更好。
olOwOlo
2017-09-23 12:02:05 +08:00
用 AES 不好么...这种情况下 RSA 纯粹浪费资源。
用户密码解密密钥,所有加解密都在客户端进行。
不过要是人事忘记密码了,数据就别想拿回来了....
ryd994
2017-09-23 12:20:56 +08:00
@olOwOlo 你差这么点性能么? RSA 可以进硬件 TPM,AES 不行,RSA 可以有只写权限,AES 不可能。
忘记密码这不是理由,可以另存一份,密钥放保险箱,反正有公钥就能加密了
ryd994
2017-09-23 12:22:14 +08:00
真要防开发,就要实现端到端,除了客户端,谁也看不到数据
只要做好客户端代码审计就可以了
sun1991
2017-09-23 12:36:41 +08:00
上线后就不用管了吗?哪天上线了,说报表数据出问题了,那怎么排查?
chuxiwen
2017-09-23 12:42:37 +08:00
asymmetric encryption 么

数据用 ca cert 加密。

有人需要 access, 传 自己的 request cert 给 ca

ca 生成 access cert。

那个人就可以用自己的 private key + access cert 来 access 了

但是有 ca 也总是可以看的。


如果 ca 密码忘了,就呵呵了。
est
2017-09-23 12:54:16 +08:00
HR 那里有个 one-time pad。所有薪资都是按照比例有增减。

你看到的都是一个线性空间映射。

然后每个月一换。
geelaw
2017-09-23 13:04:56 +08:00
所有的加密都是这样的,这个怎么就算是奇葩需求了呢?

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

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

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

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

© 2021 V2EX