本部分主要介紹下高速公路ETC卡籤所涉及的主要算法,包括子密鑰推導、MAC計算以及過程密鑰,具體如後描述。
1. 子密鑰推導(密鑰分散)
子密鑰推導包括左半部分推導、右半部分推導以及合併三個環節。
-
左半部分的推導方法
推導雙倍長 DPK左半部分的方法:
-
將應用序列號(分散係數)的最右16個數字作爲輸入數據
-
將MPK 作爲加密密鑰
-
用MPK 對輸入數據進行Triple DES運算
-
右半部分的推導方法
推導雙倍長DPK右半部分的方法:
-
將應用序列號(分散係數)的最右16個數字的求反作爲輸入數據
-
將MPK 作爲加密密鑰
-
用MPK 對輸入數據進行TripleDES運算
-
合併
DPK = DPK_L || DPK_R
最終得到的DPK即爲MPK的子密鑰(分散結果)。
2. MAC計算
MAC,即報文鑑別碼,按照如下的方式使用單重或三重DES加密方式產生MAC:
-
第一步:取8個字節的16進制數字‘0’或者 4字節隨機數+4字節’0’(由業務類型確定)作爲初始變量。
-
第二步:按照順序將以下數據串聯在一起形成數據塊:
-
第三步:將該數據塊分成8字節爲單位的數據塊,標號爲D1、D2、D3和D4等。最後的數據塊有可能是1-8個字節。
-
第四步:如果最後的數據塊長度是8字節的話,則在其後加上16進制數字’80 00 00 00 00 00 00 00 ’,轉到第五步。 如果最後的數據塊長度不足8字節,則在其後加上16進制數字’80’,如果達到8字節長度,則轉入第五步;否則在其後加入16進制數字’0’直到長度達到8字節。
-
第五步:對這些數據塊使用相應的密鑰進行加密。根據密鑰的長度採用Single DES或Triple DES。
-
第六步:最終得到是從計算結果左側取得的4字節長度的MAC(或TAC)。
用長度爲16字節的密鑰產生MAC
用長度爲8字節的密鑰產生MAC
3. 過程密鑰產生
過程密鑰是在交易過程中用可變數據產生的單倍長密鑰。過程密鑰產生後只能在某過程/交易中使用一次。
下圖描述了 EP進行消費交易時產生過程密鑰的機制。這方法也用於不同交易類型的過程密鑰的產生,但輸入的數據取決於不同的交易類型。