Security 我应该如何在服务器上保存加密的用户数据,并且只向正确的用户提供数据?

Security 我应该如何在服务器上保存加密的用户数据,并且只向正确的用户提供数据?,security,authentication,encryption,passwords,authorization,Security,Authentication,Encryption,Passwords,Authorization,让我们假设我必须存储用户的敏感数据,这些数据可以选择在客户端进行加密 应使用用户的密码短语进行加密(可选) 用户登录(可选)应使用用户的密码进行 注: 纯文本密码不会存储在服务器上或通过网络传输 我的选择及其缺点: 1。无身份验证,客户端授权: 服务器将数据提供给所有人,但只有原始用户有解码的手段。 任何人都可以使用数据来尝试破解加密-这不是保护加密的最佳方式 2。服务器端身份验证,无授权: 服务器存储用户访问数据的密码,并且只将数据提供给能够提供正确密码的用户。 用户不信任网络在不加密的情

让我们假设我必须存储用户的敏感数据,这些数据可以选择在客户端进行加密

  • 应使用用户的密码短语进行加密(可选)
  • 用户登录(可选)应使用用户的密码进行
注:
纯文本密码不会存储在服务器上或通过网络传输

我的选择及其缺点:

1。无身份验证,客户端授权:
服务器将数据提供给所有人,但只有原始用户有解码的手段。
任何人都可以使用数据来尝试破解加密-这不是保护加密的最佳方式

2。服务器端身份验证,无授权:
服务器存储用户访问数据的密码,并且只将数据提供给能够提供正确密码的用户。
用户不信任网络在不加密的情况下传输数据

3。身份验证和授权:
服务器存储用户密码以访问加密数据,加密使用与用户密码不同的密码短语完成。
安全性好,但用户不想记住两个密码

4。身份验证与授权: 服务器存储用户密码以访问加密数据,加密使用相同的密码完成。
用户很高兴。一些安全问题

我更喜欢最新的第四种选择,但我担心的是:
如果服务器遭到破坏,我如何确保加密密码和加密数据不能一起用于破坏加密? 如何使破解加密变得更困难

一些想法:

  • 对密码和数据使用不同的加密算法
  • 在加密之前,将固定字符串添加到用户密码的末尾
  • 将用户密码填充到一定长度

编辑:

系统应该非常类似于从所有方面都安全的备份系统:服务器不应该能够读取数据,只有原始客户端应该能够访问数据,并且应该防止中间人攻击。因此,如果有人入侵服务器身份验证或客户端加密,则数据不应泄露

应该是基于Web的,所以中间人攻击应该用HTTPS防止。

为了防止服务器黑客泄露数据,数据在客户端加密


为防止客户端加密篡改,应在服务器端使用一些登录和密码或令牌(可能是唯一的URL)保护对数据的访问。

使用选项一,并使数据的URL包含一个长的随机字符串。任何知道随机字符串的人都可以获得数据。当然,只有创建数据的客户机才能立即获得该URL

如果有人想给其他人可撤销的访问权,允许他们生成一个新的随机URL,并提供一种方法让他们命名该随机URL并撤销其获取数据的能力


更容易正确,更灵活,对用户更有意义。有a和a。

@Vitaly,请允许我在回答之前澄清一些术语,因为您似乎对某些术语使用了不同于通常使用的含义

身份验证
-证明你是谁的过程(更准确地说,你拥有你所声称的身份)。
授权
-用于限制、控制和授予访问权限的机制。
加密
-一种保护数据的机制,即使是从有权访问数据的人那里

现在,请允许我重新表述您的选择,然后我将提出其他建议:

  • 无身份验证、无授权、客户端加密
  • 服务器端身份验证、服务器端授权、服务器端加密
  • 服务器端身份验证、服务器端授权、客户端加密
  • 服务器端身份验证、服务器端授权、使用服务器凭据的客户端加密
  • 现在,我想每个人的立场都会更加清晰。
    一般来说,您确实希望遵循“深度防御”的“最佳实践”(不要让我开始了解这些)原则,即不要只使用加密或访问控制,而是同时使用两者!但是,正如您所指出的,这可能与另一个原则形成对比(如果要求用户记住两个密码),即“保持简单的安全性”

    如果你不想显得太烦人,你就不会在你的环境中提供太多信息。例如,这是一个Web应用程序吗?如果是这样,为什么SSL/TLS对您来说不够加密?或者这是一个用户上传您(和您的系统)不应该看到的个人数据的问题(例如备份类型的服务)?在这种情况下,需要客户端加密

    因此,(最后)我建议的选项取决于您的环境/要求:

  • 如果可以,请使用安全协议(如SSL/TLS)进行加密。使用服务器端身份验证+授权、协议加密
  • 如果您的系统需要进一步保护这些数据,例如信用卡(请注意,我目前不是PCI:QSA;),请使用前面的选项,此外,还可以使用服务器生成的加密密钥(而不是密码)进行服务器端加密(当然要保护)
  • 如果需要对数据进行系统保护,则除了服务器端身份验证+授权(我重申的选项3)之外,还需要进行客户端加密。
    但是,您不一定需要强制用户记住额外的密码/短语。同样,根据您的环境,您可以考虑存储在