陸 泳,徐偉卿,裴飛飛 Lu Yong,Xu Weiqing,Pei Feifei
?
仿真技術(shù)在硬件加密技術(shù)的開(kāi)發(fā)應(yīng)用
陸 泳,徐偉卿,裴飛飛 Lu Yong,Xu Weiqing,Pei Feifei
(泛亞汽車(chē)技術(shù)中心有限公司,上海 200135)
采用與汽車(chē)診斷儀相配套的集成開(kāi)發(fā)工具構(gòu)建仿真運(yùn)行模型,借助診斷儀軟件提供的自動(dòng)化腳本定義汽車(chē)ECU邏輯序列,從而實(shí)現(xiàn)對(duì)仿真模擬環(huán)境的精確構(gòu)建。通過(guò)使用汽車(chē)ECU密鑰仿真實(shí)現(xiàn)方法,可以獲得由汽車(chē)診斷儀、仿真運(yùn)行模型、加密單元等協(xié)同工作并最終由后者生成的密鑰。
ECU;安全算法;仿真;接口程序
隨著汽車(chē)工業(yè)迅猛發(fā)展,汽車(chē)上使用了大量ECU(Electronic Control Unit,電子控制模塊),許多中高檔轎車(chē)上采用了十幾個(gè)甚至二十幾個(gè)ECU。目前大多數(shù)ECU采用相互獨(dú)立的硬件和軟件組成的技術(shù),不同軟件匹配相應(yīng)的硬件可適應(yīng)不同要求的車(chē)輛系統(tǒng),大大提高汽車(chē)的變型能力。為了避免對(duì)ECU數(shù)據(jù)軟件的誤更新和非授權(quán)數(shù)據(jù)訪問(wèn)及功能操作,通過(guò)CAN車(chē)輛總線網(wǎng)絡(luò)層發(fā)送一系列指令序列即接口程序?qū)CU軟件進(jìn)行更新時(shí),必須滿(mǎn)足SAE J2186 車(chē)輛診斷數(shù)據(jù)連接安全性要求。也就是說(shuō),對(duì)應(yīng)用于車(chē)輛上的電子模塊,如果提供了數(shù)據(jù)軟件刷新功能,那么數(shù)據(jù)安全性必須符合國(guó)家技術(shù)規(guī)范。
由于必須滿(mǎn)足相關(guān)數(shù)據(jù)連接安全性的標(biāo)準(zhǔn)和規(guī)范,這在一定程度上給汽車(chē)ECU的功能開(kāi)發(fā)帶來(lái)不便。例如,在目前條件下實(shí)際搭建有待測(cè)類(lèi)型ECU的真實(shí)測(cè)試環(huán)境,為開(kāi)發(fā)人員完成各種測(cè)試工作(與ECU相關(guān)的診斷軟件、維修軟件中數(shù)據(jù)連結(jié)安全功能驗(yàn)證等);又如,由于用戶(hù)權(quán)限問(wèn)題致使部分工程技術(shù)人員在開(kāi)發(fā)過(guò)程中無(wú)權(quán)對(duì)ECU進(jìn)行訪問(wèn)、測(cè)試。這樣不僅不便于快速定位并及時(shí)解決在ECU開(kāi)發(fā)過(guò)程中面臨的一些技術(shù)問(wèn)題,而且容易成為研發(fā)、設(shè)計(jì)環(huán)節(jié)中的瓶頸,從而影響工作效率,延長(zhǎng)開(kāi)發(fā)周期,致使在人員、資金以及時(shí)間投入等方面造成相當(dāng)大的浪費(fèi)。
將電子模塊仿真技術(shù)和軟件刷新接口技術(shù)充分結(jié)合起來(lái),使用汽車(chē)ECU密鑰仿真實(shí)現(xiàn)方法,獲得由汽車(chē)診斷儀、仿真運(yùn)行模型、加密單元等協(xié)同工作并最終由后者生成的密鑰。
在日常ECU數(shù)據(jù)刷新過(guò)程中,工程技術(shù)人員應(yīng)用各個(gè)廠家提供的開(kāi)發(fā)編程系統(tǒng)軟件加載數(shù)據(jù),通過(guò)運(yùn)行接口軟件,完成對(duì)ECU的程序更新。對(duì)于已售出的車(chē)輛,維修站技術(shù)人員采用廠家提供的維修編程軟件,加載對(duì)應(yīng)車(chē)型ECU的數(shù)據(jù)軟件包進(jìn)行數(shù)據(jù)刷新。兩者的最大區(qū)別是,接口軟件在開(kāi)發(fā)編程系統(tǒng)中可以編輯和調(diào)試,而維修編程軟件無(wú)法對(duì)接口軟件進(jìn)行任何編輯和調(diào)試。
與支持CAN總線的ECU刷新相關(guān)的操作指令基本都符合ISO 15752-2道路行駛車(chē)輛CAN總線診斷網(wǎng)絡(luò)層規(guī)范的內(nèi)容和要求,可以了解到ECU的數(shù)據(jù)軟件刷新的步驟和指令。在對(duì)ECU數(shù)據(jù)軟件更新其間,加密解鎖操作是通過(guò)接口程序相關(guān)指令完成。這些指令操作必須遵循國(guó)家和汽車(chē)行業(yè)規(guī)范和標(biāo)準(zhǔn)。同時(shí),只有對(duì)ECU解鎖后,接口程序才能夠順利地將制定的數(shù)據(jù)文件刷新至ECU。
闡述一種ECM(Engine Control Module,發(fā)動(dòng)機(jī)控制模塊)加密原理:在加密控件中,選定具體算法號(hào)和種子號(hào)后,通過(guò)加密控件可以得到相對(duì)應(yīng)的密匙。針對(duì)不同ECU供應(yīng)商和不同功能應(yīng)用情況,分配的安全算法號(hào)不一樣。由安全算法號(hào)和內(nèi)核程序可以生成足夠多的種子號(hào)和密匙,從而在ECU制造時(shí)存儲(chǔ)到特定的寄存器中,這是ECU設(shè)計(jì)開(kāi)發(fā)的核心。當(dāng)然,對(duì)于一般工程技術(shù)人員可以通過(guò)相關(guān)指令對(duì)ECU進(jìn)行種子號(hào)請(qǐng)求,再通過(guò)加密控件將計(jì)算出的密匙發(fā)送給ECU,從而對(duì)ECU進(jìn)行解鎖。
相關(guān)程序接口如圖1所示。
圖1 接口程序訪問(wèn)原理
目前,工程開(kāi)發(fā)用的汽車(chē)診斷儀基本功能包括集成診斷、節(jié)點(diǎn)/ECU仿真、數(shù)據(jù)獲取、自動(dòng)測(cè)試和車(chē)內(nèi)通信網(wǎng)絡(luò)監(jiān)控等,同時(shí)支持CAN、LIN、K-line、J1850 VPW、ISO 9141、Keyword Protocol 2000等汽車(chē)行業(yè)普遍應(yīng)用的協(xié)議。
診斷儀軟件提供的腳本語(yǔ)言功能強(qiáng)大,簡(jiǎn)單易學(xué)。針對(duì)需要實(shí)現(xiàn)的自動(dòng)化任務(wù)即仿真控制比較簡(jiǎn)單,可以選擇腳本語(yǔ)言進(jìn)行仿真控制編程。工程技術(shù)人員不需要具有任何編程語(yǔ)言基礎(chǔ)也能完成自動(dòng)化腳本的編寫(xiě),只需要從列表中選擇需要的語(yǔ)句。所編寫(xiě)的腳本運(yùn)用診斷儀腳本模塊定義ECU的邏輯序列,從而擁有一個(gè)可以工作的仿真ECU;因此,不需要編寫(xiě)C代碼就能建立ECU模型和創(chuàng)建精確的仿真環(huán)境。
汽車(chē)ECU密鑰仿真實(shí)現(xiàn)方法步驟包括:
1)在計(jì)算機(jī)中構(gòu)建并運(yùn)行汽車(chē)ECU仿真模型;
2)將加密單元與計(jì)算機(jī)通訊連接,該加密單元與汽車(chē)ECU中用于生成密鑰的加密控件具有相同的加密處理業(yè)務(wù)規(guī)則;
3)將汽車(chē)診斷儀與計(jì)算機(jī)和車(chē)載總線通訊連接,通過(guò)汽車(chē)診斷儀設(shè)定所需的安全算法號(hào)并向仿真模型發(fā)送信號(hào)請(qǐng)求種子號(hào);
4)將安全算法號(hào)和從仿真模型反饋輸出的種子號(hào)發(fā)送給加密單元,并由其生成與安全算法號(hào)和種子號(hào)相關(guān)聯(lián)的密鑰。
仿真集成系統(tǒng)的硬件構(gòu)造如圖2所示。
圖2 仿真集成系統(tǒng)架構(gòu)
由圖2可知,診斷儀A一端連接計(jì)算機(jī)USB接口,另一端按照具體技術(shù)接口特性,通常是計(jì)算機(jī)并行DB25的腳號(hào)進(jìn)行定義。將電源腳和接地腳連接到開(kāi)關(guān)電源正負(fù)極,CAN(Controller Area Network,控制器局域網(wǎng)絡(luò))總線腳通過(guò)雙絞鏈線和符合J1962(Diagnostic Connector Standard,診斷連接器標(biāo)準(zhǔn))的數(shù)據(jù)鏈路連接器DLC(Data Link Connector,數(shù)據(jù)鏈路接口)聯(lián)結(jié)。
診斷儀B作為常規(guī)開(kāi)發(fā)編程軟件和測(cè)試對(duì)象的連接設(shè)備。由于針對(duì)的是支持CAN總線的ECU數(shù)據(jù)軟件更新相關(guān)技術(shù)[1],根據(jù)目前普遍的要求,診斷儀必須支持SAE J2534-1編程應(yīng)用程序接口規(guī)范要求,否則無(wú)法與開(kāi)發(fā)編程軟件進(jìn)行正常的數(shù)據(jù)通訊。
診斷儀軟件主要用于仿真軟件開(kāi)發(fā)、調(diào)試和運(yùn)行監(jiān)控。在仿真軟件開(kāi)發(fā)前,首先需要明確仿真ECU的相關(guān)邏輯,應(yīng)用診斷儀的數(shù)據(jù)獲取和記錄功能,對(duì)通過(guò)開(kāi)發(fā)編程軟件運(yùn)行接口程序的正常ECU數(shù)據(jù)刷新進(jìn)行信號(hào)和報(bào)文實(shí)時(shí)記錄;接著對(duì)捕捉的報(bào)文進(jìn)行解析,確定相關(guān)的程序流程圖,明確需要模擬的ECU報(bào)文;最后利用診斷儀軟件提供的圖形化腳本環(huán)境,快速建立符合需求的邏輯指令集,從而模擬和仿真出ECU在數(shù)據(jù)軟件更新中的報(bào)文。該方案應(yīng)用診斷儀軟件相應(yīng)功能,通過(guò)報(bào)文記錄,解析及腳本編輯,提供完整的ECU種子及進(jìn)行相關(guān)通訊功能仿真。
接口程序開(kāi)發(fā)編程軟件用于接口軟件的運(yùn)行和監(jiān)控,接口程序是符合診斷規(guī)范要求的一系列CAN總線指令,通過(guò)一般的文本編輯器可以對(duì)其進(jìn)行編輯和修改;在對(duì)ECU進(jìn)行數(shù)據(jù)軟件刷新時(shí),這些指令集將在開(kāi)發(fā)編程軟件或維修編程軟件環(huán)境下自動(dòng)運(yùn)行。在數(shù)據(jù)傳輸過(guò)程中,對(duì)于運(yùn)行接口程序的計(jì)算機(jī)和需要進(jìn)行軟件刷新的ECU而言,接口程序指令在發(fā)送后,根據(jù)指令接收方ECU反饋結(jié)果,接口程序進(jìn)行相應(yīng)程序跳轉(zhuǎn)和執(zhí)行。理論上,在符合國(guó)家和行業(yè)規(guī)范的要求下,接口程序相關(guān)數(shù)據(jù)處理流程和語(yǔ)法都有嚴(yán)格定義[2],通過(guò)文本編輯器打開(kāi)接口程序,找到定義和調(diào)用安全算法號(hào)的語(yǔ)句,將相應(yīng)的算法號(hào)修改為需要測(cè)試的數(shù)值即可。當(dāng)實(shí)際運(yùn)行接口程序時(shí),開(kāi)發(fā)編程軟件對(duì)ECU的所有的指令操作和總線信息進(jìn)行記錄,同時(shí)也將相關(guān)ECU的種子號(hào)和調(diào)用新算法號(hào)產(chǎn)生的密匙記錄下來(lái)。
ECU 仿真程序完全按照CAN總線軟件刷新步驟進(jìn)行仿真。開(kāi)發(fā)編程軟件指令發(fā)出是軟件本身的設(shè)定,從仿真軟件中得到正反饋,會(huì)進(jìn)行下一步操作,反之,如果反饋信息不正確,會(huì)終止程序操作。根據(jù)這個(gè)特點(diǎn),進(jìn)行仿真軟件流程設(shè)計(jì)和軟件開(kāi)發(fā),具體流程如圖3所示。總線喚醒和診斷設(shè)備在線步驟是保持上位機(jī)和ECU之間通訊,為確保上位機(jī)識(shí)別出被訪問(wèn)ECU的物理地址,需要反饋?zhàn)R別碼;在進(jìn)入ECU編程模式前,需要確保ECU狀態(tài)正常,不受其他節(jié)點(diǎn)通訊干擾,需要清除ECU故障碼和關(guān)閉CAN總線上其他所有節(jié)點(diǎn)的通訊,所以需要模擬清除ECU 內(nèi)部故障碼和關(guān)閉總線通訊節(jié)點(diǎn)使能的操作;接著反饋給上位機(jī)軟件狀態(tài),確認(rèn)ECU 是否刷新過(guò);上位機(jī)會(huì)發(fā)送指令,讓ECU進(jìn)入編程模式后,請(qǐng)求ECU的種子號(hào),然后工程技術(shù)人員輸入種子號(hào);最后上位機(jī)根據(jù)內(nèi)部算法器和特定模塊的算法號(hào),計(jì)算出對(duì)應(yīng)的密匙。
圖3 接口程序仿真流程
汽車(chē)ECU密鑰仿真實(shí)現(xiàn)方法包括如下步驟。
1)根據(jù)實(shí)際需要對(duì)ECU在計(jì)算機(jī)中構(gòu)建仿真模型,用來(lái)模擬真實(shí)ECU的實(shí)際運(yùn)行情形。
作為優(yōu)選,可以采用與汽車(chē)診斷儀相配套的集成開(kāi)發(fā)工具來(lái)構(gòu)建仿真模型,集成開(kāi)發(fā)工具通常功能強(qiáng)大、開(kāi)發(fā)效率高并且運(yùn)行穩(wěn)定性好。通常,工程技術(shù)人員可以在不具備或者欠缺編程語(yǔ)言知識(shí)的背景下,借助例如診斷儀軟件提供的自動(dòng)化腳本來(lái)定義ECU的邏輯序列,從而實(shí)現(xiàn)對(duì)仿真模擬環(huán)境的精確構(gòu)建。
2)將加密單元與計(jì)算機(jī)進(jìn)行通訊連接。在現(xiàn)有技術(shù)中,通過(guò)設(shè)置在汽車(chē)ECU中的加密控件并根據(jù)所輸入的安全算法號(hào)和種子號(hào)生成密鑰,該加密處理過(guò)程由于涉及到電子模塊設(shè)計(jì)開(kāi)發(fā)的核心技術(shù),所以對(duì)于一般工程技術(shù)人員完全不可見(jiàn)。加密單元被設(shè)置成與ECU中加密控件具有同樣的加密處理業(yè)務(wù)規(guī)則實(shí)現(xiàn)與加密控件相同的密鑰生成功能。加密單元為連接在計(jì)算機(jī)外設(shè)接口上的加密鎖。
3)汽車(chē)診斷儀上的接口連接到計(jì)算機(jī)和車(chē)載總線上進(jìn)行通訊。汽車(chē)診斷儀主要用于ECU仿真應(yīng)用,通過(guò)USB接口連接到計(jì)算機(jī)上,并將車(chē)載總線接口通過(guò)雙絞線連接到數(shù)據(jù)鏈路連接器上,通過(guò)并行接口DB25連接到供電裝置上,接口連接如圖1所示。
4)完成連接設(shè)置之后,由工程技術(shù)人員、測(cè)試人員或者維護(hù)人員等在內(nèi)的使用者根據(jù)實(shí)際需要,通過(guò)汽車(chē)診斷儀設(shè)定所需的安全算法號(hào),并與計(jì)算機(jī)進(jìn)行通訊向已經(jīng)在計(jì)算機(jī)上運(yùn)行的ECU仿真模型請(qǐng)求種子號(hào),等待接收反饋的相應(yīng)種子號(hào),通過(guò)仿真技術(shù)使得反饋輸出過(guò)程與真實(shí)ECU的處理過(guò)程一致。
5)將安全算法號(hào)、反饋得到的種子號(hào)發(fā)送給加密單元,加密單元按照設(shè)定的加密處理規(guī)則并根據(jù)接收到的安全算法號(hào)、種子號(hào)生成相關(guān)聯(lián)的密鑰,這樣通過(guò)與加密單元通訊,解析獲得該密鑰,如此便仿真實(shí)現(xiàn)汽車(chē)ECU密鑰,不需要搭建真實(shí)ECU測(cè)試環(huán)境或者對(duì)ECU操作權(quán)限認(rèn)定進(jìn)行測(cè)試、驗(yàn)證等,可以非常方便地將解析獲得的密鑰應(yīng)用到工作中,從而滿(mǎn)足諸如SAE J2186等規(guī)范對(duì)于汽車(chē)診斷數(shù)據(jù)連接方面的安全性要求。
6)在汽車(chē)ECU密鑰仿真實(shí)現(xiàn)中,在一個(gè)優(yōu)選情形下,可以另外設(shè)置步驟記錄得到的安全算法號(hào)、種子號(hào)和密鑰中的一個(gè)或多個(gè);或者顯示得到的安全算法號(hào)、種子號(hào)和密鑰中的一個(gè)或多個(gè);又或者同時(shí)記錄并顯示得到的安全算法號(hào)、種子號(hào)和密鑰中的一個(gè)或多個(gè)。通過(guò)以上步驟,能夠更好地觀測(cè)和使用這些數(shù)據(jù)。
針對(duì)工程技術(shù)人員所具備的技術(shù)背景和試驗(yàn)設(shè)備,利用診斷儀軟件開(kāi)發(fā)并運(yùn)行仿真ECU腳本軟件,通過(guò)ECU種子號(hào),仿真ECU任意種子號(hào);通過(guò)ECU接口程序中算法號(hào),利用開(kāi)發(fā)編程軟件內(nèi)部加密控件,直接運(yùn)行仿真ECU接口程序,在開(kāi)發(fā)編程軟件的報(bào)文中,可以得到算法號(hào)和種子號(hào)所對(duì)應(yīng)的密匙。本方案具備開(kāi)發(fā)設(shè)計(jì)效率高、使用可靠、應(yīng)用便捷、節(jié)省費(fèi)用、降低調(diào)試工作量和難度等諸多優(yōu)點(diǎn)。
[1] ENHANCED E/E DIAGNOSTIC TEST MODES:SAE J2190-1993[S].
[2]羅峰,孫澤昌. 汽車(chē)CAN總線系統(tǒng)原理、設(shè)計(jì)與應(yīng)用[M]. 北京:電子工業(yè)出版社,2010.
2017-07-31
1002-4581(2017)06-0012-05
U467.2:TP311
A
10.14175/j.issn.1002-4581.2017.06.004