一个基于PHP的网络商店运行在shared hosting上,将libsodium加密的个人数据存储在MySQL数据库中。为了让用户能够访问自己的数据,实现了一个与本题中讨论的设计非常相似的设计:密钥来自用户的密码(PWKEY),该密码用于解密用户的私钥(PRKEY),然后用于解密用户的数据。
有人要求通过Facebook/ Instagram/ Pinterest/等介绍登录和/或其他类似的无密码认证服务(例如向用户注册的电子邮件发送登录链接)到网店。问题是没有密码,这个设计就坏了。
我正在寻找一种解决方案,允许无密码身份验证,同时以一种安全的方式维护加密密钥,并允许用户解密自己的数据,但我不知道如何处理这个问题。
一种可能的解决方案是添加第二个身份验证层:在用户使用所选的身份验证方法登录后分别请求一个密码/短语/ PIN,并从该密码/短语/ PIN生成PWKEY -但这意味着无密码实际上并不是无密码的.
发布于 2019-09-07 12:17:12
核心问题是要保证哪些安全属性。这种服务器端按字段加密确实有一些好处,但只有在相当狭窄的情况下才有好处:当后端被破坏时,它不会保护用户,因为后端仍然接收密钥,但是如果后端容易受到SQL注入的攻击,或者如果攻击者能够访问数据库备份,或者数据库服务器受到破坏,或者您的软件中存在显示其他用户数据的漏洞,它将部分保护用户。
我会考虑这个加密方案是否值得增加安全性。这将取决于加密数据的性质和您的网络商店的客户端。这是一种奇怪的选择,因为您的方案不提供端到端加密,并且与其他安全方法相比提供了有限的优势。例如,通过采取以下安全措施,您可以获得非常类似的安全级别:
如果您确实希望保留每个字段的加密,那么是的,无密码登录是不可能的。但是,并非所有操作都需要访问加密的数据。
https://softwareengineering.stackexchange.com/questions/397075
复制相似问题