智能密码钥匙密码验证提取方法
【技术领域】
[0001]本发明提供一种智能密码钥匙USBKey密码信息的提取与验证方法,这里的密码信息指的是存储在智能密码钥匙中的会话密钥信息,而不是用户通常输入的PIN码。利用本发明可以对智能密码钥匙的算法正确性进行检测。本发明属于信息安全领域。
【背景技术】
[0002]智能密码钥匙作为用户身份认证的工具之一,在目前有着非常广泛的应用。在某些特殊情况下,比如对智能密码钥匙进行合规性检测时,需要对智能密码钥匙中存储的密钥信息进行读取并得到全部的明文数据,以进行之后的验证等工作。微软制定的的CryptoAPI是目前比较通用的对智能密码钥匙进行管理的接口标准,基于CryptoAPI接口标准与智能密码钥匙,能够实现各种安全认证技术与系统。
[0003]经过对现有技术的资料检索发现,CryptoAPI并不提供直接对智能密码钥匙所存储的密钥信息的明文导出的方法。只有在微软的帮助和支持网站上(http: //support,microsoft.com/kb/228786/en_us),提供了一种基于“指数I”密钥的会话密钥信息导入与导出的方法。这种方法虽然能够进行密钥的导出和导入,但是操作复杂,需要巧妙地产生出一个“指数I”密钥对智能密码钥匙的会话密钥信息进行加密或解密。这在很大程度上会影响检测系统的性能,而且在生成“指数I”密钥时,一般需要输入智能密钥钥匙的PIN码才能得到相应的权限,这是上述方法所受到的限制条件。
【发明内容】
[0004]本发明针对现有技术的不足,提供一种基于CryptoAPI接口的智能密码钥匙密钥信息提取并验证智能密码钥匙加密算法正确性的方法。这种方法在读取会话密钥信息时,不需要输入PIN码即可进行提取。因此这种方法的限制条件较少,在不知道PIN码的情况下也可以提取会话密钥信息。
[0005]本发明是通过以下技术方案来实现的,本发明首先通过CryptoAPI的CryptExportKey方法得到密钥的KEY BLOB文件块信息,其次对KEY BLOB文件块信息进行相应的数据处理,最后得到密钥的明文信息。在得到密钥的明文信息以后,利用其它加密工具对智能密码钥匙的算法进行正确性测试。由于普通的会话密钥信息可以直接以PLAINTEXTKEYBLOB方式导出,在这种方式下,不需要产生其它密钥对会话密钥信息进行额外的加密操作,因此也不会产生输入PIN码的操作。从而简化了提取密钥信息的过程。
[0006]本发明包括如下步骤:
步骤一,获得智能密码钥匙密钥句柄,密钥句柄可通过CryptGenKey或CryptGetUserKey方法获得,会话密钥句柄在CryptoAPI中以HCryptKey类型存储。
[0007]步骤二:利用CryptExportKey方法导出智能密码钥匙存储的会话密钥的KEYBLOB文件块。KEY BLOB文件块是对密钥数据进行封装后的数据包,根据密钥的类型以及导出方法参数的设置,存在多种类型的KEY BLOB文件块。如果采用非明文方式导出,则需要指定加密密钥数据的密钥。
[0008]步骤三:根据KEY BLOB文件块的类型,解封KEY BLOB块头部信息,解密KEY BLOB数据信息,得到密钥的明文信息。如果KEY BLOB文件块的类型是PLAIBTEXTKEYBLOB,那么数据信息无需进行解密,去除头部信息后得到的就是密钥明文信息;如果KEY BLOB文件块是其他类型,如SniPLEBLOB,那么在去除头部信息以后,还需要对数据进行解密,解密的密钥来自于步骤二中导出KEY BLOB时所使用的密钥。
[0009]步骤四:前三个步骤已经完成了密钥信息的提取,本步骤对智能密码钥匙的加密算法进行验证。使用智能密码钥匙对指定明文进行加密,同时利用其它加密工具对相同的明文进行加密,比较加密后得到的结果。
[0010]本发明所述方法通过分析KEY BLOB数据块结构对智能密码钥匙的密钥信息进行提取和验证,对于普通的会话密钥,实现了在不输入PIN码的情况下就能进行密钥信息的提取。在此基础上实现了对智能密码钥匙加密算法正确性检验的系统。
【附图说明】
[0011]图1:智能密码钥匙密码提取与验证流程图。
[0012]图2:PLAINTEXTKEYBLOB 数据解封流程。
[0013]图3:SIMPLEBL0B数据解封流程。
【具体实施方式】
[0014]下面结合附图对本发明的实施例作详细说明。本发明所述智能密码钥匙提取密码信息的方法,是利用CryptoAPI接口将密码信息导出成KEY BLOB数据,再对KEY BLOB数据解封得到智能密码钥匙中密钥的明文信息,并在此基础上实现对密码算法的验证。
[0015]本实施例以构键智能密码钥匙合规性检测系统为目标,并且假设所检测的加密算法是公开的。
[0016]参照图1所示,智能密码钥匙密码提取及验证如下:
第一步,在智能密码钥匙插入检测系统后,获取密钥句柄。在本步骤中,首先需要利用 CryptAcquireContext 方法得到 CSP (Cryptographic Service Provider,加密服务提供商)容器,CSP通常作为智能密码钥匙的驱动,是智能密码钥匙生产厂商对CryptoAPI接口的实现。之后,使用CryptGenKey或者CryptGetUserKey方法获得需要提取的密钥句柄。在智能密码钥匙的合规性检测系统中,不需要提取智能密码钥匙中的数字证书中的密钥,只需要使用CryptGenKey来产生临时的会话密钥即可。在产生会话密钥的过程中,需要指定密钥的参数,包括密钥算法的ID (CryptGenKey的第二个参数)以及是否支持导出(CryptGenKey的第三个参数)。本发明需要对密钥进行导出,因此第三个参数必须设为CRYPT_EXPORTABLE。本步骤得到的密钥句柄以HCRYPTKEY格式储存。
[0017]第二步,导出智能密码钥匙存储的会话密钥的KEY BLOB文件块。在本步骤中,需要两次调用CryptExportKey方法导出会话密钥到KEY BLOB文件块中。其中,第一次调用该方法能够得到导出的KEY BLOB数据块的长度。之后,根据得到的长度向内存申请空间,第二次调用该方法,则将会话密钥全部导出到指定内存空间中。需要特别说明的是,作为验证会话密钥安全的智能密码钥匙合规性检测系统,不需要对导出的会话密钥进行加密保护。因此,可以对CryptExportKey中的KEY BLOB类型参数设为PLAINTEXTKEYBLOB,这样后面的处理过程会非常简单。在其他情况下,KEY BLOB可能会被设置为S頂PLEBL0B,此时密钥数据被加密后再进行输出,加密密钥可以用CryptGenKey产生,但是需要注意的是,此时的加密密钥类型必须为AT_KEYEXCHANGE,而且产生交换密钥一般需要输入PIN码得到。
[0018]第三步,解封KEY BLOB块头部信息,解密KEY BLOB数据信息,得到密钥的明文信息。在本步骤中,根据KEY BLOB的类型,相应的处理会有所不同。对于PLAINTEXTKEYBLOB类型的数据块,处理流程如附图2所示,直接去掉数据块的前12个字节,得到的就是密钥的明文信息;对于S頂PLEBL0B类型的数据块,如图3所示,同样也是需要先去除头部12个字节,但是S頂PLEBL0B数据块对密钥进行了加密,所以还需要调用CryptDecrypt方法,使用第二步中的交换密钥对数据进行解密,最终得到密钥数据。
[0019]第四步,对智能密码钥匙的加密算法进行验证。本步骤中,需要利用已有的加密工具,如在线的网页加密程序,辅助加密算法的验证。首先,使用智能密码钥匙对固定明文进行加密,加密密钥参数使用第一个步骤中得到的密钥句柄。其次,利用现成的加密工具,使用第三步得到的密钥数据对固定明文进行加密。将两者产生的加密结果进行对比,从而验证智能密码钥匙加密算法的正确性结果。这里需要注意,两种加密方式对明文数据的填充方法和加密模式必须一致。CryptoAPI默认采用PKCS (The Public-Key CryptographyStandards)填充方式以及ECB加密模式。
【主权项】
1.智能密码钥匙密码提取和验证方法,其特征在于包括如下步骤: 步骤一,获得智能密码钥匙密钥句柄; 步骤二,导出智能密码钥匙存储的会话密钥的KEY BLOB文件块; 步骤三,根据KEY BLOB文件块的类型,解封KEY BLOB块头部信息,解密KEY BLOB数据信息,得到密钥的明文信息; 步骤四,使用智能密码钥匙对指定明文进行加密,同时利用其它加密工具,使用步骤三中的密钥对相同的明文进行加密,比较加密后得到的结果。2.如权利要求1所述的智能密码钥匙密码提取和验证方法,其特征是,导出的会话密钥KEY BLOB可以是PLAINTEXTKEYBLOB或S頂PLEBL0B类型,前者不需要指定交换密钥,后者必须指定交换密钥;交换密钥可以由CSP随机产生。3.如权利要求2所述的智能密码钥匙密码提取和验证方法,其特征是,在KEYBLOB数据块解封过程中,首先去除12个头部字节数据;对于PLAINTEXTKEYBLOB,直接得到密钥数据;对于S頂PLEBL0B,使用交换密钥对去除头部的KEY BLOB数据进行解密得到密钥数据。
【专利摘要】本发明涉及的是一种智能密码钥匙的密码信息的提取与验证方法。本发明将智能密码钥匙的密钥信息导出到KEYBLOB数据块中,之后通过对KEYBLOB数据块的解封来得到密钥的明文信息。根据得到的密钥,可以对智能密码钥匙的算法进行正确性验证。该发明可以应用于智能密码钥匙的合规性检测,对于智能密码钥匙的生产厂商以及产品检测部门都有一定的应用价值。
【IPC分类】H04L9/32
【公开号】CN105227312
【申请号】CN201410315542
【发明人】潘理, 周志洪, 章文康, 夏正敏, 汪圣莅
【申请人】上海交通大学深圳研究院, 上海鹏越惊虹信息技术发展有限公司
【公开日】2016年1月6日
【申请日】2014年7月4日