我们假设我必须存储用户的敏感数据,这些数据可选择在客户端加密。
注意:
明文密码不存储在服务器上或通过网络传输。
我的选择及其缺点:
1。无身份验证,客户端授权:
服务器将数据提供给每个人,但只有原始用户才有解码的方法
任何人都可以使用数据来尝试破解加密 - 而不是保护加密的最佳方式。
2。服务器端身份验证,无需授权:
服务器存储用户密码以访问数据,并仅向用户提供可提供正确密码的数据
用户不相信网络传输数据没有加密。
第3。身份验证和授权:
服务器存储用户密码以访问加密数据,加密使用与用户密码不同的密码完成。
安全性良好,但用户不想记住两个密码。
4。身份验证与授权: 服务器存储用户密码以访问加密数据,加密使用相同的密码完成 用户很高兴。一些安全问题。
我更喜欢最新的第四种选择,但我担心的是:
如果服务器受到损害怎么办?如何确保加密密码和加密数据不能一起用来破解加密?
如何才能更难打破加密?
一些想法:
修改
系统应该非常类似于应该从各方面保护的备份系统:服务器不应该能够读取数据,只有原始客户端应该能够访问数据而中间人应该是被阻止。因此,如果有人破解服务器身份验证或客户端加密,则不应泄露数据。
它应该是基于网络的,因此应该使用HTTPS阻止中间人攻击。
为防止服务器黑客泄露数据,数据在客户端加密。
为了防止客户端加密篡改,应该在服务器端保护对数据的访问,并使用一些登录和密码或令牌(可能是唯一的URL)。
答案 0 :(得分:7)
Authentication
- 证明你是谁的过程(更准确地说,你拥有你声称的身份)。
Authorization
- 用于限制,控制和授予访问权限的机制
Encryption
- 一种保护数据的机制,甚至是有权访问数据的人。
现在,请允许我重新定义您的选项,然后我会建议其他内容:
现在,我认为每个人站在哪里都可以更清楚 一般来说,你真的想要遵循“最佳实践”(不要让我开始那些)“深度防御”的原则,即不要只使用加密,或只使用访问控制,而是使用两者!但是,正如您所指出的,这可能与另一个原则“保持安全性简单”相反(如果用户需要记住 TWO 密码)。
在没有尝试太烦人的情况下,您没有提供有关环境的大量信息。例如,这是例如一个Web应用程序?如果是这样,为什么SSL / TLS不足以为您加密?或者这是用户上传您(和您的系统)不应该看到的个人数据的问题(例如备份类型的服务)?在这种情况下,客户端加密是必要的......
所以,(最后)我建议的选项,取决于您的环境/要求:
答案 1 :(得分:3)
您可以查看用于身份验证的零知识协议,尤其是Secure Remote Password protocol,这样就可以在不泄露服务器密码的情况下执行基于密码的身份验证。这样,相同的密码既可用于认证,也可用于导出数据加密密钥。 此外,您可以查看Clipperz在线服务,该服务实现类似于您的需求并且也是开源的。
答案 2 :(得分:1)
使用选项1并使数据的URL包含一个长随机字符串。知道随机字符串的任何人都可以获取数据。当然,只有创建数据的客户才会立即关闭该URL。
如果有人想让其他人获得可撤销的访问权限,请允许他们生成新的随机网址,并为他们提供一种方法,让他们为该随机网址命名并撤消其获取数据的能力。
Capability based security更容易正确,更灵活,对用户更有意义。有一个really excellent YouTube video about capability based security和一个nice website with some essays about it。