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
PBKDF2de la clave con la sal. - Use ese
PBKDF2para 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.