我如何找到applet支持的APDU列表?

时间:2014-05-19 11:51:58

标签: java applet smartcard javacard apdu

我在新鲜的javacard上有一个applet的AID列表。每个applet的用法是什么?以及我如何获得每个支持的APDU命令列表?我需要applet的.cap文件制作的java源代码吗?我的另一个问题是:这是什么' PR'参数和' LC'每个AID之后的参数?

enter image description here

3 个答案:

答案 0 :(得分:4)

从applet(实例)AID列表中(请注意您在上面的帖子中显示的列表,只包含可执行的加载文件和安全域,但没有实际的applet实例AID),您可能会找到已注册的应用程序提供商以及通过将AID分成RID和PIX部分的应用程序类型。

例如,A0 00 00 00 04,看起来像万事达卡的RID。与10 10的PIX一起,这将是基于支付系统的EMV规范的万事达卡信用卡/借记卡申请。

因此,您可以对所有AID进行此类猜测,以找出他们可能代表的应用程序。 Google会帮助您处理许多AID。或者,您也可以询问注册的应用程序提供商(您通过RID找到的)在给定的AID背后隐藏了什么应用程序。

下一步,您需要找出某个应用程序所说的协议(即要使用的命令流和applet理解的APDU命令)。对于示例主卡信用卡/借记卡应用程序,这将在支付系统的EMV规范中定义,您可以从EMVCo免费获得。对于其他应用程序,您需要查找该应用程序的数据表,用户手册,规范或源代码(非常不可能)。例如,您可以通过询问应用程序提供商或在网络上搜索该特定AID来获取此类信息。

PR参数指示可执行加载文件/安全域的特权(根据Global Platform)。 0x00表示没有权限,0x9E表示安全域,卡锁权限,卡终止权限,卡重置权限,持卡人验证方法管理权限。

参数LC表示可执行加载文件/安全域的生命周期状态(根据Global Platform)。对于发行者安全域,LC指示卡生命周期状态(1表示OP_READY)。对于可执行加载文件,LC指示加载文件生命周期状态,该状态始终为1(LOADED)。

请注意,上面显示的列表(来自gpj -list的输出)表示该卡上没有安装和选择应用程序(ISD的OPEN除外)。

答案 1 :(得分:3)

没有显示支持的APDU列表的功能 或者你有:

  • 源代码并查看流程方法
  • 小程序的文档或
  • applet支持某些规范,如pkcs11 / 15或iso命令

答案 2 :(得分:2)

迈克尔罗兰的答案包含了很多有用的信息。知道applet来自其AID的内容并了解它实现的规范将是确定哪些命令被接受的最快最好的方法。

作为练习,您可以选择有问题的小程序,并发送包含不同CLA / INS字节的多个APDU组合。分析响应可能会为您提供一些有关处理哪些命令以及哪些命令被拒绝的信息。典型的applet将6E00或6D00返回到未知指令和其他一些已知指令的代码。