¿Cómo puedo almacenar contactos de usuarios (libreta de direcciones) sin conocimiento?

0

Quiero proporcionar a un usuario una lista de contactos remotos (libreta de direcciones) a la que puedan acceder y actualizar desde clientes arbitrarios en múltiples dispositivos. Pero quiero tener cero conocimiento de esos contactos. Los mecanismos existentes (por ejemplo, la lista de XMPP, CardDAV) almacenan estos detalles claramente. ¿Existe un mecanismo para el cifrado / descifrado del lado del cliente de una libreta de direcciones?

Notas (incluido el modelo de seguridad):

  • La libreta de direcciones posiblemente será utilizada por una variedad de clientes (XMPP, correo electrónico, VoIP), por lo que estoy abierto a cualquier mecanismo / formato.

  • Supongo que los contactos podrían inferirse de los registros de enrutamiento de XMPP / email / otros servicios. El servidor tendría que ser confiable en esto de todos modos, por lo que esto es aceptable. Es el almacenamiento "permanente" de la lista completa de detalles de contacto que deseo abordar aquí.

pregunta d3vid 27.05.2017 - 12:37
fuente

1 respuesta

1

El problema general aquí es el almacenamiento de datos estructurados en un servidor no confiable. Las implementaciones de bases de datos de conocimiento cero / confianza cero y el cifrado homomórfico son relativamente infrecuentes, por lo que es poco probable que existan soluciones aún más específicas (como un protocolo de libreta de direcciones de conocimiento cero). En su lugar, deberá implementar uno de los siguientes:

  • Almacene un blob encriptado en el servidor, descifre y administre localmente. El desafío aquí será manejar las actualizaciones del blob desde múltiples clientes.

  • Use una base de datos relacional normal y cifre los campos confidenciales (por ejemplo, detalles de contacto). El desafío aquí es garantizar que no se puedan hacer inferencias a partir de los datos cifrados.

  • Use un marco de base de datos de conocimiento cero como Crypton ( code ) o ZeroDB ( código ). El reto aquí es encontrar una solución que esté y se mantendrá bien mantenida.

Luego, puede escribir un módulo del lado del cliente que coincida con la API de un módulo CardDAV existente (por ejemplo), pero en su lugar consulta su almacenamiento seguro, descifra el resultado y devuelve un objeto CardDAV de texto simple.

Lectura interesante: enlace

    
respondido por el d3vid 31.05.2017 - 11:29
fuente

Lea otras preguntas en las etiquetas