# Is obfuscation always reversable?

Let's say we have a program that only accepts numerical inputs and the output is simply an increment by one of the input.

Example with input "a" and output "b":

$$Input: a = 7$$

$$Output: b= a+1 = 8$$

So it would be easy to know what the program is doing.

Is it possible to obfuscate the program code in such a way that we can never be sure how it's done?

For example our program could take the input:

$$7$$

double it:

$$14$$

subtract input - 1

$$14 - (7 - 1) = 8$$

Is it possible to obfuscate the exact functionality, so that it can't be reverse-engineered? If not: Could such an obfuscation scheme exist one day or is there something fundamental that prevents it?

• What you're describing is called indistinguishability obfuscation. There are candidate constructions for it, but the assumptions they are based on are still rather shaky. (Also they are completely impractical for any real world use.) – Maeher Jul 10 '18 at 16:24