Estoy preparando un sistema muy simple para enviar comandos a un servidor remoto por correo electrónico. Cada vez que se envía un correo electrónico a [email protected]
, el servidor ejecuta un script de Python que hace algo diferente según el destinatario do_something
, y utiliza el contenido y los metadatos del correo electrónico como parámetros para cualquier tarea que realice. Esto se utilizará para proporcionar servicios a través de correo electrónico para un conjunto específico de usuarios que no tienen conexión directa a Internet. Los usuarios no escriben correos electrónicos por sí mismos, sino que utilizan una pequeña aplicación que genera todos los metadatos necesarios.
Por supuesto, es muy importante autenticar a los usuarios de manera confiable. Podría implementar un protocolo de criptografía de clave pública, pero un amigo me sugirió la siguiente idea, que es muy fácil de implementar y me parece lo suficientemente confiable:
Genero una contraseña para cada usuario (identificado por su dirección de correo electrónico), por ejemplo, una cadena aleatoria de tamaño 2K. El servidor conoce la contraseña de cada usuario y cada usuario conoce su contraseña. La aplicación de usuario genera un correo electrónico para la tarea correspondiente con todos los datos necesarios. Una vez finalizado, concatena algunos de los metadatos del correo electrónico (por ejemplo, el remitente y la marca de tiempo para evitar colisiones para el mismo usuario) con la contraseña del usuario y calcula un hash seguro (actualmente estoy usando SHA-512). Luego adjunta este hash al correo electrónico generado. El servidor recibe el correo electrónico y calcula el mismo hash (recuerde que conoce la supuesta contraseña del remitente). Si coincide con el hash adjunto en el correo electrónico, se considera autenticado.
Ahora suponga que puedo hacer que cada usuario obtenga su contraseña (no por medios electrónicos). ¿Es este mecanismo seguro? Sé que probablemente estoy reinventando un montón (bastante viejo) de ruedas aquí, así que perdona mi ignorancia sobre el tema. Sé que los hashes SHA son virtualmente irreversibles, y esa es la razón principal por la que creo que esta estrategia podría funcionar.
Gracias de antemano.