V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
woffee
V2EX  ›  科技

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

  •  
  •   woffee · 2017-09-23 10:51:20 +08:00 · 4116 次点击
    这是一个创建于 2400 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    除了一个奇葩点的需求:

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

    很有意思吧。

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

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

    多谢各位~

    29 条回复    2017-09-24 10:46:12 +08:00
    zj299792458
        1
    zj299792458  
       2017-09-23 10:54:15 +08:00 via iPhone
    开发人员不知道密码怎么解密,后门?
    greenskinmonster
        2
    greenskinmonster  
       2017-09-23 10:55:34 +08:00   ❤️ 13
    开发完了,灭口。
    Thoxvi
        3
    Thoxvi  
       2017-09-23 10:56:39 +08:00 via Android   ❤️ 1
    同态加密?

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

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

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

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

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

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


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

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

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


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

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

    数据用 ca cert 加密。

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

    ca 生成 access cert。

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

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


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

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

    然后每个月一换。
    geelaw
        20
    geelaw  
       2017-09-23 13:04:56 +08:00
    所有的加密都是这样的,这个怎么就算是奇葩需求了呢?
    Keyes
        21
    Keyes  
       2017-09-23 13:26:35 +08:00 via Android   ❤️ 1
    很简单的,参考 lastpass 方案
    takato
        22
    takato  
       2017-09-23 16:31:57 +08:00
    非对称加密啊,研发和服务器可以拿公钥。。可查看的人拿私钥即可。
    woffee
        23
    woffee  
    OP
       2017-09-23 22:25:36 +08:00
    多谢楼上的回复~

    @Thoxvi 你的回答让我学到了新姿势,头一次听说同态加密,查了下资料,有种杀鸡用牛刀的感觉

    这个问题的确不算“奇葩”,本来起题目的时候想着如何准确表达又带点吸引力,就用了“奇葩”一词,见谅。

    2 楼的回答让我想起了盗墓笔记里修盗洞的人,我们要爱护开发人员~
    mingl0280
        24
    mingl0280  
       2017-09-24 00:15:59 +08:00
    给数据库加个密码,然后配置的时候要求用户更改一次密码(或者用硬件加密),开发人员能知道才有鬼了……
    mingl0280
        25
    mingl0280  
       2017-09-24 00:16:52 +08:00
    p.s.这个需求一点也不奇葩。MSSQL 和 Oracle 都有这个设计。
    eyp82
        26
    eyp82  
       2017-09-24 01:42:30 +08:00
    这是很通用的需求, 没什么奇葩的
    SoulSleep
        27
    SoulSleep  
       2017-09-24 09:37:49 +08:00
    这个需求很复杂嘛?????为啥前几楼提出来的解决方案感觉这是一个很棘手的问题.....

    只有授权人员才能看 私钥呗....私钥可以解密,验签等等。。
    SoulSleep
        28
    SoulSleep  
       2017-09-24 09:38:50 +08:00
    @chuxiwen CA 可以走根 CA 啊,不要自己搭建 CA,那肯定没谱了~申请几个证书的事,成本也就几千块钱
    cwek
        29
    cwek  
       2017-09-24 10:46:12 +08:00
    使用不对称加密加 ACL ?写入数据全部加密,公钥只能由授权组亲自写入到设定文件中,源代码过审查防止偷私钥和明文另外写出。授权读取者通过私钥来读取数据。大致以上。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   915 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 20:37 · PVG 04:37 · LAX 13:37 · JFK 16:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.