Sistema personalizado de autenticación de usuarios de estilo EC2: ¿qué tan seguro es?

4

En el trabajo, estoy tratando de diseñar un sistema de autenticación de usuario sin sesión (incluidos los tokens basados en sesión, como los que se utilizan en OAuth2) debido a los requisitos del software del cliente. Los servicios son REST y estamos intentando diseñar un sistema de autenticación que pueda usar encabezados HTTP para comunicar los datos de autenticación al servidor.

He utilizado la autorización de firma de solicitudes de Amazon EC2 [1] anteriormente y la encontré bien adaptada a nuestros requisitos, excepto en nuestro caso, trataremos con usuarios individuales (que tendrán una contraseña) en lugar de scripts programados / automáticos Sistemas utilizados para conectar a EC2. El sistema que he creado funciona exactamente igual que EC2, con una diferencia: en lugar de que el cliente del usuario almacene una clave de API privada (la clave de acceso de AWS descrita en los documentos de EC2), almacenarán una contraseña (por ejecución de software) que luego se procesará como está en el servidor y se usará para firmar la solicitud.

Para resumir cómo funcionarán las solicitudes:

  1. El usuario ingresa la contraseña en el software cliente
  2. Contraseña de hashes (whirlpool) unidireccional del software
  3. El software crea un resumen (HMAC) de la solicitud con la contraseña de hash
  4. El software hace que el servicio web sea una llamada al servidor, firmándolo con el resumen
  5. Repita el paso 4 hasta que salga el software

En el servidor:

  1. El servidor recibe la solicitud, recupera la contraseña con hash de la tabla de usuarios
  2. El servidor crea el resumen de la solicitud con una contraseña con hash y verifica que coincida
  3. Si se verifica, el usuario se autentica y se realiza la solicitud

También consideraremos las solicitudes de restricción de por vida para evitar ataques repetidos contra el servidor y preservar la identidad del servicio, y usar HTTPS siempre que sea posible para proporcionar una capa de seguridad adicional (sin embargo, esto no siempre es posible debido a las restricciones de software).

¿Este sistema es seguro?

[1] enlace

    
pregunta Dave Clayton 10.07.2012 - 10:13
fuente

1 respuesta

3

En primer lugar, no debe usar el hidromasaje, en su lugar, debe utilizar Función de hash aprobada por NIST como SHA-256 u otro miembro de la familia SHA-2. SHA-1, MD4 y MD5 serían malas elecciones.

La contraseña y el hash de contraseña nunca deben enviarse por cable en texto sin formato.

Su implementación de protocolo actual es vulnerable a un Replay Attack . Aunque un adversario que olfatee el cable no puede modificar la solicitud a menos que conozca el hash de la contraseña o la contraseña, aún puede reproducir cualquier conjunto de solicitudes. Hay una serie de contramedidas. Una es enviar una marca de tiempo con cada solicitud de HMAC. Realmente no necesita saber la hora exacta del cliente, solo debe hacer cumplir que una marca de tiempo nunca se repite o es inferior a la solicitud anterior.

    
respondido por el Mikey 11.07.2012 - 01:56
fuente

Lea otras preguntas en las etiquetas