据我所知,要打开/关闭逻辑 channel ,我们必须使用 MANAGE CHANNEL
APDU 命令。
- Open a logical channel :
00 70 00 P1 P2 LE
- Close a logical channel :
00 70 80 P1 P2 LE
- P1-P2 =
0000
-0003
- LE=
01
(if P1-P2=0000
) or Empty (if P1-P2!=0000
)
。默认情况下唯一打开的逻辑 channel 是Basic channel 。
问题:
1-为什么当我通过关闭的逻辑 channel 发送SELECT APDU时,它会自动打开?
2-什么时候我们必须/需要使用打开/关闭逻辑 channel 命令(MANAGE CHANNEL)?
这是Opensc-tool的输出,如您所见,我成功发送和接收SELECT和GET RESPONSE命令和响应,通过逻辑 channel 1 和 2,之前没有打开它们:
逻辑 channel 1:
C:\>cd E:\OpenSC\tools
E:\OpenSC\tools>opensc-tool -s 01A40400 -s 01C0000012
Using reader with a card: ACS CCID USB Reader 0
Sending: 01 A4 04 00
Received (SW1=0x90, SW2=0x00)
Sending: 01 C0 00 00 12
Received (SW1=0x90, SW2=0x00):
6F 10 84 08 A0 00 00 00 03 00 00 00 A5 04 9F 65 o..............e
01 FF ..
逻辑 channel 2:
E:\OpenSC\tools>opensc-tool -s 02A40400 -s 02C0000012
Using reader with a card: ACS CCID USB Reader 0
Sending: 02 A4 04 00
Received (SW1=0x90, SW2=0x00)
Sending: 02 C0 00 00 12
Received (SW1=0x90, SW2=0x00):
6F 10 84 08 A0 00 00 00 03 00 00 00 A5 04 9F 65 o..............e
01 FF ..
E:\OpenSC\tools>
最佳答案
自 1995 年 ISO 7816-4 版本起,SELECT 被定义为打开逻辑 channel 的替代方法。除了提到的 MANAGE CHANNEL 之外,没有其他命令能够执行此操作。逻辑 channel 的管理信息通常消耗大量资源(例如用于获取访问权限的 RAM、 session key 、当前安全环境)。一旦您遇到指向该方向的错误(有点合理的是 6A 84 意味着文件中没有更多内存,65 81 内存错误,但无论如何,您的卡文档在此优先)您应该之前关闭它。通常有充分的理由使用逻辑 channel ,并且它源自不再需要的用例。
关于smartcard - 选择 APDU 和逻辑 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24487563/