上周发过一个抛砖引玉的帖子,链接如下:
http://www.openedv.com/thread-91823-1-1.html
在此重新归纳一下,小灯一直希望做一个简单的通信加密方式防止别人窃取自己的信息或控制自己的板子,
为此引入了IC卡授权的方式,具体请参照小灯的上面链接的帖子,上个帖子只是单纯做了MCU生成密文的实验,
这个帖子是完成版,完成了PC通过串口控制MCU的整个通信加密过程!
小灯为PC与MCU通信制定了一个简单的串口协议,协议具体如下:
数据帧格式:
---------------------------------------------------------------------
| 命令头部 | 数据长度 | 有效数据 | 校验 |
---------------------------------------------------------------------
| "APOLLO_TEA" | 4字节 | ... | CRC32 |
---------------------------------------------------------------------
为了简单,暂时不使用校验,因此最后的4字节CRC校验并没有加入本次通信协议当中
PC与MCU具体通信步骤简单分为3步:
1、PC发送控制请求:
"APOLLO_TEA" + 4字节数据长度 + "LED_CONTROL"
2、MCU返回密码匹配要求:
"APOLLO_TEA" + 4字节数据长度 + 8字节密文
3、PC返回解密后的明文与控制信息:
"APOLLO_TEA" + 4字节数据长度 + 8字节明文 + 2字节控制信息
其中2字节控制信息如下:
-----------------------------------------------------------------------------------------------
| 第一字节 | 第二字节 |
-----------------------------------------------------------------------------------------------
| LED编号,0表示DS0,1表示DS1 | LED控制,0表示关闭,1表示打开 |
-----------------------------------------------------------------------------------------------
通信过程就是这么简单,按照小灯的初衷,只有PC端输入正确的密码才能控制开发板的LED,
而上面的通信过程均采用随机序列授权验证,每次PC发送一个控制命令都必须重新授权,
因此哪怕你抓取了串口的整个通信数据,也是无法控制开发板的LED的,因为每次授权的数据都不相同!
如果你足够牛X,也可以通过通信过程当中的“明文”和“密文”反推出用户密码,哈哈!
下面晒几张实验的靓照:
/* PC端测试软件 */ |