高校校園一卡通系統(tǒng)中密鑰管理系統(tǒng)的設計與實現(xiàn)
文章出處:http://56733.cn 作者:劉金偉,馬雅莉,侯義斌,王普 人氣: 發(fā)表時間:2010年07月16日
某高校的校園一卡通項目采用雙界面CPU卡作為加密和存儲介質,CPU卡的加密\解密功能由內嵌的硬件加密協(xié)處理器來實現(xiàn),具有很高的安全性。按照對稱加密體制設計和實現(xiàn)了一種新型密鑰管理系統(tǒng)。系統(tǒng)中的密鑰涉及到麗部分,一部分是由銀行負責產生并維護的密鑰,另一部分由校園一卡通系統(tǒng)中的密鑰管理系統(tǒng)產生,并由校方進行維護。密鑰管理系統(tǒng)作為一卡通工程的核心部分,符合PBoC的密鑰管理規(guī)范,密鑰管理系統(tǒng)將生成涉及PBOC交易的8個主密鑰,并安全存放和使用。
1密鑰系統(tǒng)的設計與實現(xiàn)
密鑰管理包括密鑰的生成、裝入、傳遞、存儲、恢復、銷毀等內容。密鑰管理系統(tǒng)中使用的密鑰都是雙倍長度的密鑰(16B),交易過程中使用的過程密鑰都是單倍長度(8B)。
一卡通生成的主密鑰稱為根密鑰,標志為G*K,主要有消費/取現(xiàn)共享密鑰。一卡通生成和使用的密鑰稱為主密鑰,或稱為一卡通專有密鑰,標志為M*K。用戶卡使用的經過主密鑰分散的密鑰成為用.戶卡密鑰,標志為D*K。用戶卡交易過程中使用的過程密鑰標志為S*K。
系統(tǒng)利用密鑰卡來承載密鑰,密鑰卡在一卡通密鑰管理系統(tǒng)內,一卡通與一卡通,一卡通與用戶卡之間進行安全的傳遞。
l.l 密鑰類型
在密鑰管理系統(tǒng)中的密鑰可分為三大類:一卡通共享密鑰;一卡通專有密鑰和管理密鑰[2]。一卡通共享密鑰由一卡通生成和維護,安全存放在一卡通的母卡A和母卡B中。消費/取現(xiàn)根密鑰是一卡通共享主密鑰,用于PBOC卡的取現(xiàn)/消費交易。一卡通專有密鑰由一卡通生成和維護,安全存放在一卡通的母卡A和母卡B中。一卡通生成其他交易使用的主密鑰,包括部分PBOC卡片的維護密鑰。
管理密鑰有兩種作用:作為認證密鑰和保護密鑰(傳輸密鑰)。認證密鑰用來對卡片做外部認證的,一般記為ADMK。保護密鑰是用來對主密鑰進行加密保護注入到卡片或輸出到另一張卡片。保護密鑰分為導入密鑰和導出密鑰兩種,所有保護密鑰都用外層的認證密鑰加密保護進入卡片中。
1.2密鑰的索引
每張用戶卡含有兩組密鑰,用兩個索引值來區(qū)分。正常時使用第一=--索引的密鑰,異常情況下(如密鑰泄露)啟用第二索引。此機制保證在異常情況下更換密鑰時,不需收回已發(fā)出的用戶卡,只需將應用系統(tǒng)(包括PSAM)中的密鑰更新為新的索引。
每個版本的消費/取現(xiàn)根密鑰含有兩個索引,預留兩個索引作為根密鑰的備用索引。所以,消費/取現(xiàn)密鑰采用4個索引。
1.3密鑰卡的分類
為了將共享密鑰安全地傳遞到各個子系統(tǒng),一卡通密鑰管理系統(tǒng)采用幾種密鑰卡來實現(xiàn)。密鑰卡分為3類:母卡;控制卡和認證卡。
母卡里存放著一卡通生成的專有密鑰,一卡通的母卡由母卡A和母卡B實現(xiàn),只有同時持有A、B卡,才可以將主密鑰導出,一卡通發(fā)行一卡通的發(fā)卡母卡,發(fā)卡母卡里存放著一卡通的消費/取現(xiàn)主密鑰,一卡通將專有密鑰注入發(fā)卡母卡,一卡通利用該卡將消費/取現(xiàn)密鑰,圈存、圈提等密鑰注入用戶卡。
控制卡里的主密鑰是有輸出次數(shù)控制的,一卡通密鑰管理系統(tǒng)里有總控卡、HSAM控制卡、PSAM控制卡三種??偪乜ǖ闹髅荑€由一卡通母卡A和母卡B導入;HSAM控制卡、PSAM控制卡是總控卡的子卡??偪貑T持有HSAM控制卡,將密鑰導入HSAM模組,HSAM控制卡的主密鑰只能導出一次;操作員持有PSAM控制卡,將一卡通的M*K導人PSAM卡;一卡通發(fā)卡母卡是由一卡通發(fā)行的,一卡通將銀行生成的其他專有密鑰注入發(fā)卡母卡,發(fā)卡員利用一卡通發(fā)卡母卡和發(fā)卡控制卡來發(fā)行用戶卡。
認證密鑰卡的主密鑰文件里存放著密鑰卡的認證密鑰,有一卡通操作員卡、一卡通認證密鑰卡兩種。一卡通操作員卡是一卡通制卡員持有的制卡“鑰匙”,操作卡里存放著一卡通密鑰卡的管理密鑰,不可以輸出,但可以對密鑰卡的管理密鑰進行認證修改;一卡通認證密鑰卡是一卡通密鑰卡的認證密鑰卡,由一卡通發(fā)行,一卡通用它來驗證一卡通所發(fā)下來的一卡通卡是否正確,并可以修改該一卡通卡的管理密鑰。
1.4系統(tǒng)結構
一卡通密鑰管理系統(tǒng)包含了幾項主要的功能模塊:密鑰生成模塊}密鑰傳遞模塊;用戶卡發(fā)卡(相關系統(tǒng));PSAM卡管理系統(tǒng)模塊;測試發(fā)卡(附加功能模塊);一卡通交易測試系統(tǒng)(附加功能模塊);密鑰的應用關系。如圖1所示為密鑰管理系統(tǒng)發(fā)卡過程中卡片產生的主要流程圖。
①校園“一卡通”密鑰生成模塊。利用密鑰生成模塊來生成所需的主密鑰,包括:消費主密鑰;圈存、圈提主密鑰;解鎖(PIN)主密鑰i重裝(PIN)主密鑰;修改(透支限額)主密鑰,應用維護主密鑰;TAC主密鑰。一卡通主密鑰由種子A、種子B、系統(tǒng)的隨機數(shù)決定生成,生成的主密鑰由一卡通決定該密鑰的版本和索引,也可以采用系統(tǒng)默認的順序。一卡通主密鑰生成后,分別注入到母卡A、母卡B,母卡A和母卡B由校領導保存,并持有該卡的PIN。
主密鑰的生成算法為:輸人種子A(SEEDA)和種子B(SEEDB)后,產生一個隨機數(shù)RAND,該隨機數(shù)固定在這個生成模塊上。KEYl—3DES(SEEDASEEDB,RAND),主密鑰檢查該KEY的強度,若合格則作為候選的主密鑰輸出;若不合格,RAND—RAND+1;繼續(xù)產生KEYl,直到產生合格的主密鑰。KEY2—3DES(SEEDA lSEEDB,RAND++),繼續(xù)產生KEY2,直到輸出外界所需個數(shù)的主密鑰。系統(tǒng)可以采用KG卡來實現(xiàn)這一個過程,如圖2所示。
主密鑰生成后,注入到母卡A和母卡B中,母卡A中的主密鑰必須使用母卡B的主密鑰方可以導出。必須同時持有母卡A、母卡B及密鑰卡的密碼,才可以導出其中的主密鑰。
②校園“一卡通”密鑰傳遞模塊。利用圖2所表示的密鑰生成模塊,學校兩位校領導分別在密鑰系統(tǒng)上輸人種子A、B,密鑰系統(tǒng)生成一卡通系統(tǒng)所需的密鑰,并分別保存在母卡A和母卡B中。為了便于使用,密鑰系統(tǒng)將母卡A、B的密鑰合成在一張總控卡中(包括多個版本和多個索引)。校方嚴格保管好總控卡,為最大程度上防范風險,通過總控卡,密鑰系統(tǒng)分別制作出3種不同的密鑰卡,參見圖3。發(fā)卡母卡和發(fā)卡控制卡交給發(fā)卡機構(建設銀行或其他發(fā)卡公司);主機HSAM卡內的密鑰(圈存密鑰、卡片應用維護密鑰等)通過安全方式傳遞給IC卡片管理系統(tǒng)、校園lC卡結算服務器、圈存設備。密鑰系統(tǒng)還做出PSAM卡發(fā)卡控制卡,利用PSAM卡發(fā)卡子系統(tǒng)發(fā)出PSAM卡。
2相關算法
CPU雙界面卡一般采用DES加密算法,這是一迭代分組密碼算法,使用的密鑰長度為64位,為了進一步提高系統(tǒng)安全強度,在我們的校園一卡通系統(tǒng)中,雙界面CPU卡采用的是三重DES算法,采用的密碼長度為128位。相關算法如下。
2.1 3DES算法
3DES算法是指使用雙長度(16B)密鑰K一(K。llKR)將8B明文數(shù)據塊進行3次DES加密/解密[3“]。
如下所示:
y—DES(KL)[DESl(K一)[DES(KL[x])]]
解密的方式如下:
x—DEs-1(KL)[DEs(K一)[DEs-1(Kc[y])]]其中DES(Kc[X])表示用密鑰K對數(shù)據X進行DES加密,DESl(Kc[y])表示用密鑰K對數(shù)據y進行解密。
SessionKEY的計算采用3DES算法,計算出單倍長度的密鑰。表示法為:SK—Session(DK,DATA)
3DES加密算法為:
VOID 3DES(BYTE DoubleKeyStr[16],BYTE Data[8],
BYTE 0ut[8])
1
BYTE Bun[8],Buf2[8];
DES(&DoubIeKeyStr[o],Data,Bufl);
UDES(&.DoubleKeyStr[8],Bufl,Buf2);
DES(&DoubleKeyStr[o],Buf2,0ut);
}
2.2密鑰分散算法
為了支持分級加密傳遞功能,CPU卡還采用了密鑰分散算法,簡稱Diversify,是指將一個雙長度的密鑰MK,對分散數(shù)據進行處理,推導出一個雙長度的密鑰DK。
表示法:DK—Diversify(MK,DATA)
推導DK左半部分的方法是:將分散數(shù)據的最右16個數(shù)字作為輸入數(shù)據;將MK作為加密密鑰;用MK對輸入數(shù)據進行3DEA運算。如圖4所示。推導DK右半部分的方法是:將分散數(shù)據的最右16個數(shù)字求反,作為輸入數(shù)據;將MK作為加密密鑰;用MK對輸入數(shù)據進行3DES運算。如圖5所示。
密鑰分散算法為:
/,密鑰分散算法,Data一分散數(shù)據8B的BCD碼
VOID Diversify(BYTE DoubleKeystr[1 6],BYTE Data[8],BYTE 0ut[16])
{
BYTE Blockr8];
3DEs(DoubleKeyStr,Data,80ut[o]);
for(int i—O;i<8;i++)
B10ck[i]一~Data[i];
3DES(DoubleKeyStr,Block,&0ut[8]);
} .
2.3安全報文算法
安全報文(SEC.一MSG)算法表示法: SECURE—MESSAGE—CLASS+INSTRUCT+P1 +P2+P3+ENCYPHER DATA+MAC
說明,CLASS:指令的類;INSTRUCT:指令代碼;P1:該指令的參數(shù)1;P2:該指令的參數(shù)2;P3:該指令的參數(shù)3,P3一P3后跟數(shù)據的長度。
ENCYPHERDATA一3DES(KEY,LENGTH of PLAlN—DATA+PLAIN DATA+PADBYTE)KEY:產生該密文所用的密鑰;PLAIN—DATA:
需要加密的明文數(shù)據;LENGTH of PLAIN—DATA:
明文數(shù)據的長度;PADBYTE:后綴數(shù)據的形式一“800000?”,如果LENGTH of PLAIN—DATA MOD 8一O,則不需要后綴數(shù)據。如果LENGTH of PLAIN—DATA MOD 8一Ⅳ,則后綴數(shù)據的長度為8一N。
MAC一3DES(KEY,CLASS+INSTRUCT+P1+P2+P3
+ENCYPHER DATA+“800000”)
安全報文算法為: ’
//安全報文算法,pCmd=cLAss+INsTRucT+Pl+P2十P3,pData=PLAIN—DATA
VulD SecureU pdate(BYTE DoubleKeyStr[1 6],BYTE
*pCmd,BYTE*pData,int DataLen)
{
BYTE EncypherData[2 5 5];
IntToBcd(DataLen,8LEncypherData[o]);
memcpy(&EncypherData[1],pData,DataLen)
int Length一1+DataLen;
int ModLen==Length%8;
if(ModLen!一O)
{
memset(&EncypherData[Length],o,8一ModLen);
EncypherData[Length]一ox80;
Length—Length+8一ModLen;
}
for(int i—O;i
8匹ncypherData[i])
//計算MAc
BYTE MAcData[255],MAc[8];
memcpy(&MACData[o],pCmd,5);
memcpy(8LMACData[5],EncypherData,Length);
memcpy(8LMACData[Length+5],”\x80\xoo\xoo”,
3);
Length+一8;
memset(MAC,O,8);‘
for(i—O}i
for(j—O;j<8;j++)
MAc[j]一MAc[j]“MAcData[i+j];
3DES(DoubleKeyStr,MAC,MAC)
)
//MAC的左4字節(jié)一MAC
)
3結論
按照PBOC的密鑰管理系統(tǒng)規(guī)范,并結合我校校園一卡通的具體情況,我們開發(fā)了一個嚴密靈活的雙界面CPU卡密鑰管理系統(tǒng),該系統(tǒng)包括密鑰管理系統(tǒng)和PSAM卡發(fā)卡子系統(tǒng)。它具有很好的安全性,密鑰管理系統(tǒng)既保證密鑰的安全存放、安全傳遞和安全使用;也有對異常情況的應對措施,這樣保證了高強度的校園一卡通系統(tǒng)的安全性。