Functional encryption (FE) is a generalization of public-key encryption in which possessing a secret key allows one to learn a function of what the ciphertext is encrypting.
More precisely, a functional encryption scheme for a given functionality f {\displaystyle f} consists of the following four algorithms:
The security of FE requires that any information an adversary learns from an encryption of x {\displaystyle x} is revealed by f ( x ) {\displaystyle f(x)} . Formally, this is defined by simulation.[1]
Functional encryption generalizes several existing primitives including Identity-based encryption (IBE) and attribute-based encryption (ABE). In the IBE case, define F ( k , x ) {\displaystyle F(k,x)} to be equal to x {\displaystyle x} when k {\displaystyle k} corresponds to an identity that is allowed to decrypt, and ⊥ {\displaystyle \perp } otherwise. Similarly, in the ABE case, define F ( k , x ) = x {\displaystyle F(k,x)=x} when k {\displaystyle k} encodes attributes with permission to decrypt and ⊥ {\displaystyle \perp } otherwise.
Functional encryption was proposed by Amit Sahai and Brent Waters in 2005[2] and formalized by Dan Boneh, Amit Sahai and Brent Waters in 2010.[3] Until recently, however, most instantiations of Functional Encryption supported only limited function classes such as boolean formulae. In 2012, several researchers developed Functional Encryption schemes that support arbitrary functions.[1][4][5][6]