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

26

Mi interesso solo delle chiavi RSA, quindi i metodi di scambio sono RSA (genera una chiave, criptalo e invialo) e [EC] DHE_RSA (genera un codice DH [EC] effimero, firmalo, e usarlo per accordo di chiave).

L'effettiva operazione in RSA è "Key Encipherment", e in [EC]DHE_RSA è la firma digitale, ma sono entrambe le forme di accordo chiave. Quindi, quale "chiave crittografica", "firma digitale" e "accordo chiave" sono necessari nell'estensione di utilizzo chiave per ciascun metodo? Non sono stato in grado di trovare questo specificato da nessuna parte e probabilmente varia a seconda dell'implementazione, quindi la risposta potrebbe essere una tabella per implementazione.

    
posta Ben Jencks 17.11.2012 - 00:02
fonte

1 risposta

29

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.

    
risposta data 17.11.2012 - 04:59
fonte

Leggi altre domande sui tag