Un esquema de intercambio de claves consta de dos algoritmos:
- Algoritmos de generación de claves, que seleccionan aleatoriamente un par de llaves;
- Un algoritmo de intercambio de claves, que toma como entrada su clave privada y la clave pública de la parte remota, y genera un secreto compartido.
Un esquema de firma es un triple de algoritmos:
- Un algoritmo de generación de claves, que selecciona aleatoriamente un par de llaves.
- Un algoritmo de firma, que toma un mensaje y una clave privada y genera una firma.
- Un algoritmo de verificación, que toma un mensaje, una firma y una clave pública, y genera un booleano que indica si la combinación es válida.
Para realizar un intercambio de clave efímero autenticado, las partes deben acordar un esquema de intercambio de clave y un esquema de firma, y deben tener una clave pública autenticada de la firma. Entonces:
- Ambas partes generan su propio par de claves de intercambio de claves efímeras;
- Ambas partes firman su clave pública de intercambio de clave efímera;
- Ambas partes envían su clave pública de intercambio de clave efímera a la otra, junto con la firma de esa clave;
- Ambas partes verifican la firma en la clave pública de intercambio de clave efímera del otro y abortan si no es válida;
- Ambas partes ahora usan su clave privada de intercambio de clave efímera y la clave pública de intercambio de clave efímera del otro para calcular el secreto compartido.
Esto también puede hacerse haciendo que solo una de las partes firme su clave pública de intercambio de clave efímera. Así es como normalmente hacemos HTTPS, por ejemplo. La otra parte, a continuación, no obtiene ninguna garantía de que la otra persona sea quien dice ser.
Puede elegir cualquier combinación de firma y algoritmos Diffie-Hellman para esto. No importa si el esquema de firma es RSA y el esquema de intercambio de claves es ECDH. En ese caso, el paso # 1 usa el algoritmo de generación de claves ECDH para generar un par de llaves ECDHE, y luego el paso # 2 usa el algoritmo de firma RSA para firmar esa clave pública ECDHE. Al algoritmo de firma no le importa que el mensaje que está firmando sea una clave pública de ECDHE: solo son datos para que una parte firme y luego la otra para verificar.
Otra cosa a tener en cuenta es que el título de tu pregunta revela que estás confundido acerca de algo:
RSA o ECDHE para los certificados x.509: ¿qué hace cada uno?
ECDHE no está involucrado en el certificado. El certificado contiene una clave de firma pública , los metadatos que describen a su propietario y las firmas para ayudar al destinatario a autenticar que los metadatos son precisos. El algoritmo de firma más popular utilizado en los certificados es RSA. ECDSA es otra alternativa. ECDH no es relevante, porque no es un algoritmo de firma.
Con los certificados, el algoritmo de boceto anterior se modificaría agregando dos pasos al principio:
- Ambas partes se envían sus certificados entre sí.
- Ambas partes usan su PKI para verificar el certificado del otro y abortan si no es válido.
Luego, el procedimiento continúa utilizando las claves adjuntas del certificado para firmar y verificar el intercambio de claves.