2012-09-18 41 views
10

¿Qué medidas de seguridad debo implementar para garantizar que, si mi base de datos se viera comprometida, no se puedan robar tokens de acceso de larga duración?Almacenamiento seguro de un token de acceso

Un token de acceso de larga duración es tan bueno como un nombre de usuario y contraseña para un servicio en particular, pero al hablar con otros parece que la mayoría (incluido yo mismo) tokens de acceso a la tienda en texto plano. Esto parece ser tan malo como almacenar una contraseña en texto plano. Obviamente no se puede sal & hash el token.

Idealmente me gustaría encriptarlos, pero no estoy seguro de la mejor manera de hacerlo, especialmente en un proyecto de código abierto.

Imagino que la respuesta a esta pregunta es similar a la de almacenar información de pago y cumplimiento de PCI, pero también me pregunto por qué no hay más discusión sobre esto. Quizás me estoy perdiendo algo.

+0

¿Qué quiere decir "especialmente en un proyecto de código abierto"? ¿Qué estás pensando que hace que tu decisión de elegir un tipo específico de esquema de cifrado sea diferente porque tu proyecto no es de código cerrado? –

Respuesta

7

¿Simplemente quiere verificar un token proporcionado por otros? Si es así, trátalo como lo harías con una contraseña. Utilice un algoritmo de derivación de bytes como Password Based Key Derivation Function 2 (PBKDF2) (también descrito en RFC 2898) con 10.000 iteraciones y almacene los primeros 20 bytes más o menos. Cuando se recibe el token No es prácticamente reversible.

¿Desea presentar el token a otros para la autenticación? Si es así, esto es un desafío porque, si su aplicación puede descifrar o acceder al token, también lo puede hacer un atacante. Piensa en Maxim de Shannon, el atacante conoce el sistema, especialmente para un proyecto de código abierto.

En este caso, el mejor enfoque es encriptar los tokens con un algoritmo fuerte (ej. AES256), generar claves usando un fuerte generador de números aleatorios criptográficos estándar y almacenar las claves de forma segura en una ubicación diferente a los datos , como en un archivo protegido con permiso fuera de la base de datos en el ejemplo anterior. Esto último significa que los ataques de inyección SQL no revelarán las claves.

+0

Gracias. Me refiero más a este último caso de uso, donde necesito poder utilizar el token en un momento posterior cuando el usuario no esté presente. –

+0

@akton, pero ¿por qué tratar el token como una contraseña? Las contraseñas (de texto sin formato) son información que no queremos que un atacante obtenga por error, puede probar y usarla para iniciar sesión en un servicio diferente con el mismo contenido. pero un token solo es válido para su propio servicio, por lo que si el atacante tiene en sus manos el token/db puede hacer más daño que usar el token para iniciar sesión en su cuenta ... ¿qué es lo que no veo? ? – pkyeck

+0

Suponiendo que la pregunta es correcta, el token es una prueba de larga duración y por usuario que puede autenticar a un usuario. En otras palabras, es una contraseña. – akton

Cuestiones relacionadas