Evolución de los algoritmos de concordancia clave - Algoritmo RSA - Algoritmo DH - Algoritmo DHE - Algoritmo ECDHE


1. Algoritmo RSA

El protocolo de enlace TLS tradicional básicamente utiliza el algoritmo RSA para realizar el intercambio de claves. En el algoritmo de acuerdo de clave RSA, el cliente genera una clave aleatoria, la cifra con la clave pública del servidor y luego la transmite al servidor. De acuerdo con el algoritmo de cifrado asimétrico, el mensaje cifrado por la clave pública solo puede ser descifrado por la clave privada, por lo que después de que el servidor descifra, ambas partes obtienen la misma clave y luego la usan para cifrar el mensaje de la aplicación.

Proceso de protocolo de enlace RSA

Primer apretón de manos TLS:

El cliente primero enviará un mensaje " Client Hello ", que contiene el número de versión de TLS utilizado por el cliente, la lista de conjuntos de cifrado admitidos y el número aleatorio generado (Client Random) , que será utilizado por el cliente. el servidor, es uno de los materiales para generar claves de cifrado simétricas.

Segundo apretón de manos TLS:

Cuando el servidor recibe el mensaje "Hola del cliente" del cliente, confirmará si el número de versión de TLS es compatible, seleccionará un conjunto de cifrado de la lista de conjuntos de cifrado y generará un número aleatorio (Servidor aleatorio) .

A continuación, devuelva el mensaje " Hola del servidor ", que contiene el número de versión de TLS confirmado por el servidor y un número aleatorio (Servidor aleatorio), y luego seleccione un conjunto de cifrado adecuado de la lista de conjuntos de cifrado del cliente.

Como puede ver, el conjunto de cifrado seleccionado por el servidor es "Cipher Suite: TLS_RSA_WITH_AES_128_GCM_SHA256".

Este conjunto de cifrado parece realmente vertiginoso, una lista larga, pero de hecho tiene un formato y especificación fijos. La forma básica es " Algoritmo de intercambio de claves + Algoritmo de firma + Algoritmo de cifrado simétrico + Algoritmo de resumen ". Generalmente, hay dos palabras delante de la palabra CON, la primera palabra es el algoritmo del intercambio de claves acordado, y la segunda palabra es el acuerdo El algoritmo de autenticación para el certificado.
Por ejemplo, el significado del conjunto de cifrado en este momento es: dado que solo hay un RSA en la palabra CON, significa que tanto el algoritmo de intercambio de claves como el algoritmo de firma durante el protocolo de enlace usan RSA; la comunicación después del protocolo de enlace usa AES algoritmo simétrico, y la longitud de la clave es El grado es de 128 bits, y el modo de agrupación es GCM; el algoritmo de resumen SHA384 se utiliza para la autenticación de mensajes y la generación de números aleatorios; en el proceso de "saludo" entre los dos clientes y el servidor, el cliente y el servidor han confirmado la versión de TLS y el conjunto de cifrado utilizado, y es posible que tanto el cliente como el servidor generen un número aleatorio y se lo pasen entre sí.

Luego, para probar su identidad, el servidor enviará un " Certificado de servidor " al cliente, que contiene un certificado digital.

Luego, el servidor envió un mensaje de " Servidor Hola Listo ", cuyo propósito era decirle al cliente que le he dado todas las cosas que debería haberle dado, y el saludo terminó.

【Reponer】:

El proceso de emisión de un certificado por parte de una CA:

  • Primero, la CA empaquetará la clave pública, el uso, el emisor, el tiempo válido y otra información del titular en un paquete, y luego realizará el cálculo Hash sobre esta información para obtener un valor Hash;

  • Luego la CA encriptará el valor Hash con su propia clave privada para generar una Firma de Certificado, es decir, la CA ha firmado el certificado;

  • Finalmente, agregue Firma de certificado al certificado de archivo para formar un certificado digital;

El proceso del cliente verificando el certificado digital del servidor:

  • Primero, el cliente utilizará el mismo algoritmo Hash para obtener el valor Hash H1 (resumen digital) del certificado;

  • Por lo general, la información de la clave pública de la CA está integrada en el navegador y el sistema operativo.Después de que el navegador recibe el certificado, puede usar la clave pública de la CA para descifrar el certificado.

    Contenido de la firma, obtenga un valor Hash H2 (resumen digital).

  • Finalmente, compare H1 y H2, si el valor es el mismo, es un certificado confiable, de lo contrario, el certificado se considera no confiable.

