Hay dos puntos principales en tus situaciones.
1. ¿La cerradura debería saber cómo desbloquearse?
Hay básicamente dos tipos de sistemas de "firma", y solo uno de ellos es realmente una firma . En su situación, el servidor enviará al dispositivo algún tipo de token que el dispositivo verificará . Entonces, la pregunta es: ¿es un problema si el dispositivo tendría el poder técnico de producir un token válido? ¿O las cosas deberían ser tales que el dispositivo no contenga nada que le permita crear nuevos tokens?
En el primer caso, puede trabajar con un MAC y HMAC / SHA-256 no es una mala elección para eso. Sin embargo, esto significa que el dispositivo y el servidor comparten alguna clave secreta, que se utiliza tanto para producir como para verificar tokens de desbloqueo. Si hay varios dispositivos, cada uno debe tener su propia clave específica del dispositivo, y el servidor debe conocer todas las claves del dispositivo; de lo contrario, al separar un dispositivo, un atacante podría aprender lo suficiente para desbloquearlo. todos los demás dispositivos.
En este último caso, el servidor tiene un par de claves asimétricas; los tokens de desbloqueo están firmados con la clave privada del servidor, y los dispositivos verifican los tokens con la clave pública del servidor. RSA es un algoritmo de firma digital popular; la parte de verificación es barata y, por lo tanto, puede realizarla la mayoría de los dispositivos, incluso los dispositivos con limitación de energía.
2. ¿Qué hay de ataques de repetición ?
Un "ataque de repetición" es, en su caso, cuando un atacante observa un token de desbloqueo y lo envía de nuevo en algún momento posterior. Hay varias formas de evitar estos problemas, pero todas implican algún tipo de capacidad adicional en el dispositivo:
Tokens por tiempo limitado. El token incluye una fecha de emisión y el dispositivo no aceptará un token que sea "demasiado antiguo". Este método requiere que el dispositivo tenga un reloj incorporado razonablemente preciso.
Seguimiento de duplicados. El dispositivo recuerda los tokens de desbloqueo vistos anteriormente y se niega a actuar sobre un token que ya ha visto. Esto requiere algún tipo de memoria que no se pueda restablecer.
Nonces . El dispositivo primero emite un valor aleatorio y espera que el token de desbloqueo contenga una copia de ese valor específico. Esto hace que el protocolo sea más complejo y requiere que el dispositivo pueda emitir datos, así como recibir tokens. Esto no se asignará bien a todas las situaciones; por ejemplo, si el dispositivo es un bloqueo de puerta, con un teclado, y el usuario se comunica con el servidor a través de su teléfono inteligente. Por lo general, el dispositivo necesitaría una pequeña pantalla LCD para mostrar su nonce.
Es posible que desee considerar HOTP : este es un protocolo basado en MAC, por lo tanto, con una clave compartida entre "servidor "y" dispositivo ". Tanto el servidor como el dispositivo recuerdan solo un valor de contador corto (por ejemplo, 32 bits) y esto es suficiente para proteger contra ataques de repetición. La comunicación es unidireccional (el dispositivo no necesita emitir nada). Este protocolo (o cualquier variante similar) es lo que se usa para desbloquear su automóvil: el automóvil es el "dispositivo" y el control remoto conectado al llavero es el "servidor".
Todo lo anterior es sobre el token enviado desde el servidor al dispositivo. Por supuesto, el servidor no debe producir el token a menos que tenga una buena seguridad de que es token para el usuario correcto (el propietario del dispositivo). Por lo tanto, necesita autenticación que, en la práctica, significará SSL. Permita que el usuario abra una conexión SSL con el servidor (por ejemplo, HTTPS) y se autentique con el servidor. La capa SSL se encargará de la integridad y el cifrado para que no tenga que cifrar el token en sí. En realidad, el cifrado no sería necesario para un token de desbloqueo en absoluto; es posible que desee utilizar el cifrado solo para disuadir a los interceptores, y desea frustrarlos solo si su protocolo de verificación de tokens es débil contra los ataques de repetición. En cualquier caso, es mejor dejar el cifrado en una capa en la que todos los detalles difíciles se hayan suavizado a lo largo de años de arduo trabajo, y eso es SSL.