Passa al contenuto principale

7. Parametri dell'oggetto chiave

  1. Parametri dell'oggetto chiave

L'oggetto COSE_Key definisce un modo per contenere un singolo oggetto chiave. È comunque necessario definire i membri dei singoli tipi di chiave. Questa sezione del documento definisce un set iniziale di membri per tipi di chiave specifici.

Per ciascuno dei tipi di chiave, definiamo sia membri pubblici che privati. I membri pubblici sono ciò che viene trasmesso ad altri per il loro utilizzo. I membri privati consentono agli individui di archiviare le chiavi. Tuttavia, ci sono alcune circostanze in cui le chiavi private possono essere distribuite a entità in un protocollo. Esempi includono: entità che hanno una scarsa generazione di numeri casuali, creazione centralizzata di chiavi per operazioni di tipo multicast e protocolli in cui un segreto condiviso viene utilizzato come token portatore per scopi di autorizzazione.

I tipi di chiave sono identificati dal membro "kty" dell'oggetto COSE_Key. In questo documento, definiamo quattro valori per il membro:

         +===========+=======+==========================+
| Nome | Valore| Descrizione |
+===========+=======+==========================+
| OKP | 1 | Coppia di chiavi ottetto |
+-----------+-------+--------------------------+
| EC2 | 2 | Chiavi a curva ellittica |
| | | con coppia coord. x e y |
+-----------+-------+--------------------------+
| Symmetric | 4 | Chiavi simmetriche |
+-----------+-------+--------------------------+
| Reserved | 0 | Questo valore è riservato|
+-----------+-------+--------------------------+

Tabella 17: Valori del tipo di chiave

7.1. Chiavi a curva ellittica

Sono definite due diverse strutture di chiavi per le chiavi a curva ellittica. Una versione utilizza sia una coordinata x che una coordinata y, potenzialmente con compressione del punto ("EC2"). Questa è la rappresentazione convenzionale del punto della curva ellittica (EC) utilizzata in [RFC5480]. L'altra versione utilizza solo la coordinata x, poiché la coordinata y deve essere ricalcolata o non è necessaria per l'operazione di accordo della chiave ("OKP").

Le applicazioni DEVONO verificare che la curva e il tipo di chiave siano coerenti e rifiutare una chiave se non lo sono.

+=========+=======+==========+=====================================+ | Nome | Valore| Tipo ch. | Descrizione | +=========+=======+==========+=====================================+ | P-256 | 1 | EC2 | NIST P-256, noto anche secp256r1 | +---------+-------+----------+-------------------------------------+ | P-384 | 2 | EC2 | NIST P-384, noto anche secp384r1 | +---------+-------+----------+-------------------------------------+ | P-521 | 3 | EC2 | NIST P-521, noto anche secp521r1 | +---------+-------+----------+-------------------------------------+ | X25519 | 4 | OKP | X25519 per uso solo con ECDH | +---------+-------+----------+-------------------------------------+ | X448 | 5 | OKP | X448 per uso solo con ECDH | +---------+-------+----------+-------------------------------------+ | Ed25519 | 6 | OKP | Ed25519 per uso solo con EdDSA | +---------+-------+----------+-------------------------------------+ | Ed448 | 7 | OKP | Ed448 per uso solo con EdDSA | +---------+-------+----------+-------------------------------------+

                    Tabella 18: Curve ellittiche

7.1.1. Curve a doppia coordinata

Generalmente, i protocolli trasmettono punti della curva ellittica come coordinata x e coordinata y o come coordinata x e un bit di segno per la coordinata y. Quest'ultima codifica non è stata raccomandata dall'IETF a causa di potenziali problemi di IPR. Tuttavia, per le operazioni in ambienti vincolati, la capacità di ridurre un messaggio non inviando la coordinata y è potenzialmente utile.

Per le chiavi EC con entrambe le coordinate, il membro "kty" è impostato a 2 (EC2). I parametri chiave definiti in questa sezione sono riassunti nella Tabella 19. I membri definiti per questo tipo di chiave sono:

crv: Contiene un identificatore della curva da utilizzare con la chiave. Le curve definite in questo documento per questo tipo di chiave si trovano nella Tabella 18. Altre curve possono essere registrate in futuro e possono essere utilizzate anche curve private.

x: Contiene la coordinata x per il punto EC. L'intero viene convertito in una stringa di byte come definito in [SEC1]. Gli ottetti zero iniziali DEVONO essere preservati.

