【问题标题】:Encrypting data via client or server or both?通过客户端或服务器或两者加密数据?
【发布时间】:2012-10-24 19:56:29
【问题描述】:

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

用于注册

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

用于登录

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

我的担忧

我担心有人会截获发送出去的内容并将其与他们输入的密码进行比较。

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

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

我也想知道与此相关的标准是什么以及不同方法的风险。

编辑: 我担心我想多了,但觉得问起来会更安全。

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

【问题讨论】:

  • 默认情况下始终加密服务器上的密码(包括加盐)。这样,它们就不会被盗(内部或外部)。这里有很多类似的问题,但都是特定于堆栈的,值得您探索:例如:Is there a good way to encrypt user data?

标签: security encryption standards


【解决方案1】:

如果数据非常敏感,您可以使用在线备份方式(如 Mozy、Carbonite 等),如果丢失密码或私钥,您的数据也会丢失。

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

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

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

【讨论】:

  • 我喜欢。很多信息,但在阅读了几次之后,事情开始减少了:P 谢谢!
【解决方案2】:

http://www.jcryption.org/

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多