L'estensione Uso chiave è descritta nella sezione 4.2.1.3 di X.509 , con le seguenti possibili bandiere:
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 "Server Key Exchange"); questo esercita l'uso della chiave digitalSignature ;
-
o "plain RSA" 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 è giusto nella definizione del flag di utilizzo della chiave keyEncipherment .
dataEncipherment non si applica, perché ciò che è crittografato non è un dato direttamente significativo, ma un valore che è in gran parte generato casualmente e utilizzato per derivare chiavi simmetriche. keyAgreement non si applica neanche perché questo è per algoritmi di accordi chiave che non sono un caso di crittografia asimmetrica (ad esempio Diffie-Hellman). Il flag di utilizzo chiaveAgreement verrà visualizzato in un certificato che contiene una chiave DH, non una chiave RSA. nonRepudiation non è usato, perché qualunque cosa sia firmata come parte di uno scambio di chiavi SSL / TLS non può essere usata come prova per una terza parte (non c'è 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 che vengono scambiati all'interno del tunnel non sono firmati dal server).
Per riassumere: digitalSignature per suite di crittografia DHE (CE), keyEncipherment per suite di crittografia RSA semplici. Tuttavia, alcune implementazioni accetteranno anche keyAgreement al posto di keyEncipherment o nonRepudiation anche se digitalSignature non è impostato; e alcuni ignoreranno totalmente l'estensione Uso chiave (anche se contrassegnata come critica). Per la massima interoperabilità, specifica tutti e quattro i flag nell'estensione Uso chiave.