[英]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.