Almacenando la contraseña junto con el archivo cifrado

12

Estaba creando una pequeña aplicación para cifrar archivos y tuve el problema de verificar que la clave proporcionada es la correcta al descifrar. Mi idea fue almacenar la clave (rellenada, encriptada) junto con el archivo encriptado, de modo que cuando quiera descifrar, el programa primero compruebe si el primer par de bytes (sin rellenar) es igual a la clave proporcionada. No soy un experto en seguridad y no puedo ver un problema con el enfoque, pero todavía tengo la sensación de que esta sería una mala práctica de alguna manera.

¿Este enfoque es correcto desde una perspectiva de seguridad? ¿Existe quizás otra solución al problema inicial?

    
pregunta Oliver.m 29.12.2016 - 17:01
fuente

3 respuestas

17

Si bien no hay una vulnerabilidad obvia aquí, una mejor opción es simplemente almacenar una cadena estática, en lugar de la clave en sí. Si un atacante encuentra un ataque de canal lateral que les permite descubrir un bloque de texto sin formato, su enfoque filtrará la frase de acceso y romperá todo el sistema, mientras que la opción de texto fijo no lo hará.

    
respondido por el Polynomial 29.12.2016 - 17:06
fuente
10

Podrías hacer esto:

  1. Genere clave criptográfica segura aleatoria de 128 bytes

  2. Generar hash de clave aleatoria

  3. Cifre el archivo con la clave generada aleatoriamente

  4. Cifre la clave aleatoria con la clave proporcionada por el usuario

  5. Coloque los siguientes valores en el archivo:

    clave aleatoria cifrada: hash de clave aleatoria: datos de archivo cifrados

Cuando desee descifrar los datos, utiliza los datos proporcionados por el usuario para descifrar la clave aleatoria cifrada, luego la codifica y la compara con el hash almacenado. Si son iguales, utiliza la clave aleatoria ahora descifrada para descifrar los datos.

    
respondido por el ThoriumBR 29.12.2016 - 17:28
fuente
3

La inclusión de una cadena estática suena como si pudiera ser vulnerable a un ataque de texto simple conocido. En lugar de eso, me gustaría lo siguiente (¡pero me encantaría saber si es una mala idea!);

  1. Hash su texto en claro y anteponle el hash
  2. Encripta todo con tu técnica de encriptación

Cuando lo descifres, comprueba si el hash al principio coincide con el hash que esperas. Esto le permite detectar si obtuvo la clave de descifrado correcta y, como ventaja adicional, obtiene una verificación de integridad gratuita. Si desea acelerar esto, diga que le gustaría cifrar grandes cantidades de datos donde no es posible ejecutar una función de hash en toda la carga útil, reduzca la porción de hash a unos pocos megabytes o bloques si se trata de un cifrado de bloques. .

Si agregarías un hash no cifrado de la clave al archivo, los atacantes pueden probar las claves sin tener que descifrar todo el archivo. Esto aceleraría mucho los ataques.

    
respondido por el Max Ried 29.12.2016 - 20:21
fuente

Lea otras preguntas en las etiquetas