1. 程式人生 > 其它 >白盒和黑加密

白盒和黑加密

簡述白盒加密:

  說到加密,自然少不了金鑰。金鑰的儲存,可以加密後寫在程式碼裡,一起編譯到最後的二進位制檔案中,也還可寫個函式,用程式碼來生成金鑰等。這些方法,對於黑盒攻擊來說,其實都是相對來說比較安全的。但是還有另外一種攻擊叫做白盒攻擊,比黑盒攻擊更進一步,拿到了加密裝置的執行環境,包括記憶體資訊,磁碟的讀寫許可權等。此類攻擊就可以dump出記憶體的資料,從而使執行在記憶體中的金鑰不再安全。

  白盒加密就是為白盒攻擊而生,它的目的是不在執行環境中出現完整的金鑰。為此,首先要對金鑰本身做盡量複雜的混淆,同時提供函式來處理。舉個例子,比如明文金鑰是abcd,混淆後的金鑰變成了非常複雜的矩陣,根據演算法,每次生成的4箇中間金鑰,aefg,hbigk,lmcn,opqrstd,根據某個演算法,用這些金鑰生成4個密文,然後在把4段密文用演算法生成一段密文,如此可以不斷重複,直到最後生成密文。整個過程中最原始的金鑰一直沒有出現在記憶體中,白盒攻擊想拿到金鑰難度就大大增加了。


白盒加密原理:   

  什麼是“白盒”什麼是“黑盒”

    黑盒:傳統的加密技術是預設假定處於黑盒中的,也就是假定攻擊者無法獲得金鑰。具體而言,認為攻擊者並未實質性地接觸到金鑰(執行加密或者解密的演算法)或者任何內部操作,僅僅能觀察到一些外部資訊或者操作,這些資訊包括系統內的明文(輸入)或者密文(輸出),並且認為程式碼執行以及動態加密不可被觀察。

    灰盒:灰盒認為攻擊者可以實質性地接觸到部分金鑰或者洩露的資訊(也就是所謂的邊通道資訊)。邊通道分析攻擊(Side Channel Analysis, SCA)利用了從密碼系統執行過程中洩露的資訊。洩露資訊是通過被動觀察時間資訊、功率消耗、電磁輻射等而獲得的。

    白盒:白盒即攻擊者已經完全控制了整個操作過程且對此完全可見,攻擊者可以自如地觀察動態密碼執行過程,並且內部演算法的詳細內容完全可見,可隨意更改。舉例而言,只要軟體是在本地執行的,攻擊者就可以通過偵錯程式執行程式,並觀察軟體執行的過程。所有涉及解密部分的程式碼也就一覽無餘了。定義如下:

    1. 攻擊者對主機和軟體具有完全控制權
    2. 軟體動態執行過程是可見的
    3. 加密演算法內部細節完全可見、可修改

  

白盒加密基本思想

白盒加密屬於對稱加密,是指能夠在白盒環境下抵禦攻擊的一種特殊的加密方法。首先舉個例子幫助理解,這裡引用最早提出白盒加密實現方法的大牛Chow在論文《White-Box Cryptography and an AES》中所說的,“舉一個極端的例子,就是將AES加密用一個簡單的查表來表示,那麼AES128可以用一個bytes的表格替換,這樣一來,AES就變成了一個完全的黑盒。”聽起來很簡單吧,但是這是極端情況,一個如此大的表,沒有硬碟能夠裝得下,所以在具體演算法實現的時候必須有針對性的進行優化。

下面具體闡釋白盒加密基本思想:

1、核心思想:

核心思想是混淆,混淆的意思就是讓人看不懂,如果說加密是隱藏資訊,混淆就是是擾亂資訊。它們之間的最大區別是,加密就是資訊放進了保險箱,但是一旦我有了鑰匙,我就能開啟這個保險箱。而混淆則是讓資訊以一種完全無法理解的形式存在,儘量讓人無法理解中間的過程(也就是隻能看到輸入和輸出,但無法理解結果是如何得到的),但不影響資訊本身發揮作用(一個加了密的程式,在原始碼未解密前是無法執行的,但是經過混淆的程式,可以正確執行)。

2、特點

傳統的加密演算法中演算法和金鑰是完全獨立的,也就是說演算法相同金鑰不同則可以得到不同的加密結果,但白盒加密將演算法和金鑰緊密捆綁在了一起,由演算法和金鑰生成一個加密表和一個解密表,然後可以獨立用查詢加密表來加密,用解密表解密,不再依賴於原來的加解密演算法和金鑰。

3、優勢:

正是由於演算法和金鑰的合併,所有可以有效隱藏金鑰,與此同時也混淆了加密邏輯。具體而言白盒加密的一種實現思路就是將演算法完全用查表來替代,因為演算法已知,加密的金鑰已知。所以將演算法和金鑰固化成查表表示,這就是白盒金鑰的實現過程。

4、缺點

有利必有弊,白盒加密由於需要將加密和解密的演算法固化到表格中,勢必要增加空間開銷,因為要儲存這一系列的表。具體在實現的過程中,大部分情況需要用時間換空間,需要對具體的實現演算法進行優化,也就是樣將大表分解成若干個小表,增加了查表的次數即時間開銷但是減少了表佔用的空間。