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