Estoy en el proceso de construir una red de dispositivos pequeños (microcontroladores ARM con algo como conectividad nRF24L01). Los controladores recibirán comandos de un sistema central a través de estos enlaces inalámbricos, y estoy en el proceso de diseño del protocolo. La confidencialidad no es un objetivo, pero la integridad y la amp; la autenticidad son En consecuencia, debemos validar tanto la fuente como evitar los ataques de repetición de los paquetes. Me gustaría evitar cualquier protocolo de desafío / respuesta para minimizar el tráfico y la descarga de la batería, por lo que tengo en mente algo como esto:
- La clave y la ID del dispositivo se graban en el dispositivo en el firmware.
- Un contador se inicializa a 0.
- Cada comando enviado al dispositivo contiene la ID del dispositivo, el contador ++ y el comando en sí. Luego, se calcula un HMAC-SHA1 sobre todos estos campos y se adjunta.
- Al recibir un comando, el dispositivo verifica el HMAC-SHA1, la ID del dispositivo y garantiza que el valor del contador sea estrictamente mayor que el contador almacenado en la NVRAM. Si es así, establece el contador NVRAM al valor en el paquete recibido y ejecuta el comando.
- (Posiblemente un ack de algún tipo aquí).
¿Este protocolo es similar a cualquier cosa que existe (no pude encontrar nada) o hay algo adecuado que ya existe? ¿Me estoy perdiendo un defecto importante?