一直想模仿IC卡授权的方式做一个通信加密,今天花了点时间研究了TEA加密,4个字形容——短小精悍
目前只做了整个通信加密的一小部分,算是开了个头,呵呵!
先以一个常用例子来简单阐述小灯为何想做通信加密:
1、PC端的软件与MCU的通信方式使用串口
2、通过PC端的软件来获取/设置MCU的参数,为防止本机的数据泄露,用户必须设一个用户密码,
PC端的软件访问MCU时需要用户密码,若MCU发现密码不正确,便拒绝PC端的数据获取请求
3、考虑到会有极少部分用户会忘记密码,因此厂家留了一个超级密码,超级密码可以重设用户密码
4、当用户忘记密码时,厂家会通过远程方式帮用户重设用户密码,如果用户想要趁机偷取厂家的
超级密码,只需抓取串口透传的数据即可分析出来,用户可以利用该超级密码获取或修改其他
机子的所有数据
-------------- ---------------
| | | |
| | | |
| PC | 串口 | MCU |
| | ------------------ | |
| | | |
-------------- ---------------
为了解决上述超级密码泄露的问题,在PC访问MCU时可以采用加密的方式,并且不能采用
简单的加密(普通的加减异或),为此引入QQ使用的TEA加密:
1、PC端软件发送操作请求给MCU
2、MCU利用随机数发生器产生一段随机序列(明文)
3、MCU采用TEA加密方式对明文进行加密产生一段密文(明文 + 用户密码 = 密文)
4、MCU发送密文给PC端软件
5、PC端软件利用用户密码采用TEA解密方式对密文进行解密,还原出明文,并发送给MCU
6、MCU在100ms内等待PC端软件解密出来的明文,并与步骤2随机产生的明文做比较
若比较正确则认为PC端软件输入了正确的密码
7、整个通信过程都是随机序列,用户密码并无泄露,实现了安全的密码验证授权!
目前小灯只完成了基础加解密部分,剩余的功能需要上位机配合,只能有时间再弄了
测试板采用 |