應用層數據可以通過傳輸控制協(xié)議(TCP)在基于IP的網絡上進行可靠交換,但是TCP無法保證數據傳輸的可靠性,應用數據的機密性及完整性。因此,實際應用中可以在TCP之上使用TLS(Transport Layer Security)建立服務器和客戶端之間的安全通信(圖1),從而保證數據的安全傳輸。
車內外通信中的下列應用層協(xié)議在安全通信時會采用TLS/DTLS加密通信:
>
DoIP (Diagnostic communication over Internet Protocol)
>
SOME/IP (Scalable service-Oriented MiddlewarE over IP)
>
MQTT (Message Queuing Telemetry Transport)
>
HTTPS (Hypertext Transfer Protocol Secure)
>
SCC (Smart Charging Communication)
圖1:OSI參考模型
隨著TLS在載數據通信過程中的廣泛應用,給OEM和零部件供應商的開發(fā)測試工程師在開發(fā)測試分析過程中需要面臨TLS服務器和客戶端之間加密通信的考驗。毫無疑問,作為車載產品開發(fā)驗證平臺的核心工具CANoe需要支撐從單板調試到實車驗證中涉及TLS安全通信應用的仿真與回放分析工作:
>
模擬TLS服務器通信;
>
模擬客戶端參與TLS通信;
>
在線解密正在監(jiān)聽的真實服務器和客戶端之間的TLS通信(圖2.1);
>
離線回放過程中解密記錄文件中存儲的TLS數據(圖2.2)。
圖2.1:CANoe解密TLS通信場景(離線)
圖2.2:CANoe解密TLS通信場景(在線)
CANoe在線監(jiān)聽或離線回放TLS通信的過程中,接收的是加密的TLS應用數據,需要經過解密才能得到原始消息,圖3為TLS一組相同數據在Trace窗口中解密前后的對比。解密前Trace窗口只有密文信息,解密后Trace窗口才能以系統(tǒng)變量的形式顯示原始消息。如果Observer支持原始消息所屬的應用層協(xié)議(如DoIP協(xié)議),Trace窗口中還會包含原始消息基于DoIP層面的解析。要完成解密的過程,需要在CANoe中進行一系列配置,本文圍繞TLS Observer中最常用的解密方式“基于主密碼解密”就具體配置做說明。首先概述CANoe基于主密碼解密TLS通信的機制,其次介紹解密工程的環(huán)境設置,最后分別對不同的主密碼配置方式進行說明。
圖3:TLS數據解密前后對比
01/
CANoe基于主密碼解密TLS通信的機制概述
CANoe.Ethernet工程會自動生成名為“_Security::TLSMasterSecret”的系統(tǒng)變量,用于存儲TLS會話的客戶端隨機數(Client Random,32Bytes)和主密碼(Master Secret,48Bytes)。待解密的TLS數據可能包含多個TLS會話,每個TLS會話都有唯一的主密碼。當解密時,CANoe首先根據客戶端隨機數識別正確的TLS會話,然后基于主密碼生成的密鑰素材解密TLS應用數據,因此正確配置主密碼和客戶端隨機數是解密TLS通信的關鍵。
02/
解密工程環(huán)境設置
CANoe支持多種配置主密碼的方式,如通過CAPL/Security Manager/UDP報文配置主密碼或從CANoe參與通信的TLS記錄文件中讀取主密碼。無論采用何種方式,都需要首先完成工程環(huán)境設置。
1.
激活TLS應用數據的觀測變量(圖4)
點擊CANoe->Options->General->File Locations->Location of application data的Open按鈕,打開文件夾中的can.ini文件,配置can.ini文件中的參數EnableTlsAppDataSv=1。
圖4:激活TLS應用數據的觀測變量
>
配置TLS/DTLS通信的端口號(圖5)
檢查CANoe Option->Bus System->Protocol Identification是否對用于TLS/DTLS通信的Port進行正確定義,避免Trace中可能出現無法解析TLS協(xié)議的情況,影響解密TLS通信的功能。
圖5:TLS/DTLS通信端口設置
03/
基于CAPL配置主密碼解密TLS通信
基于CAPL配置主密碼具有較高的靈活性,支持離線回放或在線監(jiān)聽TLS數據時解密通信。當離線回放TLS通信時,一般主密碼是用戶提供的靜態(tài)數值,該值可以直接通過CAPL編程賦值給系統(tǒng)變量“_Security::TLSMasterSecret”,賦值代碼如圖6。當在線監(jiān)聽TLS數據時,主密碼是由真實服務器或客戶端提供的動態(tài)數值,首先通過診斷、CAN報文或者其他接口傳給CANoe,然后基于CAPL編程賦值給系統(tǒng)變量“_Security::TLSMasterSecret”。
圖6:CAPL代碼示例
04/
基于Security Manager配置主密碼解密TLS通信
為了實現在離線回放過程中解密TLS通信,除了可通過CAPL編程配置主密碼之外,還可以在CANoe->Tools->Security Manager中手動輸入主密碼。具體流程如下:
1.
新建Security Profile(圖7)
選中File based PKI,點擊Add添加Security Profile,可按照需求自定義Profile名稱,如TLS Observer Profile。
圖7:新建Security Profile
2.
設置參數(圖8)
在新建的TLS Observer Profile主配置界面上選中TLS Observer,點擊Add打開參數設置對話框,選擇參數類型為Master Secret并填寫Random Bytes和Master Secret。
圖8:Master Secret|參數設置
3.
Security Configuration配置
打開CANoe->Simulation->Security Configuration,在TLS Observer選項卡處關聯新建的Profile,如圖9。
圖9:Security Configuration配置
05/
通過UDP報文傳輸主密碼解密TLS通信
為了實現在線監(jiān)聽TLS數據過程中解密通信,除了基于CAPL配置主密碼外,還可由通信參與者通過UDP報文傳入主密碼。如果真實服務器或客戶端在完成TLS握手之后,支持從加密堆棧中讀取主密碼,并通過UDP報文發(fā)送出來,就可以配置CANoe接收該UDP報文,獲取主密碼數值,解密正在監(jiān)聽的TLS通信。與手動輸入主密碼配置過程類似,通過UDP報文傳輸主密碼也需要基于Security Manager配置,區(qū)別在于參數設置部分,參數類型需選擇Master Secret Source并配置UDP通信雙方的IP和Port(圖10)。
圖10:Master Secret Source|參數配置
注:此種方式要求Master Secret以NSS Key Log的格式封裝到UDP報文中。NSS Key Log的格式以及示例見表1。
表1:NSSKeyLogMasterSecret格式示例
06/
離線回放CANoe參與通信的TLS記錄文件
CANoe參與TLS通信時,經過TLS握手階段,可以自動計算出主密碼并將該值存儲到系統(tǒng)變量“_Security::TLSMasterSecret”中。TLS數據可通過CANoe Logging功能進行記錄,需將記錄文件格式設置為BLF/ASC/MF4。這些格式的文件不僅可以保存通信數據,還可以保存系統(tǒng)變量(包括_Security::TLSMasterSecret)。后期離線回放時,CANoe可以從記錄文件中讀取主密碼來解密TLS應用數據。
1.
在CANoe 15/16中回放,只需將工程切換為Offline模式,添加記錄文件,點擊回放按鈕,CANoe即可在回放過程中解密TLS應用數據;
2.
在CANoe 14中回放,還需在Security Configuration配置中關聯Security Profile。
上述就CANoe基于主密碼解密TLS通信的過程及多種主密碼的配置方式:如CAPL、Security Manager、UDP報文以及記錄文件等。不同主密碼配置方式的總結描述以及對CANoe版本要求見圖11。CANoe為各種網絡安全通信提供基礎平臺技術,使得開發(fā)和測試各階段更好驗證系統(tǒng)通信和功能,點擊原文了解更多CANoe對Security的支持。
圖11:主密碼配置方式及版本要求
-
通信
+關注
關注
18文章
6036瀏覽量
136083 -
網絡安全
+關注
關注
10文章
3172瀏覽量
59855
發(fā)布評論請先 登錄
相關推薦
評論