Cómo cifrar datos e iniciar sesión con la misma contraseña - revisado

1

Leí publicaciones anteriores sobre el tema de cómo cifrar datos e iniciar sesión con la misma contraseña / clave, sin embargo, el concepto aún no me parece claro, especialmente qué datos es seguro almacenar en la base de datos.

Este gran Post aconsejó las siguientes 2 posibilidades:

  

1: podría derivar la clave de cifrado de la contraseña con PBKDF2, y luego usar un hash criptográfico normal (por ejemplo, SHA-256) de la clave como el hash de contraseña para iniciar sesión.

     

2: O, si quieres ser más cuidadoso, deriva tanto la clave de cifrado como el hash de contraseña de una clave intermedia derivada de la contraseña usando PBKDF2.

Creé un diagrama de mi entendimiento para la segunda posibilidad. ¿Crees que lo he conseguido correctamente? ¿Podrías pensar en una mejor manera de implementarlo?

N.b.

  1. He reemplazado PBKDF2 con scrypt aquí, pero el concepto es el mismo.
  2. Las sales son 16 bytes aleatorios generados con urandom

ACTUALIZACIÓNDescubríquelabibliotecaPyCryptodomex(Python)ofreceunafunciónscryptenlaquepuedoespecificarcuántoshashes/clavesquierodeunasolatecladeentrada.Porejemplo,siquiero2hashesdesalidade256bits,puedoespecificarquescryptcrearáunaclave2*256bit=512bitysimplementeladividirápor2,loquedarácomoresultado2hashesde256bits.Luegopuedousarunhashparacifrarlosdatosyotroparalaautenticación,eliminandoasílanecesidaddelsegundoniveldehashingscrytySHA256enmiconceptoanterior.Creéunadescripciónvisualdelnuevoconceptoyagradeceríasuopiniónalrespecto:)

Resumen Dependiendo de la biblioteca y KDF que utilice, supongo que el concepto 1 o el concepto 2 (que es esencialmente el mismo, pero más compacto) funcionará.

    
pregunta Peter 13.08.2017 - 14:03
fuente

1 respuesta

2

Si por "PW - Hash + Salt", te refieres a la clave derivada, tu comprensión es correcta.

He visto algunas variaciones

  • Use diferentes sales cada vez que use una (es decir, sal 1 y sal 2 en su caso). Hay algo de beneficio teórico con esto, pero no lo considero lo suficientemente grande.
  • Use el PW como entrada en la segunda ronda (de hashing / key derivation) también. Una vez más, no estoy seguro de que sea un beneficio suficientemente grande, pero el costo es insignificante.
  • Uso de un gran número de rondas con la función de derivación de claves (probablemente lo haya implicado). Esto es importante ya que toda la idea es aumentar el factor de trabajo involucrado.
  • OWASP recomienda la sal de 32 o 64 bytes aquí: enlace . Los beneficios de IMHO en este momento son teóricos, ya que la iteración de hasta 16 bytes no es un trabajo trivial para un atacante.

En general, no me gusta la lógica que dice "hagámoslo por si acaso" (es decir, dejamos que nuestro miedo decida sin evaluar los riesgos frente a los beneficios). Así que soy escéptico acerca de la idea de la clave intermedia . YMMV. :)

    
respondido por el Sas3 14.08.2017 - 04:30
fuente

Lea otras preguntas en las etiquetas