El mejor mecanismo de encriptación para el almacenamiento / intercambio de mensajes en la aplicación cliente / servidor

1

Así que estoy creando un sistema cliente / servidor que es similar a la idea de correo electrónico donde los clientes intercambian mensajes a través del servidor con los siguientes requisitos principales (tenga en cuenta que los clientes están registrados previamente en el servidor y tienen que autenticarse antes de cualquier transmisión de mensajes):

  • Cada mensaje debe estar cifrado y nadie puede leerlo, excepto el remitente y el destinatario.
  • El tiempo de encriptación no debería tomar mucho tiempo
  • El mensaje debe almacenarse cifrado tanto en el lado del cliente como en el servidor (mensaje cifrado una vez creado, incluso si el cliente elige almacenarlo y enviarlo más tarde: Cifrado en la capa de aplicación ).

Propuse tres soluciones para lograr eso y todavía estoy estudiando los pros y los contras de cada solución si no te importa ayudarme:

A: uso del cifrado de clave simétrica con el servidor Cada cliente tiene una clave secreta compartida con el servidor El remitente A cifra su mensaje con su clave secreta compartida KA > el servidor descifra el mensaje con KA y lo vuelve a cifrar con la clave secreta compartida del receptor B KB > el receptor B descifra el mensaje con su clave compartida KB

El desafío en esta solución es que el servidor debe descifrar y luego volver a cifrar el mensaje. ¿Es seguro o no? ¿por qué?

B: uso de cifrado híbrido de clave simétrica y asimétrica con el servidor

El servidor almacena 2 tipos diferentes de clave para cada cliente registrado

  1. Clave compartida entre el servidor y el cliente
  2. Clave pública del cliente

• Cuando el remitente A desea cifrar un mensaje al receptor B

  1. A se comunica con el servidor y obtiene B clave pública Bpk usando el secreto compartido del servidor Ka-s
  2. A genera un secreto compartido para él y B y cifra el mensaje con él Ka-b (mensaje)
  3. A encripta el secreto compartido generado con la clave pública B y lo agrega al mensaje encriptado Ka-b (mensaje), Bpk (Ka-b)

• Cuando B recibe un mensaje cifrado

  1. B obtiene Ka-b al descifrarlo con su clave privada Bpri (Bpri (Ka-b))
  2. B descifra el mensaje usando el secreto compartido Ka-b

El desafío en esta solución es la sobrecarga para cifrar el mensaje donde el remitente tiene que generar una clave cada vez que quiere enviar un mensaje.

C: uso simétrico sin participación del servidor:

Cada cliente registrado tiene una clave compartida con cualquier otro cliente registrado. Si A quiere enviar un mensaje a B, puede obtener la clave compartida almacenada de Ka-b y cifrar el mensaje con ella y luego subirla al servidor.

En esta solución, el servidor no podrá leer el mensaje, por lo que se requiere menos seguridad en el servidor.

El desafío aquí es almacenar todas las claves en cada aplicación cliente y administrarlas (sincronización entre dos clientes al renovar una clave compartida vencida)

¿Hay mejores soluciones para cumplir ambos requisitos con alta seguridad?

    
pregunta Lamia 15.01.2016 - 13:18
fuente

2 respuestas

1

Problema con A: cualquier persona con acceso al servidor puede descifrar el mensaje porque una copia de todas las claves simétricas está almacenada en el servidor. El texto sin formato del mensaje se puede almacenar temporalmente en la memoria RAM del servidor cuando se vuelve a cifrar el mensaje

Problema con B: ¿Por qué no inmediatamente Bpk (Mensaje)? Por qué usar una clave de sesión adicional Ka-b (mensaje), Bpk (Ka-b). Para ambos métodos, B no puede autenticar A o garantizar la integridad del mensaje. Cualquier otra persona también puede solicitar Bpk desde el servidor. Tal vez podrías hacer ApriK (sha1 (mensaje)), Bpk (mensaje). Entonces, cuando B recibe el mensaje, puede usar su clave privada para descifrar el mensaje, solicitar Apk al servidor, descifrar el hash del mensaje y compararlo con el mensaje que recibió.

Problema con el problema de administración de la clave C debido a la gran cantidad de claves. Total no. de teclas en el sistema = (n) (n-1) / 2. Problema del apretón de manos. El no rechazo también es un problema cuando se utilizan claves simétricas. A puede afirmar que nunca envió el mensaje a B. B elaboró el mensaje por sí mismo utilizando la clave simétrica que conoce.

    
respondido por el limbenjamin 17.01.2016 - 09:02
fuente
0

Si puede empaquetar el cliente con certificados, sugiero usar TLS / SSL para el cifrado de su mensaje. Simplemente empaquete a cada cliente con el (los) certificado (s) para su (s) servidor (s) y podrá verificar las comunicaciones con el servidor correcto y que los mensajes estén cifrados.

    
respondido por el Seth M. Larson 15.01.2016 - 14:21
fuente

Lea otras preguntas en las etiquetas