公开/公告号CN102842005A
专利类型发明专利
公开/公告日2012-12-26
原文格式PDF
申请/专利权人 国民技术股份有限公司;
申请/专利号CN201110166272.5
发明设计人 艾俊;
申请日2011-06-21
分类号G06F21/22;
代理机构北京轻创知识产权代理有限公司;
代理人杨立
地址 518057 广东省深圳市南山区高新技术产业园区深圳软件园3栋301、302
入库时间 2023-12-18 07:51:02
法律状态公告日
法律状态信息
法律状态
2015-06-10
授权
授权
2013-02-13
实质审查的生效 IPC(主分类):G06F21/22 申请日:20110621
实质审查的生效
2012-12-26
公开
公开
技术领域
本发明涉及可信计算领域,特别涉及应用可信计算技术实现Microsoft CryptoAPI(微软公司所提供的应用程序编程接口,提供了一组函数,这些函数允许应用程序在对用户的敏感私钥数据提供保护时以灵活的方式对数据进行加密或数字签名)加密标准的CSP(Cryptographic Service Provider,加密服务提供者)的系统和方法。
背景技术
可信密码模块(Trusted Cryptography Module,TCM)是可信计算密码支撑平台必备的关键基础部件,提供独立的密码算法运算功能,支撑可信计算平台功能体系建立。
TCM构建了一个具有存储保护和执行保护的子系统,该子系统为计算平台建立信任根基,其独立的计算资源将建立严格受限的安全保护机制。为有效发挥TCM功能体系作用,将子系统中需执行保护的函数与无需执行保护的函数划分开,将无需执行保护的功能函数由计算平台主处理器执行,而这些支持函数构成了TCM服务模块,记为TSM(Trusted Services Module,可信服务模块)。
TSM作为TCM的软件协议栈,提供规范化的函数接口,而面向应用程序的TCM服务调用接口TSPI(TSM Service Provider Interface,TSM服务提供者接口),分10类120个接口函数,可以为可信计算密码应用程序开发提供指导和调用。但由于目前大多数安全应用所采用的密码服务调用接口类型主流是CSP、CNG(Cryptography API: Next Generation下一代加密技术)和PKCS#11(PKCS#11是一个加密标准),大多数应用开发者熟悉和习惯CSP、CNG和PKCS#11接口调用模式,并且已建立成熟的产品开发支持体系。
当传统安全应用的开发者转向基于TCM密码服务功能而进行应用开发时,需要重新学习TCM密码服务调用接口体系(TSPI),另外,更为甚者,传统安全应用要移植到TCM上,必须全部重新开发,给应用厂商带来资源消耗,这为TCM应用推广带来很大阻力。
发明内容
本发明所要解决的技术问题是提供一种基于TSM的TSPI接口的CSP模块,以方便安全应用开发者快速开发TCM应用,同时方便传统应用快速移植到TCM上来。
本发明解决上述技术问题的技术方案如下:
一种基于TSM的TSPI接口的CSP模块,包括:
TCM芯片、所述TCM芯片的TSM、所述TSM的调用接口TSPI,以及基于所述TSPI创建的CSP连接接口、CSP密钥生成和交换接口、CSP加解密接口和CSP哈希和数字签名接口;其中
所述CSP连接接口用于进行CSP密钥容器的获取与清除、容器参数的设置与获取以及释放所述CSP密钥容器;
所述CSP密钥生成和交换接口用于进行CSP产生与销毁密钥对象、导入导出密钥对象、加载密钥对象、获取与设置密钥对象参数以及生成随机数;
所述CSP加解密接口用于进行CSP加密和解密;
所述CSP哈希和数字签名接口用于产生与销毁哈希对象、获取与设置哈希对象参数、签名和验签。
进一步,所述CSP连接接口包括:
CSP环境获取模块:用于指定CSP,返回CSP密钥容器的句柄,获取TCM芯片SMK(Storage Master Key,存储主密钥)对象和TCM对象,并以SMK为父密钥生成SM2(一种非对称加解密算法)的容器密钥,该SM2容器密钥是后续所有密钥的父密钥;
密钥容器释放模块:用于销毁CSP密钥容器句柄;
CSP属性设置模块:用于设置CSP的属性;
CSP属性获取模块:用于获取CSP的属性。
进一步,所述密钥在TCM芯片的硬件中生成和存储,并结合计算机的存储和计算资源为所述CSP密钥进行硬件保护。
进一步,所述CSP密钥生成和交换接口包括:
密钥产生模块:用于产生密钥;
密钥对象生成模块:用于生成密钥对象;
密钥销毁模块:用于销毁已产生的密钥;
密钥导出模块:用于导出密钥,使其产生一个副本密钥;
密钥导入模块:用于导入副本密钥到CSP中;
密钥参数获取模块:用于获取密钥参数;
密钥参数设置模块:用于设置密钥参数;
随机数产生模块:用于产生随机数。
进一步,所述密钥导出模块调用的TSPI接口包括:
Tspi密钥数据加载接口,用于加载指定的密钥数据块加载到TCM中;
Tspi迁移票据提供接口,用于提供迁移过程的迁移票据;
Tspi密钥迁移数据块创建接口,用于创建当前密钥的迁移数据块;
Tspi密钥数据块卸载接口,用于卸载已加载到TCM中的密钥数据块。
进一步,所述密钥导入模块调用的TSPI接口包括:
Tspi密钥对象创建接口,用于创建一个密钥对象;
Tspi策略对象分配接口,用于为密钥对象绑定策略对象;
Tspi密钥对象数据设置接口,用于设置密钥对象的数据;
Tspi数据块转换接口,用于将迁移数据块转换为普通密钥数据块。
进一步,所述随机数产生模块调用的TSPI接口包括:
Tspi随机数生成接口,用于生成随机数。
进一步,所述CSP加解密接口包括:
数据加密模块:用于数据加密;
数据解密模块:用于数据解密。
进一步,所述CSP哈希和数字签名接口包括:
哈希对象生成模块:用于产生空的哈希对象;
散列值产生模块:用于产生给定数据的散列值;
哈希对象参数获取模块:用于获取哈希对象的参数;
哈希对象参数设置模块:用于设置哈希对象的参数;
哈希对象销毁模块:用于销毁哈希对象;
哈希值产生模块:用于对密钥对象产生哈希值;
哈希对象签名模块:用于对指定的哈希对象进行签名;
签名验证模块:用于对签名进行验证。
进一步,所述哈希对象签名模块调用的TSPI接口包括:
Tspi哈希值更新接口,用于更新哈希对象的哈希值;
签名密钥句柄获取接口,用于获取签名密钥句柄;
Tspi密钥加载接口,用于加载签名密钥到TCM中;
Tspi哈希值签名接口,用于使用签名密钥对哈希对象的哈希值做签名;
Tspi密钥数据块卸载接口,用于卸载已加载到TCM中的密钥数据块;
签名密钥对象释放接口,用于释放签名密钥对象。
进一步,所述签名验证模块调用的TSPI接口包括:
Tspi签名验证接口,用于对签名进行验证。
本发明还提供了一种基于TSM的TSPI接口的CSP实现方法,包括:
通过CSP连接接口进行CSP密钥容器的获取与清除、容器参数的设置与获取以及释放所述CSP密钥容器;
通过CSP密钥生成和交换接口进行CSP产生与销毁密钥对象、导入导出密钥对象、加载密钥对象、获取与设置密钥对象参数以及生成随机数;
通过CSP加解密接口进行CSP加密和解密;
通过CSP哈希和数字签名接口进行哈希对象的产生与销毁、哈希对象参数、签名和验签的获取与设置。
本发明的有益效果在于,通过在TSM接口TSPI上封装CSP连接接口、CSP密钥生成和交换接口、CSP加解密接口和CSP哈希和数字签名接口,可以方便安全应用开发者快速开发TCM应用,同时方便传统应用快速移植到TCM上来。
附图说明
图1为本发明中的基于TSM的TSPI接口的CSP密码服务体系结构图;
图2为本发明基于TSM的TSPI接口的CSP密码服务体系的密钥层次图;
图3为设置签名密钥或者交换密钥使用授权的流程图;
图4为使用签名密钥或交换密钥授权的流程图。
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
如图1所示,本发明的基于TSM的TSPI接口的CSP密码服务体系,在TCM模块的TSM的基础上,利用TCM服务调用接口TSPI开发出一套新的CSP接口,通过该CSP接口,程序开发者开发的应用程序可以直接利用微软公司的CryptoSPI来使用本发明提供的CSP的加密服务。程序开发者不需要重新学习TCM密码服务调用接口体系(TSPI),并且传统的安全应用也无需进行代码修改而可以直接移植到TCM模块上。节省了大量的程序开发资源,减小了TCM应用的推广阻力。本发明中,密钥在TCM芯片硬件中生成、存储和管理,并可以结合系统平台的存储和计算机资源为算法和密钥提供基于硬件的保护。
本发明的基于TSM的TSPI接口的CSP密码服务体系中的CSP接口包括如下。
基于TSM的TSPI接口,创建CSP连接接口,该CSP连接接口用于进行CSP密钥容器的获取与清除、容器参数的设置与获取以及释放所述CSP密钥容器。
该步骤在产生CSP密钥容器时,为每个CSP密钥容器产生一个与其对应的容器密钥,该容器密钥为以SMK为父密钥的SM2密钥,同时也是后续CSP为该CSP密钥容器产生的所有密钥的父密钥。CSP密钥容器的信息和CSP容器密钥的UUID(Universally Unique Identifiers,全局唯一标识符)信息可以保存在TCM芯片的NV(Non-volatile Storage,非易失性存储区)存储区或者操作系统的注册表中。
上述CSP连接接口包括以下函数:
CPAcquireContext函数:用于指定CSP,返回CSP密钥容器的句柄,获取TCM芯片SMK对象和TCM对象,并以SMK为父密钥生成SM2的容器密钥,该SM2容器密钥是后续所有密钥的父密钥,密钥的层次结构如图2所示;
CPReleaseContext函数:用于销毁CSP密钥容器句柄;
CPSetProvParam函数:用于设置CSP的属性;
CPGetProvParam函数:用于获取CSP的属性。
其中,CPAcquireContext函数的具体实现如下:
构建TSP上下文及全局对象,调用的TSPI接口包括:
Tspi_Context_Create(),用于构造TSP上下文;
Tspi_Context_Connect(),用于连接TCS;
Tspi_Context_GetTCMObject(),用于获取TCM芯片对象;
Tspi_Context_CreateObject(),用于生成SMK对象、默认为Policy对象;
Tspi_Policy_SetSecret(),用于设置授权数据;
Tspi_Policy_AssignToObject(),用于给需要授权的对象绑定策略对象;
根据容器参数操作密钥集;
记录环境配置,返回容器句柄。
CPReleaseContext函数的具体实现如下:
释放未能正常释放的资源,包括密钥对象与哈希对象,调用的TSPI接口包括:
Tspi_Context_CloseObject(),用于销毁上下文对象句柄所关联的对象,释放该对象的相关资源;
Tspi_Policy_FlushSecret(),用于清空授权对象的授权数据;
Tspi_Context_CloseObject(),用于销毁SMK对象、默认为Policy对象;
Tspi_Context_Close(),用于断开与TCS的连接,销毁上下文对象;
删除当前环境配置记录。
CPSetProvParam函数,如图3、图4所示通过设置签名密钥或交换密钥授权数据参数设置签名密钥或交换密钥的授权数据或使用授权数据。同时,通过设置修改签名密钥或交换密钥授权数据参数更改相应密钥的授权数据。
基于TSM的TSPI接口,创建CSP密钥生成和交换接口,该CSP密钥生成和交换接口用于进行CSP产生与销毁密钥对象、导入导出密钥对象、加载密钥对象、获取与设置密钥对象参数以及生成随机数。
该步骤中,密钥在TCM芯片硬件中生成、存储和管理,并可以结合计算机系统平台的存储和计算资源为算法和CSP密钥提供硬件保护。在生成签名密钥或者交换密钥前,调用了设置容器签名密钥口令或者交换密钥口令将生成带有指定授权的相应密钥,以后再次使用该密钥需要设置密钥的使用授权。
密钥的导入导出功能是两个可信平台之间的安全密钥迁移,在使用密钥的导入导出功能时,将验证TCM芯片的Owner授权,只有Owner授权成功才能完成密钥的导入导出,Owner授权不成功则不能完成密钥的导入导出,设置Owner授权通过调用设置容器TCM芯片所有者授权参数完成。
上述CSP密钥生成和交换接口包括以下函数:
CPDeriveKey函数:用于产生密钥;
CPGenKey函数:用于生成密钥对象;
CPDestroyKey函数:用于销毁已产生的密钥;
CPExportKey函数:用于导出密钥,使其产生一个副本密钥;
CPImportKey函数:用于导入副本密钥到CSP中;
CPGetKeyParam函数:用于获取密钥参数;
CPSetKeyParam函数:用于设置密钥参数;
CPGenRandom函数:用于产生随机数。
其中,CPDeriveKey函数的具体实现如下:
取哈希对象的哈希值,调用的TSPI接口包括:
Tspi_Hash_GetHashValue(),用于获得哈希对象的哈希值;
Tspi_Context_CreateObject(),用于创建密钥对象;
Tspi_Policy_AssignToObject(),用于为密钥对象分配策略对象;
使用哈希值填充密钥数据,调用的TSPI接口包括:
Tspi_SetAttribData(),用于设置密钥对象的数据内容;
生成SMS4密钥,调用的TSPI接口包括:
Tspi_Key_WrapKey(),用于包裹密钥对象;
设置密钥对象访问权限;
记录密钥对象,并返回它的句柄。
CPGenKey函数的具体实现如下:
生成密钥对象,调用的TSPI接口包括:
Tspi_Context_CreateObject(),用于创建密钥对象;
Tspi_Policy_AssignToObject(),用于为密钥对象分配策略对象;
Tspi_Key_CreateKey(),用于创建密钥对,并用父密钥进行包裹;
设置密钥访问权限;
若生成的是非对称密钥,则在密钥数据库中注册,调用的TSPI接口包括:
Tspi_Context_RegisterKey(),用于在密钥数据库中注册密钥;
记录该密钥,并返回它的句柄。
CPDestroyKey函数的具体实现如下:
关闭密钥对象,调用的TSPI接口包括:
Tspi_Context_CloseObject(),用于销毁一个密钥对象句柄所关联的对象,释放该对象的相关资源;
删除该密钥记录。
CPExportKey函数调用的TSPI接口和具体实现如下:
Tspi_Key_LoadKey(),用于加载指定的密钥数据块加载到TCM中;
Tspi_Key_AuthorizeMigrationKey(),用于提供迁移过程的迁移票据;
Tspi_Key_CreateMigrationBlob(),用于创建当前密钥的迁移数据块;
Tspi_Key_UnLoadKey(),用于卸载已加载到TCM中的密钥数据块。
CPImportKey函数调用的TSPI接口和具体实现如下:
Tspi_Context_Create(),用于创建一个密钥对象;
Tspi_Policy_AssignToObject(),用于为密钥对象绑定策略对象;
Tspi_SetAttribData(),用于设置密钥对象的数据;
Tspi_Key_ConvertMigrationBlob(),用于将迁移数据块转换为普通密钥数据块。
CPGenRandom函数调用的TSPI接口和具体实现如下:
Tspi_TCM_GetRandom(),用于生成随机数。
基于TSM的TSPI接口,创建CSP加解密接口,所述CSP加解密接口用于进行CSP加密和解密。
通过该步骤中的CSP加解密接口,在TCM芯片内部进行数据的加解密,若使用的交换密钥设置了授权,则TCM芯片验证交换密钥的授权数据。
上述CSP加解密接口包括:
CPEncrypt函数:用于数据加密;
CPDecrypt函数:用于数据解密。
其中,CPEncrypt函数的具体实现如下:
对明文数据进行哈希计算,调用的TSPI接口包括:
Tspi_Hash_UpdateHashValue(),用于更新哈希对象的哈希值;
对明文数据进行加密,调用的TSPI接口包括:
Tspi_Context_CreateObject(),用于创建加密对象;
Tspi_Key_LoadKey(),用于加载加密密钥到TCM中;
Tspi_Data_Encrypt(),用于对明文数据进行加密;
Tspi_Key_UnLoadKey(),用于卸载已加载到TCM中的密钥数据块;
Tspi_GetAttribData(),用于获取加密对象的加密数据块;
Tspi_Context_CloseObject(),用于销毁一个加密对象句柄所关联的对象,释放该对象的相关资源。
CPDecrypt函数的具体实现如下:
对密文数据进行解密,调用的TSPI接口包括:
Tspi_Context_CreateObject(),用于创建加密对象;
Tspi_SetAttribData(),用于设置加密对象的加密数据块;
Tspi_Key_LoadKey(),用于加载解密密钥到TCM中;
Tspi_Data_Decrypt(),用于对密文数据进行解密;
Tspi_Key_UnLoadKey(),用于卸载已加载到TCM中的密钥数据块;
Tspi_Context_CloseObject(),用于销毁一个加密对象句柄所关联的对象,释放该对象的相关资源;
若哈希对象存在,则对经过解密后的明文数据进行哈希计算,调用的TSPI接口包括:
Tspi_Hash_UpdateHashValue(),用于更新哈希对象的哈希值。
基于TSM的TSPI接口创建CSP哈希和数字签名接口,该CSP哈希和数字签名接口用于产生与销毁哈希对象、获取与设置哈希对象参数、签名和验签。
通过该CSP哈希和数字签名接口,在TCM芯片内部进行数据签名,若使用的签名密钥设置了授权,则TCM芯片验证签名密钥的授权数据。
上述CSP哈希和数字签名接口包括以下函数:
CPCreateHash函数:用于产生空的哈希对象;
CPHashData函数:用于产生给定数据的散列值;
CPGetHashParam函数:用于获取哈希对象的参数;
CPSetHashParam函数:用于设置哈希对象的参数;
CPDestroyHash函数:用于销毁哈希对象;
CPHashSessionKey函数:用于对密钥对象产生哈希值;
CPSignHash函数:用于对指定的哈希对象进行签名;
CPVerifySignature函数:用于对签名进行验证。
其中,CPCreateHash函数的具体实现如下:
生成哈希对象,调用的TSPI接口包括:
Tspi_Context_CreateObject(),用于创建一个哈希对象;
记录该哈希对象,并返回它的句柄。
CPHashData函数的具体实现如下:
将数据追加到TSM哈希对象中,调用的TSPI接口包括:
Tspi_Hash_UpdateHashValue(),用于更新哈希对象的哈希值。
CPDestroyHash函数的具体实现如下:
关闭TSM哈希对象,调用的TSPI接口包括:
Tspi_Context_CloseObject(),用于销毁一个哈希对象句柄所关联的对象,释放该对象的相关资源;
删除该哈希对象记录。
CPHashSessionKey函数的具体实现如下:
取会话密钥的BLOB进行哈希计算,调用的TSPI接口包括:
Tspi_GetAttribData(),用于获取会话密钥的加密数据块;
Tspi_Hash_UpdateHashValue(),用于更新哈希对象的哈希值。
CPSignHash函数调用的TSPI接口如下:
Tspi_Hash_UpdateHashValue(),用于更新哈希对象的哈希值;
CPGetUserKey(),用于获取签名密钥句柄;
Tspi_Key_LoadKey,用于加载签名密钥到TCM中;
Tspi_Hash_Sign(),用于使用签名密钥对哈希对象的哈希值做签名;
Tspi_Key_UnloadKey(),用于卸载已加载到TCM中的密钥数据块;
CPDestroyKey(),用于释放签名密钥对象。
CPVerifySignature函数调用的TSPI接口和具体实现如下:
Tspi_Hash_VerifySignature(),用于对签名进行验证。
本发明利用TCM芯片、基于TCM芯片的TSM中的调用接口TSPI,开发出上述CSP连接接口、CSP密钥生成和交换接口、CSP加解密接口和CSP哈希和数字签名接口。提供了一个硬件的CSP,该CSP中所有的密钥都在TCM芯片内部产生,加解密操作和签名验签操作都是在TCM芯片内部完成,在使用CSP中的非对称密钥的私钥时都需要进行授权认证,保证了CSP密钥的安全性。并且,上述函数名称和用途与现有CSP中函数的名称和用途一致,因此,安全应用开发者不必重新学习TCM密码服务调用接口体系(TSPI)便可以利用本发明提供的硬件的CSP,也方便了传统应用快速移植到TCM上来,减小了TCM应用推广的阻力。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
机译: CSP,CSP包装测试方法和CSP套接字结构
机译: CSP LED和CSP LED的封装方法
机译: 用于制作CSP LED的CSP LED方法