有一个公司 Web 邮件站点 (PHP + MySQL),供有限数量的用户使用,这些用户是使用公司 Web 门户远程工作的公司员工。每个用户都有一个登录名和密码。
我正在考虑用密钥文件替换通常的文本密码,即用户在第一次登录时选择任何文件作为密钥,它可以是文本文件甚至是图片,该文件的校验和存储在数据库中并且下次这样的用户需要登录时,他会上传他的密钥文件而不是输入密码。这种身份验证会比输入密码更安全吗?我想找出一个密钥文件比密码要难得多。
有一个公司 Web 邮件站点 (PHP + MySQL),供有限数量的用户使用,这些用户是使用公司 Web 门户远程工作的公司员工。每个用户都有一个登录名和密码。
我正在考虑用密钥文件替换通常的文本密码,即用户在第一次登录时选择任何文件作为密钥,它可以是文本文件甚至是图片,该文件的校验和存储在数据库中并且下次这样的用户需要登录时,他会上传他的密钥文件而不是输入密码。这种身份验证会比输入密码更安全吗?我想找出一个密钥文件比密码要难得多。
密钥文件的主要问题是它是一个文件。因此,它存储在某个物理介质上的某个地方。它将与备份一起复制。该文件仍将存在于废弃硬盘上。用户将他们的文件复制到多个设备,以便能够从所有这些设备登录。总而言之,文件泄漏。
相反,密码适合大脑,不需要写在任何地方。用户自然地随他移动;密码不会泄露到备份磁带和旧磁盘。最后但同样重要的是,密码输入在手机上运行良好,而文件上传在技术上可能更具挑战性。
因此,虽然秘密文件可以包含比精神密码更多的秘密,但它也往往不那么“秘密”并且暗示可用性问题。总的来说,“秘密文件”方法似乎并不比密码更安全。
另一种看待它的方式:从安全的角度来看,“秘密文件”相当于一个文本文件,其中包含一个大的随机密码,用户在他想要登录时读取(并且可能是“类型”复制粘贴密码)。每个反对在文本文件中写下密码的论点同样适用于你的“秘密文件”想法。
如果您想要多因素身份验证(正如您的评论所证明的那样:“我在考虑多重媒体身份验证:密码是用户知道的东西,而密钥文件是他应该拥有的东西”),有几种选择:
密钥文件很容易被窃取,或者您可以让用户犯错误,例如更改他们的密钥文件(想象一下,如果他们选择了然后编辑的文档!),删除他们的密钥文件等。这不是一种非常用户友好的方法,并且需要传输整个每次登录时的文件。此外,密钥文件不提供针对恶意软件或 MITM 攻击的保护。
没有人提到使用客户端证书文件的“官方”方式。这些不会发送到服务器,而是参与加密过程。您甚至可以将它们存储在智能卡上,这样它们就不会被客户端 PC 上的恶意软件窃取。
缺点是 UI 很笨重,而且不容易设置。
(有用的搜索词:“PKCS11”)
我看到至少有 2 点反对这个想法: