Indistinguishability obfuscation

Indistinguishability obfuscation (IO) is a cryptographic primitive that provides a formal notion of program obfuscation. Informally, obfuscation hides the implementation of a program while still allowing users to run it.
Candidate constructions.
A candidate construction of IO with provable security under concrete hardness assumptions relating to multilinear maps was published in 2013, but this assumption was later invalidated. 
Work has continued attempting to establish preconditions from more standard assumptions, notably the 2020 work of Jain, Lin, and Sahai based on the XDH, LWE, and LPN assumptions. The Jain, Lin, and Sahai proposal also requires the existence of a super-linear stretch pseudorandom generator in the function class NC0. The existence of pseudorandom generators in NC0 (even with sub-linear stretch) was a long-standing open problem until 2006.
Potential applications.
Indistinguishability obfuscators, if they exist, could be used for an enormous range of cryptographic applications. Concretely, an indistinguishability obfuscator could be used to construct the following kinds of cryptography:
However, indistinguishability obfuscation cannot be used to construct "every" possible cryptographic protocol: for example, no black-box construction can convert an indistinguishability obfuscator to a collision-resistant hash function family, even with a trapdoor permutation, unless with an "exponential" loss of security.