¿Cómo se comparten de forma segura las claves de los algoritmos de cifrado y descifrado entre el emisor y el receptor sin ser interrumpidos por intrusos?

Ha formulado la pregunta correcta: si tenemos un canal seguro para transmitir la clave, ¿por qué no usamos ese canal seguro para el mensaje en sí? En general, la respuesta es que el canal seguro suele ser costoso, lento y solo adecuado para pequeños secretos.

Ayudará si miramos algunos ejemplos de estos canales seguros.

Barcos en el mar

Considere una armada que hace naves al mar. El canal seguro para el intercambio de claves puede ser algo que solo puede ocurrir cuando el barco está en su puerto de origen. En los viejos tiempos, las hojas de configuración de códigos (piezas físicas de papel) se transferían a una caja fuerte a bordo del barco. (El “papel” en sí fue diseñado para disolverse rápidamente en contacto con el agua para reducir la posibilidad de que estos sean capturados).

De todos modos, este canal seguro no está disponible cuando el barco está en el mar. En el mar, la radio se convierte en el canal más útil, pero es inherentemente inseguro.

Mensajeros a embajadas

El Ministerio de Relaciones Exteriores de un país deberá poder comunicarse con sus embajadas en lugares donde se pueda espiar su tráfico de teléfono, telégrafo, radio, etc. Los canales seguros son correos de pasaportes diplomáticos. Piense en el mensajero con el maletín encadenado a su muñeca. Ese canal seguro es lento, costoso.

Memoria humana

A veces, el remitente y el destinatario son la misma persona pero desplazados a tiempo. Cuando encripta un archivo que es solo para usted, desea poder desencriptarlo en algún momento en el futuro (de lo contrario, simplemente destruiría la información). Por lo tanto, puede usar algo como una contraseña (de la cual se puede derivar la clave ) Es posible que esta contraseña deba almacenarse y “transmitirse” al futuro en su memoria. La idea es que la contraseña sea más fácil de almacenar de esta manera que el contenido de los datos que está encriptando (que puede ser muy grande).

Si pudiera recordar todos los datos (y así mantenerlos en su cabeza), no necesitaría guardarlos en un archivo de computadora. Pero la memoria humana apenas funciona para las contraseñas y es un canal inadecuado para los datos reales.

El tamaño importa

Una cosa que atraviesa todo esto es que el secreto que debe transmitirse a través del canal seguro (la clave o una contraseña de la cual se puede derivar la clave) es mucho más pequeño que los mensajes a cifrar. (Este no es siempre el caso, pero generalmente es el caso). Esto significa que lo que debe almacenarse o transmitirse de forma segura a través de un canal seguro puede usar canales que serían prohibitivamente costosos para los mensajes grandes.

Existe este sorprendente concepto llamado intercambio de claves Diffie-Hellman sobre el cual puede leer aquí: Intercambio de claves Diffie-Hellman – Wikipedia

La criptografía está influenciada en gran medida por la teoría de números y varios otros conceptos en matemáticas. Suponiendo que ya lo haya leído:

Este método se vuelve vulnerable cuando la selección de “p” (de la captura de pantalla anterior) no es adecuada. “P” tiene que ser un número primo muy grande, es decir, del orden de 1024 bits y cuando no es así, una supercomputadora puede forzarlo en un tiempo razonable.

Uno de los descubrimientos más poderosos en cifrado / descifrado fue algoritmos de clave privada / pública. Estos son algoritmos en los que cualquier mensaje puede cifrarse utilizando la clave pública proporcionada por el destinatario previsto, pero solo puede descifrarse con la clave privada del destinatario, que está relacionada con la clave pública pero permanece completamente separada y nunca compartida. Es como un buzón cerrado donde cualquiera puede dejar una carta, pero solo el cartero puede recogerla.

La clave pública se puede transmitir y compartir de forma clara porque no sirve de nada para descifrar los mensajes que se cifran con ella. Mientras el destinatario nunca comparta la clave privada que acompaña a esa clave pública con nadie, el cifrado permanece seguro.

Este es el tipo de cifrado utilizado en https: // sitios web seguros: cada participante en la conversación comparte su clave pública con el otro, y luego se utilizan para enviarse mensajes cifrados entre sí posteriormente durante el resto de la sesión. Cualquier hombre en el medio no podrá decodificar el tráfico porque las claves privadas nunca estuvieron expuestas.

El problema principal, entonces, es ¿cómo puede estar seguro de que el sitio web realmente es quien dice ser? La solución actual es que las claves públicas se comparten como parte de un certificado digital, que contiene la dirección que coincide con el sitio web y está firmado de manera segura por el emisor en una cadena de regreso a alguna autoridad raíz “confiable” que el navegador web cree que es confiable . Estas son grandes corporaciones como Verisign. En casos relativamente raros, un certificado raíz se ve comprometido y luego la lista de raíces confiables del navegador debe actualizarse para eliminar los certificados comprometidos.

Esto se hace a través de túneles divididos.

Los datos se dividen en 2 partes. El material cifrado y la clave de descifrado.

Ambas partes se envían a través de diferentes túneles de datos, de ahí el nombre de túnel dividido.

Un intruso, si tiene suerte, solo puede interceptar un túnel a la vez.

Puede interceptar solo los datos cifrados, que no puede descifrar él mismo, o puede interceptar solo las claves de descifrado, que son inútiles para él.

