¿Este algoritmo es realmente de extremo a extremo cifrado y seguro?

1

Estoy creando un chat anónimo donde una de las premisas es que las conversaciones se cifran de extremo a extremo. Estoy utilizando Firebase, por lo que toda la comunicación entre los clientes y el servidor está protegida por SSL. Pero estoy intentando ocultar el chat incluso desde el servidor.

Tuve la siguiente idea para el intercambio de claves. Tenga en cuenta que no estoy dispuesto a usar Diffie Hellman ya que no pude encontrar bibliotecas JavaScript compatibles, por lo que solo RSA y cualquier otro cifrado simétrico funcionarán.

Aquí está el algoritmo:

  • El usuario Alice quiere chatear con Bob .
  • Alice genera un par de claves pública / privada y envía su clave pública a Bob .
  • Bob acepta el chat generando una clave pública / privada y envía la parte pública a Alice .
  • Ahora el servidor y los usuarios conocen ambas claves públicas.
  • Alice , que es el usuario que inició el chat, genera una clave simétrica, la cifra con Bob clave pública.
  • Como cualquier otro usuario podría cifrar esta clave y enviarla con bob, Alice también envía el hash cifrado del mensaje cifrado con su clave privada, por lo que Bob puede verificar que fue Alice quien generó la clave.
  • Alice envía el mensaje (clave simétrica cifrada + firma digital) a Bob .
  • Primero, Bob descifra la firma digital con la clave pública Alice y compárela con el mensaje cifrado; si no se comprueba, el chat falla.
  • Bob descifra la clave simétrica con su clave privada.
  • Ahora Bob y Alice tienen la misma clave simétrica y Bob está seguro de que fue Alice quien generó esta clave.

¿Es correcto este algoritmo?

    
pregunta rafael 08.05.2016 - 23:56
fuente

1 respuesta

4

No hay autenticación en lo que has documentado. Alice no puede saber si el intercambio de claves se está llevando a cabo con Bob, su servidor actuando maliciosamente o con algún otro MiTM. Así que pasos como:

  

Alice genera un par de claves pública / privada y envía su clave pública a Bob.

se describen con más precisión como "Alicia le envía su clave pública a alguien, con la esperanza de que en realidad sea Bob".

Es por esto que SSL usa certificados y CAs. Permiten la autenticación sin comunicación previa. También podría admitir la transmisión fuera de banda de información de autenticación. SSH se basa en esto (con frecuencia termina siendo un primer mensaje de confianza y autentica los siguientes). En general, establecer la seguridad requiere una comunicación fuera de banda (por ejemplo, pasar códigos de barras entre dispositivos) o confiar en que el servidor no sea malicioso. Parece que no estás dispuesto a confiar en el servidor, por lo que vas a tener algunos problemas sin un intercambio de claves fuera de banda.

También hay muchos ataques de canal lateral que pueden ser aplicables. Por ejemplo, el manejo de errores a veces se puede utilizar como un ataque de Oracle .

    
respondido por el Neil Smithline 09.05.2016 - 04:07
fuente

Lea otras preguntas en las etiquetas