V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
finian
1D
V2EX  ›  DevOps

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

  •  
  •   finian · Jul 13, 2013 · 9912 views
    This topic created in 4675 days ago, the information mentioned may be changed or developed.
    数据库中存有敏感信息,需要在存入时加密,取出时解密。采用对称加密算法,为了防止服务器被拿下导致密钥泄密,密钥如何保存和管理比较靠谱?
    Supplement 1  ·  Jul 13, 2013
    补充一个场景,服务端需要用到敏感信息原文做一些操作,所以在客户端加解密的方案就用不了了
    17 replies    1970-01-01 08:00:00 +08:00
    finian
        1
    finian  
    OP
       Jul 13, 2013
    自己想到的,不知是否靠谱:
    * 将密钥内容硬编进服务端程序逻辑(二进制)?
    * 将密钥放进加密容器,程序获取时输入密码?
    * 放到内网另外一台主机,通过安全通道获取?

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

    解密的过程反过来。

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

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

    用“另一台电脑”当然也可以,不过“另一台电脑”靠不靠谱就另说了。
    kuphrer
        15
    kuphrer  
       Jul 14, 2013
    总之把加解密代理出去,只拿结果就对了
    vibbow
        16
    vibbow  
       Jul 14, 2013
    用 TPM ?
    dndx
        17
    dndx  
       Jul 14, 2013
    LZ 你需要的是硬件加密机。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2481 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 91ms · UTC 09:54 · PVG 17:54 · LAX 02:54 · JFK 05:54
    ♥ Do have faith in what you're doing.