Forma correcta de realizar un cifrado seguro de dos vías en un sitio web

5

Actualmente estoy trabajando en un proyecto que me exige almacenar información confidencial (principalmente contraseñas y otra información) en un servidor web a través de un sitio web estándar de python / flask. Esta información se debe compartir con x número de otras personas en el sistema donde pueden descifrar y ver la información.

Lo ideal sería realizar todo el cifrado en el lado del cliente y mantener el servidor almacenando los datos cifrados de manera que el servidor nunca pueda descifrar estos datos.

Originalmente, estaba imaginando un sistema similar al de Lastpass, pero con la capacidad de compartir los mismos datos con otros usuarios para descifrarlos y verlos, no puedo pensar en una forma de que esto funcione.

¿Es esto posible?

[editado para agregar más información]

El proyecto en el que estoy trabajando es en realidad una aplicación de administración de contraseña / información dirigida principalmente a empresas que desean administrar sus contraseñas / información internas para, por ejemplo, acceso a servidores o sistemas de software con cuentas únicas. No creo que sea posible proporcionar a los usuarios las claves para usar fuera del sistema. Esperaba que la contraseña de los usuarios o tal vez una clave individual de algún tipo fuera suficiente para descifrar los datos almacenados en el sistema, pero poder cifrar los datos para que cualquier clave de los usuarios pueda descifrarlos me elude. Estoy pensando que podría no ser posible.

    
pregunta nullabletype 09.08.2014 - 16:41
fuente

1 respuesta

6

Básicamente, necesita cifrar los datos que desea proteger mediante una clave simétrica (por ejemplo, la clave AES). Esta clave solo es conocida por el grupo de usuarios que tienen permiso para acceder a los datos cifrados en el servidor.

La clave que utilizó para cifrar los datos no debe almacenarse en el servidor. El cifrado y el descifrado ocurren en el lado del cliente dentro del navegador web del cliente; hay muchas bibliotecas de JavaScript que implementan el algoritmo AES.

La parte más difícil es cómo puedes compartir la clave de cifrado entre los usuarios. Además, si el mismo usuario comparte parte de sus datos con dos grupos diferentes de usuarios, podría necesitar usar diferentes claves de cifrado para cada grupo. Tenga en cuenta que no quiere que la clave sea conocida por el servidor

Entonces, ¿cómo podemos hacer eso. Hay dos opciones para la distribución de claves:

  1. Use el socket web para compartir la clave entre el grupo de usuarios que usan la conexión P2P. Las claves se pueden almacenar encriptadas utilizando el almacenamiento web HTML5 en cada navegador de usuario.
  2. Cada usuario tiene un par de claves RSA donde su clave pública se almacena en el servidor. Luego, para que el usuario A comparta una clave AES con el usuario B. el usuario A descarga la clave pública del usuario B y encripta la clave AES utilizando la clave pública uesr B. Luego subió la clave AES cifrada al servidor. El usuario B descarga la clave AES cifrada y la descifra utilizando su clave privada. Luego puede usar la clave AES cifrada para acceder a los datos del usuario A.

Vea, el desafío técnico en su sistema es cómo administrar las claves de cifrado y cómo usted administra los grupos de usuarios.

Debe aprovechar las ventajas del almacenamiento web HTML5 para almacenar las claves AES, simplemente asigne a cada usuario una frase de contraseña y use esta frase de contraseña para generar una clave AES maestra que puede usar para cifrar todas las claves en el almacenamiento web y otras Datos del lado del cliente.

Nota: el problema principal aquí es si el usuario pierde la clave de cifrado. En este caso, es posible que no pueda recuperar los datos cifrados en el servidor.

Si publica más detalles sobre los requisitos de su proyecto, podríamos ofrecerle una mejor solución y quizás una simple.

    
respondido por el Ubaidah 09.08.2014 - 20:10
fuente

Lea otras preguntas en las etiquetas