CCC数字钥匙设计【NFC】--什么是AID?

1、NFC中的AID是什么?

AID,英文全称为Application Identifier,这是NFC技术中的概念,AID用于唯一标识一个应用。

NFC应用的AID相关操作,包括注册和删除应用的AID、查询应用是否是指定AID的默认应用、获取应用的AID等 。

2、AID的组成

根据标准GB/T16649.5AID由两个部分组成:RID(5字节) + PIX(0 - 11字节)

RID(5字节):注册标识符由ISO组织分配,标识一个全球唯一的应用提供商一般是分配给相关卡组织,比如分配给 Master、银联等

PIX0 - 11字节):扩展应用标识符一般由应用提供商自己定义

示例:数字钥匙的AID为A000000809434343444B467631

共占用13字节,前5字节为RID,后8字节为PIX,具体解析如下:

前5 字节A000000809为RID。

后8字节434343444B467631为PIX,该数据串解析成ASCII码为CCCDKFv1,其意思就是CCC Digital Key Framework version 1

3、相关流程

目前常见的NFC智能IC卡运行着 JavaCard 虚拟机,NFC智能 IC 卡上可以运行由精简后的 Java 语言编写的卡应用简称 Applet

NFC智能 IC 卡的 Applet 不能自己启动,必须由外部终端(例如 POS 机,地铁刷卡终端等)向卡片发送 Select 命令,由此选中卡片的 Applet,Applet 才能运行。

Applet 侧重于数据的处理,没有类似MCU的相关 I/O 功能。

Applet 的程序有生命周期和指定入口,具体如下:

3.1 public static void install(byte[] bArray, short bOffset, byte bLength)

该函数构建了 Applet 子类的实例,JCRE ( Java Card Runtime Environment )将会最先调用这个所有的初始化和分配内存的操作在这个里面实现,可以获取卡外实体传进来的一些应用初始化参数。

​​​​​​​3.2 public void process(APDU apdu)

类似于正常 java class 的 main,在安装后,APDU 的执行将在这里实现。

​​​​​​​3.3 protected final void register()

applet 用来在 JCRE 中注册该 applet 实例。

另外还有函数register(byte[] bArray, short bOffset, byte bLength),和register() 功能一样,但其增加了可以分配其特定的 AID 的功能。

​​​​​​​3.4 public boolean select()

JCRE 一旦接收到 SELECT[by name] 命令时,将寻找命令中指示的 AID 对应的 Applet,使之处于激活状态,接收并处理接下来的 APDU 命令;

在选择新的 Applet 前,JCRE 先调用当前 Applet 的 deselect 方法;

Applet 可以拒绝被选择,此时 select 方法返回 false;SELECT[by name] 命令本身也将传递给 applet 处理,此时通过 selecting Applet 用以判断当前状态。

4、总结

  1. AID用于唯一标识一个应用,故AID标识的不是NFC卡,而是NFC卡中的applet
  2. 数字钥匙的AID为A000000809434343444B467631
  3. 车端的NFC读卡器发起的select命令中包含数字钥匙的AID,NFC设备(如手机或NFC卡片)接收到该AID命令后,激活其中数字钥匙的Applet
  4. 之后NFC设备(如手机或NFC卡片)即可以和车端模块进行数字钥匙功能相关交互。

5、参考

  1. 参考文章:https://blog.csdn.net/liwei16611
  2. 参考标准:CCC-TS-101-Digital-Key-R3.pdf

你可能感兴趣的:(CCC,汽车,软件工程)