Given an obfuscator $O$ that takes as input a circuit $C$ and outputs its obfuscated version $O(C)$, we expect, informally, that the obfuscated version should be somehow "unintelligible" for anyone who sees or runs it. In other words, it should be able to hide secrets.
My understanding is:
- The strongest notion of Virtual Black Box security for an obfuscator was proven impossible by BGI+01
- BGI+01 also provided a weaker notion of indistinguishability obfuscation (iO) such that given the obfuscator $O$ and two circuits $C1$ and $C2$ with equivalent functionalities, the two distributions of obfuscations $O(C1)$ and $O(C2)$ should be computationally indistinguishable.
- From the Best-Possible Obfuscation definition of GR07, the obfuscated circuit leaks less information than any other circuit (of a similar size) computing the same function.
How this security definition implies the unintelligibility of the obfuscated program?.
A possible explanation is given by GGH+13 using the two-key technique. In practice, they start with two programs $P1$ and $P2$ with the same functionalities, where $P1$ has a secret $sk_1$ inside (but not $sk_2$), and $P2$ has a secret $sk_2$ inside (but not $sk_1$). Since the obfuscations of the two programs $O(P1)$ and $O(P2)$ are indistinguishable, neither program leaks either secret.
I am still struggling to understand why this guarantees the unintelligibility of the secret. It seems to me that it only guarantees the unintelligibility in a 50% chance game: sure the adversary cannot distinguish which secret is hardcoded inside an obfuscated program. Still, it must be one of the two (either $sk_1$ or $sk_2$).