我需要在 Linaro/Debian 操作系统上通过 USB 读卡器读取一些 NFC 卡。
USB 读卡器具有 HID 配置文件。
出示一张 13.56 MHz 的卡,键盘会返回一个代码。
我阅读了有关发送到设备的命令,但是由于它是一个(虚拟)键盘,我无法发送命令,向哪个设备发送命令?
如何转储卡的内存?
谢谢
我需要在 Linaro/Debian 操作系统上通过 USB 读卡器读取一些 NFC 卡。
USB 读卡器具有 HID 配置文件。
出示一张 13.56 MHz 的卡,键盘会返回一个代码。
我阅读了有关发送到设备的命令,但是由于它是一个(虚拟)键盘,我无法发送命令,向哪个设备发送命令?
如何转储卡的内存?
谢谢
在 Marcus Müller 的回答的评论中,您说读者是 Elatec TWN4 Multitech 2。
根据 Elatec DevKit 中的文档,它有不同的固件包来支持不同的接口,并且您的阅读器目前似乎使用 USB 键盘接口固件进行编程,与其他固件包相比,它仅提供非常有限的功能。
您必须将不同的固件安装到您的阅读器中(使用 Elatec AppBlaster,不幸的是它是一个 Windows 应用程序)以启用不同类型的界面。
如果我没理解错的话,您的阅读器当前的固件是 或
TWN4_CK*.bix
,TWN4_NK*.bix
其中 K 表示 USB 键盘接口。相反,您可能需要一个
TWN4_CC*.bix
或TWN4_NC*.bix
一个版本的固件,它提供一个虚拟 COM 端口接口,这将/dev/ttyACMx
在 Linux 中出现,或者一个TWN4_CP*.bix
或一个TWN4_NP*.bix
版本的固件,它将提供一个 USB CCID 兼容的智能卡读卡器接口,这将像大多数 USB 智能卡读卡器一样由 Linux PCSClite + libccid 支持(需要 libccid 版本 1.4.28 或更高版本)。您可能希望根据您更熟悉的编程接口类型来选择固件。虚拟 COM 端口接口可能最容易进行测试,但如果您计划开发更广泛的应用程序,CCID 兼容接口可能是一个明智的选择。
DevKit 包括许多固件变体,适用于不同的读者和不同的应用程序。Elatec 阅读器在其固件中甚至有一些应用程序代码空间,因此如果用作嵌入式系统的一部分,它可以具有特定于应用程序的固件。
转储NFC卡的内存...这取决于它是什么类型的NFC卡。
如果是单纯的内存卡,把卡内存甩掉应该很容易。但是,如果它是设计用于保存加密密钥或其他秘密的智能卡,则该卡很可能被设计为不允许读取加密密钥 - 相反,您只需向卡发送命令和数据以进行加密/解密,并且卡的处理器会为您完成这项工作,而不会透露实际的密钥。
此类智能卡的处理器运行一个硬编码程序,该程序通过读卡器提供一个精心限制的 API:应该没有办法让一张经过适当设计和初始化的智能卡从其内部存储器中转储任何秘密。
我认为没有用于通过 USB HID 与 NFC 卡通信的标准化配置文件。(首先,这对我来说意义不大——NFC 实际上更像是一个串行链路,而不是键盘。)这对于一些特定的卡类型来说是不同的——我会想到 FIDO U2F;有一个 U2F-over-USB-HID 规范。
因此,据我所知,这 100% 取决于您使用的特定阅读器设备——幸运的是,该领域的主要参与者通常至少会发布 Windows 驱动程序 API 文档,甚至是较低级别的 USB 描述(例如,隐藏全能键)。