我有一个 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来使用其他品牌的令牌吗? 下一个问题是我应该在哪里更改才能支持此令牌?
问题的简短回答是肯定的,您可以将其与任何 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