Autenticación de contraseña usando DynamoDB

2

Estoy trabajando en una aplicación para Mac. Tengo usuarios almacenados utilizando DynamoDB. La autenticación es necesaria para imponer el control de acceso en las operaciones internas del sistema, como la carga de archivos a Amazon S3. Por supuesto, me gustaría un mecanismo de autenticación seguro.

Pensé en hashes unidireccionales. La contraseña con hash se almacenaría en DynamoDB. Para la autenticación, realizaría una solicitud, luego pondría la contraseña que el usuario ingresó y comparó el hash almacenado y el hash transferido. Con un rastreador de red, un adversario podría ver la contraseña de hash.

Como dije, la autenticación solo se necesita internamente, por lo que no hay otra forma de obtener las credenciales que no sea la aplicación.

¿Podría haber problemas de seguridad con este enfoque? Además, ¿qué función hash me recomienda?

    
pregunta NSAddict 19.10.2012 - 15:23
fuente

1 respuesta

3

Editar: Esto no es relevante para esta pregunta en particular , pero sí un consejo sobre el tema en general.

Parece que lo que realmente quieres es un mecanismo de autenticación adecuado. No debe intentar tirar su propio , ya que se considera una mala práctica. Un mecanismo de autenticación seguro y confiable es la autenticación de acceso de resumen HTTP, que está profundamente anclada en el marco HTTP. Es un protocolo de respuesta de desafío, lo que significa que algo así sucede cuando un usuario intenta navegar al mecanismo de "subir archivos":

  1. El usuario navega a enlace
  2. El servidor advierte que el directorio / protected / o el archivo upload.html están protegidos por Autenticación Digestiva y responden con un código de error 401 Autorización requerida . Es un desafío para el agente de usuario (el navegador web) para responder. La respuesta se calcula utilizando el desafío, las credenciales del usuario (nombre de usuario y contraseña) junto con otra información.
  3. El usuario ingresa la contraseña, lo que lleva al agente de usuario que proporciona al servidor un encabezado Autorización , que contiene la respuesta al desafío

  4. El servidor, utilizando las credenciales que ha almacenado en el usuario, calcula el mismo valor de respuesta utilizando los mismos datos que envió al usuario.

  5. El servidor compara el valor de respuesta recibido y el generado localmente, y si son iguales, conceda acceso al realm

  6. protegido.

Todo esto se hace usando el hash MD5 como estándar. La aplicación y los servidores pueden configurarse para usar MD5, SHA-X o cualquier algoritmo de hash, incluso hash iterado, siempre que se siga el mismo procedimiento en cada lado de la comunicación.

MD5 se considera roto , en el sentido de que es bastante fácil encontrar colisiones . Esto no es un problema para este proceso de autenticación, ya que requiere una forma de ataque de preimagen para recolectar la contraseña con éxito. Esto solo es posible en teoría con una complejidad computacional de 2 123.4 .

Si se siente intimidado por esto, o si el esquema no se ajusta a lo que realmente necesita, al menos almacene su contraseña de forma salted y hash, es decir, la base de datos contiene:

nombre de usuario | hash_function (contraseña + ":" + sal) | sal

Aquí, SHA-256 debería estar bien.

Por favor, solicite más detalles sobre HTTP Digest Auth. si está interesado. Además, considere agregar su tipo de aplicación de servidor (Apache?) A la pregunta.

    
respondido por el Henning Klevjer 19.10.2012 - 17:27
fuente

Lea otras preguntas en las etiquetas