¿Cifrado bidireccional que puede ser anidado?

1

Al crear un sistema de seguridad, busco evitar los ataques de "personas intermedias" en un sistema de cifrado bidireccional, utilizando la siguiente configuración:

A envía a B un mensaje, cifrado con el código 1

B lo envía de vuelta, después de haber sido cifrado con 1 y 2

A invierte 1 y lo envía a B, luego de lo cual B decodifica el código 2 y recibe el mensaje.

En ningún momento puede un hombre en el medio acceder a estos datos. Sin embargo, esto depende de que haya dos funciones de este tipo, que pueden ser anidadas y decodificadas fuera de orden. ¿Hay tales funciones? ¿O hay mejores formas de prevenir ataques?

    
pregunta Data Storage 17.02.2015 - 07:51
fuente

2 respuestas

1

No debe usar esto en ningún sistema de producción, período. Estás intentando diseñar primitivas criptográficas, que es algo en lo que es extremadamente fácil equivocarse terriblemente. Si no es usted mismo un criptógrafo, no intente diseñar algoritmos criptográficos, ya existen los que son perfectamente buenos. (En general, debe usar sistemas bien probados donde pueda en seguridad. Nunca haga rodar su propia primitiva, evite rodar su propio protocolo siempre que pueda, evite rodar su propia implementación cuando sea práctico).

De hecho, este esquema es altamente vulnerable a los ataques MitM. Un MitM no es alguien que está escuchando en el tráfico; Son atacantes activos, y pueden modificar cualquier comunicación entre las dos partes. En este caso, MitM intercepta el primer mensaje de Alice y lo cifra con la clave su ; Cuando Alice elimina su cifrado, el atacante ahora lo tiene cifrado con su propia clave y nada más. Tienes que verificar de alguna manera que es la clave Bob's que se agregó en el paso 2, no un atacante; tu esquema ni siquiera intenta resolver esto.

Una forma mucho, mucho mejor de hacer esto es el cifrado de clave pública. Alice y Bob se dan sus claves públicas a través de alguna comunicación fuera de banda o un tercero de confianza verifica sus claves públicas. Alice encripta su mensaje con la clave pública de Bob, y Bob luego lo desencripta. Debe compartir las claves públicas, pero eso es un plus : en su esquema (donde no sabe la clave que Bob debería usar ni si el mensaje se volvió a cifrar con él), usted ' eres extremadamente vulnerable a un ataque MitM.

Por lo tanto, use el cifrado de clave pública adecuado en un protocolo debidamente probado, si es posible en un código de biblioteca debidamente probado (nota "probado" significa "testado para seguridad , que solo expertos capacitados pueden hacer).

    
respondido por el cpast 17.02.2015 - 08:46
fuente
0

Su esquema sería totalmente inseguro, incluso si el cifrado subyacente es seguro.

Un pad de una vez es perfectamente seguro, siempre y cuando la gestión de claves se realice correctamente. Su esquema parece tener la ventaja de que las claves nunca necesitan ser distribuidas, lo que soluciona el principal inconveniente de un pad de una vez.

Entonces, si A y B generan cada vez un teclado, ¿podrían usar tu esquema?

La respuesta es, sí podrían hacerlo. Un cojín de una sola vez satisface todos sus requisitos enumerados. Es demostrablemente seguro, y si un mensaje se cifra dos veces con claves diferentes, el mensaje original se puede obtener descifrando las dos claves en cualquier orden.

Lo que se enviaría en los tres mensajes utilizando su esquema sería m⊕K₁, m⊕K₁⊕K₂ y m⊕K₂. Sin embargo, un atacante que espía pasivamente podría simplemente calcular el xor de los tres mensajes para recuperar el mensaje original.

Entonces, aunque el destinatario podría descifrar el mensaje, cualquier persona en el medio podría hacerlo.

Recomiendo que en lugar de crear tu propio esquema, uses algo más estandarizado como, por ejemplo, el intercambio de claves Diffie-Hellman.

    
respondido por el kasperd 17.02.2015 - 09:50
fuente

Lea otras preguntas en las etiquetas