如果要了解信息安全,首先要解決的問題便是Host和HSM(Hardware Security Module)的通信問題,只有兩者有效"對話",才能更準備的知道彼此的"訴求",進而執(zhí)行正確的Action。所以,Host是如何與HSM建立通信的呢?本文聊一聊這個話題。
提示:基于TC3xx討論
1、軟件框架
HSM除了芯片的硬件模塊,還有對應的軟件部分,當軟件中包含HSM時,整個軟件程序將至少包含4個進程:HSM Boot、HSM App、Host Boot以及Host App。ECU加電,HSM端,程序運行順序:HSM Boot->HSM App;Host端,程序運行順序:Host Boot->Host App,如下所示:

由于HSM主要任務是處理信息安全相關的操作,它所干的活需要與主芯片端隔離,不能讓Host端知道HSM是如何干的,否則,就談不上信息安全。因此,就出現(xiàn)了HSM端(HSM Side)和Host端(Host Side),兩者中間,有一座"鵲橋"(Bridge)。通過喜鵲搭建的Bridge,牛郎(Host)就可以與織女(HSM)"互訴衷腸"了。 在MCU中,除了HSM的其他處理器均稱為Host,eg:TC3xx中,HSM Core是一個ARM Cortex M3內(nèi)核,而Host Core則是多個Tricore內(nèi)核。所以,所有的Host Core均可稱為Host,每個Host Core均可以調(diào)用HSM功能,示意如下: ?

如上圖,可以看出:HSM和Host的通信,本質(zhì)就是核間通信(IPC,Inter-Process Communication)。常見的IPC通信方式有:管道、消息隊列、共享內(nèi)存、信號量等。而HSM與Host最常用的方式當屬共享內(nèi)存。
2、HSM與Host通信原理
既然王母娘娘拆散牛郎(Host)和織女(HSM),就沒打算讓他們輕易見面。怎么辦呢?喜鵲是看不慣王母娘娘做派的,喜鵲不僅鋪好鵲橋(Bridge),還在橋讓搭建了一個會和點(SAW,Signal Access Window)。通過這個內(nèi)存訪問窗口,織女(HSM)就可以把想想說的話(Message)傳遞給牛郎(Host),反之,亦然??紤]到牛郎和織女每年只能見一次,喜鵲是很給力的,它們搭建的匯合區(qū)(ASW)很大,有多大呢?窗口最大可以達到64KByte,也就是說,HSM一次可以訪問64KByte的Host地址空間,通過修改訪問窗口地址和長度,最終可以訪問Host端的0x00000000?- 0xDFFFFFFF地址空間。
(一)HSM通過何種方式訪問
Host HSM和Host通信可以分為兩種情況:
牛郎(Host)和織女(HSM)為了及時的告知彼此近況,通過HT2HSMS(Host to HSM Status)、HSM2HTS(HSM to Host Status)寄存器告知彼此狀態(tài)。HT2HSMS、HSM2HTS雙方均可互相訪問,以便于及時獲悉彼此狀態(tài)。除了這兩個寄存器,還有HT2HSMF(Host to HSM Flag Register)等寄存器,牛郎和織女可以共同訪問,以便于說更多的悄悄話。
女人,總是愛管事的,織女(HSM)除了想知道牛郎(Host)的近況,還想知道牛郎平時都在干啥,所以,織女(HSM)就通過SAHBASE(Single Access to Host Base Address Register)、SAHMEM(Single Access to Host Memory Window)寄存器去牛郎田里(Shared Memory)瞅瞅(Access),種的什么莊稼,土豆、胡蘿卜還是南瓜呢?當然,牛郎(Host)對織女(HSM)的思念也可以通過SAHBASE、SAHMEM寄存器直接寫到田梗上(共享區(qū)),之后織女(HSM)去田梗查崗的時候(讀取數(shù)據(jù)),即可知道牛郎(Host)想說啥。織女(HSM)也可以把想傳遞的信息通過SAHBASE、SAHMEM寄存器寫入到田梗上(共享區(qū),Share Memory),以此提醒(通知)牛郎(Host),要給莊稼澆水或者施肥了。
HSM和Host的通信示意如下所示:

3、HSM與HOST通信前提
如上,只是知道了HSM與HOST如何通信,但是,在兩者能有效通信之前,需要提前對好"暗號",也就是俗說的"握手"(Handshake)。為什么需要握手呢?如上信息可以看出,HSM和HOST對應不同的Core,在一些芯片中,HSM和HOST的CPU架構也可能不同。既然是不同的Core,意味著:芯片加電以后,兩者啟動的先后順序存在不確定性。如果HOST端要使用HSM提供的功能,就必須等到HSM完成初始化動作,確保HSM進入了程序穩(wěn)定階段,否則,HSM無法執(zhí)行Host的請求。
Host端與HSM通信,一般分為兩種情況:Host Boot與HSM App通信、Host App與HSM App通信。所以,Host與HSM握手也包含兩個部分,示意如下:

如上圖,HSM端程序由HSM Boot進入HSM App以后,會初始化HSM基本功能,以便于后續(xù)Host端的請求;
Host端啟動以后,Host端先進入Host Boot。在Host Boot中,可能需要對Host App程序進行完整性和兼容性檢查、獲取隨機種子等操作,此期間需要使用HSM端的接口進行計算。所以,在Host Boot中需要等待HSM進入HSM App,且HSM App進入穩(wěn)定階段。
當Host程序由Host Boot進入Host App時,也需要和HSM完成握手,才能調(diào)用HSM提供的功能。
所以,在Host Boot、Host App中均需要完成與HSM的握手,才能進行兩者之間的通信。這也是為什么使用Secure Boot以后,放寬啟動時間的原因。
編輯:黃飛
?
電子發(fā)燒友App






評論