
安全報文是使用加密和/或附加消息鑑別碼對敏感指令進行保護的機制。安全報文包括“明文+MAC”和“密文+MAC”兩種方式。
智能密碼鑰匙的安全報文機制如下。
假定分組長度為L,待加密數據長度為Ld(最大長度為65553)。
數據加密運算:
第一步:在待加密數據前填充兩字節的數據長度(以Little Endian方式表示),作為加密過程的輸入數據。
第二步:將經第一步處理後的數據塊分為L字節是單位的數據塊,標識成D1,D2,……,Dn等。
第三步:如果最後一組數據塊長度為L字節,必須在後加上1位元組0x80及L-1位元組0x00轉到第四步;若最後一組數據塊長度不夠L字節,那麼在後加上0x80,若長度達到L字節,轉至第四步;要不然在其後再加上0x00,直至長度達到L字節。
第四步:對上述每個數據塊使用相應的密鑰進行加密運算。
第五步:計算結束後,把全部運算後的數據塊按原有順序連接到一起,即為加密運算後結果。
數據解密運算:
第一步:對待解密數據按L字節進行分組。
第二步:對每個分組使用相應的密碼進行解密運算,所有解密後的數據按照原有序列連接到一起。
第三步:去掉前面填充的數據長度和最後的填充數據,得到原始明文。
MAC計算:
MAC是使用命令的全部元素產生的,MAC為命令數據域中一部分,長度為4字。
MAC計算步驟如下:
第一步:應用向智能密碼鑰匙發送取隨機數指令,從智能密碼鑰匙取回8位元組隨機數。
第二步:將智能密碼鑰匙回送的8位元組隨機數加上L-8個字節0x00,得到L字節結果作為初始值。
第三步:按順序把這些數據連成數據塊:CLA、INS、P1、P2、Lc+4、Data。把CLA的低半字節。
第四步:將數據塊分為L字節成單位的數據塊,標識成D1,D2,…,Dn等。
第五步:如果最後一組數據塊長度為L字節,必須在後加上1位元組0x80及L-1位元組0x00,轉到第六步;若最後一組數據塊長度不足L字節,則在後加上0x80,若長度達到L字節,轉到第六步;要不然在其後再加上0x00,直至長度達到L字節。
第六步:對上述數據塊用相應的密鑰加密。
第七步:將上述加密得到的結果從左側取4位元組長度數據為MAC。
