APDU级别的智能卡读卡器T0 T1通信

时间:2015-05-01 19:13:07

标签: smartcard apdu smartcard-reader

我很难理解我必须使用哪种协议与卡T0或T1进行通信?所以,如果我错了,请纠正我,但如果卡支持两者,读者实际上决定用什么协议与卡通信。

所以我现在的逻辑是:

// if ATR(T1) -> set_params(T1 structure) -> T1 APDU communication
// if ATR(T0) -> set_params(T0 structure) -> T0 APDU communication
但事实证明,逻辑是错误的,它对大多数读者来说都是偶然的。我刚刚发现即使卡ATR返回T1,也希望T0通信的读卡器。

问:确定使用哪种协议的逻辑必须是什么?如果有背后的规格,请你指点一下。

已编辑:我忘了在操作系统之前提到我的代码处于预启动环境(UEFI)。所以我没有(使用)任何API。我的代码处于字节流APDU级别,使用UEFI UsbIo通信直接与硬件对话。

感谢所有人!

一切顺利,

亚历

1 个答案:

答案 0 :(得分:3)

好的,我反复阅读规范(7816-3),可能是5次或更多次。这些是我的发现:

根据规范,不存在“自动”“默认”协议等任何内容。

  

8.2.3接口字节TA TB TC TD

     

“首次提供的传输协议”定义如下。   如果存在TD1,则它编码第一个提供的协议T.   如果TD1不存在,那么唯一的报价是T = 0。

好好进一步......

  

6.3.1传输参数和协议的选择

     

...在完成成功的PPS交换(见9.3)之后,接口设备将使用协商的传输参数值启动协商的传输协议。

在这种情况下,下一个更有趣:

  

否则,接口设备应启动“首次提供的传输协议”(参见8.2.3中的TD1)。当卡仅提供一种传输协议且仅提供传输参数的默认值时,接口设备应这样做。这种卡不需要支持PPS交换。

使用卡A并不完全正确,因为它确实支持PPS交换!它根本不适用于Cherry读者。

好的,下一个关键点在6.3.1:

  

注意3 面向处于可协商模式卡的接口设备且既不支持PPS交换,也不支持“首次提供的传输协议”热复位或停用。

因此,对于Cherry阅读器,不符合标准! shell支持在第一个提供的协议中进行通信,即T1。

我在SmartCard Handbook, 4th Edition 8.2协议参数选择(PPS)章节中找到了一个非常有趣的内容:

  

上述PPS过程不适合更改具有自己特定协议但无法执行PPS的终端的协议。

     

图8.11在不使用PPS的情况下切换智能卡支持的两种传输协议的可能顺序。根据此处列出的顺序,终端不必执行显式PPS,但仍然可以通过启动重置来在两个协议之间切换...

     

......从技术角度来看,这种解决方案并不理想,因为设备在每次重置后应始终表现相同,但对于异构终端世界来说,它肯定是一种实用的解决方案。

它不适用于我的卡,因为卡不通过执行热复位来切换协议。但这可能是对读者奇怪行为的回答。