MCU上的硬件AES CCM加密,是否采用硬件防止重放攻击?
物联网神教 2020-04-29 11:27:21 Zigbee采用AES加密,我把一帧空中抓到的控制命令,再次发给目标设备,目标设备有MAC层的ACK,说明目标设备收到控制包了,但是没有执行对应动作,说明目标设备具有防止重放攻击的功能。
但是AES防止重放攻击的原理是什么?我只看到SDK里面的AES CCM的加密/解密接口是这样的:
AESCCM_Encrypt( uint8_t *key, uint8_t *input, uint16_t inputLen, uint8_t *outPut, uint8_t *nonce, uint8_t nonceLen, uint8_t *MIC, uint8_t MIC_len);
AESCCM_Decrypt( uint8_t *key, uint8_t *input, uint16_t inputLen, uint8_t *outPut, uint8_t *nonce, uint8_t nonceLen, uint8_t *MIC, uint8_t MIC_len);
我对协议栈仿真,看到协议栈每次加密的时候都填入了13字节的nonce, nonce由Zigbee的8字节IEEE地址,4字节的counter,1字节的常数组成。加密后除了密文,还会产生4字节的MIC。加密后的无线数据帧,空中数据包除了有密文,还会带上nonce和MIC。
请问这个MIC可以用于防重放攻击么?组成Nonce中的counter是每发一帧就会累加的。而且Zigbee设备每次掉电时的counter必须小于下次上电时的counter,也就是说Zigbee设备每次上电的时候,counter的值要初始化成一个比上次掉电时较大的值,否则就会出现发出去的报文,对方不能识别,但是对方也复位一次就好了。
但是如果Zigbee设备是靠记录counter来判断重放,那么一个Zigbee设备要开辟多大的空间来保存已经失效的counter,而且每个counter还要对应一个IEEE地址。