Software-Obfuscation
混淆總是可逆的嗎?
假設我們有一個只接受數字輸入的程序,輸出只是一個輸入的增量。
輸入“a”和輸出“b”的範例:
我np在噸:一個=7
$$ Input: a = 7 $$ ○在噸p在噸:b=一個+1=8
$$ Output: b= a+1 = 8 $$ 所以很容易知道程序在做什麼。
是否有可能以我們永遠無法確定它是如何完成的方式混淆程式碼?
例如我們的程序可以接受輸入:
7
$$ 7 $$ 加倍:
14
$$ 14 $$ 減去輸入 - 1
14−(7−1)=8
$$ 14 - (7 - 1) = 8 $$ 是否可以混淆確切的功能,使其無法進行逆向工程?如果沒有:這樣的混淆方案有一天會存在嗎?或者有什麼基本的東西可以阻止它?
我認為您在這裡要求的是所謂的黑盒混淆概念,其中無法區分混淆程式碼和文字黑盒預言的行為。
遺憾的是,這在Barak、Goldreich、Impagliazzo、Rudich、Sahai、Vadhan 和 Yang 的“關於混淆程序的(不可能)可能性”中被證明是不可能的,Green的一篇不錯的部落格文章也觸及並更非正式地解釋了這個話題。
更準確地說,上面使用的“this”:“this”在這裡表示存在一個通用“編譯器”,它接收任何程序並返回一個黑盒混淆版本。特殊程序,例如僅在某一點或連詞處評估為真的函式(PDF;感謝 Weiken Chen)可以被黑盒混淆。
但是有可能的是所謂的不可區分混淆(iO),它允許您使用兩個實現相同功能的程序並通過混淆器執行它們,現在沒有人可以有效地判斷它們呈現的是哪種混淆。