¿Cómo ciframos los datos tanto locales como en el servidor y ofrecemos una opción de recuperación de contraseña para que nunca pierdan sus archivos?

Técnicamente esto es fácil de hacer. Pero la solución técnica no funciona.

Secreto compartido u otro enfoque técnico

Cuando el cliente se inscribe en el sistema, su cliente debe asignarles una clave de recuperación, que el cliente también almacena. Ya sea que esa clave de recuperación sea solo un cifrado de clave o un recurso compartido de clave o cualquier esquema que desee, el cliente necesita almacenar esa recuperación que luego puede usarse para la recuperación.

Problema humano

El problema con este tipo de esquema es exactamente que las personas que tienen más probabilidades de olvidar sus contraseñas son aquellas que no van a mantener su clave de recuperación en un lugar donde puedan recuperarla.

Nosotros (los desarrolladores de 1Password) enfrentamos este problema. Alentamos a las personas a que hagan una copia en papel de su Contraseña maestra y su Clave secreta (otra clave que se usa en combinación con la Contraseña maestra) y la guarden en un lugar seguro (disponible). Seguir esas instrucciones no es más difícil que poner una clave de recuperación en un lugar seguro, por lo que las únicas personas a las que ayudaría una clave de recuperación son aquellas que ya podrían recuperar sus secretos de descifrado de todos modos.

Solución de fideicomiso

Pasar una copia de la clave de recuperación (o los secretos originales o similares) a un tercero es una opción. El cliente no es responsable de almacenar su secreto de recuperación, ya que el servicio de custodia lo hará y lo almacenará de una manera que esté bien protegida contra pérdidas y robos.

Problema de depósito

Además de la seguridad del servicio de custodia en sí, hay dos problemas con esta solución. Uno es el mismo que se describe para compartir secretos. El cliente debe configurar todo esto antes de perder su contraseña. Y el cliente que toma tales pasos probablemente podría hacer una copia segura de su contraseña en primer lugar.

El segundo problema es que el cliente necesitará una forma de demostrar su identidad (o su derecho a la clave de recuperación) al sistema de custodia. Queremos que la autenticación del servicio de custodia sea tan sólida como la seguridad de la contraseña original. No quiero que nadie que conozca mi fecha de nacimiento, el apellido de soltera de mi madre, y pueda obtener una foto de mi licencia de conducir para poder recuperar esa clave del servicio de custodia. Pero si configuro una contraseña segura para el servicio de custodia, entonces al menos es probable que olvide esa contraseña como lo hago para olvidar la contraseña que estoy tratando de recuperar.

Custodia parcial y automática

Lo que hacemos con 1Password es dar al propietario de un equipo o familia la capacidad de recuperar las claves de todas las bóvedas (colecciones de elementos), pero sin que tengamos que recuperar las claves o descifrar los datos. Esto funciona bien cuando un miembro de un equipo o familia olvida su contraseña maestra. Pero no ayuda cuando todos los Propietarios de un Equipo o Familia olvidan sus Contraseñas Maestras.

También presenta una cierta cantidad de riesgo para los miembros del equipo o la familia. Hemos trabajado duro para dificultar que los Propietarios abusen de sus poderes de recuperación, pero no hemos podido eliminar todas esas oportunidades de abuso dentro de un Equipo.

Puede que esta no sea una solución ideal, pero es lo mejor que podríamos alcanzar para este difícil problema.

Una pregunta adicional es: ¿contra quién quiere proteger?

Por ejemplo, si desea proporcionar al cliente privacidad de modo que no pueda leer sus archivos, obviamente no podrá recuperarlos cuando pierdan su contraseña / clave.

Si no estás protegiéndote de lo que estás en realidad te estás protegiendo?

Desde un punto de vista práctico: podría considerar integrarse con un servicio clave, como AWS CloudHSM, de modo que realice el cifrado pero el cliente pueda controlar las claves.

Debería implementar un sistema de custodia de claves donde la contraseña otorga acceso a la clave final, en lugar de ser la clave final en sí misma.

Un ejemplo de esto sería el sistema de cifrado de archivos de Windows.