繁体   English   中英

Yubikey API 通过NFC访问

[英]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在上面提到的每个阅读器上显示。

但是使用诸如gpopensc-toolpkcs11-toolpkcs15-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

问题

  1. 在哪里可以找到相关文档?
  2. 有哪些API可以通过NFC访问Yubikey来实现上述5种方法?
  3. 使用这些 API 需要做什么(例如安装额外的库)?

更新

2022-08-16

得到提示:在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                                        ...

Select 文件指令

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

成功!

tl;dr:在 2.3.0 版中使用最新的 yubico-piv-tool package 并重新编译所有内容,使我们的 PKCS#11 软件通过 NFC 运行,实际上我们的代码没有任何变化。

将做更多的测试,并最终用所有的陷阱来表达一个匹配的答案。

将在这里更新。

2022-10-04

对于前一个“成功”消息,我们遇到了一个问题,即只有一个阅读器可以工作(使用 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”:

  • USB
  • NFC 通过 ACS ACR122U
  • NFC 通过 REINER SCT cyberJack RFID
  • 通过 SCM SCL011 的 NFC

除了修复处理多个插槽的错误外,通过 NFC 访问 Yubikey 所需的 PKCS#11 源代码没有任何变化。

最后回答我的问题:

  1. 在哪里可以找到相关文档? ” => 在 Yubico 网站和 Yubico Github 项目上。
  2. 哪些 API 可用于通过 NFC 访问 Yubikey 以实现上述 5 种方法? ” => 只需使用yubico-piv-tool >= 2.3.0 中的 PKCS#11 API 和libykcs11.so
  3. 使用这些 API 需要做什么(例如安装额外的库)? ”=> 不需要额外的 API。 只需使用 PKCS#11。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM