⼀种嵌⼊式设备串⼝加密协议嵌⼊式设备串⼝通讯⼀般都会明⽂通讯,但在某些应⽤场合我们也有加密需求, 以下为⼀种加密⽅式的建议.上位机(主机)定义为Master,下位机(从机)定义为Slaver 通讯协议建议:
完整数据格式: 帧头Header+数据长度Length+数据内容Body+数据校验CRC Header(1Byte): M-->S ( 0x55 ) , S-->M( 0xaa )
Length(1Byte): 除了帧头和长度字节,后⾯数据的长度 Body(N Byte): 内容长度为 Length -帧头长-数据长-CRC长
CRC(1Byte):从帧头到的数据的校验,选择⽅式有:CRC8,代数和,异或
数据内容建议:
0. 帧头,数据,和校验字节的长度,可⾃⾏根据项⽬通讯内容字节数量⾃⼰修改,⼀般在2byte以内.
1.数据可采⽤c语⾔的结构体的⼩端数据对齐
2.数据组成,oper+sn+playload+check
3.check为保证数据加密后的完整性校验
4.sn为通讯数据序列,每帧数据⾃增1,⽤于防重放攻击和数据统计.
5.当slaver发给master的sn少于当前⾃⾝的sn,则认为该指令⽆效,可以选择性的回复错误代码.
数据加密步骤:
1.当建⽴通讯之间,Slaver向Master请求通讯密钥key1,和随机初始序列sn1.⽤于后续通讯,以防⽌重放偷听.
2.master和slave代码内部约定⼀个固定的密钥key2.
3.每帧数据加密/解密⽅式采⽤对称加密. 通讯数据=原始数据^key1^key2.
4.body加密部分为oper后⾯的内容(不包含oper字节).
---<;待续>