¿Qué algoritmo / bibliotecas de encriptación del lado del cliente debo usar para facilitar la sincronización?

0

Quiero crear una aplicación web y una aplicación móvil hermana (usando reaccion nativa) que use el cifrado del lado del cliente. El cifrado sería para las entradas de texto escritas diariamente que el usuario podría crear y editar. Si el usuario se desconecta, quiero que aún puedan editar las entradas actualmente en su dispositivo y crear nuevas entradas, y quiero que esas modificaciones se transfieran al servidor cuando el usuario vuelva a estar en línea.

Si el usuario ingresa texto sin conexión para un día en particular en un dispositivo, luego se olvida e ingresa texto diferente sin conexión en otro dispositivo para el mismo día, me gustaría que las dos entradas se combinen en una entrada cuando los dispositivos regresen en línea. ¿Hay algún tipo de magia que me permita hacer eso en el servidor con los archivos cifrados?

De lo contrario, me gustaría que los dispositivos envíen un hash del texto cifrado como estaba antes de las ediciones. Cuando el texto actualizado llega al servidor, enviaría el hash y lo compararía con el hash del texto cifrado que estaba almacenado actualmente. Cuando llegue la segunda actualización, el hash no coincidirá con el texto almacenado y el texto almacenado se enviará de vuelta al cliente para que se reconcilie. ¿Existen protocolos / bibliotecas por ahí para este tipo de cosas? Prefiero no reinventar la rueda.

    
pregunta Loktopus 21.05.2018 - 05:28
fuente

1 respuesta

1

Déjame reformular tus condiciones previas:

  • Todos los datos almacenados en el servidor o transferidos al servidor están encriptados.
  • La clave de cifrado solo la conocen los clientes.
  • Puede haber varios clientes, todos utilizan la misma clave de cifrado o alguna clave derivada de un secreto compartido. La forma en que esta clave / secreto se comparte entre los clientes está fuera de su pregunta.

Entonces, estás asumiendo que dos clientes pueden editar los mismos datos y pedir una manera de combinar estas ediciones en el lado del servidor.

Primero, no está claro cuál será el resultado de esta combinación en su opinión, incluso si los datos no están cifrados. Por lo tanto, asumo simplemente que puede dividir de alguna manera los datos en partes independientes (como oraciones o párrafos) y tratar estas partes como entidades totalmente independientes cuando se fusiona, es decir:

  • Si ambos clientes han editado partes diferentes, simplemente haga que cada cliente reemplace solo esta parte. De manera similar, puede detectar y resolver si ambos clientes han agregado partes nuevas en lugares diferentes o si uno eliminó una parte que el otro no tocó.
  • Si ambos clientes tienen ediciones en conflicto en la misma parte, alguien necesitaría resolver el conflicto. Esto se puede hacer para que gane la primera edición (es decir, necesita marcas de tiempo) o para solicitar la resolución manual de conflictos.

Tenga en cuenta que con el algoritmo de fusión anterior no es necesario mirar realmente el contenido de las partes, es decir, el algoritmo podría ejecutarse en texto plano, en hashes de las partes y también en partes cifradas si todas las partes se cifraran independientemente de El uno al otro. Solo la resolución de conflictos manual tendría que presentar de alguna manera los contenidos al usuario para que pueda ver lo que realmente está resolviendo. Pero como todos los clientes comparten la misma clave / secreto, cada cliente también podría descifrar cualquier parte cifrada por el otro cliente y mostrarla dentro de la resolución de conflictos manual.

En otras palabras: la manera en que se realiza la fusión se puede hacer independiente de los datos que se cifran simplemente dividiendo los datos en partes independientes (que de todos modos necesitaría fusionar) y luego cifrando cada parte individualmente e independientemente de las demás. Por lo tanto, la implementación exacta, las bibliotecas, etc. para realizar la fusión ya no son un problema de seguridad de la información y, por lo tanto, estarían fuera de tema aquí.

    
respondido por el Steffen Ullrich 21.05.2018 - 07:27
fuente

Lea otras preguntas en las etiquetas