在N久以前的上篇文章中,咱們討論瞭如何對已經採集好的能量軌跡進行側信道攻擊,可是,有個問題我挖了一個坑,就是如何對芯片的能量軌跡進行採集。今天我會討論這個問題。前端
本文會先介紹採集設備和相應的示波器使用和通訊上的一些知識,以後介紹三種進行能量軌跡採集的方法和注意事項,並對比他們的優缺點,最後說一下我在採集中的噪音控制問題。算法
目前,我可使用的有三臺示波器,一臺USRP和一個Chipwhisperer,三臺示波器的性能分別是:編程
品牌型號 | 模擬帶寬 | 最大采樣率 | 價格 |
---|---|---|---|
夢源實驗室 dscope20 | 50Mhz | 200M | 499 |
RIGOL DS1074 | 70Mhz | 1G | 2800 |
漢泰 DSO3254 | 250Mhz | 1G | 2400 |
其中,dscope和漢泰dso3254是虛擬示波器,沒有屏幕,須要使用usb或者網線鏈接電腦,使用電腦屏幕顯示,而RIGOL DS1074是傳統的示波器。USRP 型號是B210,因爲超外差接收機結構,USRP有很大的頻率覆蓋範圍。安全
解釋一下模擬帶寬和採樣率的問題。電路板和接口,因爲物理緣由,不可能容納全部頻率的信號,頻率越高,在電路板上的衰減和失真程度越大。這樣的話,示波器的模擬前端就等效爲一個低通濾波器,當正弦波輸入信號幅度衰減到 -3dB 時的頻率就是標註的模擬帶寬。模擬帶寬直接決定了一個示波器能夠測量的最大保真頻率,固然是越大越好。ide
最大采樣率是指信號通過模擬帶寬以後,進入了模數轉換的階段,這時候,模數轉換系統會以採樣率爲頻率對波形進行採樣,由連續的波形編程離散的點,只有這樣,才能進行後續的數字信號處理。對於正弦波,採樣頻率要不小於2倍正選波頻率才能不失真的恢復出波形。函數
舉一個極端的例子,我要測量一個波形,這個波形中,有意義的頻率份量最大是10Mhz,那麼個人示波器模擬帶寬不能低於10Mhz,採樣率不能低於20M,只有知足這兩點,纔有可能完整保留有意義的信息。post
上文中咱們說「有可能完整保留」,是由於咱們缺乏了一個重要的部件,濾波器。咱們的示波器的採樣率是1G,也就是說最大隻能恢復出500Mhz的正弦波。那麼大於500Mhz的部分就會因爲不完整的採樣變成一些低頻成分對信號產生干擾。雖然有模擬帶寬等效濾波器進行了限制,可是若是採樣時間超過了儲存深度,示波器會進行採樣率的主動降低。對於本文中的設備,50Mhz的低通濾波器就足能夠了。性能
通常來講,示波器也有帶寬限制的功能,RIGOL DS1074 和 漢泰 DSO3254都有20Mhz的帶寬限制,打開以後的效果能夠等效爲增長了低通濾波器。測試
另一個部件就是探頭了,探頭的做用就是把數據引入示波器。探頭也是有模擬帶寬的,物理緣由和示波器的模擬帶寬同樣。選擇的時候帶寬不要低於示波器。探頭上有一個開關,兩個擋位,X1和X10,X10擋位的帶寬通常大於X1擋位,可是因爲衰減,信號強度也會少不少,能夠經過加放大器進行改良。3d
匹配阻抗是傳輸線理論中很重要的概念,通常狀況下,通訊設備的匹配阻抗都是50歐姆(廣電傳媒通訊中是75歐姆),而示波器的阻抗都是1M,部分高端示波器也有50歐姆的輸出。若是使用了放大器,那麼就要進行阻抗的匹配,可使用阻抗轉換器進行阻抗的匹配。接收時候,若是阻抗不匹配,會影響信號採集的質量。
本實驗中,我使用了一個STC15的C51單片機運行AES128,芯片的封裝圖以下:
因爲其內置了起振電路和復位電路,因此電路板上只有芯片排針和採樣電阻,如圖:
這種方法須要在芯片的GND引腳和真實0電位點中間串聯一個小電阻(本實驗中爲10歐姆),以後測量這個電阻上的電壓波動。本實驗中如圖所示:
這種方法獲取到的信號是特別乾淨的,咱們能夠清晰的看見AES執行的九輪半結構(AES最後一輪沒有MixColumns)。
這種方法的缺點也是很大的,在實際的產品中,去除GND引腳的焊接,接入小電阻是十分困難的事情。這種方法通常用在能夠直接供電的設備中,例如演示板或者各類接觸式卡片。
這種方法直接測量芯片的電壓波動,探頭鏈接在芯片的VCC和GND引腳:
這種方法能夠直接焊接上去,不須要進行拆焊這種高難度動做。相應的採集到的信號信噪比也會低一些,可是仍是能夠清晰的看出來AES128的輪結構:
這種方法在信噪比和鏈接難度上都還能夠,是比較好的一種方法。可是,對於多核SOC或者使用AES協處理器進行運算的狀況,信噪比就會大大下降。
一個SOC中,每一個核心或者協處理器是不可能作在一個位置上的,必定有物理上的距離,這樣就可使用性能優良的電磁探頭進行採集。能夠完成這種精度電磁採集的探頭價格都在幾萬到幾十萬,同時須要微動臺進行細微距離的移動(人手的精度就不用想了),因爲窮,這種採集方法對我來講也就是,想想。
最重要的體會就是,搞硬件安全真**費錢。
在上一步的採集中,咱們使用了在芯片VCC和GND引腳上的電壓波動。若是仔細觀察一下,就能夠發現實際上測量的除了芯片上的電壓,還有電源的噪音,這種狀況下,電源的波紋會完整的混入採集信號中,因此要採用更好的供電設備,通過個人測試,斷開充電器的筆記本電腦USB供電和穩壓電源供電效果是比較好的,手機充電器USB供電和充電寶效果不好,要說電源波紋最好的,應該是iPower的電源適配器,標稱能夠達到1uA的波紋,可是價格也比較貴。這裏有一個小竅門,若是想節約成本,可使用乾電池,它的的波紋特別小。
對於其餘方式的採集,對電源噪音的控制也要有考慮,特別是微弱信號的採集。同時,也要考慮50Hz工頻噪音和日光燈鎮流器的噪音。
下圖是我所在的實驗室中,一個10CM左右導線上存在的干擾:
VISA(Virtual Instrument Software Architecture,簡稱爲」Visa」),即虛擬儀器軟件結構,是VXI plug&play聯盟制定的I/O接口軟件標準及其規範的總稱。VISA提供用於儀器編程的標準I/O函數庫,稱爲VISA庫。VISA函數庫駐留在計算機系統內,是計算機與儀器的標準軟件通訊接口,計算機經過它來控制儀器。
可編程儀器標準命令(英語:Standard Commands for Programmable Instruments,縮寫:SCPI)定義了一套用於控制可編程測試測量儀器的標準語法和命令。
(以上兩段抄的百度百科)
總的來講,這兩種功能提供了計算機程控示波器的接口,對於支持SCPI示波器,都有各自的SCPI指令。
程控的好處就是,能夠自動化的獲取波形,便於後續的攻擊操做,對於某些上位機寫的實在太醜的虛擬示波器(就是說你呢,DSO3254),能夠本身魔改。
因爲每一個示波器的指令或者協議不一樣,有些是本身的協議,因此在此不展開。我傾向於使用通用協議的示波器,這樣對於之後的移植很方便。
採集中,因爲示波器以極快的速度進行採集,分析全部的數據找到咱們感興趣的區間,不管在空間複雜度仍是運算複雜度上都是不可能的。這個時候,就須要告訴示波器,在何時開始採集。本例中,我編寫的程序的時候,人工設置了一個觸發信號,在執行AES計算的時候,把P0.0引腳拉高,執行以後,把P0.0引腳拉低。
在真實的物聯網設備中,是不可能存在這種觸發信號的,因此,須要採用波形觸發或者指令觸發。指令觸發有兩種,主動觸發和被動觸發。主動觸發就是主動發出指令,讓芯片運行關鍵代碼,發出指令的同時給示波器觸發信號;被動觸發是指經過前期的觀察,獲得芯片運行關鍵代碼以前的指令流,並記錄,使用一個獨立硬件,在狀態機捕獲了相同或類似邏輯的時候直接給示波器觸發信號,通常這種硬件都是獨立於PC的以保證速度,例如Riscure的spider。
通常來講,示波器的全部GND引腳都是相通的,若是使用多個探頭的時候,不一樣探頭的GND之間存在電壓差,就會產生電流。鏈接的時候,要綜合考慮被測電路的結構,避免出現短路影響測量甚至燒壞儀器。
最後給你們AES執行第一輪附近和最後一輪附近的兩張圖,你們能夠對比AES128的算法,猜一下字節替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和輪密鑰加(AddRoundKey)的位置,靜靜聆聽芯片的低聲耳語。
(AES第一輪)
(AES最後一輪和倒數第二輪)