我正在构建一个服务器端应用程序,它要求将数据加密存储在数据库中。当客户端访问数据时,它也必须加密传输。每个客户都有一个独特的登录。
我最初的想法是存储使用AES等对称算法加密的数据。因此,当客户端想要访问数据时,加密数据将传输到客户端,而密钥则使用客户端的公钥进行加密。
这是一种存储和传输数据的安全方法,还是有更好的解决方案来解决这个问题?
更新:如果遵循Søren建议使用每个客户端的公钥加密AES密钥的副本,那么为了添加其他客户端还是可以以任何方式生成密钥,是否包含要存储在某处的密钥?
答案 0 :(得分:3)
安全吗?您需要更清楚地定义目标。
该解决方案将在传输过程中保护数据,但根据您的描述,服务器可以完全访问数据(因为它需要存储未加密的AES密钥)。换句话说,有权访问服务器的黑客或窃贼可以完全访问数据。
如果您想要安全传输,请在数据库连接周围使用SSL / TLS包装器。这是所有主要供应商的标准解决方案。
为保护数据服务器端,服务器不应具有AES密钥。如果客户端数量有限,则服务器可以为每个客户端存储AES密钥的副本,密钥的每个副本已经使用每个客户端的公钥加密,这样服务器就不会看到纯文本数据或任何未加密的AES密钥。
答案 1 :(得分:3)
首先,您应该首先定义一些您想要提供的安全属性,例如:
是否可以让不同的用户访问同一个密钥? Aka如果File1是使用密钥K进行AES加密,如果用户Alice和用户Bob都被给予K,这是一个问题。
如何撤消系统中的用户? (原来,方案1中的Bob实际上是为我们公司工作的中国间谍,我如何安全地将他踢出系统)。
是否需要搜索保存在数据库中的加密数据? (这个问题研究得很好,很难解决!)
将多少(如果有)以及将哪些明文数据放入数据库以帮助组织它?数据库期望数据具有与之关联的唯一键。您需要确保这些密钥不会泄漏信息,但是在以后检索数据时非常有用。
秘密密钥应该多久更改一次?如果您正在存储文件,并且允许多个用户访问加密文件,那么当用户X修改文件时会发生什么?密钥是否会改变?是否应将新密钥发送给所有用户?
当2个用户同时修改相同数据时会发生什么?数据库是否能够在不进行修改的情况下处理这个问题?
还有很多其他人。
如果服务器不受信任且绝不能看到明文数据,那么这里是对可能解决方案的一般概述。
让客户完全管理加密。客户端通过服务器进行身份验证,并允许将数据存储到数据库中。客户有责任确保数据已加密。 在这种情况下,密钥应仅安全地保存在客户端计算机上。如果必须将它们放在别处,则可以创建“主密钥”。
答案 2 :(得分:0)
这确实是常见的方法,例如也用于NTFS文件加密。