y: Contiene il bit di segno o il valore della coordinata y per il punto EC. Quando si codifica il valore y, l'intero viene convertito in una stringa di byte (come definito in [SEC1]) e codificato come bstr CBOR. Gli ottetti zero iniziali DEVONO essere preservati. È supportata anche la codifica del punto compresso. Calcolare il bit di segno come stabilito nella funzione di conversione da punto della curva ellittica a stringa di ottetti di [SEC1]. Se il bit di segno è zero, codificare y come valore CBOR false; altrimenti, codificare y come valore CBOR true. La codifica del punto all'infinito non è supportata.

d: Contiene la chiave privata.

Per le chiavi pubbliche, è RICHIESTO che "crv", "x" e "y" siano presenti nella struttura. Per le chiavi private, è RICHIESTO che "crv" e "d" siano presenti nella struttura. Per le chiavi private, è RACCOMANDATO che anche "x" e "y" siano presenti, ma possono essere ricalcolati dagli elementi richiesti e ometterli consente di risparmiare spazio.

+======+======+=======+========+=================================+
| Tipo | Nome | Etich.| Tipo | Descrizione |
| Chia.| | | CBOR | |
+======+======+=======+========+=================================+
| 2 | crv | -1 | int / | Identificatore EC -- Preso dal |
| | | | tstr | registro "COSE Elliptic Curves" |
+------+------+-------+--------+---------------------------------+
| 2 | x | -2 | bstr | coordinata x |
+------+------+-------+--------+---------------------------------+
| 2 | y | -3 | bstr / | coordinata y |
| | | | bool | |
+------+------+-------+--------+---------------------------------+
| 2 | d | -4 | bstr | Chiave privata |
+------+------+-------+--------+---------------------------------+

Tabella 19: Parametri chiave EC

7.2. Coppia di chiavi ottetto

È definito un nuovo tipo di chiave per coppie di chiavi ottetto (OKP). Non dare per scontato che le chiavi che utilizzano questo tipo siano curve ellittiche. Questo tipo di chiave potrebbe essere utilizzato per altri tipi di curve (ad esempio, matematica basata su superfici iperellittiche).

I parametri chiave definiti in questa sezione sono riassunti nella Tabella 20. I membri definiti per questo tipo di chiave sono:

crv: Contiene un identificatore della curva da utilizzare con la chiave. Le curve definite in questo documento per questo tipo di chiave si trovano nella Tabella 18. Altre curve possono essere registrate in futuro e possono essere utilizzate anche curve private.

x: Contiene la chiave pubblica. La stringa di byte contiene la chiave pubblica come definita dall'algoritmo. (Per X25519, internamente è un intero little-endian.)

d: Contiene la chiave privata.

Per le chiavi pubbliche, è RICHIESTO che "crv" e "x" siano presenti nella struttura. Per le chiavi private, è RICHIESTO che "crv" e "d" siano presenti nella struttura. Per le chiavi private, è RACCOMANDATO che anche "x" sia presente, ma può essere ricalcolato dagli elementi richiesti e ometterlo consente di risparmiare spazio.

+======+==========+=======+=======+=================================+ | Nome | Tipo | Etich.| Tipo | Descrizione | | | Chiave | | | | +======+==========+=======+=======+=================================+ | crv | 1 | -1 | int / | Identificatore EC -- Preso dal | | | | | tstr | registro "COSE Elliptic Curves" | +------+----------+-------+-------+---------------------------------+ | x | 1 | -2 | bstr | Chiave pubblica | +------+----------+-------+-------+---------------------------------+ | d | 1 | -4 | bstr | Chiave privata | +------+----------+-------+-------+---------------------------------+

                Tabella 20: Parametri coppia di chiavi ottetto

7.3. Chiavi simmetriche

Occasionalmente, è richiesto che una chiave simmetrica sia trasportata tra entità. Questa struttura chiave consente che ciò accada.

Per le chiavi simmetriche, il membro "kty" è impostato a 4 ("Symmetric"). Il membro definito per questo tipo di chiave è:

k: Contiene il valore della chiave.

Questa struttura chiave non ha una forma che contenga solo membri pubblici. Poiché si prevede che questa struttura chiave verrà trasmessa, è necessario prestare attenzione affinché non venga mai trasmessa accidentalmente o in modo non sicuro. Per le chiavi simmetriche, è RICHIESTO che "k" sia presente nella struttura.

         +======+==========+=======+======+=============+
| Nome | Tipo Chia| Etich.| Tipo | Descrizione |
+======+==========+=======+======+=============+
| k | 4 | -1 | bstr | Valore Chia.|
+------+----------+-------+------+-------------+

Tabella 21: Parametri chiave simmetrica