本發明涉及車內網、通信協議設計、密鑰分配、安全認證和加密等領域,尤其涉及車內CAN總線中電子控制單元的安全通信領域。
背景技術:
現有的汽車模型與各種信息技術融合,給用戶提供了舒適的駕駛環境。為了將信息技術應用到車輛中,安裝了多種智能應用組件。在這些部件中,電子控制單元(ECU)是控制車輛電子系統的最重要的部件。車輛電子系統由超過70個ECU組成,這些ECU通過不同的通信網絡互聯如控制器區域網(CAN),如果攻擊者在ECU中注入非法控制信息,將直接威脅乘客的生命安全,因此我們需要一種能夠進行密鑰分配、驗證消息以及認證合法ECU的安全機制來保證車內網的安全。
大多數現有的解決方案僅考慮到了車載網安全,在車內并沒有高效的安全機制。CAN是最有代表性的車內局域網絡,它顯著減少了通信線路的數量并且確保了數據傳輸的可靠性。車內傳輸的每個比特的信息對駕駛者的生命安全至關重要。但是在CAN的設計中沒有考慮到信息安全。當使用CAN總線網絡進行數據廣播,CAN不能確保CAN數據幀的機密性,以及ECU對CAN數據幀的認證,使得惡意攻擊者輕松地竊取數據或進行重放攻擊。因此車內CAN總線中需要擁有密鑰更新機制,不僅要考慮車內的密鑰更新,還要考慮外部設備接入帶來的安全隱患。然而,大多數方案沒有包括這一點,僅考慮了車內的情況,既不安全也不高效。
技術實現要素:
為解決上述情況,我們需要提出一種更全面的安全方案,在密鑰更新中考慮釋放外部設備和連接外部設備的情況克服以上的缺點。本發明的目的在于,提出一種CAN總線中ECU安全通信方法,用以解決車內CAN總線中ECU被攻擊者注入非法信息,竊取車內網的數據,以及外部設備接入和釋放等安全問題。
為了實現上述目的,本發明的技術方案為:
一種CAN總線中ECU安全通信的方法,包括以下步驟:(1)建立系統模型,包括電子控制單元ECU、網關電子控制單元GECU以及連接在車輛上的外部設備;(2)網關電子控制單元GECU將會話密鑰加載到它的安全存儲中:當車輛啟動或者更換ECU時,GECU將認證密鑰ki和長期對稱密鑰Gk加載到安全存儲中,并將安裝在車輛上的ECU的數量N記錄下來;(3)GECU對CAN總線中的每個ECU進行會話密鑰分發:啟動車輛之后,每個ECU輪流等待GECU分發會話密鑰,在沒有收到會話密鑰之前,ECU之間不進行通信;(4)接受方ECUr對發送方ECUs發送的加密數據幀進行認證:ECUs使用AES算法加密兩個數據幀,并為數據幀生成MAC值,ECUr對MAC進行認證和解密;(5)GECU對加密密鑰EKk和認證密鑰AKk進行更新,主要分為車內ECU密鑰更新、釋放外部設備連接時的密鑰更新兩個階段;(6)當車輛與外部設備連接時,設計附加認證和密鑰分配的方法,保證了所接入的外部設備的合法性。
進一步,所述步驟(3)GECU對CAN總線中的每個ECU進行會話密鑰分發部分,啟動車輛之后,每個ECU輪流等待GECU分發會話密鑰,在沒有收到會話密鑰之前,ECU之間不進行通信;其步驟如下:
步驟3.1:ECUi選擇隨機數Ri,并且將它傳輸給GECU;
步驟3.2:GECU選擇隨機數Seed1,生成MAC1,并且將它們傳輸給具有Seed1的ECUi,隨后ECUi認證MAC,并計算會話密鑰;
步驟3.3:ECUi生成MAC2和MAC3,并將它們一起傳輸給GECU;
步驟3.4:GECU認證MAC2,通過驗證MAC2,確認ECUi是否正確接收Seed1,在認證MAC2之后,GECU用步驟3.2的方法計算會話密鑰;
步驟3.5:在生成會話密鑰之后,GECU認證MAC3。通過認證MAC3,確認ECUi是否正確地生成會話密鑰。
進一步,所述步驟(4)接收方ECUr對發送方ECUs發送的加密數據幀進行認證部分;
ECUs使用AES算法加密兩個數據幀,并為數據幀生成MAC值,ECUr對MAC進行認證和解密;其步驟如下:
步驟4.1:發送方ECUs管理其數據幀計數器值當傳輸數據幀時,ECUs用生成密文C;的結果是128比特,由于CAN數據幀最大有效載荷為64比特,只有前64比特是用來生成密文C,用128比特的AES算法來加密兩個明文;
步驟4.2:ECUs為CAN數據幀生成MAC值,其中包括明文C和
步驟4.3:ECUr接收發送方ECUs的計數器值并用和AKk來驗證所接收的CAN數據幀的MAC是否正確;
步驟4.4:如果正確驗證CAN數據幀的MAC,執行來執行解密并獲得消息M;
步驟4.5:在完成對接收到的數據幀的認證和解密之后,ECUr增加ECU的CAN數據幀計數器值
進一步,所述步驟(5)GECU對通信的加密密鑰和認證密鑰進行更新,主要分為車內ECU密鑰更新、釋放外部設備連接時的密鑰更新兩個階段,在第k個會話密鑰中,密鑰更新階段如下:
第一,車內ECU密鑰更新階段,其步驟如下:
步驟5.1:選擇隨機值Seedk+1,GECU生成密鑰請求消息并將其廣播到車內CAN;
步驟5.2:接收密鑰請求消息的每個ECUi使用AKk驗證MAC和KEKk解密密文(C)。然后,ECUi使用預定義函數KDF得到在第k+1個會話中使用的會話密鑰。每個數據幀計數器值初始化為0;
步驟5.3:在步驟5.2之后,每個ECUi生成密鑰回復消息,并將其發送到GECU以檢查他們是否正確地接收到密鑰請求消息。
步驟5.4:在確認正確接收到密鑰請求消息之后,GECU將ECUi的每個數據幀計數器初始化為零。當GECU初始化自己的數據幀計數器時,密鑰更新階段完成。
第二,釋放外部設備連接時的密鑰更新階段,其步驟如下:
步驟5.5:GECU生成隨機值Seednew的。然后使用UK生成密鑰請求消息然后,GECU將密鑰請求消息廣播到車載CAN;
步驟5.6:接收密鑰請求消息的每個ECUi分別使用AKk和UK執行MAC的驗證和解密密文(C)。其余步驟與車內ECU密鑰更新階段相同。
進一步,所述車輛與外部設備連接部分,設計了附加認證和密鑰分配的方法,保證了所接入的外部設備的合法性,其步驟如下:
步驟6.1:將外部設備連接到車輛之后,外部設備向GECU發送認證請求;
步驟6.2:在接收到請求后,GECU生成隨機數及r1在P上的簽名。然后,使用它的證書將這些值發送到外部設備;
步驟6.3:如果成功驗證GECU發送的證書和簽名,則外部設備生成隨機數和r2在P上的簽名。然后它用自己的證書把這些值傳給GECU。在完成傳輸之后,外部設備生成臨時會話密鑰SK并且將r2在P上的簽名去掉。
步驟6.4:驗證外部設備發送的證書和簽名之后,GECU生成臨時會話密鑰SK并且將r1在P上的簽名去掉。然后,GECU用SK加密Seedk并將加密后的結果發送到外部設備。外部設備使用Seedk生成在第k個會話中使用的會話密鑰,然后利用這個會話密鑰進行通信。
進一步,所述接收方ECUr對發送方ECUs發送的數據幀進行加密部分,使用AES算法來加密兩個CAN數據幀。由于CAN數據的有效載荷為64位,128比特的加密結果被分成兩部分(左右各64位),有效的降低了計算成本。
進一步,所述密鑰更新部分考慮到了外部設備連接的密鑰更新,并且會話密鑰是從隨機生成的,彼此沒有關聯,即Seed1,Seed2,Seed3和Seedn均是不同的值。
進一步,所述車輛與外部設備連接部分,若外部設備和車載CAN之間的連接到期,則GECU廣播包含Seednew的密鑰請求消息。由于密鑰請求消息由UK加密,所以外部設備不能獲得前向會話密鑰(由隨機值Seedk-1生成的會話密鑰),也很難獲得后向會話密鑰(由隨機值Seedk+1生成的會話密鑰)。
本發明提出了一種車內CAN總線中ECU安全通信的方法,該方法有以下有益效果:
1)使用AES算法加密兩個數據幀,由于CAN數據的有效載荷為64位,128比特的被分成兩部分(左右各64位),有效的降低了計算成本。
2)通過引入MAC機制,保證了認證的高效性。
3)在密鑰更新部分考慮到了連接和釋放外部設備的密鑰更新,并且會話密鑰是從隨機生成的,彼此沒有關聯,即Seed1,Seed2,Seed3和Seedn均是不同的值。
4)加入時間戳機制,保證了雙方通信的實時性,使用計數器生成隨機數來改變用于密鑰生成的參數,有效地防止了重放攻擊。
5)當車輛與外部設備連接時,保證了前向密鑰和后向密鑰安全,若外部設備和車載CAN之間的連接到期,則GECU廣播包含Seednew的密鑰請求消息。由于密鑰請求消息由UK加密,所以外部設備不能獲得前向會話密鑰(由隨機值Seedk-1生成的會話密鑰),也很難獲得后向會話密鑰(由隨機值Seedk+1生成的會話密鑰)。
附圖說明
圖1為本發明的總體設計圖;
圖2為本發明中的會話密鑰分發圖;
圖3為本發明中ECUr對ECUs發送的CAN數據幀的認證圖;
圖4為本發明中的會話密鑰更新圖;
圖5為本發明中的GECU對外部設備的認證圖。
具體實施方式
下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述。本發明的方法以現有車輛的CAN總線、若干電子控制單元ECU和網關電子控制單元GECU為應用系統基礎,主要包括以下五部分,
本發明的方法主要包括以下五部分(本發明中的所有符號見表1):
表1主要符號定義
1、網關電子控制單元GECU將會話密鑰加載到它的安全存儲中
當車輛啟動或者更換ECU時,GECU將認證密鑰ki和長期對稱密鑰Gk加載到安全存儲中,并將安裝在車輛上的ECU的數量N記錄下來。
2、GECU對CAN總線中的ECU進行會話密鑰分發
在啟動車輛之后,CAN總線中的每個ECU按順序等待GECU執行會話密鑰分發過程。GECU給等待的ECU分發會話密鑰,但其他ECU不通信,而是輪流等待。GECU對ECU的密鑰分發過程如圖2所示,具體步驟如下:
第一步:ECUi選擇隨機數Ri,并且將它傳輸給GECU;
第二步:GECU選擇隨機數Seed1,用ki對IDi,IDGECU,Ri以及Seed1加密生成MAC1,并且將它們傳輸給具有Seed1的ECUi,隨后ECUi認證MAC1,并計算會話密鑰:KDFGK(Seed1)=EK1||AK1||KEK1||UK;
第三步:ECUi用ki對IDi,Seed1加密生成MAC2;用AK1對IDi,EK1,AK1,KEK1,KGK1和UK加密生成MAC3,并將MAC2和MAC3一起傳輸給GECU;
第四步:GECU認證MAC2,通過驗證MAC2,確認ECUi是否正確接收Seed1,在認證MAC2之后,GECU用第二步的方法計算會話密鑰;
第五步:在生成會話密鑰之后,GECU認證MAC3。通過認證MAC3,確認ECUi是否正確地生成會話密鑰。
3、接收方ECUr對發送方ECUs發送的加密數據幀進行認證
在會話密鑰分發過程完成之后,GECU執行在車輛駕駛期間ECU產生的數據幀進行認證。在方法中,用128比特的高級加密標準AES算法和帶有密鑰的哈希功能的消息認證碼MAC。ECUs使用AES算法加密兩個數據幀,并為數據幀生成MAC值,ECUr對MAC進行認證和解密,過程如圖3所示,具體步驟如下:
第一步:發送方ECUs管理其數據幀計數器值當傳輸數據幀時,ECUs用生成密文C:的結果是128比特,由于CAN數據幀最大有效載荷為64比特,只有前64比特是用來生成密文C,用128比特的AES算法來加密兩個明文;
第二步:ECUs為CAN數據幀生成MAC值,其中包括明文和密文C,即:
第三步:ECUr接收發送方ECUs的計數器值并用和AKk來驗證所接收的CAN數據幀的MAC是否正確;
第四步:如果正確驗證CAN數據幀的MAC,執行來執行解密并獲得明文信息M;
第五步:在完成對接收到的數據幀的認證和解密之后,ECUr增加ECU的CAN數據幀計數器值
4、GECU對ECU之間通信的加密密鑰和認證密鑰進行更新
主要分為車內ECU密鑰更新、釋放外部設備連接時的密鑰更新兩個階段,在第k個會話密鑰中,密鑰更新階段如圖4所示,具體步驟如下:
第一,車內ECU密鑰更新階段,GECU如下執行每個預定義周期(T)的密鑰更新,其步驟如下:
第一步:選擇隨機值Seedk+1,GECU生成密鑰請求消息并將其廣播到車內CAN,這個消息如下:
第二步:接收密鑰請求消息的每個ECUi使用AKk驗證MAC和KEKk解密密文(C)。然后,ECUi使用預定義函數KDF得到在第k+1個會話中使用的會話密鑰。每個數據幀計數器值初始化為0;
第三步:在第二步之后,每個ECUi生成密鑰回復消息,并將其發送到GECU以檢查他們是否正確地接收到密鑰請求消息:
第四步:在確認正確接收到密鑰請求消息之后,GECU將ECUi的每個數據幀計數器初始化為零。當GECU初始化自己的數據幀計數器時,密鑰更新階段完成。
第二,釋放外部設備連接時的密鑰更新階段,如果外部設備和車輛之間的連接被終止,則GECU如下執行會話密鑰更新過程保證安全,其步驟如下:
第一步:GECU生成隨機值Seednew,然后使用UK生成密鑰請求消息:
GECU將密鑰請求消息廣播到車載CAN;
第二步:接收密鑰請求消息的每個ECUi分別使用AKk和UK執行MAC的驗證和解密密文(C)。其余步驟與車內ECU密鑰更新階段相同。
車輛輛與外部設備連接的附加認證和密鑰分發
在第K次會話中,外部設備認證和會話密鑰分發步驟如下:
第一步:將外部設備連接到車輛之后,外部設備向GECU發送認證請求;
第二步:在接收到請求后,GECU生成隨機數r1及r1在P上的簽名。然后,使用它的證書將這些值發送到外部設備;
第三步:如果成功驗證GECU發送的證書和簽名,則外部設備生成隨機數和r2在P上的簽名。然后它用自己的證書把這些值傳給GECU。在完成傳輸之后,外部設備生成臨時會話密鑰SK并且將r2在P上的簽名去掉。
第四步:驗證外部設備發送的證書和簽名之后,GECU生成臨時會話密鑰SK并且將r1在P上的簽名去掉。然后,GECU用SK加密Seedk并將加密后的結果發送到外部設備。外部設備使用Seedk生成在第k個會話中使用的會話密鑰,然后利用這個會話密鑰進行通信。
盡管已經示出和描述了本發明的實施例,本領域的普通技術人員可以理解:在不脫離本發明的原理和宗旨的情況下可以對這些實施例進行多種變化、修改、替換和變型,本發明的范圍由權利要求及其等同物限定。