Así que creo que, dada la falta de seguridad física de los dispositivos, lo que hagas será solo el mejor esfuerzo. Simplemente no puede evitar que alguien desmonte el dispositivo, lea los datos, los modifique, etc ... Vamos a tomar eso como un hecho y seguir adelante.
Esta solución utiliza HMACs . Un HMAC toma dos entradas, una cadena y un secreto, y produce una cadena de salida que es criptográficamente difícil / imposible de forjar sin conocer el secreto.
Ponga en todos los dispositivos un secreto compartido (el mismo) que también conocen los administradores de dispositivos (ellos son los que entregan información de autenticación a los técnicos). Como el dispositivo no es físicamente seguro, el almacenamiento del secreto será menos que perfecto, pero ya acordamos que estaríamos de acuerdo con esto.
Un administrador le dará a un usuario un nombre de usuario y una contraseña. La contraseña será el resultado de HMAC(secret, username)
(posiblemente truncado a una longitud razonable). Cuando el usuario inicia sesión en un dispositivo, ingresará su nombre de usuario y contraseña. El dispositivo recalculará el HMAC, lo truncará a la longitud adecuada y lo comparará con la contraseña del usuario.
Según sus necesidades, puede realizar algunos cambios en el sistema:
- En lugar de almacenar el mismo secreto en cada dispositivo, puede almacenar diferentes secretos. Esto, por supuesto, aumentará los costos de administración, pero agregará algo de seguridad. Puede dar a cada dispositivo su propio dispositivo secreto o grupal por ubicación geográfica, fecha de emisión u otros medios.
- Junto con el nombre de usuario y la contraseña, puede dar a cada usuario una fecha de vencimiento de la contraseña. Luego, ingresarían su nombre de usuario, contraseña y fecha de vencimiento al iniciar sesión. Su contraseña sería
HMAC(secret, username + expiration date)
. La ventaja de esto es que las contraseñas se agotan naturalmente, por lo que una contraseña expuesta no te perseguirá para siempre. La desventaja es que los usuarios necesitarán obtener continuamente nuevas contraseñas. A diferencia de la caducidad de una contraseña más típica, los usuarios deberán ponerse en contacto con los administradores para obtener su nueva contraseña. Aquí también la falta de seguridad física puede permitir a los atacantes restablecer la fecha en el dispositivo, reactivando una contraseña caducada. Una vez más, acordamos que la seguridad perfecta no será posible sin la seguridad del hardware.
- Dependiendo de la flexibilidad del dispositivo, es posible que pueda mover las credenciales a una unidad USB, tarjeta SD o algún otro dispositivo que pueda usarse para la autenticación. Una clave USB encriptada como esta le proporcionará una autenticación de dos factores.
- Si cada usuario tiene un inicio de sesión único, puede implementar algún tipo de auditoría.
Los problemas notables con este sistema incluyen:
- Incapacidad para deshabilitar una contraseña. Incluso si usa la extensión de fecha, debe esperar a que caduque la contraseña.
- A menos que use una clave USB segura (o un dispositivo igualmente seguro) para la autenticación, todavía está abierta a los usuarios que crean archivos "passwords.txt".
- La falta de seguridad del hardware reduce enormemente los esfuerzos de seguridad.