通过客户端或服务器或两者加密数据?

时间:2012-10-24 19:56:30

标签: security encryption standards

我有一个关于数据加密的问题。我的问题是我在哪里加密数据?为什么?

注册

我目前在应用程序/游戏中加密数据并将数据发送到服务器以添加或更新到数据库。

登录

我要求服务器向我发送有关用户名的数据,包括密码。所以我收到加密的密码和用户名并解密密码,看它是否与玩家输入的内容相符。

我的关注

我担心的是有人可以截取发送的内容并将其与输入的密码进行比较。

我对解决方案的想法是加密服务器上的数据,但这只有在服务器/数据库被黑客攻击时才有用。

我找不到任何与我的问题有关的内容。我发现了有关如何加密数据的文章,但没有发现风险和安全漏洞。

我也想知道这些标准是什么以及不同方法的风险。

编辑: 我害怕我在想这个,但觉得问起来会更安全。

我没有提供加密我使用的数据的方法,因为我不知道这是否会带来安全风险。

2 个答案:

答案 0 :(得分:0)

如果数据极其敏感,您可以采用在线备份方式(如Mozy,Carbonite等),如果丢失密码或私钥,则会丢失数据。

如果不是那么敏感,您只需为所有帐户数据使用主密码,并允许他们重置密码。在服务器上,您只存储随机盐和盐渍+哈希密码,在通信期间您只发送盐。客户端哈希,您只需比较哈希值,因此原始密码永远不会传输。无论哪种方式,如果他们破解了您的服务器,他们也可能会获得主密码,除非您必须每次插入它以启动应用程序。如果它与数据库服务器在物理上是分开的,那么至少在加密的情况下,只有这种情况或硬盘驱动器丢失不会使您暴露。

如果您担心流量嗅探和哈希重用,如果有人想要帐户足够严重,那么您有两个很好的解决方案:更好的可能是使用SSL连接,这完全消除了任何暴露的可能性,但如果你构建到多个服务器,可能需要相当多的资金和设置。否则你可以创造一个穷人的Diffie-Hellman,就像这样:用盐,再发一个一次性使用密钥;客户端首先使用salt哈希密码,然后使用密钥对结果进行哈希处理并发送。在服务器端,您将密钥保存在内存或数据库中,一旦进行身份验证,您就会忘记密钥。

但是,您永远无法使用加密防御键盘记录程序和rootkit。这需要其他安全模型,例如让用户通过短信确认新客户端或IP登录。

答案 1 :(得分:0)

http://www.jcryption.org/

您可以使用jCryption& OpenSSL库, jCryption是用于加密的优秀javascript库 您可以在客户端加密数据并将其发送到服务器,在服务器调用openssl库中进行解密/加密, jCryption现在与OpenSSL完全兼容