Protocolo fácil para la autenticación de correo electrónico

2

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.

    
pregunta Alejandro Piad 31.01.2013 - 20:42
fuente

2 respuestas

6

Está intentando utilizar un MAC . Aplicar una función de hash en la concatenación de la contraseña y algunos otros datos es un MAC personalizado, y no es muy bueno con las funciones de hash habituales como SHA-512 debido a que ataque de extensión de longitud . Por eso se inventó HMAC .

Usar HMAC con un secreto compartido es un buen método de autenticación. Sin embargo, debido a la inseguridad inherente de los correos electrónicos, es probable que también desee algún cifrado, y para eso solo debe usar OpenPGP (con su implementación de OpenSource ). Utilizar un sistema de software que ya existe es más seguro y más fácil que volver a implementar su propio sistema.

Independientemente del método de autenticación que use, debe agregar un ataque anti-reproducción: un atacante podría enviar un correo electrónico válido (que observó en tránsito) por segunda vez, lo que provocará el efecto de correo electrónico nuevamente . Los ataques de repetición se ríen de MAC y el cifrado. Para vencerlos, el servidor debe "recordar" los correos electrónicos pasados y descartar los duplicados exactos.

    
respondido por el Tom Leek 31.01.2013 - 20:58
fuente
3

Tom tiene una gran perspectiva sobre cómo llevar la idea general del sistema que sugieres y su mayor riesgo: repetir el ataque.

Algunos otros pensamientos que podrían darle algo para reflexionar:

¿Qué protege esto?

Con el esquema que tienes, no solo hay ataques de repetición, sino también el robo o la pérdida de la contraseña del usuario. Algunas de las soluciones para reproducir ataques (como poner una marca de tiempo y solo permitir que la marca de tiempo se use una vez) pueden funcionar en algunos casos, pero no en otros (casos en los que un usuario legítimo enviará varios mensajes en una única ventana de tiempo. / p>

¿Qué tan importante es la disponibilidad consistente y cuál es el riesgo si la autenticación crea un falso positivo o un falso negativo?

¿Cómo se implementa esto?

Es una gran diferencia si está operando dentro de las protecciones de una red, o algo que viene del público. Además, la protección de las contraseñas de usuario tanto en la máquina cliente del usuario como en el servidor es un gran problema y debe protegerse de manera acorde con los riesgos del sistema.

¿Cómo se cambia la clave de los usuarios?

Esto puede ser un problema tanto para las claves asimétricas como para las contraseñas de los usuarios. A menudo, el proceso de restablecimiento / cambio de clave es el mayor riesgo, ya que el usuario ahora no tiene la prueba de autenticación. El restablecimiento de contraseñas agrega el riesgo de que la contraseña se deba almacenar en ambos lugares. Si los usuarios tienen que trabajar (y restablecer las contraseñas) de forma remota, esto puede ser un gran problema.

Rekey of assymetric keys tiene algunos de los mismos problemas: saber que el usuario es el usuario es un problema si el usuario ha perdido sus credenciales, pero no se requiere que la clave privada en un par asimétrico se transmita mientras el público La clave puede ser verificada.

¿Cuáles son sus requisitos de facilidad de uso?

La mayoría de los usuarios, si se aprovisionan correctamente, pueden firmar correos electrónicos con el clic de un botón en la mayoría de los principales clientes de correo (Outlook y Notas, sin duda). Tomará una extensión al cliente de correo electrónico para hacer algo personalizado. Si tiene algunos usuarios con muchos conocimientos, esto puede no ser un gran problema. Pero si esto tiene que hacer gente de negocios no técnica, este será un verdadero desafío de UI, cuyo tamaño puede hacer que los beneficios sean muy pequeños.

    
respondido por el bethlakshmi 31.01.2013 - 21:25
fuente

Lea otras preguntas en las etiquetas