
1 finian OP 自己想到的,不知是否靠谱: * 将密钥内容硬编进服务端程序逻辑(二进制)? * 将密钥放进加密容器,程序获取时输入密码? * 放到内网另外一台主机,通过安全通道获取? 另外,https中的私钥是否也需要进行类似的安全性保护? |
2 zhttty 2013 年 7 月 13 日 直接使用pam模块吧。 |
3 raptor 2013 年 7 月 13 日 只要服务器被拿下,必然有办法解密,至少可以从内存中获得密钥。 更安全的办法是数据存储和加解密在不同的服务器上,设法防止两个服务器被同时攻破。 或者干脆客户端加解密,每个客户端使用不同的密钥。 |
6 Kid 2013 年 7 月 13 日 Hardware security module... |
7 zhttty 2013 年 7 月 13 日 用户a..b..c..d...z自己掌握各自的一个自己设定的密钥如:$key 用户输入内容$cOntents=>客户端JS($key,对称加密)=>$keycontents $(key)=>客户端MD5($key)传输到服务端=>成为盐$salt $keycontents通过https传输到服务端 对称算法F($salt,$keycontents)=>存入数据库 解密的过程反过来。 用户的$key对入侵服务器的人来说是透明的,包括管理员本身也看不到数据存储的原内容。 |
8 raptor 2013 年 7 月 13 日 @finian 难度当然大,但是人家既然有能力黑了你的服务器,再破解个内存密钥应该也就那么回事。 客户端可以通过设置一个密码把密钥加密以后放到服务端作备份,重装客户端的时候把密钥下载下来用户输入密码解密,如果用错误的密码解出的密钥自然也是错误的,拿这个密钥云解服务端的数据自然也是错误的,能过对解密后的数据进行校验就可以判断。 |
9 finian OP @zhttty 感谢回复,这种思路挺好的,但是一旦用户忘记密码(密钥),数据库中的信息就解不开了。另外我补充了一下问题,因为服务端需要用到敏感信息的原文,所以在客户端加解密的方案就用不了了。 |
10 xdeng 2013 年 7 月 13 日 6楼说的方法不错啊 用硬件加密模块 |
11 raptor 2013 年 7 月 13 日 这样的话,硬件加密的确是最好的办法,除非黑客能到服务器上把加密硬件给偷走。 |
12 julyclyde 2013 年 7 月 13 日 但是加密狗的速度很成问题…… |
13 pubby 2013 年 7 月 13 日 对这块不熟悉,不过用加密硬件。。。那用另一台电脑能否替代加密硬件的功能? |
14 Kid 2013 年 7 月 14 日 @julyclyde 其实速度这个问题好办。 HSM 可以只存储一个 Master Key (m),而数据(d) 用另外的 Encryption Key (k) 加密。 数据库中存储 encrypt_m(k) 和 encrypt_k(d)。 其实每项数据的 Encryption Key 可以完全不一样。 用“另一台电脑”当然也可以,不过“另一台电脑”靠不靠谱就另说了。 |
15 kuphrer 2013 年 7 月 14 日 总之把加解密代理出去,只拿结果就对了 |
16 vibbow 2013 年 7 月 14 日 用 TPM ? |
17 dndx 2013 年 7 月 14 日 LZ 你需要的是硬件加密机。 |