Crittografia funzionale
# Crittografia funzionale

La crittografia funzionale è un tipo di crittografia a chiave pubblica, dove chi è in possesso della chiave segreta può imparare una funzione di ciò che è cifrato nel testo. La crittografia funzionale generalizza molte primitive crittografiche, come ad esempio la crittografia su base identità (IBE) e la crittografia su base attributi (ABE).

## Storia

La crittografia funzionale è stata introdotta ne 2005 da Amit Sahai e Brent Waters e formalizzata successivamente da Dan Boneh e Amit Sahai nel 2010. Gli schemi proposti, tuttavia, supportano solo un insieme ridotto di funzionalità: per questo motivo nel corso degli anni sono stati effettuati diversi lavori di ricerca per fornire costruzioni universali di crittografia funzionale, in grado cioè di supportare funzioni arbitrarie.

## Definizione

Uno schema a chiave pubblica è composto da tre algoritmi:

* $KeyGen(1^{\lambda })\rightarrow (pk,sk)$
* $Enc(pk,m)\rightarrow c$
* $Dec(sk,c)\rightarrow m$

Solo il proprietario di $sk$ può decifrare $c$ e ottenere $m$, tutti gli altri non possono ottenere nessuna informazione.

Uno schema di crittografia funzionale aggiunge un quarto algoritmo:

* $Setup(1^{\lambda })\rightarrow (pk,msk)$
* $KeyDer(msk,f)\rightarrow sk_{f}$
* $Enc(pk,m)\rightarrow c$
* $Dec(sk_{f},c)\rightarrow f(m)$

Questo quarto algoritmo permette al possessore della chiave $sk_{f}$ di decriptare solamente una funzione del messaggio e non il messaggio per intero.

Prendiamo ad esempio in considerazione un messaggio composto da un insieme $N$ di numeri; il possessore della chiave $sk_{avg}$ potrà decriptare il valore della media dei valori di $N$ senza avere accesso a nessun'altra informazione sul messaggio originale.

