繁体   English   中英

从seek-for-android访问时,Javacard applet RPDU不包含任何数据

[英]Javacard applet RPDU does not contain any data when accessed from seek-for-android

我有一个复杂的Javacard小程序,它是为普通智能卡开发和测试的(例如NXP J3E145,T = 1)。 现在我必须在移动电话的UICC中使用它并从我的Android应用程序访问它。 UICC使用T = 0协议。

当我从普通读卡器(Omnikey 5321)与SIM卡通信时,小程序正常工作。

但是,当我将它移动到我的手机(Sony Xperia S)并通过seek-for-android API发送APDU时,一些RPDU不包含任何数据部分,只有状态字0x9000且数据部分丢失!

这些APDU失败了:

80 04 00 00 00 --> 90 00 (although there should be some data, 200 bytes approx.)
80 01 00 00 00 --> 90 00 (although I expect 18 bytes)

这些APDU可以:

80 05 00 00 00 --> 00 90 00 (one byte as I expected)
80 06 00 00 00 --> <... data of length 20 ...> 90 00 (as I expected)

可能是超时问题(处理时间总是<1s)? 还是有些T = 0怪异?

我的Android应用程序代码非常简单:

Channel channel = session.openLogicalChannel(aid);
byte[] resp = channel.transmit(new byte[] {(byte) 0x80, 0x04, 0x00, 0x00, 0x00});

Open Mobile API,4.4.2(19)。

任何帮助都会很好,我花了两天时间来解决这个问题。 请救救我。

Vojta开发

编辑我的访问规则:

AID: A000000018308005006563686F00 ___ AllApps:Never
AID: A0000000183080055A6563686F5A ___ Hash:ABFF7159B0530044CD71C6561B0F9D55CBAE8984:Always
AID: A000000018308005596563686F59 ___ Hash: ABFF7159B0530044CD71C6561B0F9D55CBAE8984:Always
AID: A000000018308005586563686F58 ___ AllApps:Always
AID: NO_AID ___ AllApps:Always
AID: A000000018308005006563686F00 ___ AllApps:Never
AID: A0000000183080055A6563686F5A ___ Hash: ABFF7159B0530044CD71C6561B0F9D55CBAE8984:Always
AID: A000000018308005596563686F59 ___ Hash: ABFF7159B0530044CD71C6561B0F9D55CBAE8984:Always
AID: A000000018308005586563686F58 ___ AllApps:Always
AID: NO_AID ___ AllApps:Always

在上面的列表中,我仅过滤了APDU规则(并且NFC规则根本没有写下来)。

我的小程序有AID F06D617073616D2E617070我的发卡行安全域是A0000000871002FF33FFFF8901010100。

我认为这些规则不会影响我的APDU,没有带头和掩码的真正过滤器......

我在applet中发现了一个错误,这确实导致了整个问题。 我的applet响应状态字0x911C并且没有数据。 但是,SEEK总是返回0x9000而不是0x911C,因为通过SEEK访问时不能使用状态字0x91XX。 下一段是来自SEEK论坛的EduardEtc,它解释了一切:

“ETSI定义(在TS 102 221中)状态字91XX用于SIMToolKit(CAT)应用程序。任何以SW1SW2发送9000的卡应用程序都可以返回91xx而不是电话必须解释为处理CAT APDU。因此电话应用程序将永远不会看到91xx,它被手机的CAT处理层取代了9000. ISO / IEC 7816-4定义了SW1SW2 = 61xx用于类似的目的。当时这包括在标准中以满足ETSI的需要,但是,ETSI没有等待ISO过程完成并指定了不同的编码。“

主要问题是我认为开放逻辑频道。 可能是卡不支持逻辑通道。 试试Open Basic频道。

并且您没有收到任何响应数据,因为Le部分未设置。 CLA,INS,P1,P2,(Le),数据..如果您将Le字段设置为00,则应该获得完整的后端响应作为可用的总字节数。 再次,如果您发送您需要的字节数,则假设XX然后通过它,您应该能够得到该响应,如果它超过256,那么它将是61 XX,XX表示响应的字节数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM