You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

YubiKey NFC模式API接入技术问题问询及实践进展

设备与环境

  • 安全元件(Secure Element)(当前使用):Yubikey 5 NFC
  • 操作系统(OS)(当前使用):Linux(未来目标平台为Windows和Android)
  • 读卡器:ACS ACR122U、REINER SCT cyberJack RFID、SCM SCL011

目标

通过NFC连接YubiKey并实现以下操作:

  • 创建密钥对(Create Key Pair)
  • 导出公钥(Export Public Key)
  • 签名(Sign)
  • 加密(Encrypt)
  • 解密(Decrypt)

当前状态

基于Yubico的PKCS#11包装库,我已实现上述5种操作。当YubiKey通过USB连接时,所有操作均可正常运行。

问题

1) 文档/支持缺失

我在Yubico官网未找到任何关于NFC模式API的相关文档。官网没有提供邮件列表,但给出了提示:

技术问题咨询:
如需咨询技术问题,请尝试Stack Exchange系列站点。Stack Exchange是开发者学习和分享知识的问答网络,包括Stack Overflow。

因此我在此提问。;-)

根据提示更新:Yubico在GitHub上发布了部分资源。

2) CLI工具报错

上述所有读卡器均能通过pcsc_scan识别到YubiKey。

但使用gp、opensc-tool、pkcs11-tool和pkcs15-tool等常用工具时,执行常见APDU操作大多会报错0x6A80,无法查看或选择任何卡应用(cardlet)。

(使用其他NFC设备执行相同命令时,部分命令返回0x9000/成功并返回数据,但在YubiKey上会触发0x6A80错误。)

gp工具的输出示例:

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

问题咨询

  1. 相关文档可在哪里获取?
  2. 可通过哪些API实现上述5种操作的YubiKey NFC模式访问?
  3. 使用这些API需要做哪些准备(如安装额外库)?

更新记录

2022-08-16

得到提示:在yubico-piv-tool的头文件ykpiv.h中定义了YKPIV_INS_SELECT_APPLICATION,值为A4,这是一个常见指令。

选择操作成功:

# 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                                        ...

2022-08-31

yubico-piv-tool可用于USB和NFC模式访问,通过“读卡器”选项-r指定。默认值为Yubikey,可缩写为Y。

NFC读卡器支持模糊匹配名称:只需名称大致匹配即可。我的三台读卡器使用以下字符串均可正常工作:ACR122U、cyberJack和(旧款)SCL011。指定读卡器名称后,我可轻松获取NFC模式下的设备状态。

我再次向Yubico支持咨询文档,但至少现在我找到了通过分析yubico-piv-tool源代码进行研究的途径,甚至可能实现通过NFC使用PKCS#11。

2022-09-25

成功!

简而言之:使用最新版本2.3.0的yubico-piv-tool包并重新编译所有内容后,我们的PKCS#11软件无需修改代码即可通过NFC模式运行。

我将进行更多测试,最终整理包含所有注意事项的完整解答,并在此更新。

2022-10-04

之前的“成功”存在一个问题:只有一台读卡器可以正常工作(使用pcscd时不应出现此情况)。

问题源于我们PKCS#11代码中的一个插槽处理小bug(YubiKey通过USB连接时始终只有一个插槽和一个令牌,但NFC模式下有三个读卡器/插槽)。

仍在测试中,完成后我将发布解答。


内容的提问来源于stack exchange,提问作者reichhart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 16:24:31