Black-box obfuscation

In cryptography, black-box obfuscation was a proposed cryptographic primitive which would allow a computer program to be obfuscated in a way such that it was impossible to determine anything about it except its input and output behavior. Black-box obfuscation has been proven to be impossible, even in principle.
Impossibility.
The unobfuscatable programs.
Barak et al constructed a family of unobfuscatable programs, for which an efficient attacker can always learn more from "any" obfuscated code than from black-box access.
Broadly, they start by engineering a special pair of programs that cannot be obfuscated together. For some randomly selected strings formula_1 of a fixed, pre-determined length formula_2, define one program to be one that computes
formula_3
and the other program to one that computes
formula_4
If an efficient attacker only has black-box access, Barak et al argued, then the attacker only has an exponentially small change of guessing the password formula_7, and so cannot distinguish the pair of programs from a pair where formula_8 is replaced by some program formula_9 that always outputs "0". However, if the attacker has access to any obfuscated implementations formula_10 of formula_11, then the attacker will find formula_12 with probability 1, whereas the attacker will always find formula_13 unless formula_14 (which should happen with negligible probability). This means that the attacker can always distinguish the pair formula_15 from the pair formula_16 with obfuscated code access, but not black-box access. Since "no" obfuscator can prevent this attack, Barak et al conclude that no black-box obfuscator for pairs of programs exists.
To conclude the argument, Barak et al define a third program to implement the functionality of the two previous:
formula_17
Since equivalently efficient implementations of formula_11 can be recovered from one of formula_19 by hardwiring the value of formula_20, Barak et al conclude that formula_19 cannot be obfuscated either, which concludes their argument.
Impossible variants of black-box obfuscation and other types of unobfuscable programs.
In their paper, Barak et al also prove the following (conditional to appropriate cryptographic assumptions):
Weaker variants.
In their original paper exploring black-box obfuscation, Barak et al defined two weaker notions of cryptographic obfuscation which they did not rule out: indistinguishability obfuscation and extractability obfuscation (which they called "differing-inputs obfuscation".) Informally, an indistinguishability obfuscator should convert input programs with the same functionality into output programs such that the outputs cannot be efficiently related to the inputs by a bounded attacker, and an extractability obfuscator should be an obfuscator such that if the efficient attacker "could" relate the outputs to the inputs for any two programs, then the attacker could also produce an input such that the two programs being obfuscated produce different outputs. (Note that an extractability obfuscator is necessarily an indistinguishability obfuscator.) 
, a candidate implementation of indistinguishability obfuscation is under investigation. In 2013, Boyle et al explored several candidate implementations of extractability obfuscation.