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.
- He reemplazado PBKDF2 con scrypt aquí, pero el concepto es el mismo.
- Las sales son 16 bytes aleatorios generados con urandom
ACTUALIZACIÓNDescubríquelabibliotecaPyCryptodomex(Python)ofreceunafunciónscrypt
enlaquepuedoespecificarcuántoshashes/clavesquierodeunasolatecladeentrada.Porejemplo,siquiero2hashesdesalidade256bits,puedoespecificarquescrypt
crearáunaclave2*256bit=512bit
ysimplementeladividirápor2,loquedarácomoresultado2hashesde256bits.Luegopuedousarunhashparacifrarlosdatosyotroparalaautenticación,eliminandoasílanecesidaddelsegundoniveldehashingscryt
ySHA256
enmiconceptoanterior.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á.