0

我试图弄清楚如何构建一个功能来使用 Yubikey OTP 进行身份验证。

我想自己托管自己的身份验证服务,而不依赖 Yubikey API。

我查看了他们的示例 yubikey-ksm 项目,试图找出 Yubikey 请求的格式,所以我可以尝试构建自己的。但是,他们的示例似乎是在密钥数据库中查找令牌的 AES 密钥。我不太确定这个密钥来自哪里,因为在设置新的 Yubikey 时没有安装 AES 密钥的步骤。

我目前对流程的理解(如有错误请指正):

  1. 取 OTP 的前 12 个字符;这是令牌 ID,以及最后 32 个字符;这是密文。

  2. 以某种方式获取与此令牌 ID 关联的 AES 密钥(但在哪里??)以及“内部名称”。

  3. 0x00000000000000000000000000000000使用步骤 2 中的密钥并作为 IV在 ECB 模式下使用 AES128 解密 32 个字符的密文。

  4. 检查明文的前 12 个字符是否与步骤 2 中的“内部名称”匹配,并且明文的 CRC 是否正确。

  5. 如果步骤 4 正确,则验证密钥。接下来的 4 个字符是计数器,接下来的 8 个字符是时间戳,接下来的 2 个字符是使用计数器。

步骤 2 中的这个 AES 密钥和“内部名称”来自哪里?而且,鉴于远程服务器和 Yubikey 没有安全的方式来协商新的 AES 密钥,攻击者获取 AES 密钥的安全性如何,就像合法站点所有者需要获取它来验证密钥一样?

4

1 回答 1

0

我对 yubicloud 网页 ( https://www.yubico.com/products/yubicloud/ ) 的理解是,您的 yubikeys 基本上有 2 种 OTP 验证模型:

  • 您可以使用设备中的内置 AES 密钥,该密钥为 Yubikey (yubicloud) 服务器所知(因此 Web 应用程序可以使用其 API 对您进行身份验证);
  • 或者您生成自己的 AES 密钥,并将其提供给您的身份验证服务器和 Yubikey,并设置您的 Yubikey 以便它使用此自定义密钥。

问候

于 2021-08-27T13:41:36.960 回答