Meccanismo di incapsulamento della chiave

Nei protocolli crittografici, un meccanismo di incapsulamento della chiave (o più semplicemente KEM, dall'inglese key encapsulation mechanism) viene utilizzato per proteggere il materiale della chiave simmetrica utilizzando algoritmi asimmetrici (a chiave pubblica)[1]. I cifrari a chiave pubblica non richiedono che gli utenti condividano un segreto prima di comunicare in modo sicuro, ma sono più inefficienti dei cifrari simmetrici per trasmettere messaggi lunghi. L'approccio tradizionale per risolvere questo problema consiste nel generare una chiave simmetrica casuale e inviarla utilizzando l'algoritmo di chiave pubblica scelto; questa chiave viene poi utilizzata per cifrare i messaggi successivi con un algoritmo simmetrico, più efficiente[1].

Definizione formale

Un KEM è definito da una tupla di tre algoritmi probabilistici KEM = ( Gen , Encaps , Decaps ) {\displaystyle {\textrm {KEM}}=({\texttt {Gen}},{\texttt {Encaps}},{\texttt {Decaps}})} definiti come segue[2]:

  • Gen ( 1 n ) {\displaystyle {\texttt {Gen}}(1^{n})} è un algoritmo di generazione delle chiavi che prende in input il parametro di sicurezza 1 n {\displaystyle 1^{n}} e restituisce una coppia di chiavi ( pk , sk ) {\displaystyle ({\texttt {pk}},{\texttt {sk}})}
  • Encaps ( pk ) {\displaystyle {\texttt {Encaps}}({\texttt {pk}})} è un algoritmo di incapsulamento che prende in input la chiave pubblica pk {\displaystyle {\texttt {pk}}} e restituisce un crittotesto c {\displaystyle c} e una chiave k {\displaystyle k}
  • Decaps ( sk , c ) {\displaystyle {\texttt {Decaps}}({\texttt {sk}},c)} è un algoritmo che prende in input la chiave segreta sk {\displaystyle {\texttt {sk}}} e un crittotesto c {\displaystyle c} e restituisce una chiave k {\displaystyle k}

Un KEM così definito è corretto se per ogni coppia di chiavi ( pk , sk ) {\displaystyle ({\texttt {pk}},{\texttt {sk}})} generate dall'algoritmo Gen ( 1 n ) {\displaystyle {\texttt {Gen}}(1^{n})} , per ogni coppia ( c , k ) {\displaystyle (c,k)} generata da Encaps ( pk ) {\displaystyle {\texttt {Encaps}}({\texttt {pk}})} , si ha che Decaps ( sk , c ) = k {\displaystyle {\texttt {Decaps}}({\texttt {sk}},c)=k} .

Un modo molto semplice per ottenere un KEM è campionare una chiave in modo uniforme e utilizzare un cifrario a chiave pubblica per cifrarla[2].

Esempio: RSA + AES

Usando la stessa notazione impiegata nell'articolo del sistema RSA, supponiamo che Alice abbia trasmesso la sua chiave pubblica ( n , e ) {\displaystyle (n,e)} a Bob, mantenendo segreta la sua chiave privata d {\displaystyle d} . Bob deriva una chiave simmetrica M come M = K D F ( m ) {\displaystyle M=KDF(m)} , dove con K D F {\displaystyle KDF} si indica una funzione di derivazione della chiave (ad esempio, una funzione crittografica di hash); si noti che M potrebbe essere una chiave AES a 128 bit. Infine, Bob calcola il testo cifrato c {\displaystyle c} come segue:

c m e ( mod n ) . {\displaystyle c\equiv m^{e}{\pmod {n}}.}

Alice può ricavare m {\displaystyle m} da c {\displaystyle c} utilizzando la sua chiave privata d {\displaystyle d} dal seguente calcolo:

m c d ( mod n ) . {\displaystyle m\equiv c^{d}{\pmod {n}}.}

Dato m {\displaystyle m} , Alice recupera la chiave M derivandola come M = K D F ( m ) {\displaystyle M=KDF(m)} .

A questo punto, Alice e Bob condividono una chiave segreta e possono iniziare a scambiarsi messaggi più lunghi e in modo efficiente.

Note

  1. ^ a b Venturi, Cifrari asimmetrici.
  2. ^ a b Katz, Hybrid Encryption and the KEM/DEM Paradigm.

Bibliografia

  • Daniele Venturi, Crittografia nel Paese delle Meraviglie, collana UNITEXT, Springer Milan, 2012, DOI:10.1007/978-88-470-2481-6, ISBN 978-88-470-2480-9. URL consultato il 16 gennaio 2020.
  • (EN) Jonathan Katz e Yehuda Lindell, Introduction to modern cryptography, 2ª ed., ISBN 978-1-4665-7026-9, OCLC 893721520. URL consultato il 24 marzo 2020.
  Portale Crittografia: accedi alle voci di Wikipedia che trattano di crittografia