Colección de citas famosas - Slogan de motivación - Algoritmo de acuerdo de claves Diffie-Hellman

Algoritmo de acuerdo de claves Diffie-Hellman

Los algoritmos de cifrado más utilizados actualmente incluyen principalmente: algoritmo hash (como MD5, familia SHA, Hmac), algoritmo de cifrado simétrico (como AES), algoritmo de cifrado asimétrico (RSA), algoritmo de acuerdo de claves Diffie-Hellman, etc. Estos algoritmos tienen sus propias características y son adecuados para diferentes escenarios. Aquí hay sólo una breve introducción. Si desea saber más, hay mucha información en línea, por lo que puede consultar la información relevante usted mismo.

Características de varios algoritmos:

Algoritmo hash: avance rápido, irreversible, es decir, es difícil descifrar el texto plano después del cifrado. Normalmente se utiliza para el cifrado y la verificación de datos.

Algoritmo de cifrado simétrico: AES es un algoritmo de cifrado simétrico de uso común, que se caracteriza por utilizar la misma clave para el cifrado y descifrado.

Algoritmo de cifrado asimétrico RSA: El algoritmo RSA es un algoritmo de cifrado asimétrico. Un par de claves que consta de una clave privada y una clave pública se cifra con la clave privada y se descifra con la clave pública, o se cifra con la clave pública y se descifra con la clave privada. Entre ellos, la clave pública puede hacerse pública y la clave privada debe mantenerse en secreto.

Algoritmo de acuerdo de claves Diffie-Hellman: Diffie-Hellman es un algoritmo de acuerdo de claves (algoritmo DH para abreviar). El algoritmo DH se basa en un principio matemático y se puede negociar sin revelar una clave.

En el proceso de envío de datos del cliente al servidor, si se trata de datos importantes (como contraseñas, datos confidenciales, etc.), generalmente es necesario cifrarlos en el cliente antes de enviarlos, y el servidor lo descifrará después de recibirlo para obtener los datos originales. (Lo mismo ocurre con el servidor que devuelve datos al cliente).

Supongamos que el cliente y el servidor utilizan AES (algoritmo de cifrado simétrico) para cifrar y descifrar los datos transmitidos. Una característica del algoritmo de cifrado AES es que tanto el cifrado como el descifrado utilizan la misma clave (aquí llamada secretKey), por lo que ambas partes utilizan secretKey para cifrar y descifrar datos.

Entonces, cuando el cliente transmite datos al servidor por primera vez, necesita obtener la clave secreta del servidor y guardarla en el cliente. Este proceso de obtener la clave secreta en texto plano directamente del servidor puede ser fácil. ser interceptado por un tercero, es decir, este proceso no es seguro. (Jaja, a menos que el servidor escriba la clave secreta en papel y se la entregue en secreto al cliente)

Por lo tanto, el proceso por el cual el cliente obtiene la clave secreta del servidor también debe estar cifrado.

Entonces, ¿qué debe hacer el servidor para entregar de forma segura la clave secreta al cliente?

Los métodos más utilizados actualmente incluyen RSA o Diffie-Hellman.

RSA tiene claves públicas y claves privadas. La clave pública puede hacerse pública y la clave privada está reservada. El punto clave de RSA es que los datos cifrados con la clave pública deben descifrarse con la clave privada y los datos cifrados con la clave privada deben descifrarse con la clave pública. Entonces, por ejemplo, en este momento, el cliente envía la clave pública al servidor y el servidor cifra la clave secreta con la clave pública del cliente. Luego, solo la clave privada del cliente puede desbloquear los datos de la clave secreta cifrada. Incluso si un tercero obtiene los datos, no puede descifrarlos a menos que pueda obtener la clave privada del cliente.

Así, a través de RSA, el servidor puede entregar de forma segura la clave secreta al cliente. (Sin embargo, RSA también tiene agujeros de seguridad, llamados ataques de intermediario. ¡Por razones de espacio, no entraré en ellos aquí! Puedes Baidu tú mismo.)

Aunque RSA puede hacerlo de manera segura transmitir secretKey, el problema es que necesita generar un par de claves públicas y una clave privada y enviar la clave pública a la otra parte, la velocidad de cifrado y descifrado es lenta. Por tanto, se introdujo un segundo tipo: el algoritmo de acuerdo de claves Diffie-Hellman.

Estrictamente hablando, el algoritmo DH no es en realidad un algoritmo de cifrado porque no se utiliza para el cifrado en sí. Tengo entendido que se utiliza para cálculos negociados por ambas partes, es decir, ambas partes calculan según un determinado contrato y así calculan el mismo resultado.

El principio es el siguiente:

Paso 1: Inicialización

Por ejemplo, el servidor ahora proporciona dos números de clave pública aleatoria (el público lo permite): pubN= 10, modN = 3;

El cliente genera un número de clave privada aleatoria (no pública, el servidor no lo sabe): cPrivN = 2;

El servidor también genera una clave privada aleatoria número de clave (no pública, el servidor no lo sabe) El cliente no lo sabe): sPrivN = 4;

Paso 2: el cliente y el servidor realizan cálculos basados ​​en la misma fórmula matemática respectivamente, y el cálculo El resultado se denomina resultado de clave pública: pubResult.

El cliente realiza cálculos matemáticos: resultado de CPU b = PUBN * CPRIVN MODN = 10 * 2 3 = 2 (se permite revelar los resultados del cálculo)

El servidor realiza cálculos matemáticos; cálculos: spubresult = pubn * Sprivn MODN = 10 * 4 3 = 1; (se permite revelar los resultados del cálculo)

El cliente y el servidor intercambian los resultados de la clave pública, el cliente obtiene sPubResult=1 y el servidor obtiene cPubResult=2.

Paso 3: Número de clave acordado: keyN (los resultados obtenidos por el cliente y el servidor son los mismos)

Cliente: ckeyn = spubresult * cprivn MODN = 1 * 2 3 = 2 ;

servidor: skeyn = CPU b resultado * spritvn modn = 2 * 4 3 = 2

Hasta ahora, ambas partes han negociado la clave y son consistentes. Sin embargo, ¿alguna vez has visto que la clave es del tipo #? Probablemente no, por lo que se necesita un cuarto paso para generar una clave más larga.

Paso 4: aplique hash al número de clave para generar la cadena de clave.