首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无密码认证中的加密密钥

问无密码认证中的加密密钥
EN

Software Engineering用户
提问于 2019-09-07 11:48:04
回答 1查看 246关注 0票数 1

一个基于PHP的网络商店运行在shared hosting上,将libsodium加密的个人数据存储在MySQL数据库中。为了让用户能够访问自己的数据,实现了一个与本题中讨论的设计非常相似的设计:密钥来自用户的密码(PWKEY),该密码用于解密用户的私钥(PRKEY),然后用于解密用户的数据。

有人要求通过Facebook/ Instagram/ Pinterest/等介绍登录和/或其他类似的无密码认证服务(例如向用户注册的电子邮件发送登录链接)到网店。问题是没有密码,这个设计就坏了。

我正在寻找一种解决方案,允许无密码身份验证,同时以一种安全的方式维护加密密钥,并允许用户解密自己的数据,但我不知道如何处理这个问题。

一种可能的解决方案是添加第二个身份验证层:在用户使用所选的身份验证方法登录后分别请求一个密码/短语/ PIN,并从该密码/短语/ PIN生成PWKEY -但这意味着无密码实际上并不是无密码的.

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2019-09-07 12:17:12

核心问题是要保证哪些安全属性。这种服务器端按字段加密确实有一些好处,但只有在相当狭窄的情况下才有好处:当后端被破坏时,它不会保护用户,因为后端仍然接收密钥,但是如果后端容易受到SQL注入的攻击,或者如果攻击者能够访问数据库备份,或者数据库服务器受到破坏,或者您的软件中存在显示其他用户数据的漏洞,它将部分保护用户。

我会考虑这个加密方案是否值得增加安全性。这将取决于加密数据的性质和您的网络商店的客户端。这是一种奇怪的选择,因为您的方案不提供端到端加密,并且与其他安全方法相比提供了有限的优势。例如,通过采取以下安全措施,您可以获得非常类似的安全级别:

  • 始终加密数据库备份
  • 设置网络,以便无法从internet访问数据库服务器。
  • 审核后端,以确保它不包含SQL注入漏洞。
  • 拥有一个自动测试套件来验证后端的逻辑。

如果您确实希望保留每个字段的加密,那么是的,无密码登录是不可能的。但是,并非所有操作都需要访问加密的数据。

  • 您可以使用身份验证服务进行用户身份验证。
  • 当需要密钥时,仍然必须提示输入密码。
  • 您可以将密钥存储在用户设备上的会话之外,例如在LocalStorage中
票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/397075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档