Cómo evitar que el usuario adivine la clave (contraseña), si tiene acceso a todos los datos (excepto la clave)

4

Imagine que todos mis usuarios tienen acceso a toda la base de datos del producto. Necesito proteger un campo en la base de datos para cada fila. Debo guardar el valor para su uso posterior (no puede ser un hash de una sola vía). Piense, por ejemplo, que puede ser un SSN

El usuario sabe cómo se ve el campo antes (el usuario conoce su SSN) y el atacante sabe cómo se ve el campo después del cifrado. No quiero que el usuario pueda encontrar la clave y descifrar todos los SSN.

Lo único que estoy seguro es que mi atacante no encontrará el código fuente. Así que puedo codificar la clave.

En otras palabras:

  • Necesito acceso al valor original.
  • Solo yo tengo la llave.
  • El atacante tiene acceso a todos los datos encriptados
  • El atacante sabe, para un registro, cuáles fueron los datos originales (antes del cifrado).

¿Qué algoritmo me recomienda usar?

    
pregunta Aminadav Glickshtein 16.11.2016 - 16:47
fuente

3 respuestas

4

AES-128 (o superior) es el algoritmo de cifrado simétrico recomendado para usar. Siempre que la clave se genere utilizando un Generador de números aleatorios criptográficamente seguros (pseudo), entonces no será práctico para el atacante a fuerza bruta.

Si la detección de duplicados se puede usar como un vector de ataque, (consulte potencial exploit descrito por @JohnDeters ); Asegúrese de incluir un vector de inicialización. De lo contrario, el mismo SSN siempre se cifraría con el mismo resultado y el atacante podría detectar (y verificar aleatoriamente) los duplicados de esa manera.

No codifique la clave en el código fuente principal, sino que colóquela en un archivo separado, de modo que el código fuente pueda copiarse en un entorno de prueba si es necesario, y una clave separada (no secreta) ser utilizado para tales entornos.

    
respondido por el George Bailey 16.11.2016 - 16:56
fuente
6

Ten mucho cuidado. No ignore el hecho de que un atacante puede forzar los SSN desde su base de datos sin saber la clave de cifrado.

Si su atacante puede usar su sistema para cifrar un SSN (quizás inscribiendo a un usuario, cambiando el valor de SSN y observando el campo SSN cifrado cambiado en la base de datos) puede aprender los SSN cifrados simplemente por prueba y error. Imagínalo configurando el SSN a 000-00-0000. Su sistema lo cifra y él compara el valor cifrado con todos los demás números de Seguro Social cifrados en su base de datos. Si su valor de prueba coincide con uno de los otros valores, ha aprendido el SSN de esa persona. Luego cambia su SSN a 000-00-0001, e intenta nuevamente.

Dados 999,999,999 intentos, podrá crear una "tabla de arco iris" que contiene todos los SSN posibles. Pero ciertamente no necesita hacer tanto trabajo para obtener un beneficio.

La mayoría de los atacantes son oportunistas. No necesitan cada SSN en su base de datos para cometer fraude de identidad, solo necesitan adivinar un SSN para comenzar a robar. (Cuantos más números de Seguro Social roben, más ricos podrán obtener, así que por supuesto que quieren tantos como puedan). Por lo tanto, tal vez solo tengan tiempo para ejecutar su ataque por un tiempo, y todavía estarán satisfechos con adivinar algunos. .

Cuantas más personas haya en la base de datos, más probabilidades habrá de que el atacante tenga éxito más rápido.

Además, es mucho más fácil que adivinar al azar. Muchas personas no saben que hasta hace unos años, los SSN fueron emitidos por región geográfica .

Considere un atacante de Utah que quiera cometer un fraude de identidad utilizando una dirección de Utah. Su ataque adivinará solo números en el rango de 528-00-0000 a 529-99-9999. Eso solo requiere 2 millones de conjeturas, no 1 mil millones, y es probable que tenga una alta tasa de éxito en sus clientes que tienen a Utah como Estado en su dirección.

El espacio de búsqueda para SSN es tan pequeño que un atacante con recursos modestos puede buscarlo fácilmente. Debe tomar medidas adicionales para proteger los datos y los sistemas de este tipo de ataque.

    
respondido por el John Deters 16.11.2016 - 22:50
fuente
3

Te has equivocado al respecto y no debes intentar construir este sistema sin obtener la ayuda de un experto.

Primero, parece que no entiendes la diferencia entre una clave criptográfica y una contraseña. Una clave criptográfica (por ejemplo, para AES) son datos binarios seleccionados al azar utilizando un generador de números aleatorios seguro. Una contraseña es una cadena de texto memorable elegida por el ser humano. Si usa una contraseña en lugar de una clave, es probable que se haya disparado a sí mismo en el pie; las contraseñas son muy fáciles de atacar con fuerza bruta.

En segundo lugar, la idea de codificar la clave en el código fuente es terrible. Su confianza en que puede mantener este código fuente de las manos del atacante es temeraria.

Tercero: cifrar un SSN no necesariamente impide que un atacante descubra qué es. La investigación muestra que utilizando datos disponibles públicamente y algunos modelos estadísticos, un atacante puede adivinar los SSN de una persona con gran éxito si tiene su fecha de nacimiento y estado de nacimiento . He visto bases de datos donde los números de seguro social cifrados aparecen lado a lado con la fecha de nacimiento y el estado de residencia (la mayoría de las personas viven en el estado en que nacieron). O peor, también con los últimos cuatro dígitos del SSN, ¡la parte del SSN que es más difícil de adivinar!

Cuarto: Respaldo la respuesta de John Deters de que te estás enfocando en lo que puede hacer un atacante pasivo, y no estás pensando en un atacante activo , uno que puede enviar SSN de texto simple para que los cifres y Observar los resultados encriptados. A su escenario de verificación agregaría la posibilidad de falsificación . Dependiendo de la precisión con la que haga un mal uso de la criptografía, un atacante que conozca un par de texto cifrado / texto sin formato puede usarlo para falsificar un texto cifrado que se descifra a un texto simple de su elección.

Aparte de eso, dado un buen cifrado, un atacante en las condiciones que usted describe no debería poder encontrar ninguna información sobre los otros puntos de luz dados solo un par de texto cifrado / texto sin formato. Así que aquí no es donde están tus problemas.

    
respondido por el Luis Casillas 17.11.2016 - 20:46
fuente

Lea otras preguntas en las etiquetas