SPI通信流程
概述
SSN=0:将 SSN 置低;SSN=1:将 SSN 置高。
Len1代表长度的高字节,Len2 代表长度的低字节。
LRC1 的计算方法:对 CLA INS P1 P2 Len1 Len2 DATA 数据,每个字节的异 或值,再取反。
LRC2 的计算方法:对 SW1 SW2 Len1 Len2 DATA 数据,每个字节的异或值, 再取反。
Len1 Len2 代表 DATA 域的长度,不包括 LRC1 或 LRC2。
标识
最小值
最大值
推荐值
说明
Tcsl
60us
150us
100us
SSN 拉低持续时间
Tcsd
3us
10us
5us
通讯结束,SSN 拉低持续时间
Tcsh
10us
50us
10us
SSN 每次拉高持续时间
Tclk
40ns
66ns
50ns
对应 SPI 频率,16MHz-25MHz
Tb
1.5us
10us
3us
SPI有效通讯时间
Tq
15us
100us
20us
指令查询间隔时间
Ttq
1s
3s
2s
指令查询总时间
发送数据结构
发送数据的结构为:55 CLA INS P1 P2 Lc1 Lc2 DATA LRC1,其中:
55 为发送命令结构的命令头;
CLA 是命令类别;
INS 是命令类别中的指令代码;
P1、P2 是一个完成指令代码的参考符号;
Lc1 Lc2 是后续 DATA 的长度,不包含 LRC1,由两字节表示;
DATA 是由终端安全芯片来处理的输入数据;
LRC1 是发送数据的校验值,计算方法见SPI通信流程说明。
接收数据结构
接收数据的结构为:SW1 SW2 Len1 Len2 DATA LRC2,其中:
SW1 SW2 是指令执行完毕后,从主设备返回的状态字;
Len1 Len2 是后续 DATA 的长度,不包含 LRC2,由两字节表示;
DATA 是终端安全芯片处理数据完毕后,返回的输出数据;
LRC2 是接收数据的校验值,计算方法见SPI通信流程说明;
状态字节
SW1、SW2 构成接收数据的起始序列,起始序列在命令的起始指示芯片的状态。
SW1 SW2=‘9000 ’表示正常响应。
SW1
SW2
说明
90
00
命令执行成功
67
00
错误的长度
69
00
CLA 不符合文件属性要求
69
01
命令不接受, 无效状态 计数器不正确
69
07
TIMER 超时
93
02
MAC 无效
69
82
安全状态不被满足 会话未建立
69
84
引用的数据无效
69
85
使用的条件不被满足
69
89
验证 MAC 错误
69
8A
使用的证书状态不被满足
6A
80
不正确的数据域
6A
81
功能不被支持
6A
86
不正确的参数 P1~P2
6A
90
SPI 协议 LRC 校验错误
6D
00
指令代码不被支持或无效
6E
00
CLA 类别不被支持
90
86
验签错误
90
88
产生密钥对错误
90
8A
签名错误
数据重发机制
SPI传输层支持错误重发机制。当出现SPI 数据传输数据错时,允许重新发 送。支持错误重发次数为 3 次。
发送数据错误
主设备发送数据,如果终端安全芯片返回的错误码为 6A90,表明数据在传输 时出现错误,此时主设备可以重发指令。
接收数据错误
主设备收到数据后,需校验从终端安全芯片接收的 LRC 与接收数据计算的 LRC 是否一致,如果不一致,说明终端安全芯片数据在传输过程中出现错误,此 时主设备可以重新启动接收流程(将 SSN 置高,高电平保持时间至少 10us 以上, 再将 SSN 置低,保持MOSI置高(低),进入指令查询和接收流程。
终端安全芯片交互指令流程
主站与终端交互
获取 TESAM 信息
步骤
主站
终端和 TESAM
备注
1
主站下发获取 TESAM 信息 命令
2
发送:803600FF0000
返回:000+LEN+Data1
批量获取终端安全芯片信息:
Data1:
ESAM 序列号(8B)、
ESAM 版本号(4B)、
对称密钥版本(16B)、
证书版本(主站证书版本号 (1B)+ 终 端 证 书 版 本 号 (1B))、
会话时效门限(4B)、
会话时效剩余时间(4B)、 当前计数器(ASCTR:单地址应用协商计数器(4B)、
ARCTR : 主 动 上 报 计 数 器 (4B)、
AGSEQ:应用广播通信序列号 (4B)、
终端证书序列号(16B)、 主站证书序列号(16B)
3
发送:803600P20000
返回:9000+LEN+ Data2
单项获取终端安全芯片信息 P2:
02:ESAM 序列号(8B)、 03:ESAM 版本号(4B)、
04:对称密钥版本(16B)、
05:证书版本(主站证书版 本号 (1B)+终端证书版本号 (1B) )、
06:会话时效门限(4B)、
07:会话时效剩余时间(4B)、 08:当前计数器
(ASCTR:单地址应用协商计 数器(4B)、
ARCTR : 主 动 上 报 计 数 器
(4B)、
AGSEQ:应用广播通信序列号 (4B))
09:终端证书序列号(16B)、 0A:主站证书序列号(16B)
0B:终端证书 0C:主站证书
建立应用连接(主站与终端会话密钥协商)
步骤
主站
终端和 TESAM
备注
1
主站建立应用连接下发终 端会话协商数据 ,包含 ucOutSessionInit 密文 2 和 ucOutSign 客户机签名 2
ucOutSessionInit:32 字节
ucOutSign : N 字节
2
发送:80020000+ Lc+
ucOutSessionInit+ucOu tSign
返回:9000+ Len+
ucSessionData+ucSign
Lc:ucOutSessionInit 长度 加上 ucOutSign 长度,2 字节
Len: 芯片返回数据长度,2字节
ucSessionData:服务器随机 数,48 字节
ucSign:服务器签名信 息, Len-48 字节
3
终端上传
ucSessionData、ucSign
4
主站获得 ucSessionData、 ucSign,进行校验
安全传输数据处理(主站到终端)
步骤
主站
终端和 TESAM
备注
1
建立应用连接
终端数据抄读、广播操作可 不需要会话连接
2
主站发送任务数据,包含 应用数据单元 Data,数据 验证信息
使用应用会话密钥对数据进 行计算 MAC
Data: 明文应用数据单元或 者密文应用数据单元
数据验证信息: SID_MAC 或 RN 或 RN_MAC 或 SID
SID:包含 4 字节安全标识+ 附加数据 AttachData
3
广播说明:
终端收到数据后判断广 播地址、安全标识的前 4 个字节是否正确
安全标识:8016480X
当组地址或广播地址最后一 位有效位
为 1 时 X=1;为 2 时 X=2;
为 3 时 X=3;为 4 时 X=4;
为 5 时 X=5;为 6 时 X=6;
为 7 时 X=7;为 8 时 X=8;
为 9 时 X=9;为 0 或 A 时 X=A;
4
若数据验证信息为随机 数 RN,则跳第 5 步;
若 数 据 验 证 信 息 为 SID_MAC,
发送: 4 字节安全标识+ 附加数据 AttachData+Data+ MAC
返回:9000+LEN+Data2
若数据验证信息为 SID, 发送: 4 字节安全标识+ 附加数据 AttachData+Data
返回:9000+LEN+Data2
SID:包含 4 字节安全标识+ 附加数据 AttachData
5
执行相应的应用层协议 处理
读取、设置(安全模式设置)、 操作
6
组织数据返回帧
广播业务不需要返回帧给主 站
读取终端数据时,直接将组 织好的数据通过安全传输返 回主站,跳到第 8 步骤进行 验证
其他操作需要继续
7
发 送 : 801C00+P2+Lc+ Data3
返回:9000+LEN+ Data4
Data3:数据返回帧
Data4:包含应用数据单元和 数据验证信息
由终端按照下述规则组织各 个数据项。
P2 :
明文+MAC 方式:11 密文:96
密文+MAC:97
设置(安全模式设置)时, P2 :
密文+MAC:97
8
主站验证,获得确认帧或 否认帧
应用层协议处理
读取(抄读终端)
步骤
主站/掌机
终端和 TESAM
备注
1
根据 建立应用连接(主站与终端会话密钥协商)的第 2 步骤获得抄读随机数 RN
2
发送:
800E4002+LC+Data1
返回:9000+0004+MAC
LC:Data1 长度,2 字节
Data1:RN+PlainData
备注:终端计算明文+MAC
3
根据 安全传输数据处理(主站到终端)的 6、7、8 步骤返回主站
操作(终端对称密钥更新)
步骤
主站
终端和 TESAM
备注
1
根据 安全传输数据处理(主站到终端) 的 1、2、4 步骤获得 Data2,Data2 包含密钥密文(Endata1)、数据验证 码 SID_MAC(包含安全标识、附加数据 AttachData、 MAC)
2
终端判断安全标识为812E0000
3
发送:安全标识+附加数
据AttachData+ Endata1+MAC
返回:9000+0000
4
根据 安全传输数据处理(主站到终端)的 6、7、8 步骤返回主站,返回帧中 P2 需为密文+MAC:97
操作(证书更新)
步骤
主站
终端和 TESAM
备注
1
根据 安全传输数据处理(主站到终端)的 1、2、4 步骤获得 Data2,Data2 包含证书内容(Endata1)、安全标识 SID(包含安全标识和附加数据AttachData)
2
终端判断安全标识为81300203
3
发送: 安全标识+附加数据 AttachData+ Endata1
返回:9000+0000
4
根据 安全传输数据处理(主站到终端) 的 6、7、8 步骤返回主站,返回帧中 P2 需为密文:96 或者密文+MAC:97
设置(更新会话时效门限、转加密初始化、置离线计数器)
步骤
主站
终端和 TESAM
备注
1
根据 安全传输数据处理(主站到终端) 的 1、2、4 步骤获得 Data2
Data2 包含数据更新信息,参 数内容 Data1 、数据验证码 SID(包含安全标识、附加数 据 AttachData)
2
发送: 安全标识+附加数据 AttachData+Data1
返回:9000+0000
3
根据 安全传输数据处理(主站到终端) 的 6、7、8 步骤返回主站
操作(处理转加任务数据和密钥包)
步骤
主站
终端和 TESAM
备注
1
根据 安全传输数据处理(主站到终端) 的 1、2、4 步骤获得 Data2,Data2 包含密钥或任务密文(Endata1)、数 据验证码 SID_MAC(包含安全标识、附加数据 AttachData、 MAC)
3
发送:安全标识+附加数据 AttachData+ Endata1+MAC
返回:9000+LEN+Endata2
Endata2:处理后的任务密文
4
根据 安全传输数据处理(主站到终端) 的 6、7、8 步骤返回主站,返回帧中 P2 需为密文+MAC:97
安全传输数据处理(终端到主站)
步骤
主站
终端和 TESAM
备注
1
发送:80140103+LC+ Data1
返回:9000+LEN+Data2+ MAC1
LC : Data1 长度,2 字节
Data1: 明文数据
Data2:12 字节随机数
RN_MAC:包含 12 字节随机数 Data2 和 4 字节 MAC
2
终端上传数据
3
主站对ucReportData进行验证,并保存数据,下发 应答帧
4
根据主站下发的应答帧
发送:安全标识+附加数 据 AttachData+ Data3+MAC2
返回:9000+Len+Data4
Data3:接收主站下发应答帧 数据
Data4:明文数据
终端与电能表(20 版和物联版电能表)交互
读取信息(获取电能表 ESAM 信息)
步骤
终端和 TESAM
电能表和 ESAM
备注
1
下发获取 ESAM 信息命令
2
获取电能表安全芯片信 息
获取电能表安全芯片信息包 含:
Data1:
ESAM 版本号(5B)、ESAM 序列号(8B)、 保留(1B)
对称密钥版本(16B)、会话时效门限(4B)、
会话时效剩余时间1(4B)、当前计数器
(ASCTR:单地址应用协商计 数器(4B)、
AMRCTR: 电能表主动上报计 数器(4B)
AGSEQ:应用广播通信序列号 (4B)
AMTCTR: 终端与电表会话计 数器(4B))
ESAM 发行信息(40B)、 身份认证权限(1B)、
终端地址(8B)、
终端广播计数器(4B)
建立应用连接(会话密钥协商)
步骤
终端和 TESAM
电能表和 ESAM
备注
1
发送:80720000+LC+ 密钥 包+AMTCTR+00
返回:9000+Len+
SessionData1+MAC1
需先参考 5.2.1 章节步骤获 取电能表 ESAM 相关信息,终 端从主站管理系统获取电能 表密钥数据;
LC:后续数据长度,2 字节 AMTCTR:终端与电表会话计 数器 4 字节
密钥包:从主站获取 128 字 节。
2
安全芯片验证
SessionData1 和 MAC1,
返回 SessionData2 和MAC2
3
电能表上传SessionData2、MAC2
4
发送:80740000+LC+ 密钥 包+ SessionData2+MAC2
返回:9000+Len+ 会话密 钥包
LC:后续数据长度,2 字节
安全传送数据处理(终端到电能表)
步骤
终端和 TESAM
电能表和 ESAM
备注
1
会话协商
返回密钥包。
2
终端发送任务数据,包含
应用数据单元 Data,数据
验证信息
使用应用会话密钥对数据进行加密
Data: 明文应用数据单元或
者密文应用数据单元
数据验证信息:RN 或 SID RN:使用 终端对电能表广播校时 章节
SID:包含 4 字节安全标识+ 附加数据 AttachData
3
发送:80760300+LC+会话 密钥条数+会话密钥包+任务数据密文
返回:
9000+LEN+SID+EnData+ MAC
组织数据域Data和数据验证信息 SID,下发。
下发数据计算密文+MAC
LC:后续数据长度,2Byte
会话密钥条数:1Byte(会话 密钥包的字节数除以 32,16 进制)
SID:6 字节 MAC:4 字节
4
若数据验证信息为 SID_MAC,
发送:4 字节标识+附加数 据AttachData+Data+ MAC 返回:9000+Len+Data2
若数据验证信息为 SID, 发送:4 字节标识+附加数 据 AttachData+Data
返回:9000+Len+Data2
电能表解密密文
5
业务处理
读取、设置参数、控制和广 播校时。广播校时不需要建 立应用连接。
6
电能表按照规则组织各个数据项 Data3
电能表加密 Data3 返回Data4
7
发送:80780000+LC+会话 密钥包个数+会话密钥包 +80241100+LC1+明文数据 +MAC
终端验证明文+MAC
会话密钥包个数:会话密钥 包的字节数除以 32
LC1:明文文数据和 MAC 的长 度,2 字节
发送:80780000+LC+会话 密钥包个数+会话密钥包 +80241200+LC1+密文数据
返回:9000+LC1+明文
终端解密密文
会话密钥包个数:会话密钥 包的字节数除以 32
发送:80780000+LC+会话 密钥包个数+会话密钥包 +80241300+LC1+密文数据 +MAC
终端解密密文并验证 MAC
会话密钥包个数:会话密钥 包的字节数除以 32
LC1:密文数据和 MAC 的长度,
2 字节
终端对电能表广播校时
步骤
终端和 TESAM
电能表和 ESAM
备注
1
发送:800400100000
返回:9000+LEN+Rand1
操 作 此 步 骤 之 前 先 按 照 5.2.1 步骤获取电能表应用 广播通信序列号(AGCTR);
2
发送:800A4808+LC+终端 地址+Rand1+AGCTR+Data
返回:9000+Len+Data1
广播数据加密。
终端地址:8 字节 从电能表 端读取
AGCTR : 电能表应用广播通信 序列号+1,4 字节从电能表端读取
Data:广播数据明文 Data1:广播数据密文
发送:800E4808+LC+终端 地址+Rand1+801E400A+
LC1+Rand1+01+Data1
返回:9000+0004+MAC
对密文计算 MAC
LC:后续数据长度,2 字节 LC1:后续数据长度+4,2 字 节
3
组织密文应用数据单元 Data1 和数据验证信息 SID_MAC,下发到电能表
数据验证信息 SID_MAC(包 含标识、附加数据AttachData,数据 MAC)
标识:4 字节,固定 801E400A 附加数据:LC1+Rand1+01
4
发送:标识+附加数据+ Data1+数据 MAC
返回:9000+Len+Data
密文 MAC 方式广播数据处理 获得明文。
终端对电能表校时
步骤
终端和 TESAM
电能表
备注
1
会话协商
2
发送:80760301+LC+会话密钥包个数+会话密钥包+LC1+Date+任务数据密文
返回:9000+LEN+SID+EnData+ MAC
下发数据计算密文
LC:后续数据长度,2Byte
会话密钥包个数:会话密钥包的字节数除以 32
Date:校时时间
LC1:校时时间长度,1 字节
组织数据域Data和数据验 证信息 SID 或 SID_MAC,
下发。
若数据验证信息为 SID_MAC, 发送:4 字节标识+附加数据 AttachData + 4 字节标识+ 附加数据 AttachData1 +Data+ MAC
若数据验证信息为SID,
发送:4 字节标识+附加数据 AttachData+Data
3
执行操作
4
返回终端,根据 安全传送数据处理(终端到电能表)的 6、7 步骤验证
设置 ESAM 参数(终端地址、终端广播计数器)
步骤
终端和 TESAM
电能表
备注
1
会话协商
2
发送:80D40300+LC+会话 密钥包个数+会话密钥包 +Endata1+MAC
返回:9000+LC1+Endata2
下发数据计算密文
LC:后续数据长度,2Byte
会话密钥包个数:会话密钥
包的字节数除以 32 Endata1:密文数据
发送:80760301+LC+会话 密钥包个数+会话密钥包 +LC1+Endata2+任务数据密文
返回:9000+LEN+SID3+EnData3+ MAC
组织数据验证信息 SID3 和数据密文 Endata3,下发 到电能表。
数据验证信息 SID3(包含标 识、附加数据 AttachData) 标识:4 字节,
附加数据:2 字节,
3
执行操作
4
返回终端,根据 安全传送数据处理(终端到电能表)的 6、7 步骤验证
安全传输数据处理(电能表到终端)
步骤
终端和 TESAM
电能表和 ESAM
备注
1
发送:80140103+LC+
Data1
返回:9000+LEN+Rand+AMRCTR+
4 字节 MAC
电能表计算明文+MAC
LC : Data1 长度,2 字节 Data1: 明文数据
Rand:随机数 8 字节
AMRCTR:上报计数器 4 字节 RN_MAC,包含 12 字节 Data2 (Rand 和 AMRCTR)和 4 字节 MAC
2
组织数据上报终端
3
终端根据接收数据格式,
4
发送: 800E4888+LC+电能 表表号+Rand+AMRCTR+AMRCTR`+Data1+MAC
返回:9000+0000
终端明文+MAC 方式验证上报 数据
AMRCTR` :AMRCTR 取反 4 字节
5
发送: 800E4807+LC+电能 表表号+Data2+00000000+Data3
返回:9000+0004+MAC
计算上报返回数据明文+MAC
Data2:Rand+AMRCTR
Data3:返回数据明文
组织密文应用数据单元 Data5 和数据验证信息
SID_MAC,下发到电能表。
数据验证信息 SID_MAC(包含标识、附加数据 AttachData,MAC)
标识:4 字节,固定 800E4081 附加数据:Data5 的长度+4,两个字节
Data5:包含(Data2、 00000000 和 Data3)
6
发送: 800A4807+LC+电能 表表号+
Data2+00000000+Data3
返回:9000+LEN+Data4
密文
组织密文应用数据单元 Data5 和数据验证信息 SID,下发到电能表。
数据验证信息 SID(包含标 识、附加数据 AttachData) 标识:4 字节,固定 800C4001 附加数据:Data5 的长度,两个字节
Data5:包含(Data2、 00000000 和 Data4)
7
发送: 80104807+LC+电能 表+
Data2+00000000+Data3
返回:9000+LEN+Data4+ MAC
密文+MAC
组织密文应用数据单元 Data5 和数据验证信息
SID_MAC,下发到电能表。
数据验证信息 SID_MAC(包含标识、附加数据 AttachData,MAC)
标识:4 字节,固定 80124001 附加数据:Data5 的长度+4,两个字节
Data5:包含(Data2、 00000000 和 Data4)
8
发送:标识+附加数据 +Data5+MAC
返回:9000+0000
Data5 接收主站下发应答帧 数据
终端与电能表身份认证
步骤
终端和 TESAM
电能表
备注
1
发送:800400080000
数据验证信息的RN 为Rand1
返回:9000+LEN+Rand1
下发随机数到电能表,包 含应用数据单元 Data,数 据验证信息
2
电能表返回Rand1密文 1、 Rand2 、 表号和电能表 ESAM 序列号
3
发送:800808030010+ 表号+Rand1
返回:9000+0010+ Endata1
异或 Endata1,并与 Rand1 密 文 1 比较是否相同
4
发送:800808040010+ DIV+Rand2
返回:9000+0010+ Endata2
DIV 为 8 字节分散因子,测试 密钥下为 ESAM 序列号,正式 密钥下为电能表表号。
5
异或 Endata2,下发电能表
6
电能表验证 Endata2
7
组织数据返回终端
8
接收返回数据
终端抄读电能表
步骤
终端和 TESAM
电能表和 ESAM
备注
1
发送:800400100000
返回:9000+LEN+Rand
下发随机数到电能表,包 含应用数据单元 Data,数 据验证信息
数据验证信息的RN 为Rand
2
电能表根据安全模式要 求对抄读数据 Data2 计算 MAC
安全模式为明文+MAC
3
电能表组织数据报文返 回终端
4
终端根据接收数据验证
5
发送: 800E4887+LC+电能表表号+Rand+Data2+MAC
返回:9000+0000
终端明文+MAC 方式验证抄读 数据