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

2013-07-13 11:21:08 +08:00
 finian
数据库中存有敏感信息,需要在存入时加密,取出时解密。采用对称加密算法,为了防止服务器被拿下导致密钥泄密,密钥如何保存和管理比较靠谱?
8797 次点击
所在节点    DevOps
17 条回复
finian
2013-07-13 11:42:48 +08:00
自己想到的,不知是否靠谱:
* 将密钥内容硬编进服务端程序逻辑(二进制)?
* 将密钥放进加密容器,程序获取时输入密码?
* 放到内网另外一台主机,通过安全通道获取?

另外,https中的私钥是否也需要进行类似的安全性保护?
zhttty
2013-07-13 11:51:23 +08:00
直接使用pam模块吧。
raptor
2013-07-13 11:59:12 +08:00
只要服务器被拿下,必然有办法解密,至少可以从内存中获得密钥。
更安全的办法是数据存储和加解密在不同的服务器上,设法防止两个服务器被同时攻破。
或者干脆客户端加解密,每个客户端使用不同的密钥。
finian
2013-07-13 12:03:33 +08:00
@raptor 请问在内存中获取密钥信息难度大吗?
finian
2013-07-13 12:09:29 +08:00
@raptor 在客户端加解密的话,服务端也需要保存和管理客户端的密钥信息吧?如果只保存在客户端,客户端卸载了,密钥就丢失了
Kid
2013-07-13 12:13:30 +08:00
Hardware security module...
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
2013-07-13 12:38:15 +08:00
@finian 难度当然大,但是人家既然有能力黑了你的服务器,再破解个内存密钥应该也就那么回事。
客户端可以通过设置一个密码把密钥加密以后放到服务端作备份,重装客户端的时候把密钥下载下来用户输入密码解密,如果用错误的密码解出的密钥自然也是错误的,拿这个密钥云解服务端的数据自然也是错误的,能过对解密后的数据进行校验就可以判断。
finian
2013-07-13 13:15:20 +08:00
@zhttty 感谢回复,这种思路挺好的,但是一旦用户忘记密码(密钥),数据库中的信息就解不开了。另外我补充了一下问题,因为服务端需要用到敏感信息的原文,所以在客户端加解密的方案就用不了了。
xdeng
2013-07-13 17:17:38 +08:00
6楼说的方法不错啊 用硬件加密模块
raptor
2013-07-13 17:47:23 +08:00
这样的话,硬件加密的确是最好的办法,除非黑客能到服务器上把加密硬件给偷走。
julyclyde
2013-07-13 18:13:19 +08:00
但是加密狗的速度很成问题……
pubby
2013-07-13 18:27:38 +08:00
对这块不熟悉,不过用加密硬件。。。那用另一台电脑能否替代加密硬件的功能?
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
2013-07-14 00:36:20 +08:00
总之把加解密代理出去,只拿结果就对了
vibbow
2013-07-14 23:46:47 +08:00
用 TPM ?
dndx
2013-07-14 23:49:06 +08:00
LZ 你需要的是硬件加密机。

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

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

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

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

© 2021 V2EX