Uno schema di scambio di chiavi è costituito da due algoritmi:
- Un algoritmo di generazione di chiavi, che seleziona casualmente una coppia di chiavi;
- Un algoritmo di scambio di chiavi, che prende come input la tua chiave privata e la chiave pubblica del partecipante remoto e genera un segreto condiviso.
Uno schema di firma è una tripla di algoritmi:
- Un algoritmo di generazione della chiave, che seleziona casualmente una coppia di chiavi.
- Un algoritmo di firma, che accetta un messaggio e una chiave privata e emette una firma.
- Un algoritmo di verifica, che accetta un messaggio, una firma e una chiave pubblica, e restituisce un valore booleano che indica se la combinazione è valida.
Per eseguire uno scambio di chiavi effimero autenticato, le parti devono concordare uno schema di scambio di chiavi e uno schema di firma e devono avere la propria chiave pubblica autenticata. Poi:
- Entrambe le parti generano la propria coppia di chiavi di scambio temporaneo;
- Entrambe le parti firmano la loro chiave pubblica di scambio di chiavi effimere;
- Entrambe le parti inviano la loro chiave pubblica di scambio delle chiavi effimere all'altra, insieme alla firma di quella chiave;
- Entrambe le parti controllano la firma sulla chiave pubblica di scambio temporaneo dell'altro e interrompono se non è valida;
- Entrambe le parti utilizzano ora la loro chiave privata di scambio di chiavi effimere e la chiave pubblica di scambio temporanea dell'altro per calcolare il segreto condiviso.
Questo può essere fatto anche facendo in modo che solo una delle parti firmi la chiave pubblica di scambio delle chiavi effimere. Ecco come facciamo normalmente HTTPS, per esempio. L'altra parte quindi non ottiene alcuna garanzia che l'altro sia quello che dichiara di essere.
Puoi scegliere qualsiasi combinazione di algoritmi firma e Diffie-Hellman per questo. Non importa se lo schema della firma è RSA e lo schema di scambio delle chiavi è ECDH. In tal caso, il passo 1 utilizza l'algoritmo di generazione della chiave ECDH per generare una coppia di chiavi ECDHE, quindi il passo 2 utilizza l'algoritmo di firma RSA per firmare la chiave pubblica ECDHE. L'algoritmo della firma non si preoccupa del fatto che il messaggio che sta firmando sia una chiave pubblica ECDHE: sono solo i dati che una parte deve firmare e poi l'altra da verificare.
Un'altra cosa da notare è che il titolo della tua domanda rivela che sei confuso da qualcosa:
RSA or ECDHE for x.509 certificates-what does each do?
ECDHE non è coinvolto nel certificato. Il certificato contiene una chiave di firma pubblica , i metadati che descrivono il suo proprietario e le firme per aiutare il destinatario a verificare che i metadati siano accurati. L'algoritmo di firma più utilizzato nei certificati è RSA. ECDSA è un'altra alternativa. ECDH non è rilevante, perché non è un algoritmo di firma.
Con i certificati, l'algoritmo dello schizzo sopra sarebbe modificato aggiungendo due passaggi all'inizio:
- Entrambe le parti inviano il loro certificato a vicenda.
- Entrambe le parti utilizzano il proprio PKI per verificare il certificato dell'altro e interrompono se non è valido.
Quindi la procedura continua utilizzando le chiavi in dotazione del certificato per firmare e verificare lo scambio di chiavi.