Almacenar de forma segura la base de datos de búsqueda (correo electrónico)

4

Buscando sugerencias sobre la implementación de una tabla de búsqueda del lado del servidor, donde la clave es una dirección de correo electrónico.

Objetivo : mantenga la privacidad de estas direcciones de correo electrónico, incluso si los datos del servidor son robados.

Suposiciones : el servidor no necesita (e idealmente no debería saber) la dirección de correo electrónico. Los clientes no pueden hablar directamente entre sí, pero será una aplicación web / nativa para que puedan realizar algunos cálculos antes de hacer consultas.

¿Se puede lograr esto? Nota: Solo almacenar un hash del correo electrónico en el servidor dejaría las claves vulnerables a un ataque de diccionario. El servidor tampoco puede simplemente agregar un salt para cada hash, porque no sabría qué sal usar cuando se le presenta una dirección de correo electrónico específica. Podría cifrar los correos electrónicos con hash con una clave global almacenada por separado, pero espero que haya mejores soluciones que esta.

    
pregunta kbs 08.06.2012 - 19:47
fuente

2 respuestas

3

Hay dos enfoques criptográficos diferentes para este problema, una función hash y una criptografía asimétrica.

El cliente podría modificar la dirección de correo electrónico mediante una función de cifrado criptográfica como SHA-256 y enviarla al servidor para su búsqueda. Todavía existe el problema de la fuerza bruta. Las direcciones de correo electrónico tienen sus pros y sus contras. El nombre de dominio es como una sal en que no hay dos usuarios que tengan el mismo hash resultante. El problema es que no es una sal muy fuerte, gmail es bastante popular. Para empeorar las cosas, una lista grande de direcciones de correo electrónico sería un ataque de diccionario útil. La dirección de correo electrónico como clave puede no ser la mejor opción, pero no está mal.

Un diseño alternativo es utilizar criptografía asimétrica. Genere un par de claves privadas públicas, luego deseche la clave privada. Proporcione la misma clave pública a cada cliente que se usa para cifrar la dirección de correo electrónico y este texto cifrado se transmite al servidor como la clave de búsqueda. Tenga en cuenta que todavía existe el mismo problema que la fuerza bruta, pero la criptografía asimétrica es mucho más pesada que sha-256. Si esto te preocupa, puedes explorar estiramiento de la tecla .

    
respondido por el rook 08.06.2012 - 20:23
fuente
0

Si no tiene secretos del lado del servidor, lo mejor que puede hacer es codificar el correo electrónico con un algoritmo de hash lento (uno que está sintonizado para tomar una cantidad de tiempo determinada). Por ejemplo, puede itearlo repetidamente N veces, con N elegido para garantizar que el hashing demore aproximadamente 0,1 segundos. Esto todavía es susceptible a un ataque de diccionario, pero es menos susceptible que usar un hash rápido.

Si puede almacenar una clave secreta en el servidor de forma segura, puede cifrar la dirección de correo electrónico debajo de la clave o hacer un hash en la combinación de la dirección de correo electrónico y la clave.

    
respondido por el D.W. 08.06.2012 - 20:44
fuente

Lea otras preguntas en las etiquetas