Software-Obfuscation

混淆總是可逆的嗎?

  • July 10, 2018

假設我們有一個只接受數字輸入的程序,輸出只是一個輸入的增量。

輸入“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),它允許您使用兩個實現相同功能的程序並通過混淆器執行它們,現在沒有人可以有效地判斷它們呈現的是哪種混淆。

引用自:https://crypto.stackexchange.com/questions/60686