Contraseña maestra hash y clave de cifrado generada en un programa administrador de contraseñas

1

Estoy escribiendo una aplicación de administrador de contraseñas de WPF para practicar la programación, hasta ahora este es el esquema que pretendo usar para almacenar la contraseña maestra y la contraseña individual del sitio:

Contraseña maestra:

  • Genera una sal aleatoria.
  • Hash la contraseña maestra + salt con SHA256
  • Almacena el hash y la sal en DB como texto.

Para cada contraseña individual del sitio:

  • Genera una sal aleatoria.
  • Contraseña maestra de hash + sal con SHA256
  • Use el hash como clave de cifrado AES256 para cifrar la contraseña del sitio.
  • Almacene la contraseña del sitio encriptado como blob binario y la sal como texto en la base de datos.

Obviamente, para que esto funcione, el usuario tendrá que volver a escribir la contraseña maestra cada vez que quiera descifrar la contraseña del sitio, o tendré que almacenar la contraseña maestra en la memoria.

Ahora a mi pregunta:

  • ¿Debo usar la misma función de hash mientras hasheado la contraseña maestra y al crear la clave de cifrado, o deberían usarse 2 funciones de hash diferentes?
  • ¿Tiene sentido la forma en que manejo la contraseña del sitio individual?
pregunta gzup 04.06.2015 - 12:49
fuente

2 respuestas

1

Si desea crear una clave de cifrado o almacenar una contraseña con hash, desea utilizar una función de derivación de claves , no es una función de hashing simple como SHA-256. Un KDF es como un hash que se aplica muchas veces, pero típicamente está diseñado para ser computacionalmente costoso para hacer que las búsquedas de fuerza bruta sean más difíciles. Si bien es posible que pueda usar SHA-256 como KDF llamándolo varias veces, esta no es la forma estándar de hacer las cosas y puede ser mucho menos segura de lo que parece, ya que necesita una gran cantidad de iteraciones para proporcionar mitigación contra los ataques de fuerza bruta.

Los KDF más populares (leídos: cuidadosamente estudiados y probablemente seguros) en uso actual son PBKDF2 ("basado en contraseña función de derivación clave 2 ") y bcrypt . Cualquiera de los dos es adecuado para hash y almacenar contraseñas, así como para crear claves de cifrado. También hay algunos algoritmos más nuevos, como scrypt que pueden ser más seguros en algunas definiciones, pero tengo entendido que son Más nuevo y menos estudiado. La "seguridad" no es, por supuesto, una variable cuantificable numéricamente, por lo que no es del todo significativo decir que "el algoritmo X es la opción más segura".

Generalmente, un KDF tomará un parámetro llamado factor de trabajo o número de rondas . Esto describe cuánto esfuerzo computacional se requiere para calcular un hash o derivar una clave. A medida que las computadoras se vuelven más rápidas, este parámetro debe aumentarse para garantizar que sus contraseñas de hash sean lo suficientemente resistentes a los ataques de fuerza bruta.     

respondido por el Kevin 04.02.2016 - 04:42
fuente
0

Descargo de responsabilidad : no soy un experto, solo he estado investigando este tema por la misma razón. También me doy cuenta de que esto es de hace un tiempo.

Un problema que puede surgir de esto es que en realidad puede hacer que la fuerza bruta al forzar su clave de cifrado sea más fácil. Como los algoritmos de hash no son 1: 1, puede haber varias "Contraseñas maestras" válidas que producen el mismo hash que se usa para cifrar las contraseñas específicas del sitio.

Como mencionó gzup, echaría un vistazo a cómo lo hacen los administradores de contraseñas actuales y trataré de basarme en su propia criptografía lo menos posible. Además, consulte BCrypt para obtener un algoritmo de hash más lento para codificar su contraseña maestra (Esto hace que la fuerza bruta sea un poco más tediosa).

    
respondido por el Daniel Arellano 05.01.2016 - 01:20
fuente

Lea otras preguntas en las etiquetas