Tercer apretón de manos TLS:

Después de que el cliente verifique el certificado, si cree que es creíble, continúe con la página siguiente. Luego, el cliente generará un nuevo número aleatorio (clave secreta pre-maestra pre-maestra) , cifrará el número aleatorio con la clave pública RSA del servidor y lo enviará al servidor a través del mensaje " Cambiar intercambio de clave de cifrado ".

Después de que el servidor lo recibe, lo descifra con la clave privada RSA para obtener el número aleatorio (pre-maestro) enviado por el cliente.

Hasta ahora, tanto el cliente como el servidor han compartido tres números aleatorios, a saber, Client Random, Server Random y pre-master .

Por tanto, ambas partes generan una clave de sesión (Master Secret) en base a los tres números aleatorios obtenidos , que es una clave simétrica utilizada para cifrar y descifrar los datos de las solicitudes/respuestas HTTP posteriores.

Después de que se genera la clave de sesión, el cliente envía un " Cambiar especificación de cifrado " para indicarle al servidor que comience a enviar mensajes usando cifrado.

Luego, el cliente envía otro mensaje de " Encrypted Handshake Message (Finishd) " para digerir todos los datos enviados previamente, cifrarlos con la clave de sesión (secreto maestro) y dejar que el servidor realice una verificación para verificar si la comunicación cifrada está disponible. y si la información previa del apretón de manos ha sido alterada.

Se puede encontrar que los datos de protocolo de enlace TLS transmitidos antes de "Cambiar especificaciones de cifrado" son todos texto sin formato y luego todo el texto cifrado está cifrado por la clave simétrica.

Cuarto apretón de manos TLS:

El servidor también realiza la misma operación y envía los mensajes " Change Cipher Spec " y " Encrypted Handshake Message ". Si ambas partes verifican que el cifrado y el descifrado están bien, entonces el protocolo de enlace se completa oficialmente.

Finalmente, la "clave de sesión" se utiliza para cifrar y descifrar solicitudes y respuestas HTTP.

El mayor defecto del algoritmo de acuerdo de clave RSA

El mayor problema con el uso del algoritmo de acuerdo de clave RSA es que no admite el secreto directo . Debido a que el cliente usa la clave pública para cifrar el número aleatorio (una de las condiciones utilizadas para generar la clave de cifrado simétrica) al servidor, después de que el servidor lo reciba, lo descifrará con la clave privada para obtener el número aleatorio. Por lo tanto, una vez que se filtre la clave privada del servidor, se descifrarán todos los textos cifrados de comunicación TLS interceptados por terceros en el pasado.

Para resolver este problema, existe un algoritmo de acuerdo de clave DH, y su flujo de trabajo se presenta brevemente aquí.

inserte la descripción de la imagen aquí

El cliente y el servidor generarán cada uno un número aleatorio y lo utilizarán como clave privada, y luego calcularán sus respectivas claves públicas de acuerdo con el anuncio de cálculo público de DH e intercambiarán sus respectivas claves públicas a través del protocolo de enlace TLS. Ambas partes tienen su propia clave privada y la clave pública de la otra parte, y luego ambas partes calculan un número aleatorio en función de los materiales que tienen. El valor de este número aleatorio es el mismo para ambas partes, que puede usarse como clave de cifrado simétrico posterior.

Durante el proceso de intercambio de claves DH, incluso si un tercero intercepta la clave pública pasada en la fase de reconocimiento de TLS , la clave no se puede calcular sin conocer la clave privada, y cada clave de cifrado simétrica se genera en tiempo real y logra la confidencialidad directa. .

Sin embargo, debido a la eficiencia computacional del algoritmo DH, el algoritmo de acuerdo de clave ECDHE apareció más tarde.La mayoría de nuestros sitios web ahora usan el algoritmo de acuerdo de clave ECDHE.

2. Algoritmo DH

Logaritmo discreto aplicado al algoritmo DH:
inserte la descripción de la imagen aquí

Análisis: Xiaohong y Xiaoming generan cada uno sus propias claves privadas (a, b) y calculan sus respectivas claves públicas (A, B) revelando los parámetros públicos (G, P). Hay 5 números en el tablero: P, G , a, A, B, y también hay 5 números en la mano de Xiaoming: P, G, b, B, A.

Luego, Xiaohong realiza la operación: B ^ a (mod P), y el resultado es K, porque la exponenciación de logaritmos discretos tiene una ley conmutativa, por lo que Xiaoming realiza la operación: A ^ b (mod P), y el resultado también es k

