[英]Is it possible to access a smartphone's API on Raspberry PI via cabled connection?
[英]Yubikey API access via NFC
使用的安全元件(当前):Yubikey 5 NFC
操作系统(当前)使用:Linux(未来目标将是 Win 和 Android)
使用的阅读器:ACS ACR122U、REINER SCT cyberJack RFID、SCM SCL011
通过 NFC 连接到 Yubikey 并实现/运行以下方法:
基于 Yubico 的 PKCS#11 包装器库,我实现了上面的 5 个方法。 通过USB连接 Yubikey,它们工作得很好。
1) 文档/支持
我在 Yubico 的网站上找不到任何关于通过 NFC 的 API 的相关文档。 似乎没有邮件列表,但有一个提示:
提出技术问题:对于技术问题,请尝试 Stack Exchange 站点。 Stack Exchange 是一个供开发人员学习和分享知识的问答网站网络,其中包括 Stack Overflow。
我在这里。 ;-)
根据 Alexander 的更新(谢谢):一些来源由 Yubico 在 github 上发布,网址为github.com/Yubico
2) CLI 工具错误
Yubikey 由pcsc_scan
在上面提到的每个阅读器上显示。
但是使用诸如gp
、 opensc-tool
、 pkcs11-tool
和pkcs15-tool
类的常见工具时,在尝试使用例如常见的 APDU 访问时,主要会出现错误0x6A80
。 我看不到任何 cardlet,甚至连 select 都看不到。
(使用其他 NFC 设备,我得到0x9000
/success 和一些命令的数据,这些命令导致 Yubikey 上出现0x6A80
。)
gp
的示例 output:
gp -lvdi
[DEBUG] TerminalManager - Selected the only reader with a card
SCardConnect("Yubico YubiKey OTP+FIDO+CCID 00 00", T=*) -> T=1, 3BFD1300008131FE158073C021C057597562694B657940
# GlobalPlatformPro 325fe84
# Running on Linux 5.18.5-100.fc35.x86_64 amd64, Java 11.0.14 by SAP SE
A>> T=1 (4+0000) 00A40400 00
A<< (0000+2) (1ms) 6A80
Error: Could not SELECT default selected: 0x6A80 (Wrong data/incorrect values in data)
pro.javacard.gp.GPException: Could not SELECT default selected: 0x6A80 (Wrong data/incorrect values in data)
at pro.javacard.gp.GPException.check(GPException.java:64)
at pro.javacard.gp.GPSession.discover(GPSession.java:145)
at pro.javacard.gp.GPTool.run(GPTool.java:208)
at pro.javacard.gp.GPTool.main(GPTool.java:107)
SCardDisconnect("Yubico YubiKey OTP+FIDO+CCID 00 00", true) tx:5/rx:2
得到提示:在yubico-piv-tool/blob/master/lib/ykpiv.h中定义了YKPIV_INS_SELECT_APPLICATION
,其值A4
看起来很常见。
select 成功:
# opensc-tool -s 00:A4:04:00:05:A0:00:00:03:08:00 -v
Using reader with a card: ACS ACR122U 00 00
Connecting to card in reader ACS ACR122U 00 00...
Using card driver Personal Identity Verification Card.
Sending: 00 A4 04 00 05 A0 00 00 03 08 00
Received (SW1=0x90, SW2=0x00):
61 11 4F 06 00 00 10 00 01 00 79 07 4F 05 A0 00 a.O.......y.O...
00 03 08 ...
yubico-piv-tool
可用于通过 USB 和 NFC 进行访问。 “阅读器”选项-r
用于此目的。 默认是Yubikey
甚至可以缩写为Y
。
NFC 读卡器也会出现读卡器名称的“轻”匹配:名称只需要大致匹配即可。 在我的例子中,它适用于我的三个读者的这些字符串:ACR122U、cyberJack 和(古老的)SCL011。 通过指定读卡器名称,我可以轻松地通过 NFC 获取状态。
我再次向 Yubico 支持寻求文档。 但至少我现在看到了一种通过分析yubico-piv-tool
源代码进行调查的方法。 也许甚至可以通过 NFC 使用 PKCS#11。
成功!
tl;dr:在 2.3.0 版中使用最新的 yubico-piv-tool package 并重新编译所有内容,使我们的 PKCS#11 软件通过 NFC 运行,实际上我们的代码没有任何变化。
将做更多的测试,并最终用所有的陷阱来表达一个匹配的答案。
将在这里更新。
对于前一个“成功”消息,我们遇到了一个问题,即只有一个阅读器可以工作(使用 pcscd 时一定不会发生这种情况)。 这是由我们的 PKCS#11 代码中槽处理中的一个小错误引起的(当通过 USB 使用 Yubikey 时,我们总是只有一个槽和一个令牌 - 对于 NFC,我们有三个读取器/槽)。
还在测试。 当一切都完成后,我会发布一个答案。
有几个问题。 主要问题是我们的源代码中处理多个读取器/槽的错误和yubico-piv-tool
/ libykcs11.so
的旧版本 (2.2.1)。 2022-03-01 的当前版本 2.3.0 工作正常。
正如 Yubico 支持所说,通过 PKCS#11 访问 Yubikey 是透明的,通过 USB 和 NFC 没有任何变化。
通过pcsc_scan
和我所有的 NFC 阅读器同时连接,我可以通过以下方式访问“Yubikey 5 NFC”:
除了修复处理多个插槽的错误外,通过 NFC 访问 Yubikey 所需的 PKCS#11 源代码没有任何变化。
最后回答我的问题:
yubico-piv-tool
>= 2.3.0 中的 PKCS#11 API 和libykcs11.so
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.