智能密码钥匙密码验证方法
【技术领域】
[0001]本发明涉及的是一种信息安全领域的智能密码钥匙密码验证的方法,具体的说,涉及的是一种基于CSP或PKCS11#接口或COS智能密码钥匙密码验证的方法。
【背景技术】
[0002]随着互联网的普及,密码钥匙已广泛应用于电子商务、电子政务等领域,如网上银行、电子支付等。作为网络用户身份识别和数据保护的“智能密码钥匙”,智能密码钥匙这种智能加密存储设备结合了智能卡技术、PKI (Public Key Infrastructure)技术和USB接口技术,内置了单片机或智能卡芯片,有一定的安全存储空间,可以存储用户的公钥、私钥以及数字证书,利用智能密码钥匙内置的公钥算法可以实现对用户身份的认证。
[0003]然而智能密码钥匙在给用户带来使用便利的同时,也给相关产品的安全检测、安全审计和监管提出了挑战。例如,某些违反国家规范的智能密码钥匙产品(如国外的大水牛(Buffalo)、圣天狗(Sentinel)等,国内的“英超神盾”等),打着“加密狗”、UKey等其他产品名称,在市场上非法销售;有些智能密码钥匙在市场上销售的产品指标(如算法、参数、性能等)和产品说明书中描述有所不同,存在各种违规使用的情况,最典型的案例有:说明中支持各种国产算法,但实际产品却只支持一些国外算法,其加密强度较弱(如DES/3DES等),加密信息容易被破解,以次充好。这些违规智能密码钥匙产品如果流入重要信息系统和网络,将会给政府部门及企业的电子政务、电子商务等应用带来严重的安全隐患。
[0004]为了保护密码产品用户的信息资产安全,规范智能密码钥匙产品市场,以及安全检测、安全审计和监管的需要,必须对智能密码钥匙产品的生产、使用行为进行取证分析,以便有据可循、有序可控地进行管理。然而,传统的智能密码钥匙产品检测技术不仅复杂,耗费周期长,而且检测设备规模庞大,难以适应现场分析、现场取证的状况,因此迫切需要研究和改进智能密码钥匙产品监管方面的技术和手段,加强取证分析力度,提高管理效率和水平。
【发明内容】
[0005]本发明的目的在于针对上述现有技术的不足,提供一种利用CSP或PKCS#11接口或COS途径为智能密码钥匙产品进行密码算法验证的方法,该方法实现比较简单,设备规模很小,可以很好的适应现场分析、现场取证。
[0006]本发明是通过以下技术方案实现的,本发明首先需要检测智能密码钥匙是否插入,在确认被检测智能密码钥匙插入后,利用CSP或PKCS#11接口或者COS途径来进行密码算法验证,验证完成后与已存在的算法验证库进行对比,如果都通过说明该智能密码钥匙产品是合格的。由于不同的智能密码钥匙产品支持的算法类型不同,因而只需要通过其产品所声明支持的算法验证即可。
[0007]本发明包括如下步骤:
步骤一:检测智能密码钥匙是否插入; 步骤二:利用利用CSP或PKCS#11接口或者COS途径来进行密码算法验证,需要验证智能密码钥匙中声明的所有算法;
步骤三:将步骤二中所有算法结果与基础信息数据库、密码算法基准数据库中的结果进行对比并输出结果。
[0008]所述的步骤一,具体为:智能密码钥匙的插入检测分为两个步骤:USB接口设备插入检测、判断设备是否为合法智能密码钥匙。首先,利用Linux系统提供的sys/socket.h中的recv()函数来检测USB设备的插入和拔出。Recv函数的原型为:
int PASCAL FAR recv (SOCKET s, char FAR* buf, int len, int flags);
程序首先初始化第一个socket参数。当有USB设备插入或拔出时,设备的插拔字符信息会保存在buf字符串中。由于插入一个设备后会导致多次地调用recv函数,因此当检测到USB设备插入后,程序首先通过buf字符串的特征来判断插入的USB设备是否已经存在,如果已经存在,则不作处理;如果检测到插入的是新的设备,则对其进行登记,并保存在一个称作exist的数组中。当检测到有新的USB设备插入后,程序调用pkcsllf.h的C_OpenSess1n函数(该文件及函数来自于PKCS #11的密码令牌接口标准)。因此,如果该函数返回异常状态,则说明该USB设备不是智能密码钥匙;如果函数返回正常结果,可判断该设备是智能密码钥匙。
[0009]所述的步骤二,具体为:目前,国际上在智能卡中间件层主要有两种对加密设备进行管理的通用接口。一种是 PKCS#11 (Public-Key Cryptography Standards)标准接口,另一种是CSP (Cryptographic Service Provider)标准接口。在获取相关驱动的前提下,可通过PKCS#11或CSP接口调用,详细地分析出被检测产品所支持的所有密码算法。此外,在获取PIN码的情况下,还可以调用算法进行加解密运算,将运算结果与标准算法的执行结果进行比较,以验证其加解密运算的准确性,从而实现PKCS#11及CSP接口安全检测。
[0010]所谓COS (Card Operat1n System),是指智能卡操作系统。智能密码钥匙一般由数据传输模块和智能卡两大部分组成,智能卡部分作为智能密码钥匙的核心组件,通过C0S实现应用程序的存储管理和运算。C0S安全检测是通过更底层的PC/SC (PersonalComputer/Smart Card)接口与智能密码钥匙进行 APDU (Applicat1n Protocol Data Unit)指令的通信,直接对cos内部文件系统进行读写,实现密钥的导入或者导出,并完成加解密运算的验证,从而实现智能密码钥匙的安全检测。在无法获取用户驱动,从而不能对智能密码钥匙进行PKCS#11及CSP接口安全检测的情况下,可通过COS安全检测技术实现对智能密码钥匙的安全检测。
[0011]所述的步骤三,具体为:通过与基础信息数据库、密码算法基准数据库组成的数据库系统中的结果比较来验证其算法实现的正确性。该数据库系统对文书数据、算法数据、算法验证数据使用MySQL数据库进行设计,智能密码钥匙深度检查后台引擎将抓到的数据进行深度分析和检测后实时写入后台数据库。便携式设备的性能和资源有限,因此不适合部署像Oracle之类的大型数据库。鉴于MySQL数据库的开源、速度快、跨平台,以及移植性强等优点,这里采用MySQL进行数据库设计,以兼顾性能和复杂度。
[0012]本发明的优点在于:提供了两种途径来进行密码验证,一是基于CryptoAPI的CSP驱动密码检测分析方法,二是基于PC/SC接口的APDU指令分析的密码检测分析方法。两种方法的技术难度适中,耗费周期短,且检测设备规模较小,比较适合现场分析、现场取证,对于智能密码钥匙产品监管方面的技术和手段有很大提高,取证分析力度得到加强,管理效率和水平也相应提高。
【附图说明】
[0013]图1为本发明涉及的智能密码钥匙原理框图。
[0014]图2为本发明智能密码钥匙应用系统逻辑框图。
[0015]图3为本发明中涉及的CSP及PKCS#11接口以及COS密码检测技术系统框图。
[0016]图4为本发明COS密码检测中PC/SC访问智能卡流程图。
[0017]图5为本发明中APDU指令命令格式图。
[0018]图6为本发明中APDU指令响应格式图。
【具体实施方式】
[0019]下面结合实施例和附图对本发明作详细说明,但不应以此限制本发明的保护范围。
[0020]智能密码钥匙本质是能够直接在计算机USB接口使用的智能卡设备。其结构包括数据传输模块和智能卡两大部分,如图1所示。其中,数据传输部分负责PC机与智能卡直接的数据传输,与PC机的通信是使用USB协议,而与智能卡的信息交换遵循IS07816规范;智能卡部分负责应用程序的存储管理和运算,这些功能都通过智能卡的操作系统COS来完成。
[0021]在操作系统及应用程序访问智能密码钥匙时,通过CSP或PKCS#11这样的中间层调用,如果智能密码钥匙能够提供用户驱动,那么CSP或PKCS#11中间件就可以用同一的编程接口进行密码算法的检测和正确性验证。Microsoft的CryptoAPI是操作系统所提供的密码运算标准接口,它需要智能密码钥匙厂商提供CSP接口程序。从图2中的逻辑层次可以看出,应用系统可以通过调用CSP或PKCS#11中间件的方式来使用智能密码钥匙,进行加解密运算。
[0022]由于CSP和PKCS#11接口非常类似,而实际产品对CSP支持最为普遍,因此,这里主要通过统一应用程序编程接口 CryptoAPI调用CSP来进行检测。
[0023]CSP通过体系分层,为用户屏蔽底层的加密实现细节,利用它们提供的CryptoAPI,为应用程序进行数据加密和数据签名服务。每个CSP都有一个密钥库,用于存储密钥;而每个密钥库包括一个或多个密钥容器(Key Containers),其中包含属于一个特定用户的所有密钥对。每个密钥容器被赋予一个唯一的名字。在销毁密钥容器前CSP将永久保存每一个密钥容器,包括保存每个密钥容器中的公/私钥对。需要由厂商提供被测智能密码钥匙的用户驱动。然后根据CryptoAPI的CryptEnumProviderTypes ()函数列出电脑中已装好的CSP类别。通过CryptoAPI调用分析被测智能密码钥匙的CSP程序,可以得知被测产品所使用的所有密码算法,在知晓PIN码的情况下,可以调用这些算法进行加解密运算,并通过与标准算法执行结果的比较来验证其算法实现的正确性。
[0024]利用CSP和PKCS#11实现检测的框图如图3所示:最底层是硬件层,也即智能密码钥匙和上位机之间的USB/读卡器硬件接口,通过USB协议的HID方式、mass-storage (大容量存储)方式或CCID方式接入用户主机(此处为检测工具)。
[0025]其上为驱动层,基本上智能密码钥匙产品都需要安装特有的驱动程序,有些智能密码钥匙可以做到“无驱无软”,有些产品可以通过自动安装驱动来实现“即插即用”,但大多数都需要安装自身的驱动。
[0026]再往上就是操作系统层,在应用程序和操作系统之