校园一卡通系统中密钥管理系统的设计与实现
来源:刘金伟 马雅莉 侯义斌 王普
小编:我爱卡
2006/09/28
校园一卡通系统是多功能IC卡应用系统。多功能是指以一张IC卡同时可支持多种不同的应用子系统,如食堂收费管理、学生成绩管理、图书馆管理等,这对提高学校管理水平和工作效率、减少现金流通等大有益处。
在校园一卡通系统中,密钥管理系统是整个IC卡应用系统安全的核心。对密钥系统的管理和控制是IC卡应用系统的关键,密钥管理系统的安全性将直接影响整个应用系统的安全性。
北京工业大学的校园一卡通项目采用双界面CPU卡作为加密和存储介质,CPU卡的加密/解密功能由内嵌的硬件加密协议处理器实现,具有很高的安全性。学校按照对称加密体制设计和实现了一种新型密钥管理系统。系统中的密钥涉及两部分:一部分由银行负责产生并维护;另一部分由校园一卡通系统中的密钥管理系统产生,并由校方维护。
密钥管理系统作为一卡通工程的核心部分,符合PBOC的密钥管理规范。密钥管理系统将生成涉及PBOC交易的8个主密钥,并安全存放和使用。
一、密钥系统的设计与实现
密钥管理包括密钥的生成、装入、传递、存储、恢复、销毁等内容。密钥管理系统中使用的密钥是双倍长度(16字节)的密钥,而交易过程中使用的过程密钥是单倍长度(8字节)。
在密钥系统中,由一卡通系统生成的主密钥称为根密钥,标志为G*K,主要有消费/取现共享密钥。由一卡通生成和使用的密钥称为主密钥,或称为一卡通专有密钥,标志为M*K。用户卡使用的经过主密钥分散的密钥称为用户卡密钥,标志为D*K。用户卡交易过程中使用的过程密钥标志为S*K。
系统利用密钥卡承载密钥。密钥卡在一卡通密钥管理系统内、一卡通和一卡通间、一卡通和用户卡间进行安全传递。
1.密钥类型
密钥管理系统中的密钥可分为三大类:一卡通共享密钥、一卡通专有密钥和管理密钥。
一卡通共享密钥由一卡通生成和维护,安全存放在一卡通的母卡A和母卡B中。消费/取现根密钥是一卡通共享主密钥,用于PBOC卡的取现/消费交易。
一卡通专有密钥由一卡通生成和维护,安全存放在一卡通的母卡A和母卡B中。一卡通生成其他交易使用的主密钥,包括部分PBOC卡片的维护密钥。
管理密钥的作用有两个:认证密钥和保护密钥(传输密钥)。认证密钥用来对卡片做外部认证,一般记为ADMK。保护密钥用来对主密钥进行加密保护注入到卡片或输出到另一张卡片。保护密钥分为导入密钥和导出密钥两种,所有保护密钥都用外层的认证密钥加密保护进入卡片中。
2.密钥的索引
每张用户卡含有两组密钥,用两个索引值来区分。正常时使用第一索引的密钥,异常情况下(如密钥泄露)启用第二索引。此机制保证在异常情况下更换密钥时,不需收回已发出的用户卡,只需将应用系统(包括PSAM)中的密钥更新为新的索引。
每个版本的消费/取现根密钥含有两个索引,预留两个索引作为根密钥的备用索引。所以,消费/取现密钥采用4个索引。
3.密钥卡的分类
为了将共享密钥安全地传递到各个子系统,一卡通密钥管理系统采用几种密钥卡来实现。密钥卡分为三类:密钥母卡、控制卡和认证卡。
密钥母卡里存放着一卡通生成的专有密钥,由母卡A和母卡B实现,只有同时持有A、B卡,才可以将主密钥导出。一卡通系统的发卡母卡中存放着一卡通的消费/取现密钥,一卡通将专有密钥注入发卡母卡,利用该卡将消费/取现密钥,圈存、圈提等密钥注入用户卡。
控制卡里的主密钥是有输出次数控制的。一卡通密钥管理系统里有总控卡、HSAM控制卡、PSAM控制卡。总控卡的主密钥由密钥母卡A和密钥母卡B导入;HSAM控制卡、PSAM控制卡是总控卡的子卡。总控员持有HSAM控制卡,将密钥导入HSAM模组,HSAM控制卡的主密钥只能导出一次。操作员持有PSAM控制卡,将一卡通的M*K导入PSAM卡。一卡通将银行生成的其他专有密钥注入发卡母卡,发卡员利用发卡母卡和发卡控制卡发行用户卡。
认证卡的主密钥文件里存放着密钥卡的认证密钥,有操作员卡和认证密钥卡两种。操作员卡是一卡通制卡员持有的制卡“钥匙”,存放着一卡通密钥卡的管理密钥,不可以输出,但可以对密钥卡的管理密钥进行认证修改。认证密钥卡是一卡通密钥卡的认证密钥卡,一卡通用它验证一卡通所发的卡是否正确,并可以修改其管理密钥。
4.系统结构
一卡通密钥管理系统包含了几项主要的功能模块:密钥生成模块、密钥传递模块、用户卡发卡(相关系统)、PSAM卡管理系统模块、测试发卡(附加功能模块)、一卡通交易测试系统(附加功能模块)和密钥的应用关系。
图1为密钥管理系统发卡过程中卡片产生的主要流程。
(1)密钥生成模块
利用密钥生成模块生成所需的主密钥,包括消费主密钥,圈存、圈提主密钥,解锁(PIN)主密钥,重装(PIN)主密钥,修改(透支限额)主密钥,应用维护主密钥,TAC主密钥。
一卡通主密钥由种子A、种子B、系统的随机数决定生成,生成的主密钥由一卡通系统决定该密钥的版本和索引,也可以采用系统默认的顺序。一卡通系统主密钥生成后,分别注入到密钥母卡A、密钥母卡B,两卡由校领导保存并持有该卡的PIN。
主密钥的生成算法为:输入种子A(SeedA)和种子B(SeedB)后,产生一个随机数RAND,固定在这个生成模块上。Key1=3DES(SeedA||SeedB,RAND),主密钥检查该Key的强度,若合格则作为候选的主密钥输出;若不合格,RAND=RAND+1;继续产生Key1,直到产生合格的主密钥。
Key2=3DES(SeedA||SeedB,RAND++),继续产生Key2,直到输出外界所需个数的主密钥。系统可以采用KG卡实现这一过程,如图2所示。
主密钥生成后,注入到密钥母卡A和密钥母卡B中,密钥母卡A中的主密钥必须使用密钥母卡B的主密钥方可导出。必须同时持有两卡B及密钥卡的密码,才可以导出其中的主密钥。
(2)密钥传递模块
利用密钥生成模块,学校两位校领导分别在密钥系统上输入种子A、B,密钥系统生成一卡通系统所需的密钥,并分别保存在密钥母卡A和密钥母卡B中。为了便于使用,密钥系统将密钥母卡A、B的密钥合成在一张总控卡中(包括多个版本和多个索引),校方严格保管好总控卡。为最大程度地防范风险,通过总控卡,密钥系统分别制作出3种不同的密钥卡,参见图3。发卡母卡和发卡控制卡交给发卡机构(银行或其他发卡公司),主机HSAM卡内的密钥(圈存密钥、卡片应用维护密钥等)通过安全方式传递给IC卡片管理系统、校园IC卡结算服务器和圈存设备。密钥系统还做出PSAM卡发卡控制卡,利用PSAM卡发卡子系统发出PSAM卡。
二、相关算法
CPU双界面卡一般采用DES加密算法,这是一种迭代分组密码算法,使用的密钥长度为64位。为进一步提高系统安全强度,在校园一卡通系统中,双界面CPU卡采用的是三重DES算法,采用的密码长度为128位。
1.3DES算法
3DES算法是指使用双长度(16字节)密钥K=(KL||KR)将8字节明文数据块进行3次DES加密/解密。如下所示:
Y = DES(KL)[DES-1(KR)[DES(KL[X])]]
解密方式为:
X = DES-1 (KL)[DES (KR)[ DES-1 (KL[Y])]]
其中,DES(KL[X])表示用密钥K对数据X进行DES加密,DES-1 (KL[Y])表示用密钥K对数据Y进行解密。
SessionKey的计算采用3DES算法,计算出单倍长度的密钥。表示法为:SK = Session(DK,DATA)
3DES加密算法为:
VOID 3DES(BYTE DoubleKeyStr[16], BYTE Data[8], BYTE Out[8])
{
BYTE Buf1[8], Buf2[8];
DES (&DoubleKeyStr[0], Data, Buf1);
UDES(&DoubleKeyStr[8], Buf1, Buf2);
DES (&DoubleKeyStr[0], Buf2, Out);
}
2.密钥分散算法
为了支持分级加密传递功能,CPU卡还采用了密钥分散算法,简称Diversify,即将一个双长度的密钥MK,对分散数据进行处理,推导出一个双长度的密钥DK。
表示法为:DK = Diversify(MK,DATA)
推导DK左半部分的方法是:将分散数据的最右16个数字作为输入数据;将MK作为加密密钥;用MK对输入数据进行3DEA运算。
推导DK右半部分的方法是:将分散数据的最右16个数字求反,作为输入数据;将MK作为加密密钥;用MK对输入数据进行3DES运算。
密钥分散算法为:
// 密钥分散算法,Data-分散数据8字节的BCD码
VOID Diversify(BYTE DoubleKeyStr[16], BYTE Data[8], BYTE Out[16])
{
BYTE Block[8];
3DES(DoubleKeyStr, Data, &Out[0]);
for (int i=0; i<8; i++)
Block[i] = ~Data[i];
3DES(DoubleKeyStr, Block, &Out[8]);
}
3.安全报文算法
安全报文(SEC-MSG)算法表示法:
Secure-Message= Class+Instruct+P1+P2+P3+
Encypher Data+MAC
其中,Class为指令的类,Instruct为指令代码,P1为该指令的参数1,P2为该指令的参数2,P3为该指令的参数3。
EncypherData = 3DES(Key,Length of Plain-Data +Plain Data +Padbyte)
其中,Key为产生该密文所用的密钥,Plain-Data为需要加密的明文数据,Lengt of Plain-Data为明文数据的长度,Padbyte为后缀数据的形式=“800000...”,如果Length of Plain-Data MOD 8=0,则不需要后缀数据。如果Length of Plain-Data MOD 8=N,则后缀数据的长度为8-N。
MAC = 3DES(Key,Class+Instruct+P1+P2+P3+
Encypher Data“800000”)
安全报文算法为:
//安全报文算法,pCmd= Class + Instruct +P1+P2+P3,pData= Plain -Data
VOID SecureUpdate(BYTE DoubleKeyStr[16], BYTE *pCmd, BYTE * pData, int DataLen)
{
BYTE EncypherData[255];
IntToBcd(DataLen, &EncypherData[0]);
memcpy(&EncypherData[1], pData, DataLen)
int Length = 1 + DataLen;
int ModLen = Length % 8;
if (ModLen != 0)
{
memset(&EncypherData[Length], 0, 8 -ModLen);
EncypherData[Length] = 0x80;
Length = Length + 8 -ModLen;
}
for (int i=0;i<Length;i+=8)
3DES(DoubleKeyStr,&EncypherData[i], &EncypherData[i])
// 计算MAC
BYTE MACData[255], MAC[8];
memcpy(&MACData[0], pCmd, 5);
memcpy(&MACData[5], EncypherData, Length);
memcpy(&MACData[Length+5], "\x80\x00\x00", 3);
Length += 8;
memset(MAC, 0, 8);
for (i=0; i<Length; i+=8)
{
for (j=0; j<8; j++)
MAC[j] = MAC[j] ^ MACData[i+j];
3DES(DoubleKeyStr, MAC, MAC)
}
// MAC的左4字节-MAC
}
按照PBOC的密钥管理系统规范,并结合我校校园一卡通的具体情况,我们开发了一个严密灵活的双界面CPU卡密钥管理系统,该系统包括密钥管理系统和PSAM卡发卡子系统。它具有很好的安全性,密钥管理系统既保证密钥的安全存放、安全传递和安全使用,也有对异常情况的应对措施。这样就保证了高强度的校园一卡通系统的安全性。
继续阅读
在校园一卡通系统中,密钥管理系统是整个IC卡应用系统安全的核心。对密钥系统的管理和控制是IC卡应用系统的关键,密钥管理系统的安全性将直接影响整个应用系统的安全性。
北京工业大学的校园一卡通项目采用双界面CPU卡作为加密和存储介质,CPU卡的加密/解密功能由内嵌的硬件加密协议处理器实现,具有很高的安全性。学校按照对称加密体制设计和实现了一种新型密钥管理系统。系统中的密钥涉及两部分:一部分由银行负责产生并维护;另一部分由校园一卡通系统中的密钥管理系统产生,并由校方维护。
密钥管理系统作为一卡通工程的核心部分,符合PBOC的密钥管理规范。密钥管理系统将生成涉及PBOC交易的8个主密钥,并安全存放和使用。
一、密钥系统的设计与实现
密钥管理包括密钥的生成、装入、传递、存储、恢复、销毁等内容。密钥管理系统中使用的密钥是双倍长度(16字节)的密钥,而交易过程中使用的过程密钥是单倍长度(8字节)。
在密钥系统中,由一卡通系统生成的主密钥称为根密钥,标志为G*K,主要有消费/取现共享密钥。由一卡通生成和使用的密钥称为主密钥,或称为一卡通专有密钥,标志为M*K。用户卡使用的经过主密钥分散的密钥称为用户卡密钥,标志为D*K。用户卡交易过程中使用的过程密钥标志为S*K。
系统利用密钥卡承载密钥。密钥卡在一卡通密钥管理系统内、一卡通和一卡通间、一卡通和用户卡间进行安全传递。
1.密钥类型
密钥管理系统中的密钥可分为三大类:一卡通共享密钥、一卡通专有密钥和管理密钥。
一卡通共享密钥由一卡通生成和维护,安全存放在一卡通的母卡A和母卡B中。消费/取现根密钥是一卡通共享主密钥,用于PBOC卡的取现/消费交易。
一卡通专有密钥由一卡通生成和维护,安全存放在一卡通的母卡A和母卡B中。一卡通生成其他交易使用的主密钥,包括部分PBOC卡片的维护密钥。
管理密钥的作用有两个:认证密钥和保护密钥(传输密钥)。认证密钥用来对卡片做外部认证,一般记为ADMK。保护密钥用来对主密钥进行加密保护注入到卡片或输出到另一张卡片。保护密钥分为导入密钥和导出密钥两种,所有保护密钥都用外层的认证密钥加密保护进入卡片中。
2.密钥的索引
每张用户卡含有两组密钥,用两个索引值来区分。正常时使用第一索引的密钥,异常情况下(如密钥泄露)启用第二索引。此机制保证在异常情况下更换密钥时,不需收回已发出的用户卡,只需将应用系统(包括PSAM)中的密钥更新为新的索引。
每个版本的消费/取现根密钥含有两个索引,预留两个索引作为根密钥的备用索引。所以,消费/取现密钥采用4个索引。
3.密钥卡的分类
为了将共享密钥安全地传递到各个子系统,一卡通密钥管理系统采用几种密钥卡来实现。密钥卡分为三类:密钥母卡、控制卡和认证卡。
密钥母卡里存放着一卡通生成的专有密钥,由母卡A和母卡B实现,只有同时持有A、B卡,才可以将主密钥导出。一卡通系统的发卡母卡中存放着一卡通的消费/取现密钥,一卡通将专有密钥注入发卡母卡,利用该卡将消费/取现密钥,圈存、圈提等密钥注入用户卡。
控制卡里的主密钥是有输出次数控制的。一卡通密钥管理系统里有总控卡、HSAM控制卡、PSAM控制卡。总控卡的主密钥由密钥母卡A和密钥母卡B导入;HSAM控制卡、PSAM控制卡是总控卡的子卡。总控员持有HSAM控制卡,将密钥导入HSAM模组,HSAM控制卡的主密钥只能导出一次。操作员持有PSAM控制卡,将一卡通的M*K导入PSAM卡。一卡通将银行生成的其他专有密钥注入发卡母卡,发卡员利用发卡母卡和发卡控制卡发行用户卡。
认证卡的主密钥文件里存放着密钥卡的认证密钥,有操作员卡和认证密钥卡两种。操作员卡是一卡通制卡员持有的制卡“钥匙”,存放着一卡通密钥卡的管理密钥,不可以输出,但可以对密钥卡的管理密钥进行认证修改。认证密钥卡是一卡通密钥卡的认证密钥卡,一卡通用它验证一卡通所发的卡是否正确,并可以修改其管理密钥。
4.系统结构
一卡通密钥管理系统包含了几项主要的功能模块:密钥生成模块、密钥传递模块、用户卡发卡(相关系统)、PSAM卡管理系统模块、测试发卡(附加功能模块)、一卡通交易测试系统(附加功能模块)和密钥的应用关系。
图1为密钥管理系统发卡过程中卡片产生的主要流程。
(1)密钥生成模块
利用密钥生成模块生成所需的主密钥,包括消费主密钥,圈存、圈提主密钥,解锁(PIN)主密钥,重装(PIN)主密钥,修改(透支限额)主密钥,应用维护主密钥,TAC主密钥。
一卡通主密钥由种子A、种子B、系统的随机数决定生成,生成的主密钥由一卡通系统决定该密钥的版本和索引,也可以采用系统默认的顺序。一卡通系统主密钥生成后,分别注入到密钥母卡A、密钥母卡B,两卡由校领导保存并持有该卡的PIN。
主密钥的生成算法为:输入种子A(SeedA)和种子B(SeedB)后,产生一个随机数RAND,固定在这个生成模块上。Key1=3DES(SeedA||SeedB,RAND),主密钥检查该Key的强度,若合格则作为候选的主密钥输出;若不合格,RAND=RAND+1;继续产生Key1,直到产生合格的主密钥。
Key2=3DES(SeedA||SeedB,RAND++),继续产生Key2,直到输出外界所需个数的主密钥。系统可以采用KG卡实现这一过程,如图2所示。
主密钥生成后,注入到密钥母卡A和密钥母卡B中,密钥母卡A中的主密钥必须使用密钥母卡B的主密钥方可导出。必须同时持有两卡B及密钥卡的密码,才可以导出其中的主密钥。
(2)密钥传递模块
利用密钥生成模块,学校两位校领导分别在密钥系统上输入种子A、B,密钥系统生成一卡通系统所需的密钥,并分别保存在密钥母卡A和密钥母卡B中。为了便于使用,密钥系统将密钥母卡A、B的密钥合成在一张总控卡中(包括多个版本和多个索引),校方严格保管好总控卡。为最大程度地防范风险,通过总控卡,密钥系统分别制作出3种不同的密钥卡,参见图3。发卡母卡和发卡控制卡交给发卡机构(银行或其他发卡公司),主机HSAM卡内的密钥(圈存密钥、卡片应用维护密钥等)通过安全方式传递给IC卡片管理系统、校园IC卡结算服务器和圈存设备。密钥系统还做出PSAM卡发卡控制卡,利用PSAM卡发卡子系统发出PSAM卡。
二、相关算法
CPU双界面卡一般采用DES加密算法,这是一种迭代分组密码算法,使用的密钥长度为64位。为进一步提高系统安全强度,在校园一卡通系统中,双界面CPU卡采用的是三重DES算法,采用的密码长度为128位。
1.3DES算法
3DES算法是指使用双长度(16字节)密钥K=(KL||KR)将8字节明文数据块进行3次DES加密/解密。如下所示:
Y = DES(KL)[DES-1(KR)[DES(KL[X])]]
解密方式为:
X = DES-1 (KL)[DES (KR)[ DES-1 (KL[Y])]]
其中,DES(KL[X])表示用密钥K对数据X进行DES加密,DES-1 (KL[Y])表示用密钥K对数据Y进行解密。
SessionKey的计算采用3DES算法,计算出单倍长度的密钥。表示法为:SK = Session(DK,DATA)
3DES加密算法为:
VOID 3DES(BYTE DoubleKeyStr[16], BYTE Data[8], BYTE Out[8])
{
BYTE Buf1[8], Buf2[8];
DES (&DoubleKeyStr[0], Data, Buf1);
UDES(&DoubleKeyStr[8], Buf1, Buf2);
DES (&DoubleKeyStr[0], Buf2, Out);
}
2.密钥分散算法
为了支持分级加密传递功能,CPU卡还采用了密钥分散算法,简称Diversify,即将一个双长度的密钥MK,对分散数据进行处理,推导出一个双长度的密钥DK。
表示法为:DK = Diversify(MK,DATA)
推导DK左半部分的方法是:将分散数据的最右16个数字作为输入数据;将MK作为加密密钥;用MK对输入数据进行3DEA运算。
推导DK右半部分的方法是:将分散数据的最右16个数字求反,作为输入数据;将MK作为加密密钥;用MK对输入数据进行3DES运算。
密钥分散算法为:
// 密钥分散算法,Data-分散数据8字节的BCD码
VOID Diversify(BYTE DoubleKeyStr[16], BYTE Data[8], BYTE Out[16])
{
BYTE Block[8];
3DES(DoubleKeyStr, Data, &Out[0]);
for (int i=0; i<8; i++)
Block[i] = ~Data[i];
3DES(DoubleKeyStr, Block, &Out[8]);
}
3.安全报文算法
安全报文(SEC-MSG)算法表示法:
Secure-Message= Class+Instruct+P1+P2+P3+
Encypher Data+MAC
其中,Class为指令的类,Instruct为指令代码,P1为该指令的参数1,P2为该指令的参数2,P3为该指令的参数3。
EncypherData = 3DES(Key,Length of Plain-Data +Plain Data +Padbyte)
其中,Key为产生该密文所用的密钥,Plain-Data为需要加密的明文数据,Lengt of Plain-Data为明文数据的长度,Padbyte为后缀数据的形式=“800000...”,如果Length of Plain-Data MOD 8=0,则不需要后缀数据。如果Length of Plain-Data MOD 8=N,则后缀数据的长度为8-N。
MAC = 3DES(Key,Class+Instruct+P1+P2+P3+
Encypher Data“800000”)
安全报文算法为:
//安全报文算法,pCmd= Class + Instruct +P1+P2+P3,pData= Plain -Data
VOID SecureUpdate(BYTE DoubleKeyStr[16], BYTE *pCmd, BYTE * pData, int DataLen)
{
BYTE EncypherData[255];
IntToBcd(DataLen, &EncypherData[0]);
memcpy(&EncypherData[1], pData, DataLen)
int Length = 1 + DataLen;
int ModLen = Length % 8;
if (ModLen != 0)
{
memset(&EncypherData[Length], 0, 8 -ModLen);
EncypherData[Length] = 0x80;
Length = Length + 8 -ModLen;
}
for (int i=0;i<Length;i+=8)
3DES(DoubleKeyStr,&EncypherData[i], &EncypherData[i])
// 计算MAC
BYTE MACData[255], MAC[8];
memcpy(&MACData[0], pCmd, 5);
memcpy(&MACData[5], EncypherData, Length);
memcpy(&MACData[Length+5], "\x80\x00\x00", 3);
Length += 8;
memset(MAC, 0, 8);
for (i=0; i<Length; i+=8)
{
for (j=0; j<8; j++)
MAC[j] = MAC[j] ^ MACData[i+j];
3DES(DoubleKeyStr, MAC, MAC)
}
// MAC的左4字节-MAC
}
按照PBOC的密钥管理系统规范,并结合我校校园一卡通的具体情况,我们开发了一个严密灵活的双界面CPU卡密钥管理系统,该系统包括密钥管理系统和PSAM卡发卡子系统。它具有很好的安全性,密钥管理系统既保证密钥的安全存放、安全传递和安全使用,也有对异常情况的应对措施。这样就保证了高强度的校园一卡通系统的安全性。