建站行业,企业查询系统官网天眼查网页版,如何建立虚拟架构网站,什么软件可以建网站CCC3.0#xff0c;包含NFC、BLE、UWB技术。当采用NFC通信时#xff0c;车端与手机端是通过APDU来进行交互的。而在APDU中的data数据段#xff0c;又可能会嵌入TLV协议的数据#xff0c;以完成车端与手机端的通信交互。
本文先介绍APDU及TLV的一些基础知识#xff0c;再通…CCC3.0包含NFC、BLE、UWB技术。当采用NFC通信时车端与手机端是通过APDU来进行交互的。而在APDU中的data数据段又可能会嵌入TLV协议的数据以完成车端与手机端的通信交互。
本文先介绍APDU及TLV的一些基础知识再通过示例说明下车端与手机端是如何进行通信交互的。
1、什么是APDU
APDU应用协议数据单元英文全称为Application Protocal Data Unit。APDU是无线通信中的一种协议用于在NFC设备之间传递数据。
APDU分为发送命令C-APDU和返回命令R-APDU。
APDU包含一条指令或响应信息。在智能卡的世界里采用的是主从模式而智能卡永远扮演从的角色。
在CCC数字钥匙系统中手机扮演的是智能卡的角色。
换句话说手机总是在等待来自终端车端模块的命令APDUC-APDU。随后手机执行APDU规定的动作并以一个 应答APDUR-APDU向终端车端模块作出回答。
下图前面绿色背景部分是命令APDU后面蓝色背景部分是响应APDU。 两种命令的数据格式简化描述如下 上表【】中的内部为可选部分。 具体展开描述如下。 1.1命令APDU
发送命令C-APDU的格式如下包含一个必须头部段和一个可选数据段。 1.1.1命令详细解析
下面对命令APDU的每个字段展开介绍
1)类别码CLA1字节
类别码字节用于命令类别的标示。在很多智能卡上这个字节用来表示应用程序。
如0x00表示标准指令集0x80表示安全指令集。具体详见ISO IEC 7816-4-2020的第5.4章节。
CCC3.0规范规定4 个CLA类别如下表 2)命令码INS1字节
表示指令代码instruction。
1) b1即最低位指明数据字段格式
b11即该INS为奇数数据字段按BER-TLV编码。--详见ISO IEC 7816-4-2020的8.1章节
b10即该INS为偶数不提供数据字段格式的指示
2) 6X和9X为无效的INS。
具体详见ISO IEC 7816-4-2020的第5.5章节。 3)参数P11字节
指令参数1如果没有则填0 4)参数P21字节
指令参数2如果没有则填0 5)Lc1字节
可选字段指的是命令的数据字段的字节数。 6)Data Field
可选字段采用TLV数据格式进行填充。 7)Le1字节
可选字段指定在期望响应的数据字段中的最大字节数。 1.1.2四种C-APDU结构 上图4种Case分别说明如下 Case1: CLA INS P1 P2 命令中没有数据送到卡Lc中也没有数据从卡中返回Le。 Case2: CLA INS P1 P2 Le 命令中没有数据送到卡 Lc中有数据从卡中返回 Le。 case3 : CLA INS P1 P2 Lc Data 命令中有数据送到卡 Lc中没有数据从卡中返回 Le case4 : CLA INS P1 P2 Lc Data Le 命令中既有数据送到卡 Lc中也有数据从卡中返回 Le。 1.2、响应APDU
响应命令R-APDU的格式如下包含一个必须头部段和一个可选数据段。
R-APDU由一个可变长度的Data Field和两个字节Tailer组成具体报文格式如下图 其中CCC规范使用了如下几个Status Word充当SW1-SW2具体可详见CCC3.0规范15.3章节。 2、什么是TLV
TLV协议是BER编码的一种全称是Tag、Length、Value。该协议简单高效能适用于各种通信场景且具有良好的可扩展性。
有如下两种编码方式
方式1基础类型Primitive Data编码单一编码--当Tag的bit50时 方式2结构类型Constructed Data编码嵌套编码--当Tag的bit51时 具体采用哪一种编码方式取决于Tag字节中的bit5。 2.1Tag
Tag由一个或多个字节组成下图描述首字节0~7位的具体含义 ① Tag首字节说明 Bit6~7表示TLV的类型 Bit5表示Value的编码方式分别支持Primitive及Constructed两种编码方式。
0为Primitive Data编码即后续的Value未嵌套TLV。
1为Constructed Data编码即后续的Value有嵌套TLV。 Bit0-4当Tag Value小于0x1F(31)时首字节04位用来描述Tag Value否则0~4位全部置1作为存在后续字节的标志Tag Value将采用后续字节进行描述。 ② Tag后续字节说明
后续字节采用每个字节的06位即7bit来存储Tag Value, 第7位用来标识是否还有后续字节。 Bit7用来描述是否还有后续字节1表示有后续字节0表示没有后续字节即结束字节。 Bit0~6填充Tag Value的对应bit(从低位到高位开始填充)。 如Tag Value为0000001 11111111 11111111 (即16进制0x1FFFF)填充后实际字节内容为10000111 11111111 01111111。
整体的Tag值应该为XXX11111 10000111 11111111 01111111 CCC3.0规范中使用的Tag最长为2字节。 2.2Length
用来描述Value的长度。
描述Value部分所占字节的个数编码格式分两类定长方式DefiniteForm和不定长方式IndefiniteForm。
当第一个Length取值为0x80时则为不定长方式。其他值则为定长方式。 2.2.1定长方式
定长方式中按长度是否超过一个字节又分为短、长两种形式编码方式如下 短形式Length占用1个字节
字节第7位为0表示Length使用1个字节即可满足Value类型长度的描述范围在0~127之间的。 长形式Length占用多个字节
即Value类型的长度大于127时Length需要多个字节来描述这时第一个字节的bit7为1bit0~6用来描述Length值占用的字节数。然后将Length值转为byte后附在其后。 如Value大小占202个字节11001010,由于大于127这时Length需要使用两个字节来描述如下
10000001 11001010
示例中绿色的1表示后面的length占用1字节
示例中蓝色的11001010表示length为202 示例2
若Value需占用0x114578个字节则Length取值如下0x83114578 2.2.2不定长方式
Length所在八位组固定编码为0x80但在Value编码结束后以两个0x00结尾。这种方式使得可以在编码没有完全结束的情况下可以先发送部分数据给对方。 2.3Value
Value中存放需交互的数据。
但其里面可能还嵌套着其他TLV的值具体需根据本TVL中Tag的bit5来确定。 3、示例Select Command发送与响应
CCC规范中要求SELECT command的通信数据格式如下具体详见CCC规范15.3章节
command: CLA1 A4 04 00 Lc [instance AID] 00
response: [Table 15-12] 90 00 CLA1取值为0如下表 Table15-12的定义如下 根据前面APDU及TLV的知识解析该Select Command命令的发送数据与响应数据具体分析如下
Command实际发送数据可能为00 A4 04 00 0D A000000809434343444B467631 00具体分析如下表 Response实际响应数据可能为5C 04 01 00 01 10 90 00具体分析如下表 4、总结
1) 车端与手机端通过APDU来进行NFC通信交互。
2) APDU分为发送命令C-APDU和返回命令R-APDU。数据格式简化描述如下表 指令 格式 命令APDU CLA INS P1 P2 【Lc Data】【Le】 响应APDU 【Data】 SW1 SW2
3) APDU中的data数据段又可能会嵌入包含TLV的通信协议的数据。
4) TLV即该数据包可以分为三个部分TagLengthValue。
5) TLV数据可单一发送也可以嵌套发送具体根据本Tag的bit5来决定 6) Tag取值 1~n个字节但一般最多为4字节。CCC使用的长度为1-2字节。
7) Length取值长度为1~n字节但一般最多为4字节。 5、参考文章
1.http://www.3scard.com/index.php?articleID11freadmbook
2.https://blog.csdn.net/Hakuryou/article/details/107289012