JavaCard Applet运行机制 -- JavaCard开发

JavaCard Applet运行步骤如下:

  • 打开终端 /term
  • 卡片复位 /card
  • 设置密钥 set-key init-update
  • 外部认证 ext-auth plain
  • 删除相应AID的package delete AID
  • 删除相应AID的applet delete AID
  • 上传cap包到卡片 upload
  • 查看卡片/applet信息 card-info
  • 选择相应AID的applet /select AID
  • 终端发送指令 /send

以下是我在ecplise点击运行自己创建的JavaCard Applet后JCOP shell自动执行的命令截图:

其中 set-key 是注册好卡片的密钥,在后面要做外部认证;

init-update 执行初始化更新命令,CardManager开始认证;

ext-auth plain 完成了外部认证,并输出文本信息;

由于我已经安装过了AID为1535220901的package和AID为153522090101的applet,所以先删除这些文件;

然后将新的applet对应的cap文件上传到卡片中;

最后,自动执行了install安装指令并展示了卡片信息。

到这一步之后,要想调试自己设计的JavaCard Applet,就要自己发送命令看看执行效果来进行调试了:

当然,首先要先 /select + applet AID 选中该applet;

然后再 /send + 字节命令 来执行。


另外,关于上述提到的外部认证,以下是它和内部认证的关系及区别:

  • 外部认证(CPU卡验证机器),指的是终端产生密文,卡片验证
  • 内部认证(机器验证CPU卡),指的是卡片产生密文,机器验证

内部 or 外部 看是谁产生的密文

外部认证的简略步骤:

(1)卡片产生8 byte 的随机数发给机器,并保存一份在卡内。

(2)机器将收到的随机数,对其用密钥加密,得到8 byte的密文,发给卡片。

(3)卡片也用同样的密钥(对称密钥算法)解密密文得到8 bytes的待验证的随机数。

(4)比对随机数明文,比对通过则外部验证通过。

内部认证同理,只是收发双方反过来而已:

(1)机器产生8 byte 的随机数发给卡片,并保存一份。

(2)卡片将收到的随机数,对其用密钥加密,得到8 byte的密文,发给机器。

(3)机器也用同样的密钥(对称密钥算法)解密密文得到8 bytes的待验证的随机数。

(4)比对随机数明文,比对通过则外部验证通过。

最后,关于upload的.cap文件,实则相当于.class文件,可能是JavaCard使用的Java和标准的Java 不太一致导致的。

你可能感兴趣的:(Java,Card)