Esta K es la clave de cifrado simétrica utilizada entre Xiaohong y Xiaoming , que se puede utilizar como clave de sesión.

Debido a que en el algoritmo de acuerdo de clave DH, las claves pública y privada del servidor son fijas, y solo la clave pública del cliente se genera aleatoriamente durante la sesión, por lo que existe un gran riesgo de seguridad y se abandona.

3. Algoritmo DHE

Según la forma en que se genera la clave privada, el algoritmo DH se divide en dos implementaciones:

  • Algoritmo DH estático, esto ha sido abandonado; (la clave pública del lado del servidor es fija, por lo que el algoritmo DH estático no tiene seguridad de reenvío )

  • Algoritmo DHE, que se usa comúnmente ahora;

DHE (E es efímera (temporal) en todas partes):

Dado que la clave privada de la parte fija corre el riesgo de ser descifrada, entonces el punto clave es que las claves privadas de ambas partes se generan aleatoriamente y son temporales durante cada comunicación de intercambio de claves. Este método también es el algoritmo DHE. . Por lo tanto, incluso si un pirata informático poderoso descifra la clave privada de un determinado proceso de comunicación, la clave privada de otros procesos de comunicación sigue siendo segura, ya que la clave privada de cada proceso de comunicación es irrelevante y única. Esto garantiza la "seguridad hacia adelante" .

4. Algoritmo ECDHE

Debido al bajo rendimiento informático del algoritmo DHE, necesita hacer una gran cantidad de multiplicaciones.Para mejorar el rendimiento del algoritmo DHE, aparece el algoritmo ECDHE , que ahora se usa ampliamente en los algoritmos de intercambio de claves .

El algoritmo ECDHE utiliza las características de la curva elíptica ECC sobre la base del algoritmo DHE y puede calcular la clave pública y la clave de sesión final con menos cómputo.

La siguiente es una historia para describir el principio del algoritmo de acuerdo clave ECDHE

El proceso de Xiaohong y Xiaoming utilizando el algoritmo de intercambio de claves ECDHE:

  • Ambas partes han determinado de antemano qué curva elíptica usar y el punto base G en la curva, ambos públicos;

  • Ambas partes generan aleatoriamente un número aleatorio como la clave privada d y lo multiplican con el punto base G para obtener la clave pública Q (Q = dG). En este momento, las claves públicas y privadas de Xiaohong son Q1 y d1, y las claves públicas de Xiaoming y las claves privadas son Q2 y d2;

  • Las dos partes intercambian sus claves públicas. Finalmente, el punto de cálculo rojo (x1, y1) = d1Q2, y el punto de cálculo pequeño (x2, y2) = d2Q1. Dado que la curva elíptica puede satisfacer el intercambio de multiplicación y la ley asociativa, d1Q2 = d1d2G = d2d1G = d2Q1, por lo que las coordenadas x de ambas partes son las mismas, por lo que es la clave compartida, que es la clave de sesión .

En este proceso, las claves privadas de ambas partes se generan de forma aleatoria y temporal, y no son públicas, incluso con base en información pública (curva elíptica, clave pública y punto base G), es difícil calcular el logaritmo discreto en la curva elíptica (clave privada).

Apretón de manos TSL para el algoritmo de acuerdo de clave ECDHE:

Primer apretón de manos TLS:

El cliente primero envía un mensaje de " Hola del cliente ", que contiene el número de versión de TLS utilizado por el cliente, la lista de conjuntos de cifrado admitidos y el número aleatorio generado (cliente aleatorio).

Segundo apretón de manos TLS:

Cuando el servidor recibe el "hola" del cliente, también devolverá el regalo. Devolverá un mensaje " Hola del servidor " con el número de versión de TLS confirmado por el servidor y un número aleatorio (Servidor aleatorio). selecciona un conjunto de cifrado adecuado.

Sin embargo, el conjunto de cifrado seleccionado esta vez es diferente de RSA. Analicemos el significado de este conjunto de cifrado.

「TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384」

El algoritmo de acuerdo clave utiliza ECDHE;

El algoritmo de firma utiliza RSA;

La comunicación después del apretón de manos utiliza el algoritmo simétrico AES, la longitud de la clave es de 256 bits y el modo de agrupación es GCM;

El algoritmo de resumen usa SHA384;

