嵌入式设备串口通讯一般都会明文通讯,但在某些应用场合我们也有加密需求, 以下为一种加密方式的建议.
上位机(主机)定义为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,用于防重放攻击和数据统计.
方案B:上位机发送的sn,需要基于下位机反馈的sn加1; 下位机上报的sn则是按收到的上位机的sn
这种设计的好处是可以同时检验RX和TX通讯是否有超时间.双方是需要判断一下sn是否在不断增 加就可以知道是否有超时情况.
5.当slaver发给master的sn少于当前自身的sn,则认为该指令无效,可以选择性的回复错误代码.
数据加密步骤:
1.当建立通讯之间,Slaver向Master请求通讯密钥key1,和随机初始序列sn1.用于后续通讯,以防止重放偷听.
2.master和slave代码内部约定一个固定的密钥key2.
3.每帧数据加密/解密方式采用对称加密. 通讯数据=原始数据^key1^key2.
4.body加密部分为oper后面的内容(不包含oper字节).
---<待续>
本文介绍了一种针对嵌入式设备串口通讯的加密方案,包括完整的数据格式定义及加密步骤说明,确保数据传输的安全性和完整性。
1385





