用于验证 Web 应用程序的硬件令牌

信息安全 验证 硬件
2021-08-30 20:52:19

我的公司正在开发一个 Web 应用程序,我被要求研究如何进行基于硬件的令牌身份验证以登录我们的Web 应用程序. 让我重复一遍:基本上会有一个网络应用程序,并且会有一个 USB 连接到计算机,可能是用户需要在某处输入用户名和密码,只要用户名和密码正确,用户应该经过身份验证才能使用我们的 Web 应用程序。当然,我们不希望用户在那台机器上下载/安装任何东西,因为这台机器可能不是他们的,或者他们只是不想做任何额外的事情。我的公司建议有一个浏览器插件,但是由于该插件具有浏览器拥有或更少的系统权限,并且浏览器应该无法访问底层硬件(除了相机和麦克风,因为它们是必需品)

我看到如何做到这一点的一种方法可能是拥有一个修改版本的网络浏览器,它同时能够检查安全令牌(usb)是否存在,然后从那里启动网络应用程序。如果用户不想运行任何东西或者目标计算机不允许运行这种东西,我认为这样做是不可能的。只是想和你们核实一下我是否遗漏了什么。

4个回答

然后我会建议 Yubikey ( http://www.yubico.com )。Yubikey 是一个 OTP 硬件令牌,它确实伪装成一个键盘(因此不需要额外的软件安装),然后向服务器发送一个 128 位加密的秘密。令牌由管理员完全可编程,并且可以以多种方式使用令牌。您可以使用无密码令牌,例如使用令牌作为“您拥有的”身份验证的一个因素。

但是您也可以让用户在按下令牌上的按钮之前输入密码。

也可以将令牌配置为使用公共身份,然后每个用户使用唯一的 AES 密钥,或者您可以使用秘密身份,然后遍历所有 AES 密钥并解密(例如,如果您有 10 个用户,那么您可以遍历存储在服务器上的 10 个不同的 AES 密钥),但该过程可能会消耗 CPU,或者您可以为所有用户使用相同的 AES 密钥。

如果您在第一个备选方案中选择任何一个,则可以使用任何 Yubico 代币。如果您选择最后一种选择,我建议 Yubikey NEO,它确实具有防篡改加密智能卡芯片,这使得流氓用户无法篡改 yubikey 以提取 AES 密钥(这将使它这个流氓用户可能将自己标识为另一个用户)。

使用秘密身份的好处是,如果有人找到了 yubikey,他们将无法找出它属于谁。NEO 的另一个优点是具有 NFC 支持,并且可以生成“NFC URL 贴纸”所做的信号,但在末尾附加一个 OTP,例如“ http://www.example.com/login.php? otp=ifhgieififhgieififhgieififhgieif " 这样用户就可以使用他的 Yubikey 通过兼容 NFC 的手机登录。

CryptoStick使用Web Cryptography API浏览器公开密钥。提议的 USB 安全令牌产品产品很可能会使用类似的技术。CryptoStick 是开源的,因此第三方很容易验证它的安全性。

我经常使用的 2 因素身份验证是Google Authenticator,它使 Web 应用程序支持两因素身份验证变得非常容易。似乎越来越多的服务支持 Google Authenticator,LastPass 和 Amazon AWS 就是很好的例子。

除了 sebastians 的回答之外,您还可以考虑不使用 yubicos 后端服务器,而是运行您自己的系统,以便身份验证请求不会转发到 yubico,而是在您自己的系统或您自己的(您的客户)子网中处理。唉,您需要安装/运行这样的后端系统。Yubico 自己提供了一个身份验证服务器,但您也可以查看开源身份验证后端privacyidea,您可以使用它来管理 yubikeys 以及像 Google Authenticator 这样的软 OTP 令牌。

您还可以设置一个这样的系统并为您的几个客户运行它。

RSA 令牌可能是另一种选择。这要求用户输入显示在 RSA 令牌上的 OTP。效果很好,但并不便宜。