Luego, para probar su identidad, el servidor envía un mensaje de " Certificado ", que también enviará el certificado al cliente.

Este paso es muy diferente del proceso de reconocimiento de RSA, porque el servidor selecciona el algoritmo de acuerdo de clave ECDHE, por lo que enviará el mensaje " Intercambio de clave de servidor " después de enviar el certificado.

Este servidor de procesos hace tres cosas:

  • Se selecciona la curva elíptica denominada named_curve , y la curva elíptica seleccionada es equivalente al punto base G de la curva elíptica, que se expondrá al cliente;

  • Genere un número aleatorio como clave privada de la curva elíptica del servidor y manténgalo localmente;

  • Calcula la clave pública de la curva elíptica del servidor según el punto base G y la clave privada , que será revelada al cliente.

Para garantizar que la clave pública de la curva elíptica no sea manipulada por un tercero, el servidor utilizará el algoritmo de firma RSA para firmar la clave pública de la curva elíptica del servidor.

Luego, es el mensaje " Servidor Hola Listo ", el servidor le dice al cliente: "Esta es la información que proporcioné, el saludo ha terminado".

En este punto, los dos protocolos de enlace TLS se han completado.Actualmente, el cliente y el servidor comparten la siguiente información a través de texto sin formato: Cliente aleatorio, Servidor aleatorio, curva elíptica utilizada, punto base G de la curva elíptica, curva elíptica del servidor Esta información es muy importante y es el material para la posterior generación de claves de sesión .

Tercer apretón de manos TLS:

Después de que el cliente recibe el certificado del servidor, naturalmente necesita verificar si el certificado es legal.Si el certificado es legal, entonces no hay problema con la identidad del servidor. En el proceso de verificación del certificado, la cadena de certificados se verificará paso a paso para confirmar la autenticidad del certificado, y luego se usará la clave pública del certificado para verificar la firma, de modo que la identidad del servidor pueda ser confirmado Después de la confirmación, puede continuar con el siguiente.

El cliente generará un número aleatorio como clave privada de la curva elíptica del cliente, y luego generará la clave pública de la curva elíptica del cliente de acuerdo con la información proporcionada por el servidor, y luego la enviará al servidor con el mensaje " Intercambio de clave de cliente ". .

En este punto, ambas partes tienen la clave pública de la curva elíptica del otro, su propia clave privada de la curva elíptica y el punto base G de la curva elíptica. Por lo tanto, ambas partes calculan el punto (x, y), donde el valor de la coordenada x es el mismo para ambas partes. Cuando mencionamos el algoritmo ECDHE anteriormente, dijimos que x es la clave de sesión, pero en aplicaciones prácticas, x no lo es. sin embargo, la clave de sesión final .

¿Recuerda que durante la fase de protocolo de enlace TLS, tanto el cliente como el servidor generan un número aleatorio y se lo pasan entre sí?

La clave de sesión final se genera utilizando tres materiales: "número aleatorio del cliente + número aleatorio del servidor + x (clave compartida calculada por el algoritmo ECDHE)" .

La razón por la que es tan problemático es que los diseñadores de TLS no confían en la confiabilidad de los "números pseudoaleatorios" del cliente o servidor. Para garantizar una verdadera aleatoriedad completa, se mezclan tres números aleatorios no confiables, luego el grado de Se reducirá la "aleatoriedad". Muy alta, suficiente para que los piratas informáticos calculen la clave de sesión final, que es más segura.

Después de calcular la clave de sesión, el cliente enviará un mensaje de " Cambiar especificaciones de cifrado ", diciéndole al servidor que use el algoritmo simétrico para cifrar la comunicación más adelante.

A continuación, el cliente enviará un mensaje de " Mensaje de protocolo de enlace cifrado ", hará un resumen de los datos enviados anteriormente y luego los cifrará con la clave simétrica, y permitirá que el servidor realice una verificación para verificar si la clave simétrica generada esta vez no es Se puede usar normalmente.

Cuarto apretón de manos TLS:

Finalmente, el servidor tendrá la misma operación, enviando mensajes " Change Cipher Spec " y " Encrypted Handshake Message ". Si ambas partes verifican que el cifrado y el descifrado están bien, entonces el protocolo de enlace se completa oficialmente. Por lo tanto, las solicitudes y respuestas HTTP encriptadas se pueden enviar y recibir con normalidad.

Supongo que te gusta

Origin blog.csdn.net/weixin_60297362/article/details/123056506
Recomendado
Clasificación