0
$\begingroup$

Suppose I have a dumb password checking function:

def dumb_checker(password):
    return password == "my_secret_key_that_should_not_be_revealed"

One can hide a password by hashing it as follows:

def obfuscated_checker(password):
    return hash(password) == PRECOMPUTED_HASH_OF_MY_SECRET_KEY

which means that the indistinguishability obfuscator ($IO$) should also hide the password, because it's the best-possible obfuscator.

But can't the indistinguishability obfuscator take any password checking function and return the dumb_checker as the canonical form? For any two equivalent implementations $F_1$ and $F_2$, both $IO(F_1)$ and $IO(F_2)$ be equal to the dumb_checker function, so an adversary will not be able to distinguish whether he is given $IO(F_1)$ or $IO(F_2)$. And yet, this obfuscation does not hide the password.

$\endgroup$
2
  • $\begingroup$ Those two programs are not functionality equivalent. $\endgroup$
    – Maeher
    Commented Jul 7, 2022 at 16:42
  • $\begingroup$ Because hashing is not perfect? Let's assume they are almost-always equivalent. $\endgroup$ Commented Jul 7, 2022 at 16:44

1 Answer 1

1
$\begingroup$

But can't the indistinguishability obfuscator take any password checking function and return the dumb_checker as the canonical form?

No, in order to do so, the obfuscator would have to be able to un-hash the constant.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.