一种支持OpenSC的软硬件驱动的实现方法

文档序号:6516905阅读:257来源:国知局
一种支持OpenSC的软硬件驱动的实现方法
【专利摘要】本发明公开了一种支持OpenSC的软硬件驱动的实现方法,属于信息安全领域。该方法是通过中间件调用具体的接口函数实现的,主要包括初始化接口函数的调用及建立密文通信环境、选择文件接口函数的调用及选择要操作的文件、设置安全环境接口函数的调用及构建设置安全环境的APDU并通过发送该APDU设置安全环境、签名接口函数的调用及构建签名的APDU并通过发送该APDU对待签名原文执行签名操作。本发明的实现使得在OpenSC下中间件与智能卡设备得到了很好的结合与使用,有助于推动智能卡设备生产厂商在OpenSC下对智能卡设备的多种功能的开发与应用。
【专利说明】—种支持OpenSC的软硬件驱动的实现方法
【技术领域】
[0001]本发明属于信息安全领域,尤其涉及一种支持OpenSC的软硬件驱动的实现方法。【背景技术】
[0002]OpenSC是开源的智能卡项目,类似于中间件,它提供了一套驱动接口,便于各厂商加入自己设备的支持。
[0003]目前,基于身份认证的智能卡设备得到了广泛的应用,如何基于OpenSC实现对我们自主研发的智能卡设备的支持成为了中间件开发人员急于解决的技术难题。

【发明内容】

