Antecedentes:Generación de autenticación segura mediante cifrado tokens
Esto es realmente una cuestión general de mejores prácticas, pero algunos antecedentes sobre la situación específica podría ser útil:
Estamos desarrollando una aplicación de "conectado" para el iphone. Se comunicará con la aplicación de back-end a través de servicios REST. Para no tener que solicitar al usuario un nombre de usuario y contraseña cada vez que inician la aplicación, expondremos un servicio de "Inicio de sesión" que valida su nombre de usuario y contraseña en el inicio inicial y devuelve un token de autenticación que se puede usar para futuras aplicaciones web solicitudes de servicio para datos reales. El token puede tener un tiempo de vencimiento después del cual les pediremos que vuelvan a autenticarse con su nombre de usuario/contraseña.
La Pregunta:
¿Cuáles son las mejores prácticas para la generación de este tipo de contadores a usarse para la autenticación?
Por ejemplo, podríamos ...
- hash (SHA-256, etc) una cadena aleatoria y almacenarla en la base de datos para el usuario dado junto con una fecha de caducidad. Realice una búsqueda simple del token en solicitudes posteriores para asegurarse de que coincida.
- Cifre la identificación del usuario y cierta información adicional (marca de tiempo, etc.) con una clave secreta. Descifra el token en solicitudes posteriores para asegurarte de que fue emitido por nosotros.
Parece que debe ser un problema resuelto.
¿Cómo está encontrando este enfoque? Puedo estar equivocado, sin embargo, creo que hay un pequeño error con eso. Lo único que se requiere para que la solicitud del cliente sea autorizada es que el ticket se puede descifrar en el servidor. Si el ticket se intercepta durante el tránsito (por ejemplo, inhalación de paquetes) o incluso se extrae del dispositivo móvil, un atacante podría volver a utilizarlo para enviar solicitudes maliciosas. Si está utilizando SSL, el primer ataque se mitigará; sin embargo, el segundo es aún viable. – James
Todavía estamos muy contentos con este enfoque. Usamos SSL, por lo que el problema del rastreo no es una preocupación. El ticket que se extrae de un dispositivo móvil requiere que el dispositivo móvil se vea comprometido y/o físicamente en manos de un atacante. En ese punto, el atacante ya ha "ganado" y se acabó el juego. Sin importar los detalles técnicos, este siempre será el caso si hay una funcionalidad de "recordar mi contraseña". En nuestro caso, esto se ve un tanto mitigado por el hecho de que un ticket solo es válido durante 8 horas, por lo que el atacante tiene un margen de tiempo limitado para hacer uso del ticket robado. –
La razón por la que pregunto es porque realmente pensé que era una forma inteligente de generar un token sin tener que escribir ningún código de seguridad. Sin embargo, pedí una [pregunta] (http://security.stackexchange.com/questions/19676/token-based-authentication-securing-the-token) en el sitio de seguridad de TI para obtener algunos consejos con respecto a * cómo * seguro en realidad fue y la opinión difiere. Tenía que ver más con el hecho de que usa el cifrado para proteger el token en lugar de un [MAC] (http://en.wikipedia.org/wiki/Message_authentication_code). – James