服务端如何靠谱地保存密钥? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
finian
1D
V2EX    DevOps

服务端如何靠谱地保存密钥?

  •  
  •   finian 2013-07-13 11:21:08 +08:00 9609 次点击
    这是一个创建于 4520 天前的主题,其中的信息可能已经有所发展或是发生改变。
    数据库中存有敏感信息,需要在存入时加密,取出时解密。采用对称加密算法,为了防止服务器被拿下导致密钥泄密,密钥如何保存和管理比较靠谱?
    第 1 条附言    2013-07-13 13:13:36 +08:00
    补充一个场景,服务端需要用到敏感信息原文做一些操作,所以在客户端加解密的方案就用不了了
    17 条回复    1970-01-01 08:00:00 +08:00
    finian
        1
    finian  
    OP
       2013-07-13 11:42:48 +08:00
    自己想到的,不知是否靠谱:
    * 将密钥内容硬编进服务端程序逻辑(二进制)?
    * 将密钥放进加密容器,程序获取时输入密码?
    * 放到内网另外一台主机,通过安全通道获取?

    另外,https中的私钥是否也需要进行类似的安全性保护?
    zhttty
        2
    zhttty  
       2013-07-13 11:51:23 +08:00
    直接使用pam模块吧。
    raptor
        3
    raptor  
       2013-07-13 11:59:12 +08:00
    只要服务器被拿下,必然有办法解密,至少可以从内存中获得密钥。
    更安全的办法是数据存储和加解密在不同的服务器上,设法防止两个服务器被同时攻破。
    或者干脆客户端加解密,每个客户端使用不同的密钥。
    finian
        4
    finian  
    OP
       2013-07-13 12:03:33 +08:00
    @raptor 请问在内存中获取密钥信息难度大吗?
    finian
        5
    finian  
    OP
       2013-07-13 12:09:29 +08:00
    @raptor 在客户端加解密的话,服务端也需要保存和管理客户端的密钥信息吧?如果只保存在客户端,客户端卸载了,密钥就丢失了
    Kid
        6
    Kid  
       2013-07-13 12:13:30 +08:00
    Hardware security module...
    zhttty
        7
    zhttty  
       2013-07-13 12:31:47 +08:00
    用户a..b..c..d...z自己掌握各自的一个自己设定的密钥如:$key
    用户输入内容$cOntents=>客户端JS($key,对称加密)=>$keycontents
    $(key)=>客户端MD5($key)传输到服务端=>成为盐$salt
    $keycontents通过https传输到服务端
    对称算法F($salt,$keycontents)=>存入数据库

    解密的过程反过来。

    用户的$key对入侵服务器的人来说是透明的,包括管理员本身也看不到数据存储的原内容。
    raptor
        8
    raptor  
       2013-07-13 12:38:15 +08:00
    @finian 难度当然大,但是人家既然有能力黑了你的服务器,再破解个内存密钥应该也就那么回事。
    客户端可以通过设置一个密码把密钥加密以后放到服务端作备份,重装客户端的时候把密钥下载下来用户输入密码解密,如果用错误的密码解出的密钥自然也是错误的,拿这个密钥云解服务端的数据自然也是错误的,能过对解密后的数据进行校验就可以判断。
    finian
        9
    finian  
    OP
       2013-07-13 13:15:20 +08:00
    @zhttty 感谢回复,这种思路挺好的,但是一旦用户忘记密码(密钥),数据库中的信息就解不开了。另外我补充了一下问题,因为服务端需要用到敏感信息的原文,所以在客户端加解密的方案就用不了了。
    xdeng
        10
    xdeng  
       2013-07-13 17:17:38 +08:00
    6楼说的方法不错啊 用硬件加密模块
    raptor
        11
    raptor  
       2013-07-13 17:47:23 +08:00
    这样的话,硬件加密的确是最好的办法,除非黑客能到服务器上把加密硬件给偷走。
    julyclyde
        12
    julyclyde  
       2013-07-13 18:13:19 +08:00
    但是加密狗的速度很成问题……
    pubby
        13
    pubby  
       2013-07-13 18:27:38 +08:00
    对这块不熟悉,不过用加密硬件。。。那用另一台电脑能否替代加密硬件的功能?
    Kid
        14
    Kid  
       2013-07-14 00:24:25 +08:00
    @julyclyde 其实速度这个问题好办。

    HSM 可以只存储一个 Master Key (m),而数据(d) 用另外的 Encryption Key (k) 加密。
    数据库中存储 encrypt_m(k) 和 encrypt_k(d)。
    其实每项数据的 Encryption Key 可以完全不一样。

    用“另一台电脑”当然也可以,不过“另一台电脑”靠不靠谱就另说了。
    kuphrer
        15
    kuphrer  
       2013-07-14 00:36:20 +08:00
    总之把加解密代理出去,只拿结果就对了
    vibbow
        16
    vibbow  
       2013-07-14 23:46:47 +08:00
    用 TPM ?
    dndx
        17
    dndx  
       2013-07-14 23:49:06 +08:00
    LZ 你需要的是硬件加密机。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3091 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 12:25 PVG 20:25 LAX 04:25 JFK 07:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86