[0004]为了解决现有技术中的不足,本发明提供了一种支持OpenSC的软硬件驱动的实现方法。
[0005]本发明采用的技术方案是:一种支持OpenSC的软硬件驱动的实现方法,通过中间件调用具体的接口函数实现,包括:
[0006]当初始化接口函数被调用时,根据卡片的通信密钥类型建立密文通信环境,设置卡片支持的密钥位数,函数返回初始化结果;
[0007]当选择文件接口函数被调用时,根据所述选择文件接口函数中的第一结构体的属性执行选择文件的操作,函数返回选择文件操作结果;具体的,当选择文件的操作执行成功时函数返回包含文件控制信息的选择文件操作结果;
[0008]当设置安全环境接口函数被调用时,根据所述设置安全环境接口函数的第二个参数获取文件控制信息的密钥文件属性,利用所述密钥文件属性构建设置安全环境的APDU,并通过发送所述设置安全环境的APDU设置安全环境,函数返回设置结果;
[0009]当签名接口函数被调用时,根据所述签名接口函数的第二个参数和第三个参数得到待签名原文及其长度,利用所述待签名原文及其长度构建签名的APDU,并通过发送所述签名的APDU对所述待签名原文执行签名操作,函数返回签名操作结果;具体的,当签名操作执行成功时函数返回包含签名值的签名操作结果。
[0010]上述方法还包括,
[0011 ] 当卡片操作接口函数被调用时,根据所述卡片操作接口函数的第二个参数调用相应的卡片操作函数对卡片执行相应操作,包括:
[0012]当所述卡片操作接口函数的第二个参数的取值为第一数值时,调用清卡接口函数清空卡片内的数据和文件结构;
[0013]当所述卡片操作接口函数的第二个参数的取值为第二数值时,调用写密钥接口函数给卡片写入密钥;
[0014]当所述卡片操作接口函数的第二个参数的取值为第三数值时,调用产生密钥对接口函数在卡内生成密钥对。
[0015]进一步的,当所述清卡接口函数被调用时,执行:选择卡片内部MF文件,通过调用删除卡内文件接口函数删除MF文件。
[0016]上述方法还包括,
[0017]当删除卡内文件接口函数被调用时,执行:
[0018]步骤1:根据所述删除卡内文件接口函数的第二个参数调用选择文件接口函数选择文件,获取文件控制信息;
[0019]步骤2:根据获取的文件控制信息构建删除文件的APDU,并通过发送所述删除文件的APDU删除文件。
[0020]进一步的,当所述写密钥接口函数被调用时,执行:
[0021]步骤1:根据所述写密钥接口函数的第三个参数初始化所述写密钥接口函数的密钥相关信息和密钥模长;
[0022]步骤2:在计算机内存中创建私钥文件对象,获取私钥文件对象的相关信息,在卡片内部创建私钥文件;
[0023]步骤3:设置私钥ID和所述密钥模长;
[0024]步骤4:往卡内写入私钥,并释放在内存中创建的私钥文件对象。
[0025]当所述产生密钥对接口函数被调用时,执行:
[0026]步骤1:根据所述产生密钥对接口函数的第三个参数初始化所述产生密钥对接口函数的密钥相关信息和密钥模长;
[0027]步骤2:在计算机内存中创建私钥文件对象,获取私钥文件对象的相关信息,在卡片内部创建私钥文件;
[0028]步骤3:在计算机内存中创建公钥文件对象,获取公钥文件对象的相关信息,在卡片内部创建公钥文件;
[0029]步骤4:设置公钥ID、私钥ID和所述密钥模长;
[0030]步骤5:生成密钥对,并释放在内存中创建的公钥文件对象和私钥文件对象。
[0031]进一步的,所述创建私钥文件对象是通过调用新建文件接口函数实现的,所述获取私钥文件对象的相关信息是根据所述新建文件接口函数的第五个参数获取的。
[0032]所述根据所述选择文件接口函数中的第一结构体的属性执行选择文件的操作包括:当所述第一结构体的类型属性取为第二预设值、长度属性取为2且文件ID属性的第一个字节取为第四预设值时,构建一个伪的文件控制信息作为选择文件操作结果。所述第二预设值为SC_PATH_TYPE_DF_NAME,所述第四预设值为0x29。
[0033]上述方法还包括,
[0034]当新建文件接口函数被调用时,执行:
[0035]步骤1:根据所述新建文件接口函数的第二个参数从配置文件中获取文件相关信息;
[0036]步骤2:根据获取的文件相关信息,通过调用创建文件接口函数在卡片内部创建文件;
[0037]当新建标准文件接口函数被调用时,执行:
[0038]步骤1:根据所述新建标准文件接口函数的第二个参数从配置文件中获取标准文件相关信息;
[0039]步骤2:根据获取的标准文件相关信息,通过调用创建文件接口函数在卡片内部创建标准文件。
[0040]上述方法还包括,
[0041]当创建文件接口函数被调用时,执行:
[0042]步骤1:构建文件控制信息;
[0043]步骤2:根据所述文件控制信息构建创建文件的APDU,并通过发送所述创建文件的APDU创建文件。
[0044]上述方法还包括,
[0045]当创建PIN码接口函数被调用时,执行:
[0046]步骤1:定义并初始化PIN码对象;
[0047]步骤2:根据写密钥接口函数的第一个参数获得PIN码对象,调用所述写密钥接口函数往卡内写入秘密文件;
[0048]步骤3:在内存中缓存PIN码对象。
[0049]进一步的,当所述具体的接口函数被调用时,还包括根据所述具体的接口函数中的外部传入的一个参数定位要做具体操作的卡片,并检查卡片的上下文环境属性。
[0050]有益效果:本发明的实现使得在OpenSC下中间件与智能卡设备得到了很好的结合与使用,有助于推动智能卡设备生产厂商在OpenSC下对智能卡设备的多种功能的开发与应用。
【专利附图】

