Web 身份验证 - 密码与密钥文件

信息安全 验证
2021-08-12 11:48:41

有一个公司 Web 邮件站点 (PHP + MySQL),供有限数量的用户使用,这些用户是使用公司 Web 门户远程工作的公司员工。每个用户都有一个登录名和密码。

我正在考虑用密钥文件替换通常的文本密码,即用户在第一次登录时选择任何文件作为密钥,它可以是文本文件甚至是图片,该文件的校验和存储在数据库中并且下次这样的用户需要登录时,他会上传他的密钥文件而不是输入密码。这种身份验证会比输入密码更安全吗?我想找出一个密钥文件比密码要难得多。

4个回答

密钥文件的主要问题是它是一个文件因此,它存储在某个物理介质上的某个地方。它将与备份一起复制。该文件仍将存在于废弃硬盘上。用户将他们的文件复制到多个设备,以便能够从所有这些设备登录。总而言之,文件泄漏

相反,密码适合大脑,不需要写在任何地方。用户自然地随他移动;密码不会泄露到备份磁带和旧磁盘。最后但同样重要的是,密码输入在手机上运行良好,而文件上传在技术上可能更具挑战性。

因此,虽然秘密文件可以包含比精神密码更多的秘密,但它也往往不那么“秘密”并且暗示可用性问题。总的来说,“秘密文件”方法似乎并不比密码更安全。


另一种看待它的方式:从安全的角度来看,“秘密文件”相当于一个文本文件,其中包含一个大的随机密码,用户在他想要登录时读取(并且可能是“类型”复制粘贴密码)。每个反对在文本文件中写下密码的论点同样适用于你的“秘密文件”想法。

如果您想要多因素身份验证(正如您的评论所证明的那样:“我在考虑多重媒体身份验证:密码是用户知道的东西,而密钥文件是他应该拥有的东西”),有几种选择:

  1. 密码 + 客户端证书(需要 PKI 基础设施,并且很难轮换证书。很难从其他设备访问网络邮件,但这可能是一个好处。)
  2. 密码 + 一次性密码。您可以发布 HOTP 设备(YubiKey 样式)、TOTP 设备(RSA 令牌样式)或使用软 TOTP 设备(如 Google Authenticator)。有几个库为 PHP 实现 TOTP,例如http://www.multiotp.net/website/index.php?language=en

密钥文件很容易被窃取,或者您可以让用户犯错误,例如更改他们的密钥文件(想象一下,如果他们选择了然后编辑的文档!),删除他们的密钥文件等。这不是一种非常用户友好的方法,并且需要传输整个每次登录时的文件。此外,密钥文件不提供针对恶意软件或 MITM 攻击的保护。

没有人提到使用客户端证书文件的“官方”方式。这些不会发送到服务器,而是参与加密过程。您甚至可以将它们存储在智能卡上,这样它们就不会被客户端 PC 上的恶意软件窃取。

缺点是 UI 很笨重,而且不容易设置。

(有用的搜索词:“PKCS11”)

我看到至少有 2 点反对这个想法:

  1. 理想情况下,密码/密码短语存在于用户的记忆中而不是其他任何地方,而您的“密钥文件”必须存在于某些存储中,因此它们可能会被盗。
  2. 您没有考虑到用户并不总是坐在同一台计算机前-他们必须传输这些文件-更危险