附錄I的主要內(nèi)容是通過(guò)一個(gè)狀態(tài)圖來(lái)描述ECU在安全訪問(wèn)的各狀態(tài)之間的切換條件,以及如何進(jìn)行狀態(tài)切換即切換過(guò)程中都需要執(zhí)行哪些操作。
一、狀態(tài)圖
下面直接先上圖。
圖看起來(lái)流程很多,但實(shí)際上很簡(jiǎn)單,先說(shuō)圖中的四個(gè)狀態(tài):
A - ECU沒有接收過(guò)任何安全訪問(wèn)的請(qǐng)求,或者剛剛接收并處理完非默認(rèn)診斷會(huì)話請(qǐng)求之后的狀態(tài);
B - ECU接收到了請(qǐng)求種子的請(qǐng)求且已經(jīng)響應(yīng)了種子,但沒有接收到密鑰,也就是在等待診斷儀發(fā)送密鑰的狀態(tài);
C - ECU已經(jīng)認(rèn)證通過(guò)了一個(gè)安全等級(jí)處于已解鎖狀態(tài),并且沒有收到任何請(qǐng)求種子的請(qǐng)求;
D - ECU已經(jīng)認(rèn)證通過(guò)了一個(gè)安全等級(jí)處于解鎖的狀態(tài),同時(shí)收到了新的不同安全等級(jí)請(qǐng)求種子的請(qǐng)求并已經(jīng)發(fā)送了種子,在等待診斷儀發(fā)送密鑰的狀態(tài)。
其中,狀態(tài)A和狀態(tài)C相比,以及狀態(tài)B和狀態(tài)D相比,都只差了是否已經(jīng)解鎖了一個(gè)安全等級(jí)。
二、安全訪問(wèn)策略說(shuō)明
在解釋狀態(tài)圖的10個(gè)狀態(tài)轉(zhuǎn)換之前,先對(duì)安全訪問(wèn)的一個(gè)通用策略簡(jiǎn)單地說(shuō)明一下。
安全認(rèn)證算法增加破解難度的通用做法就是增加算法中使用的種子和密鑰長(zhǎng)度,以此來(lái)增加計(jì)算的復(fù)雜程度,從而增加計(jì)算過(guò)程的時(shí)間,使時(shí)間加長(zhǎng)。但是UDS一開始是用在CAN/LIN總線這種報(bào)文長(zhǎng)度比較短的傳輸協(xié)議上,因此使用長(zhǎng)種子會(huì)比較不方便,在不改變種子和密鑰長(zhǎng)度的情況下,一般會(huì)采取限制嘗試次數(shù)和兩次嘗試之間的最短時(shí)間的策略。
下面是這種策略所用到的一些參數(shù),這里盡可能通俗的去說(shuō)一下參數(shù)的具體用處。
Delay_Timer:兩次安全訪問(wèn)嘗試的最短時(shí)間,即當(dāng)安全訪問(wèn)嘗試失敗達(dá)到一定次數(shù)之后,ECU應(yīng)該開啟此計(jì)時(shí)器來(lái)限制后續(xù)的嘗試頻率。這個(gè)時(shí)間長(zhǎng)度是可以配置的,并且可以根據(jù)實(shí)際需求由OEM定義是否需要在ECU啟動(dòng)或者復(fù)位的時(shí)候也啟用這個(gè)定時(shí)器。可以所有安全等級(jí)用同一個(gè)定時(shí)器,也可以每個(gè)安全等級(jí)都分配一個(gè)定時(shí)器。甚至,這個(gè)定時(shí)器可以是一個(gè)可變值,例如可以隨著嘗試失敗的次數(shù)增加而增加。
Att_Cnt_Limit:這個(gè)參數(shù)就是安全訪問(wèn)失敗的次數(shù)限制,當(dāng)達(dá)到這個(gè)次數(shù)之后,就會(huì)開啟Delay_Timer來(lái)限制安全訪問(wèn)的頻率。
Att_Cnt:這個(gè)參數(shù)用來(lái)記錄實(shí)際安全訪問(wèn)嘗試失敗的次數(shù),每次安全訪問(wèn)嘗試失敗這個(gè)計(jì)數(shù)器都會(huì)加1,和Att_Cnt_Limit配合來(lái)實(shí)現(xiàn)限制安全訪問(wèn)嘗試的功能。
這三個(gè)參數(shù)相互配合,可以實(shí)現(xiàn)一整套的機(jī)制。舉個(gè)例子,設(shè)置Delay_Timer = 10s, Att_Cnt_Limit = 3, Att_Cnt初始為0,每次安全訪問(wèn)失敗Att_Cnt都會(huì)增加1,當(dāng)失敗次數(shù)達(dá)到Att_Cnt_Limit即3的時(shí)候,定時(shí)器開始計(jì)時(shí),在時(shí)間達(dá)到Delay_Timer之前,安全訪問(wèn)請(qǐng)求將被拒絕并給出否定響應(yīng)。
除此之外,還有一個(gè)Static_Seed參數(shù),用來(lái)表示是否需要ECU在特定條件下響應(yīng)相同的種子,這個(gè)在下一章節(jié)會(huì)詳細(xì)說(shuō)明。
三、狀態(tài)切換說(shuō)明
接著說(shuō)第一章里的圖,前面解釋了圖里的四個(gè)狀態(tài),除了狀態(tài)之外,還有10個(gè)跳轉(zhuǎn)的路徑未說(shuō)明,接下來(lái)就簡(jiǎn)單聊聊。
ISO里是通過(guò)表格來(lái)進(jìn)行的說(shuō)明,多少有些抽象,我重新整理一下按圖里的編號(hào)作為小章節(jié)號(hào)來(lái)逐一說(shuō)明,可能會(huì)更容易理解一些。
-
ECU啟動(dòng)之后直接進(jìn)入狀態(tài)A,這里的啟動(dòng)包括正常的上電操作,復(fù)位操作以及網(wǎng)絡(luò)喚醒操作。在此過(guò)程中,如果有支持第二章描述的策略,則初始化Att_Cnt這個(gè)參數(shù)為0或者上次關(guān)閉時(shí)候保存的值,這里需要按OEM的策略要求執(zhí)行,同時(shí)如果OEM有要求啟動(dòng)計(jì)時(shí)器,也會(huì)啟動(dòng)Delay_Timer這個(gè)計(jì)時(shí)器。
-
從狀態(tài)A切換到狀態(tài)B,需要同時(shí)滿足4個(gè)條件,包括兩個(gè)強(qiáng)制的和兩個(gè)可選的。兩個(gè)強(qiáng)制的條件是收到請(qǐng)求種子的報(bào)文和報(bào)文的長(zhǎng)度正確,兩個(gè)可選的條件是根據(jù)OEM的要求來(lái)做的,分別是滿足執(zhí)行請(qǐng)求的前置條件和延時(shí)時(shí)間結(jié)束。有些OEM會(huì)處于駕駛安全考慮,在執(zhí)行一些服務(wù)之前要先檢查條件,如車速和發(fā)動(dòng)機(jī)轉(zhuǎn)速等,主要目的是為了防止車輛在運(yùn)動(dòng)過(guò)程中執(zhí)行一些有潛在安全威脅的操作。為了增加破解的時(shí)間,防止通過(guò)不停地重啟來(lái)縮短Delay_Timer的時(shí)間,有些OEM也會(huì)要求ECU上電之后即開啟計(jì)時(shí)器。滿足前面提到的條件后,ECU開始生成并存儲(chǔ)種子,保存當(dāng)前的子功能也就是安全等級(jí),并把種子通過(guò)響應(yīng)發(fā)送給請(qǐng)求方,然后切換到狀態(tài)B。
-
從狀態(tài)B切換到狀態(tài)C,也需要同時(shí)滿足4個(gè)條件,這些條件都是強(qiáng)制的。其實(shí)只是一些基本的服務(wù)檢查,即必須是收到了發(fā)送密鑰的請(qǐng)求,子功能和已經(jīng)保存的子功能是一對(duì)兒(即發(fā)送密鑰的子功能是請(qǐng)求種子的子功能加1),報(bào)文長(zhǎng)度和密鑰都要沒有問(wèn)題。檢查完條件,ECU會(huì)將當(dāng)前安全等級(jí)切換到解鎖裝填,如果支持第二章的策略,則需要將Att_Cnt清零,如果這個(gè)參數(shù)是要在NVM里保存的,這時(shí)候也需要進(jìn)行更新,如果Static_Seed = true,這時(shí)候也需要對(duì)之前生成的種子清零,最后通過(guò)一個(gè)肯定響應(yīng)告訴診斷儀安全訪問(wèn)執(zhí)行成功。
-
這一條切換路徑主要是指哪些情況下ECU會(huì)保持在當(dāng)前狀態(tài),以及檢測(cè)到問(wèn)題之后需要給出什么響應(yīng)。
-
請(qǐng)求種子報(bào)文的長(zhǎng)度不正確,響應(yīng)NRC13;
-
收到發(fā)送密鑰的請(qǐng)求,響應(yīng)NRC24;
-
請(qǐng)求種子報(bào)文長(zhǎng)度正確,檢查到條件不正確,響應(yīng)NRC22;
-
請(qǐng)求種子報(bào)文長(zhǎng)度正確,檢查的條件正確,但是延時(shí)的時(shí)間未到,響應(yīng)NRC37;
-
其他一些通用的否定響應(yīng),具體可參照系列第三篇通用的響應(yīng)那里;
-
該子功能(安全等級(jí))的延時(shí)時(shí)間到了,Att_Cnt需要清零并存儲(chǔ)到NVM里(前提是支持該功能)。這里需要注意的是很多OEM并不會(huì)在這個(gè)時(shí)候讓Att_Cnt清零,而僅僅是減1來(lái)增加破解的時(shí)間。
-
-
前面提到狀態(tài)B和D很相似,所以這條路徑也是一樣的,共分為三種情況:
- 收到安全訪問(wèn)的請(qǐng)求種子的請(qǐng)求報(bào)文,Static_Seed參數(shù)配置為false,此時(shí)ECU應(yīng)當(dāng)對(duì)請(qǐng)求的安全等級(jí)生成新的種子,并通過(guò)肯定響應(yīng)將種子發(fā)給診斷儀;
- 收到安全訪問(wèn)的請(qǐng)求種子的請(qǐng)求報(bào)文,Static_Seed參數(shù)配置為true并且請(qǐng)求的安全等級(jí)有已經(jīng)保存的種子,此時(shí)ECU應(yīng)當(dāng)通過(guò)肯定響應(yīng)將保存的種子發(fā)給診斷儀;
- 收到安全訪問(wèn)的請(qǐng)求種子的請(qǐng)求報(bào)文,Static_Seed參數(shù)配置為true但請(qǐng)求的安全等級(jí)因?yàn)楦?dāng)前已經(jīng)請(qǐng)求過(guò)的安全等級(jí)不同,這時(shí)候沒有已經(jīng)保存的種子,此時(shí)ECU應(yīng)當(dāng)對(duì)請(qǐng)求的安全等級(jí)生成新的種子,并通過(guò)肯定響應(yīng)將種子發(fā)給診斷儀;
-
從狀態(tài)C到狀態(tài)A的切換比較簡(jiǎn)單,即收到診斷會(huì)話模式的請(qǐng)求,或者發(fā)生了S3超時(shí),這時(shí)候ECU在完成會(huì)話模式切換的同時(shí),也需要將已經(jīng)解鎖的安全訪問(wèn)等級(jí)給重新恢復(fù)到鎖定狀態(tài)。
-
這條狀態(tài)轉(zhuǎn)換和4相似,只多出來(lái)了收到已經(jīng)解鎖的安全等級(jí)的請(qǐng)求種子報(bào)文的情況,這時(shí)候ECU應(yīng)當(dāng)給出肯定響應(yīng),響應(yīng)里的種子用0代替。
-
當(dāng)ECU在狀態(tài)C的時(shí)候收到了跟已經(jīng)解鎖的安全等級(jí)不一樣的請(qǐng)求種子報(bào)文時(shí),如果報(bào)文長(zhǎng)度、需要檢查的條件都正常,并且延時(shí)時(shí)間已經(jīng)到了,如果先前沒有生成,這時(shí)候ECU應(yīng)當(dāng)生成并保存種子,同時(shí)保存請(qǐng)求的安全等級(jí),最后通過(guò)肯定響應(yīng)將種子發(fā)送給診斷儀。
-
從狀態(tài)B切換到狀態(tài)A的條件比較多,下面逐條說(shuō)明:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-693453.html
- 收到了發(fā)送密鑰的報(bào)文,安全等級(jí)、報(bào)文長(zhǎng)度簡(jiǎn)單都沒問(wèn)題,但是密鑰錯(cuò)誤,如果這時(shí)候使用了第二章的策略,并且(Att_Cnt+1) < Att_Cnt_Limit,那么Att_Cnt++,并且要保存到NVM里(如果OEM要求有此功能),響應(yīng)NRC35(密鑰錯(cuò)誤)。
- 收到了發(fā)送密鑰的報(bào)文,安全等級(jí)、報(bào)文長(zhǎng)度簡(jiǎn)單都沒問(wèn)題,但是密鑰錯(cuò)誤,如果這時(shí)候使用了第二章的策略,并且(Att_Cnt+1) >= Att_Cnt_Limit,那么Att_Cnt++,并且要保存到NVM里(如果OEM要求有此功能),開啟安全訪問(wèn)延時(shí),響應(yīng)NRC36(密鑰錯(cuò)誤)。
- 如果收到的發(fā)送密鑰報(bào)文安全等級(jí)和先前請(qǐng)求種子時(shí)候的安全等級(jí)不一致,那么ECU需要響應(yīng)NRC24,安全計(jì)訪問(wèn)失敗計(jì)數(shù)器不變。
- 如果收到的發(fā)送密鑰報(bào)文安全等級(jí)和先前請(qǐng)求種子時(shí)候的安全等級(jí)一致,但是報(bào)文長(zhǎng)度錯(cuò)誤,那么ECU需要響應(yīng)NRC13,安全計(jì)訪問(wèn)失敗計(jì)數(shù)器不變。
- 收到了診斷會(huì)話模式的請(qǐng)求,或者發(fā)生了S3超時(shí),這時(shí)候ECU在完成會(huì)話模式切換的同時(shí),也需要將已經(jīng)解鎖的安全訪問(wèn)等級(jí)給重新恢復(fù)到鎖定狀態(tài)。
- 其他一些通用的否定響應(yīng),具體可參照系列第三篇通用的響應(yīng)那里。
- 收到了請(qǐng)求種子的報(bào)文,但是報(bào)文長(zhǎng)度不正確,ECU需要響應(yīng)NRC13.
-
狀態(tài)D切換到狀態(tài)C和上一條稍有些不同,響應(yīng)NRC13、NRC24、NRC35和NRC36以及其他NRC的條件和執(zhí)行的動(dòng)作都是一致的(注意這里關(guān)于NRC36執(zhí)行的動(dòng)作,我理解是筆誤),少了會(huì)話模式切換的條件,因?yàn)槟鞘翘D(zhuǎn)編號(hào)6,多出來(lái)兩條新的跳轉(zhuǎn)條件:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-693453.html
- 收到安全訪問(wèn)請(qǐng)求種子的報(bào)文,如果請(qǐng)求的安全等級(jí)正是當(dāng)前解鎖的等級(jí),那么需要響應(yīng)全零的種子;
- 收到發(fā)送密鑰的報(bào)文,安全等級(jí)、報(bào)文長(zhǎng)度和密鑰都正確,這時(shí)候也要切換到狀態(tài)C,但這里要注意的是,此時(shí)的狀態(tài)C已經(jīng)不是先前的狀態(tài)C了,解鎖的安全等級(jí)變了。切換過(guò)程主要幾件事,新的安全等級(jí)的Att_Cnt計(jì)數(shù)器清零并保存,之前已經(jīng)解鎖的安全等級(jí)重新鎖定,如果Static_Seed參數(shù)配置為true,那么需要清空先前生成的種子,發(fā)送肯定響應(yīng)。
到了這里,關(guān)于UDS診斷系列之七 安全訪問(wèn)(27)服務(wù)(番外)附錄I的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!