6. Metodi di distribuzione della chiave del contenuto
- Metodi di distribuzione della chiave del contenuto
La sezione 8.5 di [RFC9052] contiene una descrizione generica dei metodi di distribuzione della chiave del contenuto. Questo documento definisce gli identificatori e l'utilizzo per una serie di metodi di distribuzione della chiave del contenuto.
6.1. Crittografia diretta
Un algoritmo di crittografia diretta è definito nella sezione 8.5.1 di [RFC9052]. Le informazioni su come compilare la struttura COSE_Recipient sono descritte in dettaglio lì.
6.1.1. Chiave diretta (Direct Key)
Questo algoritmo del destinatario è il più semplice; la chiave identificata viene utilizzata direttamente come chiave per il livello successivo nel messaggio. Non ci sono parametri dell'algoritmo definiti per questo algoritmo. Il valore dell'identificatore dell'algoritmo è assegnato nella Tabella 11.
Quando viene utilizzato questo algoritmo, il campo "protected" DEVE avere lunghezza zero. Il tipo di chiave DEVE essere "Symmetric".
+========+=======+============================================+
| Nome | Valore| Descrizione |
+========+=======+============================================+
| direct | -6 | Uso diretto della chiave di crittografia |
| | | del contenuto (CEK) |
+--------+-------+--------------------------------------------+
Tabella 11: Chiave diretta
6.1.2. Chiave diretta con KDF (Direct Key with KDF)
Questi algoritmi del destinatario prendono un segreto condiviso comune tra le due parti e applicano la funzione HKDF (Sezione 5.1), utilizzando la struttura del contesto definita nella Sezione 5.2 per trasformare il segreto condiviso nella CEK. Il campo "protected" può avere una lunghezza diversa da zero. O il parametro "salt" per HKDF (Tabella 9) o il parametro "PartyU nonce" per la struttura del contesto (Tabella 10) DEVE essere presente (entrambi possono essere presenti se lo si desidera). Il valore nel parametro "salt"/"nonce" può essere generato in modo casuale o deterministico. Il requisito è che sia un valore univoco per il segreto condiviso in questione.
Se il valore salt/nonce viene generato in modo casuale, si suggerisce che la lunghezza del valore casuale sia la stessa dell'output della funzione hash sottostante a HKDF. Sebbene non ci sia modo di garantire che sarà univoco, c'è un'alta probabilità che lo sia. Se il valore salt/nonce viene generato in modo deterministico, può essere garantito come univoco e quindi non vi è alcun requisito di lunghezza.
6.2. Avvolgimento della chiave (Key Wrap)
L'avvolgimento della chiave è definito nella sezione 8.5.2 di [RFC9052]. Le informazioni su come compilare la struttura COSE_Recipient sono descritte in dettaglio lì.
6.2.1. Avvolgimento della chiave AES (AES Key Wrap)
L'algoritmo AES Key Wrap è definito in [RFC3394]. Questo algoritmo utilizza una chiave AES per avvolgere un valore che è un multiplo di 64 bit. Come tale, può essere utilizzato per avvolgere una chiave per uno qualsiasi degli algoritmi di crittografia del contenuto definiti in questo documento. L'algoritmo richiede un singolo parametro fisso, il valore iniziale. Questo è fissato al valore specificato nella Sezione 2.2.3.1 di [RFC3394]. Non ci sono parametri di chiave pubblica che variano in base alla chiamata. Il bucket dell'intestazione protetta DEVE essere vuoto.
+========+=======+==========+=============================+
| Nome | Valore| Dim. | Descrizione |
+========+=======+==========+=============================+
| A128KW | -3 | 128 | AES Key Wrap (chiave 128) |
+--------+-------+----------+-----------------------------+
| A192KW | -4 | 192 | AES Key Wrap (chiave 192) |
+--------+-------+----------+-----------------------------+
| A256KW | -5 | 256 | AES Key Wrap (chiave 256) |
+--------+-------+----------+-----------------------------+
Tabella 13: Valori dell'algoritmo AES Key Wrap
6.3. Accordo di chiave diretto (Direct Key Agreement)
L'accordo di chiave diretto è definito nella sezione 8.5.4 di [RFC9052]. Le informazioni su come compilare la struttura COSE_Recipient sono descritte in dettaglio lì.
6.3.1. ECDH diretto (Direct ECDH)
La matematica per ECDH si trova in [RFC6090]. In questo documento, l'algoritmo è esteso per essere utilizzato con le due curve definite in [RFC7748].
ECDH è parametrizzato da quanto segue:
Curve Type/Curve: La curva selezionata controlla non solo la dimensione del segreto condiviso, ma anche la matematica per calcolare il segreto condiviso.
Computed Secret to Shared Secret: Una volta noto il segreto calcolato, il valore risultante deve essere convertito in una stringa di byte per eseguire la KDF.
Ephemeral-Static or Static-Static: Il processo di accordo della chiave può essere eseguito utilizzando una chiave statica o una chiave effimera per il lato del mittente.
Key Derivation Algorithm: Il risultato di un processo di accordo della chiave ECDH non fornisce un segreto uniformemente casuale. Come tale, deve essere eseguito attraverso una KDF per produrre una chiave utilizzabile.
Key Wrap Algorithm: Non viene utilizzato alcun algoritmo di avvolgimento della chiave.
L'insieme degli algoritmi ECDH diretti definiti in questo documento si trova nella Tabella 14.