由于社保卡的应用范围比较广,涉及到一个城市乃至全国参加养老保险、医疗保险的人员,而且使用过程中还具有帐户金额划入、医疗消费等功能,所以社保卡系统的安全可靠性尤为重要。为了保证社保卡的防伪性、操作的安全性以及数据的保密完整性,在社保卡COS开发过程中,需要采取一系列的加密措施来保证卡片应用的安全性。
一、密钥管理体系
密钥控制着卡内所有文件的访问,与各种运算密切相关,是保证社保卡的安会性的关键要素。社保卡内使用的密钥有几十个,按功能可以划分为应用维护、镇定控制、应用数据更新、交易和应用数据读取等类型。对卡片的很多操作都需要对密钥进行认证,取得相应权限后才能进行。
每个卡片所使用的卡内密钥,都是通过三级分散来确定的,这样既保证了密钥的相对独立性,又为卡片的安全应用提供了强有力的保障。根据发卡过程的要求,卡片在发行中需要实行主管机构与卡片发行中心两级密钥管理体制.对密钥进行三级分散。社保卡的主管机构作为社保卡的密钥管理中心,它产生发行单位的根密钥(包括发卡授权密钥等),把根街钥传递给二级密钥管理中心,即社保卡的发行中心。由发行中心进行下一步的工作。卡发行中心从主管机构得到根密钥后,进行二次分散,得到各种密钥的母密钥,然后把相应的母密钥装载到SAM(Secure Access Module。安全存取模块)卡及发卡母卡上。在卡片发行的时候,由发卡母卡上的各个母密钥根据每个社保卡的卡号,分散出每个杜保卡t所使用的子密钥。
每个杜保卡的子密钥是用长片ATR(AJunver To Reset。复位应答)的T8-TD字节(卡号),加上“0000”作为分散因子,对母密钥分敢得到的。
为了增强与应用终蜡的认证程度和增加文件加密的安全性,社保卡要求在报文的安全传送和交易的过程巾使用过程密钥。过程密钥是使用对应的子密钥进行DES或3DES(原密钥长度为16字节时)加密运算产生的。
在报文的安全传送过程中,无论是对MAC (MessageAuthentication Code。报文鉴别代码)的计算还是数据的加密,都使用了过程密钥。在这里使用的过程密钥是通过以下方法产生的:通过IC卡获取8字节的随机数作为输入数据,与原密钥进行加密运算,得到8字节的过程密钥。
二、操作权限的控制机制
在对社保卡进行操作之前,应用终端必须对卡片进行有效性检查,检查卡片是否有效或者说确认卡片是否可以在杜保应用环境中使用。这个检测过程通过进行内部认证来实现。内部认证是杜保卡COS系统的一个命令,其具体实现过程如下:
1、终端产生每组为8字节的两组随机数。随机数可以通过软件生成,也可以通过SAM卡或社保卡的取随机数功能来获得;
2、终端对卡片发出内部认证命令,两组随机数放在散据域中发给卡片;
3、卡片接收到内部认证命令后,通过命令中的密钥标识符找到相应的密钥,与第一组随机散产生过程密钥,然后对第二组随机敦进行加密运算,把结果作为鉴别信息回送给终端;
4、终端在发出命令后,进行与卡片同样的运算过程,在接收返回信息后,对鉴别信息进行比较验证。
只有在内部认证通过的情况下,终端才会对卡片进行后续操作。验证通过后,终端可以读取片片的相关信息,检查卡片的有效性。
内部认证可以实现终端对社保卡的鉴别。而IC卡中的应用验证终端的有效性以及让终端获得某种操作的权限,则需要通过外部认证来实现。
当验证通过后,卡片记住该密钥成功鉴别的结果,直到断电或选择别的应用。终端则通过对密钥的外部认证获得了该密钥所控制的权限,可以进行相应的操作。
三、如何加密传输重要报文
在卡片与应用终端进行信息交换过程中,有持卡人的PIN、保险金额等重要的信息。这些信息如果被窃取或篡改,后果是相当严重的。
社保卡采取验证MAC来保证报文的完整性,通过对交换信息的加密来保证信息的安全保密性。
当命令数据采用安全报文传送时,要求对方进行MAC认证或加密传送。MAC要进行验证的数据是COS的命令头和命令数据域中的数据元。MAC认证码是通过过程密钥对数据进行DES运算得到的长度为4个字节的数据元,它在通信过程中附加在命令数据域的最后,发送到对方。当接收方接收完命令的所有数据后,需要对数据进行相应的运算,也计算出一个MAC码,与发送方的MAC码比较,进行比较后二者相同时才认为接收的命令是完整的、正确的。
计算MAC认证码的过程如下:
1、用COS命令头及命令数据域中的明文或密文数据组合成要认证的原始数据块;
2、将原始认证数据分为以8个字节为单位的散据块,记作D1,D2….Di。最后的数据块可能是1-8字节;
3、如果最后的数据块长度不足8个字节,则在其后加上十六进制数“80”和若干个“O”,直到满足长度为8个字节;如果最后的数据块长度刚好8个字节,则在其后加上十六进制数“80 00 00 00 00 _00 00 00”;
4、数据块D1作为明文M1与MAC过程密钥KMA进行DES加密运算,得到密文CI;CI与D2异或后作为明文M2,再与KMA进行DES加密运算;重复以上步骤,直到对Ci-1与Di的异或结果加密完成,得到Ci;
5、在Ci中,左起取4个字节作为MAC认证码。
4、防止操作的异常中断
保持所操作数据的完整性是杜保卡安全的一个重要部分。在某个操作(特别是交易)过程中.可能会由于掉咆等原冈造成操作的异常中断。这时,对卡片操作的结果是不可预料的,对卡内敷据的更改可能完成了。也可能只完成了一部分。如果只完成了一部分,就会造成卡内数据不正确、不完整。
社保卡通过检验交易认证码来检验交易是否完成。社保卡在完成交易更新金额之前,必须计算与当前交易数据密切相关的MAC和TAC (交易验证码)码(帐户划入交易只有TAC码),并保存下来。当交易数据更新成功后,必须保证通过“取交易认证码”命令可以获得与交易相应的MAC和TAC码。如果在交易操作结束后未能收到响应,卡片就被拔出,终端可以通过。取交易认证码4来检查卡内数据是否已经被更新。
防拔机制的引入是为了防止在操作过程中只更新了卡内数据的一部分。如果操作突然中断了,卡片有可能正在执行一个命令,这样会导致命令没有执行完,而命令中需更新的数据也只更新了一部分。要防止这种情况的出现,就需要在每次更新数据莳对原数据进行备份,以备在异常情况出现后进行数据恢复使用。
在确认命令处理过程正确完成,并且需要更新的数据已经写到相应的位置,卡片丢弃备份数据。如果出现异常情况,则在卡片重新上电后,卡片检测更新数据的标志位,如果数据更新没有完成,就需要把执行命令前的原效据恢复到相应的位置,以保证数据的完整性和正确性。
在越来越重视信息化管理的今天,方便、安全的杜保卡将会得到更广泛的应用。社保卡所采取的一系列加密保障措施,是社保卡得以在更大范围内推广应用的坚强基石。如果这些安全手段与接口终端以及应用系统的安全措施相结合,就能更好地防范对卡片的非法操作,更好地保护社保效据的安全。
小知识之密钥
密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的数据。