Deseo crear un sistema en el que almacene datos encriptados .
Los usuarios pueden acceder a estos datos si tienen la clave. Si dan una clave incorrecta, no tienen acceso en absoluto. Si dan la clave correcta, obtienen los datos y pueden modificarlos.
Una idea que se me ocurrió es almacenar el bcrypt
de la clave, una sal y el AES
de datos encriptados usando un PBKDF2
con la sal y un alto número de iteración.
Obtener los datos seguiría este proceso:
- Obtenga la clave del usuario.
- Obtenga el código de esa clave.
- Si el bcrypt no coincide, deniegue el acceso.
- Obtenga el
PBKDF2
de la clave con la sal. - Use ese
PBKDF2
para descifrar los datos. - Proporcione los datos al usuario a través de un canal seguro (más allá de este diseño).
El sistema debería hacer que sea difícil obtener los datos, incluso si tiene acceso a los datos sin procesar y encriptados.
Mi diseño parece lograr ese objetivo, pero tengo inquietudes de criptoanálisis diferencial en torno al hecho de que la clave está encriptada con bcrypt
y con PBKDF2
encriptación AES
. ¿Podrían las referencias cruzadas de bcrypt
y los datos en bruto, AES
encriptados hacen que sea más fácil romper la clave? ¿Hay problemas conocidos con este tipo de diseños?
¿Hay una forma más simple?
Obviamente no puedo deshacerme de la parte bcrypt
, ya que cualquier clave descifraría los datos AES
(aunque el resultado sería un engaño). No puedo usar bcrypt
como la clave para AES
, porque la clave se almacenaría junto con los datos cifrados, lo que anula la finalidad del cifrado.