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 不太一致导致的。