He creado un algoritmo que creo que voy a usar para un servicio de almacenamiento en la nube que estoy desarrollando, si no hay problemas o vulnerabilidades con él. Es esto junto con TLS y el secreto hacia adelante implementado. Además, al iniciar sesión en un nuevo dispositivo, debe confirmarlo a través de su cuenta de correo electrónico.
Para crear una cuenta:
-
Genere dos claves aleatorias, la clave A y la clave B. La clave A se usa para probar la identidad de quién se está firmando. La clave B se utiliza para cifrar sus archivos con AES-256.
-
Cifre las dos claves con AES-256 usando un hash de la contraseña del usuario. Pronto publicaré una pregunta por separado sobre la creación intencional de un retraso en la función de hash, para evitar ataques de fuerza bruta.
-
Envíe las claves cifradas al servidor, junto con un hash SHA-256 de la Clave A.
Para iniciar sesión:
-
Descargue las claves cifradas del servidor.
-
Descifra las claves con la contraseña hash.
-
Suba la clave A al servidor.
-
El servidor hash Key A y lo compara con el hash almacenado. Si los dos son idénticos, notifique al cliente que la contraseña es correcta (no que se haya enviado).
-
Elimine la copia de la Clave A en la memoria del servidor.
Para hacer cambios a los archivos:
-
Inicie sesión siguiendo los pasos que se muestran arriba. El servidor rechazará cualquier acción a menos que haya iniciado sesión, obviamente.
-
Cifre todos los archivos con AES-256 usando la Clave B (almacenada en la memoria del cliente, nunca guardada en texto plano en el servidor) antes de enviar en línea. Descifra todos los archivos sin conexión en consecuencia.
Para cambiar la contraseña:
-
Inicia sesión siguiendo los pasos anteriores.
-
Encripta la clave A y la clave B (almacenadas en la memoria después de iniciar sesión) con el hash de la nueva contraseña.
-
Indique al servidor que elimine las claves cifradas y cargue las nuevas.
Para restablecer la contraseña y las claves (en caso de incumplimiento):
-
Inicie sesión. Si no puede hacerlo con la contraseña y los pasos anteriores porque se cambió su contraseña, use una unidad de recuperación (creada opcionalmente al configurar una nueva cuenta) con las claves almacenadas en ella.
-
Descargue todos los archivos del servidor.
-
Descifre los archivos con la clave B.
-
Genere dos nuevas claves aleatorias, luego encripte las nuevas claves con la nueva contraseña y cárguelas, junto con un hash de la nueva Clave A.
-
El servidor almacena en caché las claves cifradas y el hash, y envía un correo electrónico de confirmación para restablecer la contraseña y las claves de la cuenta.
-
Una vez que se acepta el correo electrónico de confirmación, el cliente comienza a cifrar los archivos con la nueva clave B y a cargarlos al servidor. Una vez que todos los archivos se transfieren completamente, el servidor elimina los archivos antiguos.
-
Todas las claves se invalidan, al cerrar sesión en la cuenta en todos los demás dispositivos.
Por favor, avíseme si hay algún problema con este algoritmo o mejoras que podría hacer.