CN103544037B - 一种支持OpenSC的软硬件驱动的实现方法 - Google Patents

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

Info

Publication number
CN103544037B
CN103544037B CN201310520252.2A CN201310520252A CN103544037B CN 103544037 B CN103544037 B CN 103544037B CN 201310520252 A CN201310520252 A CN 201310520252A CN 103544037 B CN103544037 B CN 103544037B
Authority
CN
China
Prior art keywords
file
interface function
card
function
key
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201310520252.2A
Other languages
English (en)
Other versions
CN103544037A (zh
Inventor
陆舟
于华章
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Feitian Technologies Co Ltd
Original Assignee
Feitian Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Feitian Technologies Co Ltd filed Critical Feitian Technologies Co Ltd
Priority to CN201310520252.2A priority Critical patent/CN103544037B/zh
Publication of CN103544037A publication Critical patent/CN103544037A/zh
Priority to US15/029,989 priority patent/US10133882B2/en
Priority to PCT/CN2014/086840 priority patent/WO2015062373A1/zh
Application granted granted Critical
Publication of CN103544037B publication Critical patent/CN103544037B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/77Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information in smart cards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/31User authentication
    • G06F21/34User authentication involving the use of external additional devices, e.g. dongles or smart cards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6218Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/08Network architectures or network communication protocols for network security for authentication of entities
    • H04L63/0823Network architectures or network communication protocols for network security for authentication of entities using certificates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2107File encryption
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/08Network architectures or network communication protocols for network security for authentication of entities
    • H04L63/0853Network architectures or network communication protocols for network security for authentication of entities using an additional device, e.g. smartcard, SIM or a different communication terminal

Abstract

本发明公开了一种支持OpenSC的软硬件驱动的实现方法,属于信息安全领域。该方法是通过中间件调用具体的接口函数实现的,主要包括初始化接口函数的调用及建立密文通信环境、选择文件接口函数的调用及选择要操作的文件、设置安全环境接口函数的调用及构建设置安全环境的APDU并通过发送该APDU设置安全环境、签名接口函数的调用及构建签名的APDU并通过发送该APDU对待签名原文执行签名操作。本发明的实现使得在OpenSC下中间件与智能卡设备得到了很好的结合与使用,有助于推动智能卡设备生产厂商在OpenSC下对智能卡设备的多种功能的开发与应用。

Description

一种支持OpenSC的软硬件驱动的实现方法
技术领域
本发明属于信息安全领域,尤其涉及一种支持OpenSC的软硬件驱动的实现方法。
背景技术
OpenSC是开源的智能卡项目,类似于中间件,它提供了一套驱动接口,便于各厂商加入自己设备的支持。
目前,基于身份认证的智能卡设备得到了广泛的应用,如何基于OpenSC实现对我们自主研发的智能卡设备的支持成为了中间件开发人员急于解决的技术难题。
发明内容
为了解决现有技术中的不足,本发明提供了一种支持OpenSC的软硬件驱动的实现方法。
本发明采用的技术方案是:一种支持OpenSC的软硬件驱动的实现方法,通过中间件调用具体的接口函数实现,包括:
当初始化接口函数被调用时,根据卡片的通信密钥类型建立密文通信环境,设置卡片支持的密钥位数,函数返回初始化结果;
当选择文件接口函数被调用时,根据所述选择文件接口函数中的第一结构体的属性执行选择文件的操作,函数返回选择文件操作结果;具体的,当选择文件的操作执行成功时函数返回包含文件控制信息的选择文件操作结果;
当设置安全环境接口函数被调用时,根据所述设置安全环境接口函数的第二个参数获取文件控制信息的密钥文件属性,利用所述密钥文件属性构建设置安全环境的APDU,并通过发送所述设置安全环境的APDU设置安全环境,函数返回设置结果;
当签名接口函数被调用时,根据所述签名接口函数的第二个参数和第三个参数得到待签名原文及其长度,利用所述待签名原文及其长度构建签名的APDU,并通过发送所述签名的APDU对所述待签名原文执行签名操作,函数返回签名操作结果;具体的,当签名操作执行成功时函数返回包含签名值的签名操作结果。
上述方法还包括,
当卡片操作接口函数被调用时,根据所述卡片操作接口函数的第二个参数调用相应的卡片操作函数对卡片执行相应操作,包括:
当所述卡片操作接口函数的第二个参数的取值为第一数值时,调用清卡接口函数清空卡片内的数据和文件结构;
当所述卡片操作接口函数的第二个参数的取值为第二数值时,调用写密钥接口函数给卡片写入密钥;
当所述卡片操作接口函数的第二个参数的取值为第三数值时,调用产生密钥对接口函数在卡内生成密钥对。
进一步的,当所述清卡接口函数被调用时,执行:选择卡片内部MF文件,通过调用删除卡内文件接口函数删除MF文件。
上述方法还包括,
当删除卡内文件接口函数被调用时,执行:
步骤1:根据所述删除卡内文件接口函数的第二个参数调用选择文件接口函数选择文件,获取文件控制信息;
步骤2:根据获取的文件控制信息构建删除文件的APDU,并通过发送所述删除文件的APDU删除文件。
进一步的,当所述写密钥接口函数被调用时,执行:
步骤1:根据所述写密钥接口函数的第三个参数初始化所述写密钥接口函数的密钥相关信息和密钥模长;
步骤2:在计算机内存中创建私钥文件对象,获取私钥文件对象的相关信息,在卡片内部创建私钥文件;
步骤3:设置私钥ID和所述密钥模长;
步骤4:往卡内写入私钥,并释放在内存中创建的私钥文件对象。
当所述产生密钥对接口函数被调用时,执行:
步骤1:根据所述产生密钥对接口函数的第三个参数初始化所述产生密钥对接口函数的密钥相关信息和密钥模长;
步骤2:在计算机内存中创建私钥文件对象,获取私钥文件对象的相关信息,在卡片内部创建私钥文件;
步骤3:在计算机内存中创建公钥文件对象,获取公钥文件对象的相关信息,在卡片内部创建公钥文件;
步骤4:设置公钥ID、私钥ID和所述密钥模长;
步骤5:生成密钥对,并释放在内存中创建的公钥文件对象和私钥文件对象。
进一步的,所述创建私钥文件对象是通过调用新建文件接口函数实现的,所述获取私钥文件对象的相关信息是根据所述新建文件接口函数的第五个参数获取的。
所述根据所述选择文件接口函数中的第一结构体的属性执行选择文件的操作包括:当所述第一结构体的类型属性取为第二预设值、长度属性取为2且文件ID属性的第一个字节取为第四预设值时,构建一个伪的文件控制信息作为选择文件操作结果。所述第二预设值为SC_PATH_TYPE_DF_NAME,所述第四预设值为0x29。
上述方法还包括,
当新建文件接口函数被调用时,执行:
步骤1:根据所述新建文件接口函数的第二个参数从配置文件中获取文件相关信息;
步骤2:根据获取的文件相关信息,通过调用创建文件接口函数在卡片内部创建文件;
当新建标准文件接口函数被调用时,执行:
步骤1:根据所述新建标准文件接口函数的第二个参数从配置文件中获取标准文件相关信息;
步骤2:根据获取的标准文件相关信息,通过调用创建文件接口函数在卡片内部创建标准文件。
上述方法还包括,
当创建文件接口函数被调用时,执行:
步骤1:构建文件控制信息;
步骤2:根据所述文件控制信息构建创建文件的APDU,并通过发送所述创建文件的APDU创建文件。
上述方法还包括,
当创建PIN码接口函数被调用时,执行:
步骤1:定义并初始化PIN码对象;
步骤2:根据写密钥接口函数的第一个参数获得PIN码对象,调用所述写密钥接口函数往卡内写入秘密文件;
步骤3:在内存中缓存PIN码对象。
进一步的,当所述具体的接口函数被调用时,还包括根据所述具体的接口函数中的外部传入的一个参数定位要做具体操作的卡片,并检查卡片的上下文环境属性。
有益效果:本发明的实现使得在OpenSC下中间件与智能卡设备得到了很好的结合与使用,有助于推动智能卡设备生产厂商在OpenSC下对智能卡设备的多种功能的开发与应用。
附图说明
图1为本发明实施例中清卡接口函数被调用时的流程图;
图2为本发明实施例中产生密钥对接口函数被调用时的流程图;
图3为本发明实施例中新建文件接口函数被调用时的流程图;
图4为本发明实施例中新建标准文件接口函数被调用时的流程图;
图5为本发明实施例中写密钥接口函数被调用时的流程图;
图6为本发明实施例中创建PIN码接口函数被调用时的流程图;
图7为本发明实施例中创建文件接口函数被调用时的流程图;
图8为本发明实施例中删除卡内文件接口函数被调用时的流程图;
图9为本发明实施例中签名接口函数被调用时的流程图;
图10本发明实施例中为设置安全环境接口函数被调用时的流程图;
图11为本发明实施例中初始化接口函数被调用时的流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地声明,显然,所声明的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本实施例提供了一种支持OpenSC的软硬件驱动的实现方法,以中间件访问智能卡设备为例,通过中间件调用具体的接口函数实现,所述具体的接口函数可以包含以下接口函数中的部分或全部:清卡接口函数、产生密钥对接口函数、选择文件接口函数、新建文件接口函数、新建标准文件接口函数、写密钥接口函数、创建PIN码接口函数、创建文件接口函数、卡片操作接口函数、删除卡内文件接口函数、签名接口函数和设置安全环境接口函数,该方法包括:
本发明中提到的具体的接口函数都有一个外部传入的参数card,当各个具体的接口函数被调用时,首先执行根据该参数card定位要做具体操作的卡片,并检查卡片的上下文环境属性,然后再对定位到的卡片做具体的操作。以下实施例中有部分接口函数提到了该参数card,其他未提及的均包含该参数,且该参数实现的功能相同,不再赘述。
当清卡接口函数被调用时,如图1所示,执行以下操作:
其中,清卡接口函数为erase_card,该函数中包含有第一个参数card,根据该参数定位卡片并检查卡片的上下文环境属性,判断是否支持选择文件接口、删除文件接口,当支持时执行步骤1-1和1-2,否则函数返回不支持。具体的,上述第一个参数card是由外部传入的,不在本实施介绍的范围内。
步骤1-1:选择卡片内部MF文件;
具体的,通过调用选择文件接口函数select_file选择卡片内部MF文件。
步骤1-2:删除MF文件。
具体的,通过调用卡片操作接口函数card_ctl执行清空卡片内置数据的操作,其中卡片操作接口函数card_ctl的第二个参数即命令字段cmd的取值为SC_CARDCTL_ERASE_CARD,本实施例中通过调用该函数实现删除MF文件。
当产生密钥对接口函数被调用时,如图2所示,执行以下操作:
其中,产生密钥对接口函数为generate_key,该函数中的第一个参数profile和第三个参数obj是由外部传入的。
步骤2-1:初始化产生密钥对接口函数的局部变量;
具体的,根据函数中的第三个参数obj初始化密钥相关信息、密钥模长。进一步的,还包括初始化密钥引用值。
步骤2-2:在计算机内存中创建私钥文件对象,获取私钥文件对象的相关信息;在卡片内部创建私钥文件;
具体的,根据函数中的第一个参数profile调用新建文件接口函数cosm_new_file在内存中创建一个私钥文件对象,其中,该函数cosm_new_file中的第三个参数为SC_PKCS15_TYPE_PRKEY_RSA表示文件对象类型为私钥文件,该函数cosm_new_file中的第五个参数为file,是一个文件内存对象的结构体指针,通过参数file获取私钥文件对象的相关信息;
步骤2-3:在计算机内存中创建公钥文件对象,获取公钥文件对象的相关信息;在卡片内部创建公钥文件;
具体的,根据函数中的第二个参数profile调用新建文件接口函数cosm_new_file在内存中创建一个公钥文件对象,其中,函数cosm_new_file中的第三个参数为SC_PKCS15_TYPE_PUBKEY_RSA表示文件对象类型为公钥文件对象,函数cosm_new_file中的第五个参数为pukf,是一个文件内存对象的结构体指针,通过参数pukf获取公钥文件对象的相关信息。
步骤2-4:设置公私钥结构体属性;
本步骤包括:
gendat.prkey_id=file->id;//设置私钥ID
gendat.pukey_id=pukf->id;//设置公钥ID
gendat.key_length=keybits,gendat.modulus=NULL;//设置密钥模长,把gendat.modulus置为NULL。
上述私钥ID和公钥ID为密钥相关信息的部分内容。
步骤2-5:生成密钥对,并释放在内存中创建的公私钥文件对象。
本步骤具体为:通过调用卡片操作接口函数card_ctl生成密钥对,其中该函数的命令字段cmd的取值为SC_CARDCTL_ENTERSAFE_GENERATE_KEY。
当选择文件接口函数select_file被调用时,执行以下操作:根据函数中的第一结构体的属性执行选择文件的操作,函数返回选择文件操作结果;当选择文件的操作执行成功时所述选择文件操作结果中包含文件控制信息。具体包括:
根据函数select_file中第一结构体的类型属性选择运行函数,本实施例中具体的第一结构体类型属性为in_path->type。
当in_path->type的取值为第一预设值时,运行第一预设函数,函数返回其运行结果。
本实施例中具体的,第一预设值为SC_PATH_TYPE_DF_NAME,第一预设函数为select_aid。
当in_path->type的取值为第二预设值时,判断函数select_file中第一结构体的长度属性是否等于2,如果不等于2,则select_file函数返回错误码,如果等于2则执行步骤1和步骤2:
本实施例中具体的,第二预设值为SC_PATH_TYPE_FILE_ID时,第一结构体的长度属性为in_path->len,select_file函数返回的错误码为SC_ERROR_INVALID_ARGUMENTS。
步骤1:定义一个结构体指针并设置初始值为空;
本实施例中优选的,定义的结构体指针为sc_file_t*file。
步骤2:判断函数select_file中第一结构体的文件ID属性的第一个字节是否为第四预设值,是则构建一个伪的文件控制信息,函数返回其运行结果;否则,构建选择文件的APDU并通过发送构建好的APDU选择文件,函数返回其运行结果。
具体的,第四预设值为0x29,第一结构体的文件ID属性的第一个字节为in_path->value[0],取值为0x29表示要选择的文件为私钥文件;通过调用函数sc_transmit_apdu发送APDU,检查函数sc_transmit_apdu的返回数据判断选择文件是否成功,如果成功,则调用函数construct_process_fci获得文件控制信息,select_file函数返回成功,否则select_file函数返回错误码;
进一步的,当选择文件成功后且选择的文件类型是DF时还包括:刷新函数select_file中第二结构体的缓存属性card->cache中的相关参数,将其中的参数file赋值给*file_out;
当in_path->type的取值为第三预设值时,运行第三预设函数,返回其运行结果;
本实施例中具体的,第三预设值为SC_PATH_TYPE_PATH,第三预设函数为select_path。
当in_path->type的取值为其他值时,函数返回错误码。
具体的,所述错误码为SC_ERROR_INVALID_ARGUMENTS。
当新建文件接口函数被调用时,如图3所示,执行以下操作:
其中,新建文件接口函数为cosm_new_file,该函数包含有外部传入的第一个参数profile和第二个参数card,根据第二个参数card定位卡片并检查卡片的上下文环境属性,判断是否支持创建文件接口,当支持时执行步骤3-1和3-2,否则函数返回不支持。
步骤3-1:从配置文件中获取文件相关信息;
具体的,根据函数的第一个参数profile调用获取文件信息函数sc_profile_get_file从配置文件中获取文件相关信息。
步骤3-2:根据获取的文件相关信息在卡片内部创建文件。
本实施例中,根据获取的文件相关信息的不同,通过调用创建文件接口函数create_file在卡片内部创建文件,具体的,创建的文件可以是MF、SKey-MF、DIR。
当新建标准文件接口函数被调用时,如图4所示,执行以下操作:
其中,新建标准文件接口函数为cosm_new_PKCS#15_file,该函数中包含有外部传入的第一个参数profile和第二个参数card,根据第二个参数card定位卡片并检查卡片的上下文环境属性,判断是否支持创建文件接口,当支持时执行步骤4-1和4-2,否则函数返回不支持。
步骤4-1:从配置文件中获取标准文件相关信息;
具体的,根据函数的第一个参数profile调用获取文件信息函数sc_profile_get_file从配置文件中获取与标准文件相关信息。
步骤4-2:根据获取的标准文件相关信息在卡片内部创建标准文件。
本实施例中,根据获取的标准文件相关信息的不同,通过调用创建文件接口函数create_file在卡片内部创建标准文件。
本实施例中,所述创建标准文件接口函数用于在卡片内部创建PKCS#15标准定义的文件,包括PKCS15-AppDF、SKey-AppDF、MAXPIN、PKCS15-ODF、PKCS15-TokenInfo、PKCS15-UnusedSpace、PKCS15-AODF、PKCS15-PrKDF、PKCS15-PuKDF、PKCS15-CDF、PKCS15-DODF。
当写密钥接口函数被调用时,如图5所示,执行以下操作:
其中,写密钥接口函数为write_key,该函数用于将密钥文件写入到卡片。该函数中的第二个参数profile和第三个参数obj是由外部传入的。
步骤5-1:初始化写密钥接口函数的局部变量;
具体的,根据函数的第三个参数obj初始化密钥相关信息和密钥模长。进一步的还包括初始化密钥引用值。
步骤5-2:在计算机内存中创建私钥文件对象,获取私钥文件对象的相关信息;在卡片内部创建私钥文件;
具体的,根据函数的第二个参数profile调用新建文件接口函数cosm_new_file在内存中创建一个私钥文件对象,其中,函数cosm_new_file的第三个参数为SC_PKCS15_TYPE_PRKEY_RSA表示文件对象类型为私钥文件对象,函数cosm_new_file的第五个参数为file是一个文件内存对象的结构体指针,通过参数file获取私钥文件对象的相关信息;
步骤5-3:设置私钥结构体属性;
本步骤包括:
gendat.prkey_id=file->id;//设置私钥ID
gendat.key_length=keybits,gendat.modulus=NULL;//设置密钥模长,把gendat.modulus置为NULL。
步骤5-4:往卡内写入私钥,并释放在内存中创建的私钥文件对象。
本步骤具体为:通过调用卡片操作接口函数card_ctl往卡内写入私钥,其中该函数的命令字段cmd取为SC_CARDCTL_ENTERSAFE_WRITE_KEY。
当创建PIN码接口函数被调用时,如图6所示,执行以下操作:
其中,创建PIN码接口函数为create_pin。该函数中的第一个参数profile、第二个参数pin_obj、第三个参数pin、第四个参数pin_len、第五个参数puk、第六个参数puk_len是由外部传入的。
步骤6-1:定义并初始化PIN码对象;
具体的,本步骤主要包括根据函数的第二个参数pin_obj设置PIN类型、访问控制权限、key ID、最大重试次数;
具体的:根据函数的第一个参数profile,调用函数sc_profile_get_pin_id得到keyID,调用函数sc_profile_get_pin_retries得到最大重试次数。
步骤6-2:往卡内写入秘密文件;
具体的,通过调用卡片操作函数card_ctl调用到写密钥接口函数,往卡内写入秘密文件,其中,函数card_ctl的命令字段cmd的取值为SC_CARDCTL_ENTERSAFE_WRITE_KEY时,调用写密钥接口函数往卡内写入秘密文件。其中,根据写密钥接口函数的第一个参数可以获得PIN码对象。
步骤6-3:缓存PIN码对象。
具体的,通过调用函数sc_pkcs15_pincache_add在内存中缓存PIN码对象。
进一步的,还可以通过调用创建PIN码接口函数create_pin执行上述步骤6-1和6-2来生成PUK码。
当创建文件接口函数被调用时,如图7所示,执行以下操作:
其中,创建文件接口函数为create_file。
步骤7-1:构建文件控制信息;
具体的,通过调用函数construct_fci构建文件控制信息,进一步的,如果卡片不支持该函数construct_fci,则函数返回SC_ERROR_NOT_SUPPORTED。
进一步的,在步骤7-1之前还可以包括:定义并初始化创建文件接口函数的局部变量;
步骤7-2:构建创建文件的APDU,并通过发送APDU创建文件。
具体的,通过调用函数sc_transmit_apdu发送构建好的APDU,并接收该函数的返回值和状态码。根据返回值和状态码判断创建文件是否成功。
当卡片操作接口函数被调用时,执行以下操作:
其中,卡片操作接口函数为card_ctl,根据外部传入的该函数的第二个参数即命令字段cmd的取值判断要执行的操作类型。
当cmd的取值为第一数值时,调用清卡接口函数清空卡片内的数据和文件结构;
优选的,第一数值为SC_CARDCTL_ERASE_CARD。
当cmd的取值为第二数值时,调用写密钥接口函数往卡内写入密钥;
优选的,第二数值为SC_CARDCTL_ENTERSAFE_WRITE_KEY。
当cmd的取值为第三数值时,调用产生密钥对接口函数在卡内生成密钥对;
优选的,第三数值为SC_CARDCTL_ENTERSAFE_GENERATE_KEY。
当cmd的取值为第四数值时,调用获取卡片序列号接口函数获取卡片的序列号;
优选的,第四数值为SC_CARDCTL_GET_SERIALNR。
当cmd的取值为其他值时,则函数返回SC_ERROR_NOT_SUPPORTED表示卡片不支持。
当删除卡内文件接口函数被调用时,如图8所示,执行以下操作:
其中,删除卡内文件接口函数为delete_file。该函数的第一个参数card和第二个参数file是外部传入的,根据第一个参数card定位卡片并检查卡片的上下文环境属性,判断是否支持删除文件接口和选择文件接口,当支持时执行步骤8-1至8-3,否则函数返回不支持。
步骤8-1:定义删除卡内文件接口函数的局部变量;
步骤8-2:调用选择文件接口函数选择文件,并获取文件控制信息;
具体的,根据函数的第二个参数file调用选择文件接口函数。进一步的,如果选择文件失败则选择文件接口函数返回无效参数。例如,返回SC_ERROR_INVALID_ARGUMENTS。
步骤8-3:根据获取的文件控制信息,构建删除文件的APDU,并通过发送该APDU删除文件。
具体的,通过调用函数sc_transmit_apdu发送APDU,并根据该函数的返回值和状态码判断删除文件是否成功。
当签名接口函数被调用时,如图9所示,执行以下操作:
其中,签名接口函数为decipher,该函数的第一个参数card、第二个参数plain、第三个参数plain_length、第四个参数signature、第五个参数signature_length是外部传入的。根据第一个参数card检查卡片的上下文环境属性,判断是否支持签名接口,当支持时执行步骤9-1和9-2,否则函数返回不支持。
步骤9-1:定义签名接口函数的局部变量;
步骤9-2:构建签名的APDU,并通过发送该APDU在设置的安全环境下对待签名原文执行签名操作。
具体的,根据第二个参数plain和第三个参数plain_length构建签名的APDU,其中第二个参数plain和第三个参数plain_length表示待签名原文及其长度。
具体的,通过调用函数sc_transmit_apdu发送APDU,并根据该函数的返回值和状态码判断签名是否成功,签名接口函数通过第四个参数signature和第五个参数signature_length返回签名操作结果。当签名成功时签名接口函数返回的签名操作结果中包含有签名值。其中第四个参数signature和第五个参数signature_length表示签名值及其长度。
当设置安全环境接口函数被调用时,如图10所示,执行以下操作:
其中,设置安全环境接口函数为set_security_env,其中该函数的第一个参数card和第二个参数env是外部传入的。根据第一个参数card定位卡片并检查卡片的上下文环境属性,判断是否支持设置安全环境接口,当支持时执行步骤10-1和10-2,否则函数返回不支持。
步骤10-1:构建设置安全环境的APDU;
具体的,根据函数的第二个参数env构建设置安全环境的APDU,根据所述第二个参数env能够获取到文件控制信息的密钥文件属性。进一步的,构建设置安全环境的APDU除了用到获取到的文件控制信息的密钥文件属性之外,还需要从预置的cos手册文件中读取其他一些属性用于构建该APDU。
步骤10-2:通过发送该APDU设置安全环境。
具体的,通过调用函数sc_transmit_apdu发送APDU,并根据该函数的返回值和状态码判断设置安全环境的操作是否执行成功,设置安全环境接口函数返回设置成功与否的返回值。
当初始化接口函数被调用时,如图11所示,执行以下操作:
其中,初始化接口函数为init。
步骤11-1:根据卡片的通信密钥类型建立密文通信环境;
具体的,通信密钥类型可以是DES或AES。具体的,根据调用函数get_data后的返回数据判断得到通信密钥类型。
步骤11-2:设置卡片支持的密钥位数。
例如,设置卡片支持的密钥位数为512或2048。
进一步的,初始化接口函数返回表示初始化成功与否的初始化结果。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (12)

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码对象。
CN201310520252.2A 2013-10-29 2013-10-29 一种支持OpenSC的软硬件驱动的实现方法 Expired - Fee Related CN103544037B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201310520252.2A CN103544037B (zh) 2013-10-29 2013-10-29 一种支持OpenSC的软硬件驱动的实现方法
US15/029,989 US10133882B2 (en) 2013-10-29 2014-09-18 Implementation method for driving of software and hardware supporting OpenSC
PCT/CN2014/086840 WO2015062373A1 (zh) 2013-10-29 2014-09-18 一种支持OpenSC的软硬件驱动的实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310520252.2A CN103544037B (zh) 2013-10-29 2013-10-29 一种支持OpenSC的软硬件驱动的实现方法

Publications (2)

Publication Number Publication Date
CN103544037A CN103544037A (zh) 2014-01-29
CN103544037B true CN103544037B (zh) 2016-08-17

Family

ID=49967516

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310520252.2A Expired - Fee Related CN103544037B (zh) 2013-10-29 2013-10-29 一种支持OpenSC的软硬件驱动的实现方法

Country Status (3)

Country Link
US (1) US10133882B2 (zh)
CN (1) CN103544037B (zh)
WO (1) WO2015062373A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103544037B (zh) 2013-10-29 2016-08-17 飞天诚信科技股份有限公司 一种支持OpenSC的软硬件驱动的实现方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102055759A (zh) * 2010-06-30 2011-05-11 北京飞天诚信科技有限公司 一种硬件引擎的实现方法
CN103138937A (zh) * 2013-02-28 2013-06-05 飞天诚信科技股份有限公司 一种签名方法及装置
CN103186812A (zh) * 2011-12-28 2013-07-03 国民技术股份有限公司 智能存储卡以及访问智能存储卡的方法
CN103218560A (zh) * 2013-04-25 2013-07-24 飞天诚信科技股份有限公司 一种管理卡片数据的实现方法

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040154027A1 (en) * 1998-10-14 2004-08-05 Jean-Jacques Vandewalle Method and means for managing communications between local and remote objects in an object oriented client server system in which a client application invokes a local object as a proxy for a remote object on the server
US6938244B1 (en) * 1999-05-11 2005-08-30 Microsoft Corp. Interlaced protocol for smart card application development
US6845498B1 (en) * 1999-05-11 2005-01-18 Microsoft Corporation Method and apparatus for sharing data files among run time environment applets in an integrated circuit card
US7340748B2 (en) * 2000-12-21 2008-03-04 Gemplus Automatic client proxy configuration for portable services
US7003797B2 (en) * 2001-05-18 2006-02-21 Sun Microsystems, Inc. Secure personal identification number entry in a distributed network
EP1454306A2 (en) * 2001-12-07 2004-09-08 Ecebs Limited Smartcard system
EP1349031B1 (en) * 2002-03-18 2003-11-05 Ubs Ag Secure user and data authentication over a communication network
US20040143739A1 (en) * 2003-01-16 2004-07-22 Sun Mircosystems, Inc., A Delaware Corporation Run time code integrity checks
US7097107B1 (en) * 2003-04-09 2006-08-29 Mobile-Mind, Inc. Pseudo-random number sequence file for an integrated circuit card
US7907935B2 (en) * 2003-12-22 2011-03-15 Activcard Ireland, Limited Intelligent remote device
US7374099B2 (en) * 2004-02-24 2008-05-20 Sun Microsystems, Inc. Method and apparatus for processing an application identifier from a smart card
US20060085848A1 (en) * 2004-10-19 2006-04-20 Intel Corporation Method and apparatus for securing communications between a smartcard and a terminal
CN100382065C (zh) * 2006-03-31 2008-04-16 北京飞天诚信科技有限公司 基于usb接口的智能卡读写器及其控制方法
US8200952B2 (en) * 2006-10-25 2012-06-12 Microsoft Corporation Platform authentication via a transparent second factor
US20080189554A1 (en) * 2007-02-05 2008-08-07 Asad Ali Method and system for securing communication between a host computer and a secure portable device
US7748609B2 (en) * 2007-08-31 2010-07-06 Gemalto Inc. System and method for browser based access to smart cards
CN101551784B (zh) 2008-04-02 2011-04-13 西北工业大学 一种usb接口的ata类存储设备中数据的加密方法及装置
CN101266590B (zh) * 2008-04-22 2010-09-08 北京飞天诚信科技有限公司 动态切换设备配置的方法和系统
US8274380B2 (en) * 2008-12-01 2012-09-25 Research In Motion Limited Anticipatory responses to commands
CN101587523B (zh) * 2009-07-02 2012-04-18 飞天诚信科技股份有限公司 保护软件的方法和装置
WO2011060662A1 (zh) * 2009-11-20 2011-05-26 北京飞天诚信科技有限公司 一种对双电子钱包进行圈存的方法
CN101719054B (zh) * 2009-12-24 2011-05-18 北京飞天诚信科技有限公司 一种实现多卡槽访问的方法和装置
US8995663B2 (en) 2010-03-31 2015-03-31 Feitian Technologies Co., Ltd. Method for implementing an encryption engine by smart key device
CN101847188A (zh) * 2010-04-28 2010-09-29 北京飞天诚信科技有限公司 一种基于时钟的安全装置的软件保护方法及安全装置
CN101872334A (zh) * 2010-05-26 2010-10-27 北京飞天诚信科技有限公司 一种复合型usb设备及其实现方法
WO2012000438A1 (zh) * 2010-06-29 2012-01-05 飞天诚信科技股份有限公司 一种对电子钱包进行操作的方法
CN102043751B (zh) * 2010-06-29 2012-12-12 飞天诚信科技股份有限公司 Usb设备识别主机操作系统的方法
EP2437198B1 (en) * 2010-10-01 2020-12-30 HID Global GmbH Secure PIN reset process
CN102004655B (zh) * 2010-11-25 2013-06-19 飞天诚信科技股份有限公司 自动安装驱动程序的装置及方法
US8352749B2 (en) 2010-12-17 2013-01-08 Google Inc. Local trusted services manager for a contactless smart card
WO2014173298A1 (zh) 2013-04-25 2014-10-30 飞天诚信科技股份有限公司 一种管理卡片上应用的方法
CN103544037B (zh) * 2013-10-29 2016-08-17 飞天诚信科技股份有限公司 一种支持OpenSC的软硬件驱动的实现方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102055759A (zh) * 2010-06-30 2011-05-11 北京飞天诚信科技有限公司 一种硬件引擎的实现方法
CN103186812A (zh) * 2011-12-28 2013-07-03 国民技术股份有限公司 智能存储卡以及访问智能存储卡的方法
CN103138937A (zh) * 2013-02-28 2013-06-05 飞天诚信科技股份有限公司 一种签名方法及装置
CN103218560A (zh) * 2013-04-25 2013-07-24 飞天诚信科技股份有限公司 一种管理卡片数据的实现方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于PKCS#15规范的智能卡文件系统的设计与实现;王佳丽;《中国优秀硕士学位论文全文数据库 信息科技辑》;20121015(第10期);第iii页第4段,第2.2、2.4、5.2.1、5.4.2、5.4.3、5.5.2、5.5.4节、表5-6、5-7和5-8 *

Also Published As

Publication number Publication date
US10133882B2 (en) 2018-11-20
US20160253525A1 (en) 2016-09-01
WO2015062373A1 (zh) 2015-05-07
CN103544037A (zh) 2014-01-29

Similar Documents

Publication Publication Date Title
CN107194242B (zh) 固件升级方法和装置
US9462470B2 (en) Dual interface device for access control and a method therefor
JP6305559B2 (ja) セキュアエレメント管理方法及び端末
CN111177252B (zh) 一种业务数据的处理方法及装置
US20060107062A1 (en) Portable personal mass storage medium and information system with secure access to a user space via a network
WO2007030213A2 (en) Method for securely exchanging public key certificates in an electronic device
CN101340663A (zh) 智能存储卡系统以及该系统实现交互的方法
JP2007532984A (ja) 半導体メモリ
CN102883047A (zh) 实现智能移动终端数据安全的方法及系统
CN104050424B (zh) 智能卡文件访问安全权限管理的实现及文件访问方法
CN109831769A (zh) 一种蓝牙设备通过NFC方式加入蓝牙mesh网络的方法及系统
CN201590091U (zh) 基于口令认证的加密型存储卡读写装置
EP2338244B1 (en) Use of a secure element for writing to and reading from machine readable credentials
CN103544037B (zh) 一种支持OpenSC的软硬件驱动的实现方法
JP4993114B2 (ja) 携帯型ストレージデバイスの共有管理方法、および、携帯型ストレージデバイス
CN102841861A (zh) 一种以sd为通讯接口的数据安全存储设备及其工作方法
CN209199102U (zh) 一种基于tcm芯片的审计卡、审计模块以及审计系统
CN102118745A (zh) 一种移动支付数据安全加密方法、装置及手机
CN101071373A (zh) 一种软件界面处理方法及装置
CN105871840A (zh) 一种证书管理方法及系统
WO2013111490A1 (ja) 情報処理装置、情報処理方法およびコンピュータプログラム
CN109598137B (zh) 一种用于安全处理数据的方法及其系统
EP1472656A1 (en) Update management for encoded data in memory
JP2008217409A (ja) 計算機初期化システム
WO2013150872A1 (ja) 情報処理装置、情報処理方法およびコンピュータプログラム

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20160817