Criptografía asimétrica
La creación de una sesión TLS tiene dos partes diferentes. Existe la criptografía asimétrica , que es un intercambio de claves públicas entre dos puntos. Que es lo que viste en tu ejemplo de Alicia y Bob. Esto solo permite el intercambio de claves asimétricas para el cifrado / descifrado asimétrico. Esta es la parte ECDHE . La parte RSA describe el algoritmo de firma utilizado para autenticar el intercambio de claves. Esto también se realiza con criptografía asimétrica. La idea es que usted firme los datos con su clave privada, y luego la otra parte puede verificar con su clave pública.
Criptografía simétrica
Cifras claves de cifrado / descifrado simétricas con tu clave asimétrica. El cifrado asimétrico es muy lento (relativamente hablando). No quieres tener que cifrar con él constantemente. Esto es para lo que Criptografía simétrica . Así que ahora estamos en AES_128_GCM .
- AES es el algoritmo simétrico
- 128 se refiere al tamaño de la clave en bits
- GCM es el modo de operación
Entonces, ¿qué es exactamente lo que cifra nuestra clave asimétrica? Bueno, queremos esencialmente cifrar la clave simétrica (en este caso 128 bits, 16 bytes). Si alguien conociera la clave simétrica podría descifrar todos nuestros datos. Para TLS la clave simétrica no se envía directamente. Algo llamado el secreto pre-maestro es encriptado y enviado. A partir de este valor, el cliente y el servidor pueden generar todas las claves e IV necesarios para el cifrado y la integridad de los datos. vistazo detallado al intercambio de claves TLS
Integridad de los datos
Integridad de los datos es necesaria durante todo este proceso, así como con el canal cifrado. Como se vio al buscar GCM, el modo de operación de encriptación en sí mismo proporciona la integridad de los datos encriptados. Sin embargo, el propio apretón de manos de clave pública también debe ser confirmado. Si alguien en el medio cambió los datos mientras se transmitían, ¿cómo podríamos saber que no se alteró nada? Esta es la instancia en la que se utiliza la función hash negociada, SHA256 . Cada pieza del apretón de manos se mezcla y el hash final se transmite junto con el secreto pre-master cifrado. El otro lado verifica este hash para garantizar que se recibieron todos los datos que estaban destinados a ser enviados.
SHA256 , como lo menciona otro póster, también se usa para la función pseudoaleatoria (PRF). Esto es lo que expande el secreto pre-maestro enviado entre las dos partes a las claves de sesión que necesitamos para el cifrado.
Para otros modos de operación, cada mensaje también se procesaría con este algoritmo de integridad. Cuando los datos se descifran, el hash se verifica antes de utilizar el texto sin formato.
Aquí hay una gran explicación de cómo suceden estas derivaciones para diferentes versiones de TLS.
¡Reúna todas estas piezas y tendrá un modo de comunicación seguro!
Puede enumerar todos los cifrados posibles que OpenSSL admite con openssl ciphers
. Puede ir más allá e imprimir los detalles de cualquiera de estas suites de cifrado con el -V
Por ejemplo:
$ openssl ciphers -V ECDHE-RSA-AES256-GCM-SHA384
0xC0,0x30 - ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD
-
0xC0,0x30
representa el identificador de dos bytes para el conjunto de cifrado
-
Kx=ECDH
representa el algoritmo de intercambio de claves
-
Au=RSA
representa el algoritmo de autenticación
-
Enc=AESGCM(256)
representa el algoritmo de cifrado simétrico
-
Mac=AEAD
representa el algoritmo de verificación de autenticación de mensajes utilizado