我需要在 Linaro/Debian 操作系统上通过 USB 读卡器读取一些 NFC 卡。
USB 读卡器具有 HID 配置文件。
出示 13.56 MHz 卡时,键盘会返回一个代码。
我读到了有关发送到设备的命令,但是由于它是(虚拟)键盘,我无法发送命令,并且向哪个设备发送命令?
如何转储卡的内存?
谢谢
答案1
在 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:应该根本没有办法让正确设计和初始化的智能卡从其内部存储器中转储任何秘密。
答案2
我认为没有一个标准化的配置文件可以通过 USB HID 与 NFC 卡进行通信。 (这对我来说毫无意义——NFC 实际上更像是一种串行链路,而不是键盘。)这对于一些特定的卡类型来说是不同的——我会想到 FIDO U2F;有一个 U2F-over-USB-HID 规范。
因此,据我所知,这 100% 取决于您所使用的特定读取器设备 - 幸运的是,该领域的主要参与者通常至少会发布 Windows 驱动程序 API 文档,甚至较低级别的 USB 描述(例如,HID 全键)。