Tengo una arquitectura cliente / servidor que periódicamente envía paquetes UDP muy pequeños (de 10 o más bytes) de ida y vuelta, que me gustaría autenticar sin una gran sobrecarga en el ancho de banda o el procesamiento. Tenga en cuenta que no me importa que un adversario vea el texto simple, solo me gustaría evitar que modifiquen y retransmitan los paquetes.
Aquí está el proceso que estoy imaginando:
- El usuario se autentica con un nombre de usuario / contraseña a través de HTTPS. Nada fuera de lo común aquí.
- El servidor responde con un mensaje de éxito y N bytes (alrededor de 32 bytes) de datos aleatorios generados criptográficamente. Tanto el cliente como el servidor recuerdan esta cadena de datos como su
common_secret
. - En este punto, la conexión HTTPS está cerrada y toda la comunicación posterior se realizará a través de pequeños paquetes UDP, utilizando este esquema para la autenticación:
-
packet = plaintext + sha2(plaintext + common_secret)
- Al recibir un paquete, el servidor calculará el mismo
sha2
a partir del texto sin formato y sucommon_secret
, y verificará que coincida con el hash al final del paquete.
Un adversario no podrá construir un paquete válido sin conocer common_secret
. ¿Es este un esquema de autenticación válido?