簡體   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