你的芯片,能抵擋住幾次攻擊?
1. 你的芯片安全嗎?如果大家看過速度與激情這部電影,一定對下面這一幕有深刻的印象:黑客通過遠程控制上千輛的僵尸車輛,去自動攔截搶奪握有核發(fā)射密碼的人! 然后掌控人類的命運。現(xiàn)實生活中可能沒有電影里這么戲劇化,不過危機卻在我們身邊時刻不停地在上演。大品牌的電子產品被仿冒造成的損失是不可估量的。同時,將來隨著物聯(lián)網,自動駕駛等技術的普及,其核心芯片的安全問題越來越重要,一旦被破解,遭受攻擊,后果難以想象。然而,芯片的安全性確是大多數(shù)工程師往往忽略,或者說不太重視的問題。這里我們對芯片如何被破解進行一個簡單的探討,從而大家可以有針對性地采取一些防護手段。大家知道一個電子產品,硬件電路被復制是幾乎沒有什么難度的,即使打磨掉芯片上的字符。所以最關鍵的是獲得芯片內部存儲的代碼,因為代碼是整個系統(tǒng)運行的靈魂。現(xiàn)在大多數(shù)芯片都有加密位,在設置加密位后,通過編程工具是沒有辦法讀出代碼的。但我們不要低估了壞人的邪惡,他們會想盡種種辦法來進行攻擊。從總體上來說可以歸結為兩種方法:侵入式攻擊和非侵入式攻擊。如果用保險箱來比喻,盜取鑰匙打開保險箱可以說是非侵入式攻擊,拿電鋸鋸開保險箱就屬于侵入式攻擊了。2. 常用的攻擊手段2.1 部分擦除加密后的芯片一般允許整體擦除(Mass Erase)。如果在整體擦除芯片時,控制擦除的時間,在剛剛好擦除掉加密位的時候停止(比如掉電),那么芯片就被解密了。2.2 電壓毛刺(Power Glitch)攻擊是在芯片電源引腳故意輸入毛刺,使得芯片運行受到影響,使其運行跳過某些指令或發(fā)生錯誤的操作,從而使芯片信息泄露。2.3 欠壓,過壓,時鐘瞬態(tài)跳變利用欠壓,過壓,時鐘的瞬態(tài)跳變,使芯片產生異常,影響芯片的正常執(zhí)行,使保護電路失效。2.4 時序攻擊(Timing Attack)代碼在處理不同的數(shù)據(jù),或走不同的流程時,時間上是不同的。時序攻擊利用這一特點可以反推密鑰。2.5 功率分析(SPA: Simple Power Analysis)芯片在運行不同的指令的時候,消耗的功率是不一樣的。功率分析正是利用種特性,在代碼運行密碼相關運算時,用高分辨率功率測量儀器從外部測量芯片功率的變化,從而提取加密密鑰。2.6 差分功率分析 DPA(Differential Power Analysis)在SPA的基礎上,收集已有的密碼運算時的功率變化數(shù)據(jù),在多次統(tǒng)計的基礎上進行分析。是比SPA更有效的攻擊。2.7 硬解密這是最暴力,最不好防范的攻擊方法。它用溶劑溶解芯片外面的殼體,把芯片暴露出來,然后用高倍顯微鏡和聚焦離子束 FIB(Focused Ion Beam)找到加密位置,把它改變?yōu)榉羌用軤顟B(tài),然后讀出芯片內容,然后進行解密,反匯編。看了這些攻擊手段,是不是開始出冷汗了呢?別擔心,這只是一部分大家都熟悉的方法,哈哈。不過隨著進攻之矛越來越鋒利,防御之盾也越來越堅固。在講防御辦法前,我們先對相關的加密算法做一個簡單的介紹吧。
3. 流行的加密算法3.1 哈希算法(Hash)它的作用是把任意長度的明文,通過單向加密函數(shù),生成固定長度的信息摘要。如果明文發(fā)生變化,那么會引起信息摘要的變化。從信息摘要無法反推出明文。常用算法: MD5,SHA-1。3.2 對稱加密算法(Symmetric Encryption)用相同的密鑰進行加密和解密。如同一個保險柜,一個人用一把鑰匙把文件鎖進去,另一個人需要用相同的鑰匙打開保險柜,才能看到文件里寫的什么。這種算法的關鍵是密鑰的保存,分發(fā),防止非授權的人獲得密鑰。常用算法: DES, AES,RCx3.3 非對稱加密算法(Asymmetric Encryption)所謂非對稱指的是加密方和解密方使用的密鑰不同。如同一個保險柜有兩個門,一個是入口,一個是出口,用入口的鑰匙只可以把明文放進去,用出口的鑰匙可以把明文取出。這種算法帶來的好處是可以把入口的鑰匙公開出來(公鑰),大家都可以用公鑰進行加密,但是除了掌管私鑰的人,其他人是沒有辦法看到保險柜中的內容的。常用算法: RSA,ECC4. 加密算法的特點和安全性Hash 主要用于數(shù)字簽名。據(jù)說最早的應用之一是美蘇互相把地震儀放到對方,監(jiān)控對方有沒有進行核試驗。雙方對對方都不放心啊,所以用這種算法把數(shù)據(jù)做數(shù)字簽名,大家都能看到數(shù)據(jù),而且不能篡改。對稱加密算法運算速度快,一般用來對大量數(shù)據(jù)加解密。公鑰算法運算速度比較慢,消耗資源多。它常常在開始階段用來分發(fā)對稱算法使用的密鑰,之后通訊切換到對稱加解密算法。理論上所有加密算法都是可以被破解的,只是花費的時間和代價的問題。只有一種加密方法是完全無法破解的,那就是一次一密。加密者和解密者使用相同的密碼本,密鑰是真隨機數(shù),而且長度和明文相等,每一個明文字母用一個密鑰字母加密成密文,密碼本使用一次后既廢棄。據(jù)說很多間諜就是用的這種加密方法。5. 如何保護芯片假如我們寫了一份機密文件,怎樣才能不被別人得到呢?首先想到的還是保險柜,我們可以把文件鎖進保險柜里,當然保險柜有不同級別,有的還有監(jiān)控功能,比如發(fā)現(xiàn)有人敲擊,挪動,高溫(切割)等就發(fā)出報警,或者把文件銷毀。當然越高級的保險柜價格越高。再有就是我們把寫的內容加密,即使間諜拿到了也看不懂。最后為了更保險,我們還可以把文件分為兩份,分別鎖進兩個保險柜里。對于代碼來說,也是類似的。把代碼放入芯片后設置加密位,使別人無法讀出;或者用芯片的唯一序列號用算法加密后存入特定地址,運行前做比對;或者把代碼(或代碼的一部分)加密后存入外部存儲器,只發(fā)送給握有密鑰的主芯片;這就會用到前面我們介紹的幾種算法之一,或幾種的組合。我們可以根據(jù)產品的價值來使用不同等級的保護方法。下面是一些從硬件到軟件需要考慮的地方:a. 設置加密位。如果芯片支持則設置禁止整體擦除。b. 下載代碼后把調試口禁止掉。c. 地址線和數(shù)據(jù)線打亂。用PAL,GAL,CPLD做映射。d. 盡量不用代碼里的默認值,代碼空間不留空白區(qū)域。如果猜測出一部分明文,將會導致破解變得容易。e. 在處理密碼或數(shù)據(jù)時用混入隨機數(shù),插入指令等方法,使功耗變化盡量小,不同分支運行時間差別盡量小。防止時序和功率分析攻擊。f. 加密盡量用長的密鑰。g. 在選用 MCU 時,要考慮它是否有足夠強的防破解能力。如 STM32L562的以下特性可以用來提高系統(tǒng)的防御能力:
- ARM TrustZone 內核
- 電壓跌落檢測 Brownout Reset
- 帶入侵檢測寄存器 Tamper and backup registers (TAMP)
- 支持安全啟動 unique boot entry and hide protection area
- 主動入侵檢測(Active tamper and protection against temperature, voltage and frequency attacks)
- 真隨機數(shù)發(fā)生器(True random number generator NIST SP800- 90B compliant)
- 全球唯一序列號(96-bit Unique ID)
- 哈希算法加速器(HASH hardware accelerator)
- AES協(xié)處理器
- 公鑰算法加速器(Public key accelerator)
參考資料:1.Applied Cryptograhpy, Bruce Schneier2.STM32L562 Datasheet
免責聲明:本文素材來源網絡,版權歸原作者所有。如涉及作品版權問題,請與我聯(lián)系刪除。
------------?END?------------
后臺回復『科普知識』『嵌入式軟硬件知識』閱讀更多相關文章。
歡迎關注我的公眾號,回復“加群”按規(guī)則加入技術交流群,回復“1024”查看更多內容。
歡迎關注我的視頻號:
點擊“閱讀原文”查看更多分享,歡迎點分享、收藏、點贊、在看。