混淆程式:程式碼最安全的加密方式

本文轉自【科技日報】;

幾十年來,計算機科學家一直都想驗證是否存在絕對安全的方法來加密計算機程式,讓人們在使用計算機的同時卻無法破解其程式。

在2020年底,幾位學者成功找到了一種加密方式,讓計算機使用者無法透過獲取程式碼破解程式。

加密程式程式碼

首先要對其進行混淆

不可區分混淆(indistinguishability obfuscation,簡稱IO)是一種強大的加密演算法,它不僅能隱藏資料集,還能隱藏程式本身,從而實現幾乎所有的加密協議。

要想知道不可區分混淆是什麼,我們不妨先來看一看混淆是什麼。

對於程式設計師來說,最寶貴的自然是程式碼,一旦原始碼被人獲取,基本上就等於程式設計師編寫程式碼花費的心血付諸東流,還會涉及到智慧財產權糾紛。為了保護程式碼,有的程式設計師會在匯出程式之前採取一些手段來混淆程式。

當前程式混淆有兩種方式,第一種是全文替換關鍵詞,把整段程式碼中所有的“命名”全部替換成數字(例如將ui_controller替代為a0123456);第二種是直接輸出編譯過後的程式碼,將人們可以看懂的原始碼轉換成電腦看得懂的機器碼,這樣別人就沒法直接開啟這個檔案看到原本的程式碼了。

這兩種方式的目的都是在匯出程式的時候,把標註性的符號摘除。從而達到不暴露原始碼資訊的效果。

但這兩種方式並不是真正意義上的混淆,因為雖然人類難以理解這串程式碼到底要做什麼,但如果把這樣的程式碼放入編譯器中,讓編譯器去分析整個程式語言的語法結構,把每一行指令所要做的事情都歸納出來的話,那麼很容易就能看出些端倪。

真正意義上的混淆被稱作虛擬黑盒(Virtual Black Box Obfuscation,VBB),相當於將一個程式C嵌入一個黑盒中,我們可以在黑盒的一端輸入x,另一頭會輸出C(x)。因為整個程式都藏在黑盒中,我們完全無法得知任何C的構造資訊,也無法從輸出反推輸入。

如果實現虛擬黑盒,使用者可以使用程式卻無法理解程式本身,那麼就能讓開發的程式永遠不被破解,並且加密程式的過程也會十分高效。

但虛擬黑盒的概念提出不久後,很快就被潑了一盆冷水。2001年,7位研究者聯手提出了一種特殊構造的程式,並證明通用的VBB混淆是絕對不可能的。

不過,這7位研究者的成果中,提出了一種混淆的新型定義——如果一對程式A和B具有相同的功能性,能否透過一種新的混淆演算法,使第三方無法區分兩個程式呢?對於這樣的混淆,我們稱之為IO。

其利用的原理是:如果把相同值輸入程式A和B,計算得到O(A)=P和O(B)=P,在無法進入程式A或B的情況下,在計算上分辨P來自於A還是B是不可行的。

有了強大的不可區分混淆,我們就能完美加密已有的程式,使其永遠不會被破解。

IO存在性被證實

但還難以抵禦量子計算

2013年,美國加州大學洛杉磯分校的阿米特·沙海教授聯合其他5位學者提出一種IO協議,把一個程式拆分為幾塊,就像拼圖遊戲,單個碎片看上去毫無意義,但如果使用多線性配對方法將碎片正確地組合到一起,程式就能正常工作。

多線性配對本質上是一種利用多項式進行計算的方法,多項式是由不同變數和數字組成的數學表示式,如3xy+2yz2。為了保證其安全性,使用者不能獲知整個過程中任何引數。

多線性配對方法中,有一個重要的概念叫做“層數”,它可以理解為運算公式中變數的階數,如3xy+2yz2為2階多項式,即其層數為2;3xy+2yz4為4階多項式,其層數為4。層數越多,多線性配對的安全性越差。

2016年,美國華盛頓大學副教授林惠嘉開始探索能否透過減少多線性配對的層數來實現IO。最初,她想出瞭如何用30層多線性配對構建IO。接下來,她和其他研究者逐漸實現了只用3層多線性配對來構建IO。

表面上看,這是一個巨大的進步。但有一個問題——從安全的角度來看,3層多線性配對和其他3層以上多線性配對一樣不安全。

此前,研究人員只知道2層及以下的線性配對是絕對安全的。林惠嘉與阿米特·沙海聯手,試圖找出如何用2層線性配對構建IO,但是很長一段時間研究都沒有突破。最終,他們想出了一個折中方案:既然實現IO需要3層線性配對,但為了安全需要減少到2層,那麼中間是否存在2.5層呢?

研究人員設想了一個系統,使使用者可以看到部分變數的值,這讓整個機制不需要對太多變數進行加密。但多項式被隱藏的變數必須不能超過2階,如3x2y+2yz4公式中,z的值可以讓使用者看到,而變數x、y的階數由於沒有超過2階因此被隱藏。由此,研究人員在保證線性配對安全性的前提下,成功實現了IO。

雖然幾位科學家聯手證明了IO的存在性,但量子計算機的超強計算能力,會使得目前絕大部分加密演算法都無法抵擋,這意味著所有的加密資訊,都將會暴露在量子計算機的面前。現在研究者們正試圖開發一條新的通往IO的潛在途徑,希望能抵擋住量子攻擊。

(王昱編譯,據《環球科學》)

版權宣告:本文源自 網路, 於,由 楠木軒 整理釋出,共 1982 字。

轉載請註明: 混淆程式:程式碼最安全的加密方式 - 楠木軒