【附图说明】
[0051]图1为本发明实施例中清卡接口函数被调用时的流程图;
[0052]图2为本发明实施例中产生密钥对接口函数被调用时的流程图;
[0053]图3为本发明实施例中新建文件接口函数被调用时的流程图;
[0054]图4为本发明实施例中新建标准文件接口函数被调用时的流程图;
[0055]图5为本发明实施例中写密钥接口函数被调用时的流程图;
[0056]图6为本发明实施例中创建PIN码接口函数被调用时的流程图;
[0057]图7为本发明实施例中创建文件接口函数被调用时的流程图;
[0058]图8为本发明实施例中删除卡内文件接口函数被调用时的流程图;
[0059]图9为本发明实施例中签名接口函数被调用时的流程图;
[0060]图10本发明实施例中为设置安全环境接口函数被调用时的流程图;
[0061]图11为本发明实施例中初始化接口函数被调用时的流程图。
【具体实施方式】
[0062]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地声明,显然,所声明的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0063]本实施例提供了一种支持OpenSC的软硬件驱动的实现方法,以中间件访问智能卡设备为例,通过中间件调用具体的接口函数实现,所述具体的接口函数可以包含以下接口函数中的部分或全部:清卡接口函数、产生密钥对接口函数、选择文件接口函数、新建文件接口函数、新建标准文件接口函数、写密钥接口函数、创建PIN码接口函数、创建文件接口函数、卡片操作接口函数、删除卡内文件接口函数、签名接口函数和设置安全环境接口函数,该方法包括:
[0064]本发明中提到的具体的接口函数都有一个外部传入的参数card,当各个具体的接口函数被调用时,首先执行根据该参数card定位要做具体操作的卡片,并检查卡片的上下文环境属性,然后再对定位到的卡片做具体的操作。以下实施例中有部分接口函数提到了该参数card,其他未提及的均包含该参数,且该参数实现的功能相同,不再赘述。
[0065]当清卡接口函数被调用时,如图1所示,执行以下操作:
[0066]其中,清卡接口函数为erase_card,该函数中包含有第一个参数card,根据该参数定位卡片并检查卡片的上下文环境属性,判断是否支持选择文件接口、删除文件接口,当支持时执行步骤1-1和1-2,否则函数返回不支持。具体的,上述第一个参数card是由外部传入的,不在本实施介绍的范围内。
[0067]步骤1-1:选择卡片内部MF文件;
[0068]具体的,通过调用选择文件接口函数select_file选择卡片内部MF文件。
[0069]步骤1-2:删除MF文件。
[0070]具体的,通过调用卡片操作接口函数carcLctl执行清空卡片内置数据的操作,其中卡片操作接口函数card_ctl的第二个参数即命令字段cmd的取值为SC_CARDCTL_ERASE_CARD,本实施例中通过调用该函数实现删除MF文件。
[0071]当产生密钥对接口函数被调用时,如图2所示,执行以下操作:
[0072]其中,产生密钥对接口函数为generate_key,该函数中的第一个参数profile和第三个参数obj是由外部传入的。
[0073]步骤2-1:初始化产生密钥对接口函数的局部变量;
[0074]具体的,根据函数中的第三个参数obj初始化密钥相关信息、密钥模长。进一步的,还包括初始化密钥引用值。
[0075]步骤2-2:在计算机内存中创建私钥文件对象,获取私钥文件对象的相关信息;在卡片内部创建私钥文件;
[0076]具体的,根据函数中的第一个参数profile调用新建文件接口函数cosm_new_file在内存中创建一个私钥文件对象,其中,该函数cosm_new_file中的第三个参数为SC_PKCS15_TYPE_PRKEY_RSA表示文件对象类型为私钥文件,该函数cosm_new_file中的第五个参数为file,是一个文件内存对象的结构体指针,通过参数file获取私钥文件对象的相关信息;
[0077]步骤2-3:在计算机内存中创建公钥文件对象,获取公钥文件对象的相关信息;在卡片内部创建公钥文件;
[0078]具体的,根据函数中的第二个参数profile调用新建文件接口函数cosm_new_file在内存中创建一个公钥文件对象,其中,函数cosm_new_file中的第三个参数为SC_PKCS15_TYPE_PUBKEY_RSA表示文件对象类型为公钥文件对象,函数cosm_new_file中的第五个参数为pukf,是一个文件内存对象的结构体指针,通过参数pukf获取公钥文件对象的
相关信息。
[0079]步骤2-4:设置公私钥结构体属性;[0080]本步骤包括:
[0081]gendat.prkey_id=file->id;// 设置私钥 ID
[0082]gendat.pukey_id=pukf->id;// 设置公钥 ID
[0083]gendat.key_length=keybits, gendat.modulus=NULL; // 设置密钥模长,把gendat.modulus 置为 NULL。
[0084]上述私钥ID和公钥ID为密钥相关信息的部分内容。
[0085]步骤2-5:生成密钥对,并释放在内存中创建的公私钥文件对象。
[0086]本步骤具体为:通过调用卡片操作接口函数carcLctl生成密钥对,其中该函数的命令字段 cmd 的取值为 SC_CARDCTL_ENTERSAFE_GENERATE_KEY。
[0087]当选择文件接口函数select_file被调用时,执行以下操作:根据函数中的第一结构体的属性执行选择文件的操作,函数返回选择文件操作结果;当选择文件的操作执行成功时所述选择文件操作结果中包含文件控制信息。具体包括:
[0088]根据函数select_file中第一结构体的类型属性选择运行函数,本实施例中具体的第一结构体类型属性为in_path_>type。
[0089]当in_path_>type的取值为第一预设值时,运行第一预设函数,函数返回其运行结果。
[0090]本实施例中具体的,第一预设值为SC_PATH_TYPE_DF_NAME,第一预设函数为select_aicL
[0091]当in_path_>type的取值为第二预设值时,判断函数select_file中第一结构体的长度属性是否等于2,如果不等于2,则select_f ile函数返回错误码,如果等于2则执行步骤I和步骤2:
[0092]本实施例中具体的,第二预设值为SC_PATH_TYPE_FILE_ID时,第一结构体的长度属性为 in_path->len,select_file 函数返回的错误码为 SC_ERROR_INVALID_ARGUMENTS。
[0093]步骤1:定义一个结构体指针并设置初始值为空;
[0094]本实施例中优选的,定义的结构体指针为sc_file_t*file。
[0095]步骤2:判断函数select_file中第一结构体的文件ID属性的第一个字节是否为第四预设值,是则构建一个伪的文件控制信息,函数返回其运行结果;否则,构建选择文件的APDU并通过发送构建好的APDU选择文件,函数返回其运行结果。
[0096]具体的,第四预设值为0x29,第一结构体的文件ID属性的第一个字节为in_path->value[0],取值为0x29表示要选择的文件为私钥文件;通过调用函数sc_transmit_apdu发送APDU,检查函数sc_transmit_apdu的返回数据判断选择文件是否成功,如果成功,则调用函数construct_process_fci获得文件控制信息,select_file函数返回成功,否则select_file函数返回错误码;
[0097]进一步的,当选择文件成功后且选择的文件类型是DF时还包括:刷新函数select_file中第二结构体的缓存属性card_>cache中的相关参数,将其中的参数file赋值给 *file_out ;
[0098]当in_path_>type的取值为第三预设值时,运行第三预设函数,返回其运行结果;
[0099]本实施例中具体的,第三预设值为SC_PATH_TYPE_PATH,第三预设函数为select_path。[0100]当in_path->type的取值为其他值时,函数返回错误码。
[0101]具体的,所述错误码为SC_ERROR_INVALID_ARGUMENTS。
[0102]当新建文件接口函数 被调用时,如图3所示,执行以下操作:
[0103]其中,新建文件接口函数为cosm_new_file,该函数包含有外部传入的第一个参数profile和第二个参数card,根据第二个参数card定位卡片并检查卡片的上下文环境属性,判断是否支持创建文件接口,当支持时执行步骤3-1和3-2,否则函数返回不支持。
[0104]步骤3-1:从配置文件中获取文件相关信息;
[0105]具体的,根据函数的第一个参数profile调用获取文件信息函数sc_profile_get_file从配置文件中获取文件相关信息。
[0106]步骤3-2:根据获取的文件相关信息在卡片内部创建文件。
[0107]本实施例中,根据获取的文件相关信息的不同,通过调用创建文件接口函数(3^&七6_打16在卡片内部创建文件,具体的,创建的文件可以是1^、51^7-1^、011?。
[0108]当新建标准文件接口函数被调用时,如图4所示,执行以下操作:
[0109]其中,新建标准文件接口函数为cosm_new_PKCS#15_file,该函数中包含有外部传入的第一个参数profile和第二个参数card,根据第二个参数card定位卡片并检查卡片的上下文环境属性,判断是否支持创建文件接口,当支持时执行步骤4-1和4-2,否则函数返回不支持。
[0110]步骤4-1:从配置文件中获取标准文件相关信息;
[0111]具体的,根据函数的第一个参数profile调用获取文件信息函数sc_profile_get_file从配置文件中获取与标准文件相关信息。
[0112]步骤4-2:根据获取的标准文件相关信息在卡片内部创建标准文件。
[0113]本实施例中,根据获取的标准文件相关信息的不同,通过调用创建文件接口函数create_file在卡片内部创建标准文件。
[0114]本实施例中,所述创建标准文件接口函数用于在卡片内部创建PKCS#15标准定义的文件,包括 PKCS15-AppDF、SKey-AppDF, MAXPIN、PKCS15-0DF、PKCS15_TokenInfo、PKCS15-UnusedSpace、 PKCS15-A0DF、 PKCS15_PrKDF、 PKCS15_PuKDF、 PKCS15-CDF、PKCS15-D0DF。
[0115]当写密钥接口函数被调用时,如图5所示,执行以下操作:
[0116]其中,写密钥接口函数为Write_key,该函数用于将密钥文件写入到卡片。该函数中的第二个参数profile和第三个参数obj是由外部传入的。
[0117]步骤5-1:初始化写密钥接口函数的局部变量;
[0118]具体的,根据函数的第三个参数obj初始化密钥相关信息和密钥模长。进一步的还包括初始化密钥引用值。
[0119]步骤5-2:在计算机内存中创建私钥文件对象,获取私钥文件对象的相关信息;在卡片内部创建私钥文件;
[0120]具体的,根据函数的第二个参数profile调用新建文件接口函数cosm_new_file在内存中创建一个私钥文件对象,其中,函数cosm_new_file的第三个参数为SC_PKCS15_TYPE_PRKEY_RSA表示文件对象类型为私钥文件对象,函数cosm_new_file的第五个参数为file是一个文件内存对象的结构体指针,通过参数file获取私钥文件对象的相关信息;[0121]步骤5-3:设置私钥结构体属性;
[0122]本步骤包括:
[0123]gendat.prkey_id=file->id;// 设置私钥 ID
[0124]gendat.key_length=keybits, gendat.modulus=NULL; // 设置密钥模长,把gendat.modulus 置为 NULL。
[0125]步骤5-4:往卡内写入私钥,并释放在内存中创建的私钥文件对象。
[0126]本步骤具体为:通过调用卡片操作接口函数carcLctl往卡内写入私钥,其中该函数的命令字段 cmd 取为 SC_CARDCTL_ENTERSAFE_WRITE_KEY。
[0127]当创建PIN码接口函数被调用时,如图6所示,执行以下操作:
[0128]其中,仓Ij建PIN码接口函数为create_pin。该函数中的第一个参数prof ile、第二个参数pin_obj、第三个参数pin、第四个参数pin_len、第五个参数puk、第六个参数puk_Ien是由外部传入的。
[0129]步骤6-1:定义并初始化PIN码对象;
[0130]具体的,本步骤主要包括根据函数的第二个参数pin_obj设置PIN类型、访问控制权限、key ID、最大重试次数;
[0131]具体的:根据函数的第一个参数profile,调用函数sc_profile_get_pin_id得到keyID,调用函数sc_profile_get_pin_retries得到最大重试次数。
[0132]步骤6-2:往卡内写入秘密文件;
[0133]具体的,通过调用卡片操作函数carcLctl调用到写密钥接口函数,往卡内写入秘密文件,其中,函数card_ctl的命令字段cmd的取值为SC_CARDCTL_ENTERSAFE_WRITE_KEY时,调用写密钥接口函数往卡内写入秘密文件。其中,根据写密钥接口函数的第一个参数可以获得PIN码对象。
[0134]步骤6-3:缓存PIN码对象。
[0135]具体的,通过调用函数sc_pkcsl5_pincache_add在内存中缓存PIN码对象。
[0136]进一步的,还可以通过调用创建PIN码接口函数create_pin执行上述步骤6_1和6-2来生成PUK码。
[0137]当创建文件接口函数被调用时,如图7所示,执行以下操作:
[0138]其中,创建文件接口函数为create_file。
[0139]步骤7-1:构建文件控制信息;
[0140]具体的,通过调用函数construct_fci构建文件控制信息,进一步的,如果卡片不支持该函数 construct_fci,则函数返回 SC_ERR0R_N0T_SUPP0RTED。
[0141]进一步的,在步骤7-1之前还可以包括:定义并初始化创建文件接口函数的局部
变量;
[0142]步骤7-2:构建创建文件的APDU,并通过发送APDU创建文件。
[0143]具体的,通过调用函数sc_transmit_apdu发送构建好的APDU,并接收该函数的返回值和状态码。根据返回值和状态码判断创建文件是否成功。
[0144]当卡片操作接口函数被调用时,执行以下操作:
[0145]其中,卡片操作接口函数为carcLctl,根据外部传入的该函数的第二个参数即命令字段cmd的取值判断要执行的操作类型。[0146]当cmd的取值为第一数值时,调用清卡接口函数清空卡片内的数据和文件结构;
[0147]优选的,第一数值为SC_CARDCTL_ERASE_CARD。
[0148]当cmd的取值为第二数值时,调用写密钥接口函数往卡内写入密钥;
[0149]优选的,第二数值为SC_CARDCTL_ENTERSAFE_WRITE_KEY。
[0150]当cmd的取值为第三数值时,调用产生密钥对接口函数在卡内生成密钥对;
[0151 ]优选的,第三数值为 SC_CARDCTL_ENTERSAFE_GENERATE_KEY。
[0152]当cmd的取值为第四数值时,调用获取卡片序列号接口函数获取卡片的序列号;
[0153]优选的,第四数值为SC_CARDCTL_GET_SERIALNR。
[0154]当cmd的取值为其他值时,则函数返回SC_ERR0R_N0T_SUPP0RTED表示卡片不支持。
[0155]当删除卡内文件接口函数被调用时,如图8所示,执行以下操作:
[0156]其中,删除卡内文件接口函数为delete_file。该函数的第一个参数card和第二个参数file是外部传入的,根据第一个参数card定位卡片并检查卡片的上下文环境属性,判断是否支持删除文件接口和选择文件接口,当支持时执行步骤8-1至8-3,否则函数返回不支持。
[0157]步骤8-1:定义删除卡内文件接口函数的局部变量;
[0158]步骤8-2:调用选择文件接口函数选择文件,并获取文件控制信息;
[0159]具体的,根据函数的第二个参数file调用选择文件接口函数。进一步的,如果选择文件失败则选择文件接口函数返回无效参数。例如,返回SC_ERROR_INVALID_ARGUMENTS。
[0160]步骤8-3:根据获取的文件控制信息,构建删除文件的APDU,并通过发送该APDU删除文件。
[0161]具体的,通过调用函数sc_transmit_apdu发送APDU,并根据该函数的返回值和状态码判断删除文件是否成功。
[0162]当签名接口函数被调用时,如图9所示,执行以下操作:
[0163]其中,签名接口函数为decipher,该函数的第一个参数card、第二个参数plain、第三个参数plain_length、第四个参数signature、第五个参数signature_length是外部传入的。根据第一个参数card检查卡片的上下文环境属性,判断是否支持签名接口,当支持时执行步骤9-1和9-2,否则函数返回不支持。
[0164]步骤9-1:定义签名接口函数的局部变量;
[0165]步骤9-2:构建签名的APDU,并通过发送该APDU在设置的安全环境下对待签名原文执行签名操作。
[0166]具体的,根据第二个参数plain和第三个参数plain_length构建签名的APDU,其中第二个参数plain和第三个参数plain_length表示待签名原文及其长度。
[0167]具体的,通过调用函数sc_transmit_apdu发送APDU,并根据该函数的返回值和状态码判断签名是否成功,签名接口函数通过第四个参数signature和第五个参数signature_length返回签名操作结果。当签名成功时签名接口函数返回的签名操作结果中包含有签名值。其中第四个参数signature和第五个参数signature_length表示签名值及其长度。
[0168]当设置安全环境接口函数被调用时,如图10所示,执行以下操作:[0169]其中,设置安全环境接口函数为set_security_env,其中该函数的第一个参数card和第二个参数env是外部传入的。根据第一个参数card定位卡片并检查卡片的上下文环境属性,判断是否支持设置安全环境接口,当支持时执行步骤10-1和10-2,否则函数返回不支持。
[0170]步骤10-1:构建设置安全环境的APDU ;
[0171]具体的,根据函数的第二个参数env构建设置安全环境的APDU,根据所述第二个参数env能够获取到文件控制信息的密钥文件属性。进一步的,构建设置安全环境的APDU除了用到获取到的文件控制信息的密钥文件属性之外,还需要从预置的cos手册文件中读取其他一些属性用于构建该APDU。
[0172]步骤10-2:通过发送该APDU设置安全环境。
[0173]具体的,通过调用函数sc_transmit_apdu发送APDU,并根据该函数的返回值和状态码判断设置安全环境的操作是否执行成功,设置安全环境接口函数返回设置成功与否的返回值。
[0174]当初始化接口函数被调用时,如图11所示,执行以下操作:
[0175]其中,初始化接口函数为init。
[0176]步骤11-1:根据卡片的通信密钥类型建立密文通信环境;
[0177]具体的,通信密钥类型可以是DES或AES。具体的,根据调用函数get_data后的返回数据判断得到通信密钥类型。
[0178]步骤11-2:设置卡片支持的密钥位数。
[0179]例如,设置卡片支持的密钥位数为512或2048。
[0180]进一步的,初始化接口函数返回表示初始化成功与否的初始化结果。
[0181]以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种支持OpenSC的软硬件驱动的实现方法,通过中间件调用具体的接口函数实现,其特征是: 当初始化接口函数被调用时,根据卡片的通信密钥类型建立密文通信环境,设置卡片支持的密钥位数,函数返回初始化结果; 当选择文件接口函数被调用时,根据所述选择文件接口函数中的第一结构体的属性执行选择文件的操作,函数返回选择文件操作结果;具体的,当选择文件的操作执行成功时函数返回包含文件控制信息的选择文件操作结果; 当设置安全环境接口函数被调用时,根据所述设置安全环境接口函数的第二个参数获取文件控制信息的密钥文件属性,利用所述密钥文件属性构建设置安全环境的APDU,并通过发送所述设置安全 环境的APDU设置安全环境,函数返回设置结果; 当签名接口函数被调用时,根据所述签名接口函数的第二个参数和第三个参数得到待签名原文及其长度,利用所述待签名原文及其长度构建签名的APDU,并通过发送所述签名的APDU对所述待签名原文执行签名操作,函数返回签名操作结果;具体的,当签名操作执行成功时函数返回包含签名值的签名操作结果。
2.根据权利要求1所述的方法,其特征是:所述方法还包括, 当卡片操作接口函数被调用时,根据所述卡片操作接口函数的第二个参数调用相应的卡片操作函数对卡片执行相应操作,包括: 当所述卡片操作接口函数的第二个参数的取值为第一数值时,调用清卡接口函数清空卡片内的数据和文件结构; 当所述卡片操作接口函数的第二个参数的取值为第二数值时,调用写密钥接口函数给卡片写入密钥; 当所述卡片操作接口函数的第二个参数的取值为第三数值时,调用产生密钥对接口函数在卡内生成密钥对。
3.根据权利要求2所述的方法,其特征是:当所述清卡接口函数被调用时,执行:选择卡片内部MF文件,通过调用删除卡内文件接口函数删除MF文件。
4.根据权利要求1或3所述的方法,其特征是:所述方法还包括, 当删除卡内文件接口函数被调用时,执行: 步骤1:根据所述删除卡内文件接口函数的第二个参数调用选择文件接口函数选择文件,获取文件控制信息; 步骤2:根据获取的文件控制信息构建删除文件的APDU,并通过发送所述删除文件的APDU删除文件。
5.根据权利要求2所述的方法,其特征是:当所述写密钥接口函数被调用时,执行: 步骤1:根据所述写密钥接口函数的第三个参数初始化所述写密钥接口函数的密钥相关信息和密钥模长; 步骤2:在计算机内存中创建私钥文件对象,获取私钥文件对象的相关信息,在卡片内部创建私钥文件; 步骤3:设置私钥ID和所述密钥模长; 步骤4:往卡内写入私钥,并释放在内存中创建的私钥文件对象。
6.根据权利要求2所述的方法,其特征是:当所述产生密钥对接口函数被调用时,执行: 步骤1:根据所述产生密钥对接口函数的第三个参数初始化所述产生密钥对接口函数的密钥相关信息和密钥模长; 步骤2:在计算机内存中创建私钥文件对象,获取私钥文件对象的相关信息,在卡片内部创建私钥文件; 步骤3:在计算机内存中创建公钥文件对象,获取公钥文件对象的相关信息,在卡片内部创建公钥文件; 步骤4:设置公钥ID、私钥ID和所述密钥模长; 步骤5:生成密钥对,并释放在内存中创建的公钥文件对象和私钥文件对象。
7.根据权利要求5或6所述的方法,其特征是:所述创建私钥文件对象是通过调用新建文件接口函数实现的,所述获取私钥文件对象的相关信息是根据所述新建文件接口函数的第五个参数获取的。
8.根据权利要求1所述的方法,其特征是:所述根据所述选择文件接口函数中的第一结构体的属性执行选择文件的操作包括:当所述第一结构体的类型属性取为第二预设值、长度属性取为2且文件ID属性的第一个字节取为第四预设值时,构建一个伪的文件控制信息作为选择文件操作结果。
9.根据权利要求8所述的方法,其特征是:所述第二预设值为SC_PATH_TYPE_DF_NAME,所述第四预设值为0x29。
10.根据权利要求1所述的方法,其特征是:所述方法还包括, 当新建文件接口函数被调用时,执行: 步骤1:根据所述新建文件接口函数的第二个参数从配置文件中获取文件相关信息; 步骤2:根据获取的文件相关信息,通过调用创建文件接口函数在卡片内部创建文件; 当新建标准文件接口函数被调用时,执行: 步骤1:根据所述新建标准文件接口函数的第二个参数从配置文件中获取标准文件相关信息; 步骤2:根据获取的标准文件相关信息,通过调用创建文件接口函数在卡片内部创建标准文件。
11.根据权利要求1或10所述的方法,其特征是:所述方法还包括, 当创建文件接口函数被调用时,执行: 步骤1:构建文件控制信息; 步骤2:根据所述文件控制信息构建创建文件的APDU,并通过发送所述创建文件的APDU创建文件。
12.根据权利要求1所述的方法,其特征是:所述方法还包括, 当创建PIN码接口函数被调用时,执行: 步骤1:定义并初始化PIN码对象; 步骤2:根据写密钥接口函数的第一个参数获得PIN码对象,调用所述写密钥接口函数往卡内写入秘密文件; 步骤3:在内存中缓存PIN码对象。
13.根据权利要求1所述的方法,其特征是:当所述具体的接口函数被调用时,还包括根据所述具 体的接口函数中的外部传入的一个参数定位要做具体操作的卡片,并检查卡片的上下文环境属性。
【文档编号】G06F21/34GK103544037SQ201310520252
【公开日】2014年1月29日 申请日期:2013年10月29日 优先权日:2013年10月29日
【发明者】陆舟, 于华章 申请人:飞天诚信科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1