Información general sobre el algoritmo ECDH (Ejemplo CNG)

El protocolo de acuerdo de claves de Diffie-Hellman de curva elíptica (ECDH) permite que dos usuarios creen un acuerdo confidencial compartido.Pueden crearlo a través de un medio público no seguro sin necesidad de tener que intercambiar previamente información privada.El acuerdo confidencial compartido se utiliza normalmente para derivar el material de clave.El material de clave lo puede utilizar un algoritmo simétrico, como el algoritmo del Estándar de cifrado avanzado (AES), para cifrar posteriormente los mensajes.

En el ejemplo de comunicación segura de criptografía de próxima generación (CNG) se muestra las implementaciones de CNG en algoritmos ECDH y AES.Alice, Bob y Mallory crean claves criptográficas en sus métodos Run cuando crean los objetos Communicator.

Matemáticas de ECDH

El protocolo ECDH se basa en dos parámetros públicos: p y g.El parámetro p es un número primo grande y el parámetro g es un entero menor que p.Estos dos parámetros se intercambian a través de una línea no segura.Una vez que Alice y Bob reciben los dos parámetros públicos, seleccionan los enteros privados.Alice elige a y Bob elige b.Estos valores se conocen como claves privadas.

A continuación, Alice y Bob crean claves públicas utilizando los parámetros públicos y sus claves privadas.Alice utiliza (g^a) mod p y Bob utiliza (g^b) mod p.Éstas claven son asimétricas porque no coinciden.

Alice y Bob intercambian estas claves públicas y las utilizan para calcular su acuerdo confidencial compartido.Las matemáticas de ECDH garantizan que Alice y Bob calcularán el mismo acuerdo confidencial compartido aunque no conozcan las claves privadas del otro.

Nota

Solo a, b y g^ab = g^ba se mantienen en secreto.Todos los demás valores son públicos.

Cualquier persona que intercepte el intercambio podrá copiar p, g y las dos claves públicas.Sin embargo, es poco factible generar mediante cálculos un acuerdo secreto compartido a partir de cuatro valores compartidos públicamente sin conocer las claves privadas de Alice y Bob.

Descifrar un mensaje cifrado mediante ECDH utilizando la fuerza bruta (es decir, probando todas las claves posibles) tiene el mismo grado de dificultad que el problema del logaritmo discreto.Sin embargo, el algoritmo ECDH logra el mismo grado de seguridad con longitudes de clave más pequeñas porque se basa en curvas elípticas en lugar de en curvas logarítmicas.

Ejemplo del algoritmo ECDH

En el ejemplo siguiente se utilizan enteros pequeños para mostrar el algoritmo ECDH.

  1. Alice y Bob acuerdan que el número primo será p y la base entera será g:

    p = 83, g = 8

  2. Alice elige un entero secreto, a = 9, y, a continuación, le envía a Bob (g^a) mod p:

    (8^9) mod 83 = 5

  3. Bob elige un entero secreto, b = 21, y, a continuación, le envía a Alice (g^b) mod p:

    (8^21) mod 83 = 18

  4. Alice calcula ( ( (g^b) mod p)^a) mod p:

    (18^9) mod 83 = 24

  5. Bob calcula ( ( (g^a) mod p)^b) mod p:

    (5^21) mod 83 = 24

Alice y Bob calculan el mismo valor (24), porque g^(ab) = g^(ba).Este valor es el acuerdo confidencial compartido.Alice y Bob utilizan este valor para derivar el material de clave que utiliza el algoritmo AES para cifrar sus mensajes.

En este ejemplo se genera un acuerdo secreto compartido con un valor de 24.Puesto que es un valor pequeño, generaría un mensaje cifrado que podría ser interceptado fácilmente por un ataque por fuerza bruta.En un caso real, p, g, a y b serían números mucho mayores y se requeriría una máquina para poder generar el acuerdo confidencial compartido correspondiente.

Las clases CNG que se utilizan en el ejemplo de comunicación segura abstraen las matemáticas complejas.Esto le permite concentrarse en la implementación de las soluciones de seguridad en lugar de preocuparse de multiplicar grandes números.

Limitaciones del protocolo

El protocolo de intercambio de claves de ECDH no impide los ataques de tipo "Man in the middle" porque no autentica los remitentes de las claves públicas.Si un espía, Mallory, intercepta la clave pública de Alice, puede sustituirla por su propia clave pública y enviársela a Bob.Mallory también puede interceptar la clave pública de Bob, sustituirla por la suya propia y enviársela a Alice.A continuación, Mallory podrá descifrar fácilmente cualquier mensaje que se envíen Alice y Bob.Puede modificar los mensajes, cifrarlos de nuevo con su propia clave y enviarlos a continuación a sus destinatarios.

Para resolver a este problema, Alice y Bob pueden utilizar firmas digitales para firmar las claves públicas antes de intercambiarlas.Existen dos modos para hacer esto:

  • Utilizar un medio seguro, como la comunicación oral o un mensajero de confianza, para transmitir una clave de firma digital entre las dos partes.

  • Utilizar una entidad de certificación pública (CA) para que proporcione una clave de firma digital de confianza a ambas partes.

En ambos casos, se debe utilizar un esquema de autenticación externo para comprobar la identidad de los remitentes de la clave pública.En el ejemplo CNG se muestra lo que puede ocurrir si no se autentican los remitentes de las claves.Esta situación se creó específicamente para que pudiera producirse un ataque de seguridad.

Claves simétricas y asimétricas

Los sistemas asimétricos, como ECDH, son muy lentos.Por ello, no se utilizan para cifrar mensajes grandes.En su lugar, se utilizan los sistemas simétricos, como AES, que son mucho más rápidos.

Una solución criptográfica clásica utiliza un sistema asimétrico para derivar un acuerdo confidencial compartido simétrico.El acuerdo confidencial compartido se utiliza a continuación para derivar el material de clave que utiliza un algoritmo simétrico para cifrar un mensaje.

En el ejemplo de comunicación segura CNG se representa este comportamiento tal y como se detalla a continuación:

  • Se utiliza un algoritmo asimétrico, la implementación de CNG del algoritmo ECDH (la clase ECDiffieHellmanCng ), para derivar una clave de cifrado simétrica (el acuerdo confidencial compartido).

  • El método de CNG ECDiffieHellmanCng.DeriveKeyMaterial utiliza a continuación esta clave para derivar el material de clave.La implementación de CNG del algoritmo simétrico AES (la clase Aes ) utiliza el material de clave para cifrar los mensajes.

Vea también

Conceptos

Ejemplo de comunicación segura de criptografía de próxima generación (CNG)

Servicios criptográficos