seguridad recuperar quitar encriptado copia contraseña encryption cryptography

encryption - recuperar - Si el atacante tiene datos originales y datos encriptados, ¿pueden determinar la frase de contraseña?



quitar contraseña copia de seguridad iphone (5)

Aunque es posible que, con algunas investigaciones, elija un método criptográfico lo suficientemente fuerte como para resistir el conocido ataque de texto plano, ¿realmente vale la pena solo para evitar almacenar un hash en su base de datos?

El uso de una sola frase de contraseña para encriptar todas las solicitudes de registro parece que está agregando una vulnerabilidad de punto único innecesaria: si un atacante descifra esa frase de paso de alguna manera, puede registrar tantas cuentas como desee. Si, por otro lado, genera para cada nueva cuenta solicitar un hash único (de dirección de correo electrónico + número aleatorio, por ejemplo) para autenticar la URL de confirmación, incluso un pirata informático que intercepta el correo electrónico de confirmación de la cuenta A no está más cerca para obtener acceso a B, C o D.

Probablemente desee almacenar alguna información de estado sobre el proceso de confirmación en una base de datos de todos modos: probablemente haya un límite de tiempo sobre cuánto tiempo es válida la URL de confirmación.

Si un atacante tiene varios elementos distintos (por ejemplo, direcciones de correo electrónico) y conoce el valor encriptado de cada elemento, ¿puede el atacante determinar más fácilmente la contraseña secreta utilizada para encriptar esos elementos? Es decir, ¿pueden determinar la frase de contraseña sin recurrir a la fuerza bruta?

Esta pregunta puede sonar extraña, así que déjame proporcionar un caso de uso:

  1. El usuario se registra en un sitio con su dirección de correo electrónico
  2. El servidor envía a esa dirección de correo electrónico una URL de confirmación (por ejemplo: https://my.app.com/confirmEmailAddress/bill%40yahoo.com )
  3. El atacante puede adivinar la URL de confirmación y, por lo tanto, puede registrarse con la dirección de correo electrónico de otra persona y ''confirmarla'' sin tener que iniciar sesión en la cuenta de correo electrónico de esa persona y ver la URL de confirmación. Esto es un problema.
  4. En lugar de enviar el texto sin formato de la dirección de correo electrónico en la URL, lo enviaremos encriptado por una contraseña secreta.
  5. (Sé que el atacante aún podría interceptar el correo electrónico enviado por el servidor, ya que el correo electrónico es texto plano, pero tengan paciencia conmigo aquí).
  6. Si un atacante se registra con varias cuentas de correo electrónico gratuitas y ve varias URL, cada una con su correspondiente dirección de correo electrónico cifrada, ¿podría el atacante determinar con más facilidad la frase de contraseña utilizada para el cifrado?

Solución alternativa

En su lugar, podría enviar un número aleatorio o hash unidireccional de su dirección de correo electrónico (más sal aleatoria). Esto elimina el almacenamiento de la contraseña secreta, pero significa que necesito almacenar ese número aleatorio / hash en la base de datos. El enfoque original anterior no requiere almacenamiento en la base de datos.

Me inclino por el "hash-stored-in-the-db" unidireccional, pero aún me gustaría saber la respuesta: ¿el hecho de tener varias direcciones de correo electrónico sin encriptar y sus contrapartes cifradas facilita la determinación de la frase de paso? ¿usado?


Lo que estás describiendo es un conocido ataque de texto plano . Las cifras clásicas eran muy vulnerables a este tipo de ataque, pero las cifras modernas están diseñadas para resistirlo.

Querrá leer un poco en crypto.


Sí, lo hace más fácil. En general, mientras más información tenga el atacante, más fácil será su trabajo. Este ejemplo específico se llama ataque conocido de texto plano .


Hay un escenario donde la respuesta es ¡SÍ! Y eso es si usa un cifrado de flujo, como RC4.

RC4 es esencialmente un generador de números aleatorios que simplemente XOR interpreta el texto plano con una ''secuencia clave'' derivada de su clave:

P0 ^ K0 = C0
P1 ^ K1 = C1
P2 ^ K2 = C2
.
.
PN ^ KN = CN

Si tiene el texto plano y el texto cifrado, puede hacer esto:

C0 ^ P0 = K0
C1 ^ P1 = K1
C2 ^ P2 = K2

y así. Como puede ver, recupera la clave de la transmisión. No es la clave, sino la secuencia generada por la clave.


Lo que necesita no es cifrado, es autenticación. En el enlace que envía a los clientes, incluye no solo su dirección de correo electrónico, sino también una marca de tiempo y lo que se denomina MAC, que es un campo de autenticación basado en claves simétricas. El MAC debería autenticar tanto la dirección de correo electrónico como la marca de tiempo. El HMAC-SHA1 de 64 bits debería hacerlo. Cuando reciba el enlace, verifique que la marca de tiempo no sea demasiado antigua y el MAC verifique; entonces sabes que generó el enlace.

Los MAC están diseñados para resistir ataques donde los atacantes pueden elegir mensajes y solicitar los MAC correspondientes, por lo que no tiene que preocuparse por el equivalente MAC de un "ataque conocido de texto claro".