高校校园一卡通系统中密钥管理系统的设计与实现
文章出处:http://www.ifyousmell.com 作者:刘金伟,马雅莉,侯义斌,王普 人气: 发表时间:2010年07月16日
某高校的校园一卡通项目采用双界面CPU卡作为加密和存储介质,CPU卡的加密\解密功能由内嵌的硬件加密协处理器来实现,具有很高的安全性。按照对称加密体制设计和实现了一种新型密钥管理系统。系统中的密钥涉及到丽部分,一部分是由银行负责产生并维护的密钥,另一部分由校园一卡通系统中的密钥管理系统产生,并由校方进行维护。密钥管理系统作为一卡通工程的核心部分,符合PBoC的密钥管理规范,密钥管理系统将生成涉及PBOC交易的8个主密钥,并安全存放和使用。
1密钥系统的设计与实现
密钥管理包括密钥的生成、装入、传递、存储、恢复、销毁等内容。密钥管理系统中使用的密钥都是双倍长度的密钥(16B),交易过程中使用的过程密钥都是单倍长度(8B)。
一卡通生成的主密钥称为根密钥,标志为G*K,主要有消费/取现共享密钥。一卡通生成和使用的密钥称为主密钥,或称为一卡通专有密钥,标志为M*K。用户卡使用的经过主密钥分散的密钥成为用.户卡密钥,标志为D*K。用户卡交易过程中使用的过程密钥标志为S*K。
系统利用密钥卡来承载密钥,密钥卡在一卡通密钥管理系统内,一卡通与一卡通,一卡通与用户卡之间进行安全的传递。
l.l 密钥类型
在密钥管理系统中的密钥可分为三大类:一卡通共享密钥;一卡通专有密钥和管理密钥[2]。一卡通共享密钥由一卡通生成和维护,安全存放在一卡通的母卡A和母卡B中。消费/取现根密钥是一卡通共享主密钥,用于PBOC卡的取现/消费交易。一卡通专有密钥由一卡通生成和维护,安全存放在一卡通的母卡A和母卡B中。一卡通生成其他交易使用的主密钥,包括部分PBOC卡片的维护密钥。
管理密钥有两种作用:作为认证密钥和保护密钥(传输密钥)。认证密钥用来对卡片做外部认证的,一般记为ADMK。保护密钥是用来对主密钥进行加密保护注入到卡片或输出到另一张卡片。保护密钥分为导入密钥和导出密钥两种,所有保护密钥都用外层的认证密钥加密保护进入卡片中。
1.2密钥的索引
每张用户卡含有两组密钥,用两个索引值来区分。正常时使用第一=--索引的密钥,异常情况下(如密钥泄露)启用第二索引。此机制保证在异常情况下更换密钥时,不需收回已发出的用户卡,只需将应用系统(包括PSAM)中的密钥更新为新的索引。
每个版本的消费/取现根密钥含有两个索引,预留两个索引作为根密钥的备用索引。所以,消费/取现密钥采用4个索引。
1.3密钥卡的分类
为了将共享密钥安全地传递到各个子系统,一卡通密钥管理系统采用几种密钥卡来实现。密钥卡分为3类:母卡;控制卡和认证卡。
母卡里存放着一卡通生成的专有密钥,一卡通的母卡由母卡A和母卡B实现,只有同时持有A、B卡,才可以将主密钥导出,一卡通发行一卡通的发卡母卡,发卡母卡里存放着一卡通的消费/取现主密钥,一卡通将专有密钥注入发卡母卡,一卡通利用该卡将消费/取现密钥,圈存、圈提等密钥注入用户卡。
控制卡里的主密钥是有输出次数控制的,一卡通密钥管理系统里有总控卡、HSAM控制卡、PSAM控制卡三种。总控卡的主密钥由一卡通母卡A和母卡B导入;HSAM控制卡、PSAM控制卡是总控卡的子卡。总控员持有HSAM控制卡,将密钥导入HSAM模组,HSAM控制卡的主密钥只能导出一次;操作员持有PSAM控制卡,将一卡通的M*K导人PSAM卡;一卡通发卡母卡是由一卡通发行的,一卡通将银行生成的其他专有密钥注入发卡母卡,发卡员利用一卡通发卡母卡和发卡控制卡来发行用户卡。
认证密钥卡的主密钥文件里存放着密钥卡的认证密钥,有一卡通操作员卡、一卡通认证密钥卡两种。一卡通操作员卡是一卡通制卡员持有的制卡“钥匙”,操作卡里存放着一卡通密钥卡的管理密钥,不可以输出,但可以对密钥卡的管理密钥进行认证修改;一卡通认证密钥卡是一卡通密钥卡的认证密钥卡,由一卡通发行,一卡通用它来验证一卡通所发下来的一卡通卡是否正确,并可以修改该一卡通卡的管理密钥。
1.4系统结构
一卡通密钥管理系统包含了几项主要的功能模块:密钥生成模块}密钥传递模块;用户卡发卡(相关系统);PSAM卡管理系统模块;测试发卡(附加功能模块);一卡通交易测试系统(附加功能模块);密钥的应用关系。如图1所示为密钥管理系统发卡过程中卡片产生的主要流程图。
①校园“一卡通”密钥生成模块。利用密钥生成模块来生成所需的主密钥,包括:消费主密钥;圈存、圈提主密钥;解锁(PIN)主密钥i重装(PIN)主密钥;修改(透支限额)主密钥,应用维护主密钥;TAC主密钥。一卡通主密钥由种子A、种子B、系统的随机数决定生成,生成的主密钥由一卡通决定该密钥的版本和索引,也可以采用系统默认的顺序。一卡通主密钥生成后,分别注入到母卡A、母卡B,母卡A和母卡B由校领导保存,并持有该卡的PIN。
主密钥的生成算法为:输人种子A(SEEDA)和种子B(SEEDB)后,产生一个随机数RAND,该随机数固定在这个生成模块上。KEYl—3DES(SEEDASEEDB,RAND),主密钥检查该KEY的强度,若合格则作为候选的主密钥输出;若不合格,RAND—RAND+1;继续产生KEYl,直到产生合格的主密钥。KEY2—3DES(SEEDA lSEEDB,RAND++),继续产生KEY2,直到输出外界所需个数的主密钥。系统可以采用KG卡来实现这一个过程,如图2所示。
主密钥生成后,注入到母卡A和母卡B中,母卡A中的主密钥必须使用母卡B的主密钥方可以导出。必须同时持有母卡A、母卡B及密钥卡的密码,才可以导出其中的主密钥。
②校园“一卡通”密钥传递模块。利用图2所表示的密钥生成模块,学校两位校领导分别在密钥系统上输人种子A、B,密钥系统生成一卡通系统所需的密钥,并分别保存在母卡A和母卡B中。为了便于使用,密钥系统将母卡A、B的密钥合成在一张总控卡中(包括多个版本和多个索引)。校方严格保管好总控卡,为最大程度上防范风险,通过总控卡,密钥系统分别制作出3种不同的密钥卡,参见图3。发卡母卡和发卡控制卡交给发卡机构(建设银行或其他发卡公司);主机HSAM卡内的密钥(圈存密钥、卡片应用维护密钥等)通过安全方式传递给IC卡片管理系统、校园lC卡结算服务器、圈存设备。密钥系统还做出PSAM卡发卡控制卡,利用PSAM卡发卡子系统发出PSAM卡。
2相关算法
CPU双界面卡一般采用DES加密算法,这是一迭代分组密码算法,使用的密钥长度为64位,为了进一步提高系统安全强度,在我们的校园一卡通系统中,双界面CPU卡采用的是三重DES算法,采用的密码长度为128位。相关算法如下。
2.1 3DES算法
3DES算法是指使用双长度(16B)密钥K一(K。llKR)将8B明文数据块进行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对数据X进行DES加密,DESl(Kc[y])表示用密钥K对数据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,对分散数据进行处理,推导出一个双长度的密钥DK。
表示法:DK—Diversify(MK,DATA)
推导DK左半部分的方法是:将分散数据的最右16个数字作为输入数据;将MK作为加密密钥;用MK对输入数据进行3DEA运算。如图4所示。推导DK右半部分的方法是:将分散数据的最右16个数字求反,作为输入数据;将MK作为加密密钥;用MK对输入数据进行3DES运算。如图5所示。
密钥分散算法为:
/,密钥分散算法,Data一分散数据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:该指令的参数1;P2:该指令的参数2;P3:该指令的参数3,P3一P3后跟数据的长度。
ENCYPHERDATA一3DES(KEY,LENGTH of PLAlN—DATA+PLAIN DATA+PADBYTE)KEY:产生该密文所用的密钥;PLAIN—DATA:
需要加密的明文数据;LENGTH of PLAIN—DATA:
明文数据的长度;PADBYTE:后缀数据的形式一“800000?”,如果LENGTH of PLAIN—DATA MOD 8一O,则不需要后缀数据。如果LENGTH of PLAIN—DATA MOD 8一Ⅳ,则后缀数据的长度为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字节一MAC
)
3结论
按照PBOC的密钥管理系统规范,并结合我校校园一卡通的具体情况,我们开发了一个严密灵活的双界面CPU卡密钥管理系统,该系统包括密钥管理系统和PSAM卡发卡子系统。它具有很好的安全性,密钥管理系统既保证密钥的安全存放、安全传递和安全使用;也有对异常情况的应对措施,这样保证了高强度的校园一卡通系统的安全性。