我试图弄清楚如何构建一个功能来使用 Yubikey OTP 进行身份验证。
我想自己托管自己的身份验证服务,而不依赖 Yubikey API。
我查看了他们的示例 yubikey-ksm 项目,试图找出 Yubikey 请求的格式,所以我可以尝试构建自己的。但是,他们的示例似乎是在密钥数据库中查找令牌的 AES 密钥。我不太确定这个密钥来自哪里,因为在设置新的 Yubikey 时没有安装 AES 密钥的步骤。
我目前对流程的理解(如有错误请指正):
取 OTP 的前 12 个字符;这是令牌 ID,以及最后 32 个字符;这是密文。
以某种方式获取与此令牌 ID 关联的 AES 密钥(但在哪里??)以及“内部名称”。
0x00000000000000000000000000000000
使用步骤 2 中的密钥并作为 IV在 ECB 模式下使用 AES128 解密 32 个字符的密文。检查明文的前 12 个字符是否与步骤 2 中的“内部名称”匹配,并且明文的 CRC 是否正确。
如果步骤 4 正确,则验证密钥。接下来的 4 个字符是计数器,接下来的 8 个字符是时间戳,接下来的 2 个字符是使用计数器。
步骤 2 中的这个 AES 密钥和“内部名称”来自哪里?而且,鉴于远程服务器和 Yubikey 没有安全的方式来协商新的 AES 密钥,攻击者获取 AES 密钥的安全性如何,就像合法站点所有者需要获取它来验证密钥一样?