加密晶片的選擇
加密晶片的選擇要從2方面來考慮:
- 硬體方面
- 軟體方案方面
硬體方面:如果加密晶片本身硬體會被物理破解,那就毫無安全可言,失去了加密晶片保護MCU方案的意義。
智慧卡核心的加密晶片,硬體方面安全性是最高的。智慧卡自從上世紀70年代末誕生以來,就是直接跟“錢”直接打交道。例如最早的IC卡就用於存話費打電話,現在銀行卡,社保卡,電錶卡等等,上面就直接存放著“錢”,沒有足夠安全的硬體支援,這些行業也不可能敢將“錢”直接存放在卡上。
經過幾十年的發展,MCU的功能越來越強大:如IO口數量,越來越多,IO口的種類也越來越多,支援的通訊協議也越來越多,等等。然而同樣是幾十年,接觸式智慧卡,卻依舊只有ISO7816的UART口。硬體上增加的只有儲存空間大了,速度快了,演算法及安全暫存器越來越多。幾十年來,智慧卡除了變大,變快外,就一直圍繞著安全在發展。
智慧卡核心,在硬體方面,使用了頂層金屬網路設計,提升入侵難度。所有的網格都用來監控短路和開路,一旦觸發,會導致儲存器復位或清零;另外智慧卡使用儲存器匯流排加密,每張卡片匯流排加密金鑰不同,這樣即使入侵者完全破解了,也無法生產出相同功能的晶片來。智慧卡將標準的模組結構使用混合邏輯(Gle Logic)設計,使得攻擊者不可能通過訊號或節點來獲得卡的資訊進行物理攻擊;智慧卡還砍掉了標準的程式設計介面,甚至幹掉了讀取EEPROM介面,取而代之的是啟動模組,可以在程式碼裝入後擦掉或者遮蔽自己,之後只能響應使用者的嵌入軟體所支援的功能。
軟體方面:最好的軟體方案是將MCU的一部分功能程式,移植到加密晶片裡面執行。這樣即使攻擊者破解了MCU的程式,也無法得到加密晶片裡面的程式碼(加密晶片要能做到硬體上不被破解)。
很多加密晶片號稱有AES演算法,或者SHA256演算法等等。一味的強調演算法的強度,而忽略了其工作原理。實際上,不管用哪種加密演算法,MCU及加密晶片上都要儲存一致的金鑰,才能保證雙方協同工作。而MCU可被破解,理論上都可以被攻擊者拿到金鑰,利用這種攻擊方法,再高強度加密演算法也無濟於事。
例如DES演算法,自從上世紀70年代被研製出來,然後運用到銀行卡中(PBOC銀行卡現在仍然還在使用的是DES/3DES演算法)已經幾十年了,目前為止,除了窮舉外還沒有其他方法可以破解其金鑰。我們假設1us計算一次DES,一年有365天24小時
所以DES/AES/SM1 /SM3/SHA1/SHA256等等,無論是哪種演算法,使用者都無需擔心演算法本身的強度,不會有人來攻擊這些演算法,因為代價太高。
相反,更多的破解是從MCU這端拿到金鑰的,因為理論上只要把MCU破解後模擬,定位到了加解密函式,就能找到相關的金鑰。所以軟體方案本身的設計,遠比演算法本身的強度重要。
只有把MCU的部分程式碼移植到加密晶片中,並在加密晶片中執行此程式碼,這種軟體方案才是最安全的,其他的軟體方案,都可以被破解(因為MCU可被破解,並被模擬)。現在市面上有部分加密晶片,把MCU的部分程式碼存放在加密晶片中,然後通過密文方式讀到MCU中去執行。這種方法同樣可被破解,因為其程式碼不是在加密晶片中執行。
中巨偉業的SMEC98SP加密晶片,硬體上使用的是最高安全強度的智慧卡晶片核心;軟體上使用的是靈活的可程式設計方式,可內建演算法。具有介面簡單(I2C),安全強度高,開發簡單,價格低,價效比高等特點。我們提供了一套經典加密方案設計樣例,並提供了各種MCU下的原始碼,例如:ARM STM32, 8051, Arduino Mega2560, DSP TMS320, PIC, LINUX,CPLD等等。開發者幾個小時就能上手,然後再根據樣例設計出自己的加密方案。
最後給廣大開發者一些忠告:
- 不要相信主控MCU本身的加密機制, 我們太多的客戶因為相信晶片本身的加密,沒有做其他的保護, 而受到巨大的損失。
- 要想加密晶片硬體本身不被破解,請儘量選擇智慧卡核心的加密晶片。
- 要想軟體方案足夠安全,一定要將MCU的部分程式碼放入加密晶片中執行,否則都會被攻擊者在MCU中,找到金鑰而破解方案。