C++ - 是否可以将 libfido2 用于除 YubiKey 之外的其他 fido 令牌品牌?

问题描述 投票:0回答:1

我有一个 C++ 代码需要断言。它使用 winhello 与我的 fido 令牌进行通信。还好。

我必须在没有 winhello 的情况下使用其他库,所以我得到 libfido2 并构建它。

我的 fido 令牌的品牌是“thetis”。所以我遇到了以下情况。

我必须更改 fido_hid_manifest() 上 is_fido 的条件:

//if (is_fido(d) == false)
if (wcscmp(d->product_string, L"FIDO2 Security Key") != 0)

现在我得到这个输出:

   run_manifest: found 1 hid device
   fido_tx: dev=000002A60511C050, cmd=0x86
   fido_tx: buf=000002A60511C050, len=8
   0000: 5a ab b6 54 5c 5d 7e 23
   tx: tx_preamble
   fido_dev_open_tx: fido_tx

我的问题是当我运行

fido_dev_open(dev, path);
时,经常跟踪它,我发现错误在这里:

if ((sent = tx_preamble(d, cmd, buf, count, ms)) == 0) {
    fido_log_debug("%s: tx_preamble", __func__);
    return (-1);
}

当然,我必须说设备是通过以下路径发现的:

\\?\HID#VID_1EA8&PID_FC25&MI_00#7&29aed109&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}\KBD

我的问题一开始是,我可以使用libfido2来使用其他品牌的令牌吗? 下一个问题是我应该在哪里更改才能支持此令牌?

c++ hid fido
1个回答
0
投票

问题的简短回答是肯定的,您可以将其与任何 CTAP2 设备一起使用。

libfido
仅检查设备是否符合 CTAP2,仅检查其他内容。但这不是一个有用的答案,因为它不能解决您的问题。可能需要有关您尝试使用的设备的更多信息以获得更好的答案,但我们会尝试解释可能发生的情况。

要使设备成为有效的 USB 设备,它需要正确回复

HID report descriptor
。报告描述符应该包含标准内容,而且最重要的是定义为
HID_UsagePage
0xF1D0
。如果不是,则该设备不是有效的 USB CTAP2 设备,libfido 将忽略它。
is_fido
方法正是执行该检查,即打开连接、获取描述符并检查该使用页面。
is_fido
在建立与 USB 设备的连接方面也有一些副作用,因此当您删除它时,您的连接设置可能不适合导致问题的前导码。输出错误至少似乎表明传输失败,或者是由于通信不正确造成的。如果这是由于缺乏连接或因为设备没有作为 FIDO2 设备正常运行,我不能说。

有关 CTAP HID 设置的更多信息,请访问 https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-勘误表-20220621.html#usb-discovery

© www.soinside.com 2019 - 2024. All rights reserved.