Según tengo entendido, en SSL en la web, la razón por la que el mensaje no se transfiere a través del canal seguro (criptografía de clave pública) es que los algoritmos PKI son demasiado lentos para ser utilizados para archivos de datos grandes. Entonces, hay una clave aleatoria fuerte para un cifrado de bloque simétrico enviado a través de PKI, que luego se utiliza para cifrar los datos.

Por lo general, se supone que la conexión entre el emisor y el receptor es

  • No confiable: los mensajes pueden perderse al azar sin previo aviso
  • Público: un atacante puede leer completamente los mensajes en su camino sin previo aviso
  • Spoofable: los mensajes pueden modificarse durante la transferencia (cambios aleatorios de bits o a propósito por un atacante) sin previo aviso

Todas estas cosas pueden protegerse contra el uso de protocolos inteligentes, por ejemplo, mediante el uso de cifrado simétrico con códigos de autenticación de mensajes, además de un mecanismo para acusar recibo de los mensajes y reenviarlos si no se ha recibido el acuse de recibo dentro de cierto plazo.

Sin embargo, la parte más importante es la clave, que debe intercambiarse de forma segura antes de usar el protocolo en un canal inseguro. Lo que se entiende aquí por “canal seguro” es otro canal de comunicación (o la combinación de varios) para intercambiar la clave, que generalmente es una pequeña cantidad de datos en comparación con los datos que se cifran. Este canal generalmente se usa solo una vez o muy raramente para actualizar la clave. Por ejemplo, puede intercambiar claves con alguien si se encuentra con él personalmente una vez. O puede combinar varios canales, por ejemplo, regalar partes de su clave a través de una llamada telefónica fija, enviar una parte usando WhatsApp, enviar una parte por correo postal y el resto por correo paloma. De esta forma, será difícil para un atacante obtener la clave completa: un atacante generalmente no puede hacer mucho con una clave parcial.

Obviamente, este “canal seguro” no se puede utilizar para enviar los mensajes cifrados. No puede visitar a su amigo (que vive en el otro lado del mundo) cada vez para entregarle el mensaje personalmente. Se debe suponer que el canal seguro tiene literalmente un ancho de banda muy bajo.

Leer sobre Protocolo criptográfico – Wikipedia. No, no siempre es seguro. Y es un buen punto preguntar por qué no solo usarlo como el canal principal.

Luego, nuevamente, utilizando el método de clave pública / pad de una sola vez para enviar una clave de sesión (aleatoria) y luego utilizando esta clave de sesión con cifrado de bloque, uno puede reducir el cálculo y posiblemente el ancho de banda.

Emparejar un cifrado fuerte con un protocolo débil es una receta para el desastre.

Gracias por A2A!

Creo que esta es una pregunta de un millón de dólares, ya que no es ajeno a cómo podemos compartir nuestra clave de cifrado simétrica. Se podría decir que usando algoritmos de clave pública como RSA o Diffie Hellman, pero nuevamente, ¿cómo podemos compartir nuestras claves públicas? Es el problema del huevo y la gallina.

Una solución es utilizar la Autoridad de certificación, que es ampliamente adoptada en la industria. Siempre confiaré en la Autoridad de Certificación si declara que esta es la Clave pública de Alice. Simplemente lo creeré.

Una segunda solución podría ser lo que se conoce como red de confianza, si confío en ti y conoces la clave pública de Alice, lo creeré.

Una tercera solución es reunirse en persona e intercambiar las claves públicas.

Un ejemplo de un “canal seguro” es entregar la clave de descifrado en persona. Es seguro, pero demasiado caro para entregar cada mensaje.

Supongo que la mejor manera de asegurar su código es tomar medidas para tratarlo en el código. Hay programas que pueden ayudar a hacer eso, como cyberbit o muchos otros, pero se recomienda tratar de poner algo de seguridad en el código.

Buena suerte.

More Interesting

¿Qué algoritmos funcionan detrás de los botones de seguir de Quora e Instagram?

Según usted, ¿cuáles son los algoritmos de aprendizaje automático más importantes en la actualidad?

¿Cuál es el mejor algoritmo para ordenar una pila de 400 exámenes de algoritmos, si tiene 16 TA?

Siempre sueño con trabajar en grandes empresas tecnológicas como Google o Facebook, pero mi habilidad con los algoritmos es muy débil. Intento resolver problemas en Google Code Jam y CodeChef, pero solo puedo resolver los fáciles. ¿Qué tengo que hacer?

¿Qué tan bueno es quicksort y cadenas?

¿Qué es un árbol rojo-negro?

¿Qué enfoque debe adoptar en la vida, un paradigma codicioso o un enfoque de programación dinámica?

¿Por qué deberíamos instanciar una matriz en una línea diferente?

Si una computadora toma el control total del control del tráfico aéreo, ¿cómo será el algoritmo? ¿Cómo manejará los aterrizajes de emergencia y cómo manejará una pista paralela?

¿Puedes predecir la lotería con algoritmo?

¿Existen algoritmos que estructuran datos previamente no estructurados utilizando 'etiquetas' definidas por el usuario?

¿Hay alguna lista de problemas de árbol AVL similares a los problemas de árbol binario de Stanford?

¿Cuál es la última actualización en el algoritmo SEO de Google en 2017 para un rango de sitio web?

¿Puedo encontrar el camino hamiltoniano más corto en un gráfico completo ponderado no dirigido en tiempo polinómico (donde todos los pesos no son negativos)?

¿Por qué es Introducción a los algoritmos una lectura obligada para convertirse en un mejor programador?