¿Cómo se puede mejorar este algoritmo de cifrado?

-2

Actualmente estoy desarrollando una aplicación para almacenar mis contraseñas de forma segura. Al principio será una prueba de concepto, pero estoy planeando actualizarlo más adelante. De todos modos, aquí está cómo se accede a las contraseñas:

  1. Introduzca un nombre de usuario y contraseña. Hash ambas entradas al enviar, y comparar con los hashes almacenados en el código. Si los hashes coinciden, continúe con el siguiente paso.
  2. Use el nombre de usuario y la contraseña reales ingresados como claves / punteros a los datos en un archivo de texto con una gran cantidad de caracteres aparentemente aleatorios. Este archivo se generará manualmente y se almacenará con el programa.

Ejemplo: username se puede convertir en un número que corresponde al carácter con el que comenzar en el archivo. El password se convertirá en un número que representa la cantidad de caracteres entre cada carácter útil en el archivo, es decir, lea el archivo, comenzando en username , pero solo mantenga cada carácter de password -th.

No estoy seguro de cómo hacer que este enfoque sea más seguro y agradezco cualquier sugerencia.

    
pregunta GamrCorps 10.05.2016 - 06:38
fuente

1 respuesta

8

La primera regla de crypto es no enrolle su propio criptográfico . Está tratando de encontrar una nueva solución para un problema antiguo donde ya existían las mejores prácticas establecidas. Es una mala idea, ya que incluso si eres un profesional de la seguridad como humano, es probable que cometas errores y tu solución no probada pasará por una revisión mucho menor que la que ya tiene la solución establecida.

Entonces, ¿cuál es la forma correcta de hacer esto? Ya hay varios programas de administrador de contraseñas que hacen esto. Generan una clave de cifrado a partir de la contraseña maestra con una función de derivación de claves (como PBKDF2, bcrypt o scrypt), y luego cifre las contraseñas con esta clave (por ejemplo, con AES).

Ahora, ¿cuál es el problema específico con tu esquema? Es fácil forzar la fuerza bruta. Asumo que un atacante sabrá el nombre de usuario, por lo que usarlo no agrega seguridad. Lo que queda es la contraseña que se utiliza como un desplazamiento en el archivo. La entropía de la contraseña no será más larga que la longitud del archivo (llamémosla N ), ya que jumpig dice que 2N + 5 caracteres serán lo mismo que solo saltando 5 caracteres (supongo que se ajusta cuando llegas al final del archivo). Si desea que un atacante tenga que probar mil millones de contraseñas, necesita un archivo de 1 GB.

Un KDF está diseñado para ser lento a fuerza bruta, pero aceptablemente rápido si solo lo ejecutas una vez. La única forma de hacer que su esquema sea más lento es hacer que el archivo sea más grande y más grande. Esto no es práctico, ya que agregará la misma cantidad de gastos generales sin importar si solo intenta una contraseña o si intenta millones.

Este esquema no es de ninguna manera más seguro que el enfoque probado y comprobado. Usa eso en su lugar.

    
respondido por el Anders 10.05.2016 - 08:16
fuente

Lea otras preguntas en las etiquetas