隨著資訊化的發展,資料安全顯得越來越重要,因此對資料的儲存和傳輸進行加密操作逐漸進入大眾視線。資料加密的過程中必然涉及由一系列引數組成的金鑰,而金鑰正是攻擊者所垂涎的目標,這是由於相比於破解加密演算法,盜取密匙要來得更為容易,也是直通資料“倉庫”的捷徑之一。
因此,金鑰安全稱之為“資料安全的基礎”也不為過,尤其是在不可信的移動端環境中,常見的有獲取了最高許可權的 Android、iOS 裝置。 本文基於移動端金鑰使用和儲存的痛點,介紹了一種自研的白盒加密方案,為保障移動應用內敏感資訊、本地資料和傳輸資料的安全提供設計與應用思路。
01 金鑰安全需求
當前,移動端常見的幾種不安全的金鑰儲存方式:
1. 直接硬編碼在程式碼中,很容易被逆向分析;
2. 儲存在私有目錄的檔案中,有最高許可權的終端可以匯出檢視;
3. 將金鑰分段,分別儲存在程式碼和檔案中,最終在記憶體中拼接起來,由於記憶體中還是出現了完整的原始金鑰,所以攻擊者只需要花點時間,也可以逆向分析出來;
4. 將金鑰儲存在動態庫中,同時加解密也都在動態庫中進行,這在一定程度上增大了分析難度,但是有經驗的攻擊者並不難將其逆向出來;
5. 用另外一個金鑰B加密這個金鑰A,將金鑰A的密文儲存在檔案或程式碼中,在實際使用時進行解密,雖然增加了靜態分析難度,但可以使用動態除錯的方法,對加解密方法進行插樁,即 Hook,也可以分析出金鑰 A 。
一般而言,將密碼軟體的執行對攻擊者完全可見的環境稱為白盒攻擊環境。有最高許可權的移動端環境就是白盒攻擊環境。在白盒攻擊環境中,攻擊者透過觀察或者執行密碼軟體,可以輕而易舉地獲得金鑰資訊。
為了抵禦此類攻擊,白盒密碼孕育而生。白盒密碼是針對白盒攻擊環境提出來的,其目的是為了在白盒攻擊環境中,對金鑰進行隱藏,有效地防止攻擊者獲得金鑰資訊。
02 密碼體系
金鑰分為對稱金鑰和非對稱金鑰,而密碼體系分為對稱加密演算法和非對稱加密演算法。
對稱加密演算法中的對稱金鑰是指加密和解密使用相同的金鑰,常用的演算法有 DES、AES 和 SM4 等。
非對稱金鑰又稱為公鑰加密,加密和解密分別使用不同的金鑰,一般加密使用的金鑰稱為公鑰,可以對外公開,而解密使用的金鑰稱為私鑰,不能公開。常用的演算法有 RSA、ECC。
03 現有白盒方案
目前,在市場上被普遍使用的白盒方案為 Chow 等人於2003年提出的白盒 AES 演算法。該演算法將金鑰隱藏在查詢表中,密碼演算法的執行過程則透過查詢表格來實現,攻擊者根據查詢表無法得出金鑰資訊。不過,與標準AES演算法相比,該白盒方案也存在一些不足:
1. 效能比標準 AES 演算法慢近10倍。
2. 儲存空間上會多出一個查詢表,這個查詢表為752KB,如果同時進行加密和解密,則會多出兩個查詢表,即加密和解密各有一個查詢表,非常佔用空間。
3. 一個金鑰繫結一個查詢表,如果要更新金鑰,則需要更新查詢表,而查詢表巨大的體積,容易致使更新不便。
04 自研白盒方案
在深入瞭解密碼演算法原理之後,易盾對不同的演算法分別進行白盒化,已經實現了白盒化的密碼演算法有 AES、RSA、SM4 和 SM2,未來還將支援更多的通用密碼演算法。
具體而言,針對 AES 和 SM4 演算法,我們借鑑 Chow 等人的白盒思路,將金鑰隱藏在查詢表中,並在此基礎上進行效能和體積最佳化;針對 RSA 和 SM2 演算法,我們透過自研方案,將金鑰進行拆分,一部分金鑰動態生成,而且在儲存時和記憶體中均不會出現完整金鑰。
為了解決上述查詢表體積過大、更新金鑰不便的問題,易盾提出動態白盒方案,減小查詢表體積,金鑰與查詢表不進行繫結,可以很方便地進行金鑰更新。與現行白盒演算法相比,新型自研演算法在功能性和安全性方面更為優越,主要表現為以下幾點:
1. 對靜態白盒進行補充,形成動態白盒。
靜態白盒是指原始金鑰經過白盒密碼技術處理得到查詢表,再與白盒演算法相結合,形成白盒庫。白盒庫具備加解密功能,並且能在白盒攻擊環境下有效地保護原始金鑰的安全。靜態白盒更新金鑰,需要重新生成查詢表。
動態白盒是指白盒庫生成後就不需要再更新,原始金鑰經過動態白盒密碼技術處理得到白盒金鑰,白盒金鑰與白盒庫相結合進行正常的加解密。白盒金鑰是安全的,攻擊者不能透過分析白盒金鑰得到任何關於原始金鑰的資訊。動態白盒在更新時,只需要重新生成白盒金鑰即可。
2. 對主流演算法進行了白盒化,包括 AES、SM4、RSA 和 SM2,其中靜態白盒支援 AES 和 SM4,動態白盒全部支援。
3. 支援對白盒金鑰進行限制,比如金鑰只能加密,不能解密;只能簽名,不能解密等。
4. 對白盒演算法的效能和體積進行最佳化,其效果改善如下表所示:
靜態白盒:
動態白盒:
05 白盒應用場景
如何保護金鑰安全,一直是移動安全長期探討的關鍵問題之一。白盒金鑰保護適用於多種移動應用場景,包括:
1. 終端資料安全
字串加密:對程式碼中的字串進行普通加密,在實際執行時用白盒密碼去解密,避免攻擊者透過靜態分析字串輕易分析出業務邏輯,並在一定程度上增加攻擊者動態分析難度。
檔案加密:對檔案進行白盒密碼加密保護。
核心程式碼保護:對動態庫或其他檔案中的核心程式碼進行標準加密保護,在動態載入還原時,用白盒密碼解密。
2. 資料傳輸安全
在客戶端用白盒密碼加密需要傳輸的資料,在服務端用標準密碼進行解密;在服務端用標準密碼加密需要傳輸資料,在客戶端使用白盒密碼進行解密。
3. IOT
隨著物聯網產品的普及,其安全性受到了廣泛重視。針對低效能、低儲存空間的 IOT 裝置,白盒金鑰演算法也能滿足白盒加密需求,對需要更新的韌體進行白盒加密保護。
06 總結
移動端應用本身執行在一種白盒攻擊的環境中,應用可以被除錯、二次修改、dump 記憶體、抓包分析,應用執行時的金鑰和儲存在應用內的金鑰容易被逆向獲取。白盒密碼的作用就在於在白盒攻擊環境下保護金鑰,對金鑰進行加解密操作,阻止攻擊者利用計算能力暴力破解。
網易易盾自研白盒加密分為靜態白盒和動態白盒,不同業務可以選擇不同的白盒方案。該加密服務支援目前常用密碼演算法,涵蓋主流的 AES、SM4、RSA、SM2,並且其運算結果與標準演算法結果相同,助力業務無縫替換。在保障安全的同時,自研白盒演算法兼顧了效能和便攜性,可以滿足絕大多數的業務需求。(作者:易盾移動安全專家流風 )