it-swarm.dev

Quali usi chiave sono richiesti da ciascun metodo di scambio chiave?

Mi occupo solo delle chiavi RSA, quindi i metodi di scambio sono RSA (genera una chiave, crittografala e inviala) e [EC] DHE_RSA (genera una chiave DH [EC] effimera, firmala e usala per accordo chiave).

L'operazione effettiva in RSA è "Key Enccrypment" e in [EC]DHE_RSA è la firma digitale, ma sono entrambe forme di accordo chiave. Quindi, quali "Crittografia chiave", "Firma digitale" e "Accordo chiave" sono necessari nell'estensione di utilizzo della chiave per ciascun metodo? Non sono stato in grado di trovare questo specificato da nessuna parte e probabilmente varia in base all'implementazione, quindi la risposta potrebbe essere una tabella per implementazione.

28
Ben Jencks

L'estensione Key Usage è descritta nella sezione 4.2.1.3 di X.509 , con i seguenti flag possibili:

  KeyUsage ::= BIT STRING {
       digitalSignature        (0),
       nonRepudiation          (1), -- recent editions of X.509 have
                            -- renamed this bit to contentCommitment
       keyEncipherment         (2),
       dataEncipherment        (3),
       keyAgreement            (4),
       keyCertSign             (5),
       cRLSign                 (6),
       encipherOnly            (7),
       decipherOnly            (8) }

In SSL/TLS , quando il certificato del server contiene una chiave RSA, quindi:

  • viene utilizzata una suite di crittografia DHE o ECDHE, nel qual caso la chiave RSA viene utilizzata per una firma (vedere la sezione 7.4.3 di RFC 5246: il messaggio "Scambio di chiavi del server"); questo esercita l'uso della chiave digitalSignature ;

  • o "RSA semplice" viene utilizzato, con un valore casuale (il segreto pre-master a 48 byte) che viene crittografato dal client con la chiave pubblica del server (vedere la sezione 7.4.7.1 di RFC 5246); questo è proprio nella definizione del flag di utilizzo della chiave keyEncipherment .

dataEncipherment non si applica, perché ciò che è crittografato non sono dati direttamente significativi, ma un valore che viene principalmente generato in modo casuale e utilizzato per derivare chiavi simmetriche. keyAgreement non si applica neanche, perché quello vale per gli algoritmi di accordo chiave che non sono un caso di crittografia asimmetrica (ad esempio Diffie-Hellman). Il flag di utilizzo keyAgreement apparirà in un certificato che contiene una chiave DH, non una chiave RSA. nonRepudiation non viene utilizzato, poiché tutto ciò che è firmato come parte di uno scambio di chiavi SSL/TLS non può essere utilizzato come prova per terze parti (non esiste nulla in un tunnel SSL/TLS che il client possa registrare e quindi utilizzare per convincere un giudice quando tenta di citare in giudizio il server stesso; i dati scambiati all'interno del tunnel non sono firmati dal server).

Per riassumere: digitalSignature per le suite di crittografia (EC) DHE, keyEncipherment per semplici suite di cifratura RSA. Tuttavia, alcune implementazioni accettano anche keyAgreement al posto di keyEncipherment , oppure nonRepudiation anche se digitalSignature non è impostato; e alcuni ignoreranno totalmente l'estensione dell'utilizzo delle chiavi (anche se contrassegnata come critica). Per la massima interoperabilità, specificare tutti e quattro i flag nell'estensione Utilizzo chiave.

35
Thomas Pornin