我的設備泄漏信息了嗎?—淺談密碼芯片泄漏檢測技術
密碼算法的軟硬件實現對其安全性提出了新的挑戰,算法在理論上的安全性并不能代表其在具體實現和應用上的真正安全,算法的設計除了要抵抗常規的數學分析,還需要能夠抵抗算法運行時針對泄漏出的電磁、能耗、時間等信息的側信道分析。對密碼設備抗側信道敵手攻擊能力的評估,成為一個越來越重要的問題,泄漏檢測技術,也因此成為當前一個新的研究熱點。
泄漏檢測及其關鍵技術
區分器初探
側信道分析和泄漏評估方法都是區分器(Distinguisher)的應用,大家可能對這個概念很陌生。其實,這里的“區分器”就是我們常說的分類器(Classifier)。舉一個簡單的例子,讓一個人蒙著眼睛對一堆不同面值的硬幣(含1元、5毛和1毛)進行分類,他能夠根據硬幣的不同重量,準確地將硬幣分成三堆。也就是說,硬幣的重量泄漏了硬幣的面值信息,可以利用(硬幣,重量)構建一個區分器,將硬幣成功分類。如果仍然讓這個蒙著眼睛的人去分一堆黑子和白子重量相同的五子棋棋子。那么,他分類得到的兩堆子中,黑子和白子仍然約占一半。即(棋子,重量)不能作為一個分類器。但是,摘下眼罩,他能夠通過不同的顏色對棋子進行分類。也就是說,(棋子,顏色)可以構建一個區分器。
圖1 一堆不同面值的硬幣和一堆五子棋棋子
泄漏檢測原理
為了提高設備的效率,運算中間值(Intermediate Value)通常會暫存于寄存器(Register)中。寄存器存儲數值的變化將引發功耗(Power Consumption)的變化。如,一個8位的寄存器,就像一個房間里的八個燈。由4盞燈切換到另外4盞,總線上的電流值基本不變。但若由4盞切換到8盞,那么我們能夠顯著地檢測到電流變化。因為電流的大小與開燈的數量有明顯的線性相關關系,根據電流的變化情況,我們就可以判斷房間里面開了多少盞燈。
圖2 亮不同數量的燈時,總線上的電流區別
跟燈與電流變化例子的道理類似,泄漏檢測(Leakage Detection)算法如相關性檢驗(ρ-test),t檢驗,互信息檢驗等,利用不同的中間值與其產生不同的功耗泄漏的密切關系來進行檢驗。假設泄漏檢測者采集到了加密過程中的功耗泄漏,現在他要確定泄漏是否與密鑰運算的中間值相關。以相關性泄漏檢驗為例,只需根據正確的密鑰對每一個樣本點進行劃分。若正確的密鑰下,信號呈現較好的分類,使得每一類的功耗值與中間值的功耗模型(如漢明重量模型)呈較高的相關性,即可認為存在泄漏。
以AES-128在AT89S52微控制器系統上軟件實現的相關性泄漏檢驗為例,當采集了1300個明文加密的泄露信息時,第一個密鑰字節(值為213)對應的第一個S盒輸出的功耗,每條信號包含5000個樣本點(Samples)。正確密鑰下,第2141個樣本點的功耗與中間值具有較高的相關性。因而得到檢測結果:該點泄漏了第一個S盒輸出的與密鑰相關的中間值(如下圖左圖所示)。但第700個樣本點的相關性泄漏檢驗結果如下圖右圖所示,可以認為該點不存在密鑰相關泄漏。
圖3 樣本點2141(左)、700(右)的相關性泄漏檢測結果
當然,上面兩圖僅僅反映了兩個樣本點是否存在泄漏。對于泄漏檢測而言,評估者需要對所有的樣本點進行檢驗,才能得到最終結論。下圖所示,對S盒輸出中間值的相關性泄漏檢測表明,在AT89S52上實現的AES-128加密算法的第一個S盒多次泄漏了密鑰相關信息。可以通過修改算法,消除信號與敏感信息的相關性,從而消除泄漏,保證算法的安全實現。
圖4 所有5000個樣本點的相關性泄漏檢測結果
泄漏檢測平臺
常用側信道分析平臺,如Riscure公司的Inspector分析測試平臺,也可以用作泄漏檢測。該平臺主要包括泄漏采集(示波器)和泄漏分析設備(臺式機)等。泄漏檢測過程一般為,攻擊者利用示波器等信號采集設備采集泄漏信息并進行預處理,利用泄漏檢測算法進行檢驗,評估設備泄漏情況和安全性。
圖5 Riscure公司的Inspector分析測試平臺
設備的安全性度量
就目前而言,并沒有哪一種檢測方法能夠以100%的概率得到設備是否存在泄漏的結論。故而,檢測者需要根據密碼算法的實現,多嘗試幾種泄漏檢測方法,提高檢測結果的可信度(Confidence)。
評估者會想,需要采集多少條信號來檢測泄漏呢?現在用條信號都沒有檢測到泄漏,那么是否沒有泄漏呢?不盡然,也許當我們使用條信號進行檢測時,就檢測到泄漏了。因此,評估者通常將安全性劃分成若干等級。如,條信號沒有檢測到泄漏,將安全等級劃分6級;條信號沒有檢測到泄漏,將安全等級劃分5級;以此類推。
研究現狀和未來發展趨勢
隨著側信道分析的發展,攻擊者能夠更加精確地刻畫設備的泄漏信息、提出更加精準的功耗模型、提出更加高效的區分器,使得其能夠在更少的能量跡、更小的代價下成功恢復密鑰。而最好的防御側信道攻擊的方法,就是設備不存在敏感信息相關的泄漏。泄漏檢測的目的,就是檢測密碼芯片在密碼運算過程中,是否泄漏與密鑰相關的關鍵信息,以便于更好地防止泄漏。
泄漏檢測與評估框架完善
相對于側信道分析和防御的研究,側信道泄漏檢測的研究比較滯后。最早可追溯到2009年,Standaert等人側信道評估(Side Channel Assessment)框架的首次提出。2011年,NIST組織招開研討會,希望能夠建立被公認的方法來評估設備的安全性,并首次通過實驗來檢測泄漏。這些方法通過觀測對設備執行一系列攻擊實驗時的是否成功,以及在成功的情況下所消耗的代價(如時間復雜度、空間復雜度和采樣復雜度等)來評估設備的安全性。相關的工作為側信道泄漏檢測與評估提供了參考。但是,側信道泄漏檢測與評估體系十分不完善,大量的工作有待研究。
泄漏檢測算法的優化
2013年,Luke等人提出了新的泄漏評估方法,他們在一系列實際相關的側信道分析場景中,比較了t檢驗、連續互信息和離散互信息這三種檢驗的效果,并考慮樣本容量、泄漏函數、噪聲和其他假設檢驗標準對檢測性能的影響。但是,他們的方案具有較高的復雜度。在單核CPU上,需要近1一個月的時間。在使用兩個AMD Radeon 7970型號的GPU,吞吐量達到每秒3000億次浮點運算的情況下,仍需要約14個小時來完成校驗。可見,使用該方法來評估設備的安全性,仍然十分的困難。類似的研究是近幾年的主流,更多的檢測算法和優化算法被陸續提出。
高階掩碼泄漏檢測
Durvaux等人利用基于相關性的漏檢實驗來檢測不同信噪比和漢明重量下的信息泄漏情況,并使用該方法改進了其在COSASE 2015 上提出的高階掩碼(Higher-Order Masking)算法特征點的快速檢測工具,為泄漏檢測開辟了一個新的研究方向。
高階掩碼將中間值分成多片,至少要尋找到一組分片的樣本點才能恢復該中間值。串行實現的高階掩碼的泄漏檢測,其困難性在于隨著掩碼階數的增加,分片的位置越難找。比如10個點里有5個點分別對應5個分片的泄漏,窮舉很快就可以找到這5個點。但是100萬個點里面尋找5個點將變得十分困難。此外,隨著分片的增加,組合分片得到的信號的噪聲迅速增大,這使得即使設備存在泄漏仍然難以被檢測出來。而且,檢測需要大量的信號,也極大增加了檢測難度。
掩碼方案泄漏預檢驗
Oscar于FSE 2016上提出了一種帶掩碼方案的密碼算法在設備實現上之前,驗證其是否存在泄漏的方法。該方案的好處在于,省去泄漏采樣和特征點檢測環節。此外,直接利用中間值的組合進行泄漏檢測,避免了噪聲對檢測的影響。這是目前較好的泄漏檢測方法。但是,密碼實現是否存在泄漏,還與設備密切相關,所以該方法還有待進一步改進。
總結
泄漏檢測和評估對密碼芯片安全有著至關重要的作用,是目前側信道分析領域的研究熱點之一,但是其理論體系目前尚不完善,大量研究工作有待進行!
【本文為51CTO專欄作者“中國保密協會科學技術分會”原創稿件,轉載請聯系原作者】