`

CSP开发流程

阅读更多

当前,国内许多科研单位开发了高强度加密算法,这些加密算法或者以纯软件形式,或者以加密卡形式提
供给用户。不同加密服务提供者提供的加密接口往往各不相同,这就给用户带来不便。因此,出现了有关加
密API国际标准和规范,呈现给用户加密API有几种统一形式。目前有关加密API国际标准和规范主要有
:GSS-APIV2.0、GCS-API、CDSA、RSAPKCS#11CryptographicTokenInterfaceStandardV2.01、RSAB
SAFEAPI、微软CryptoAPIV2.0。其中,CDSA、RSAPKCS#11和微软CryptoAPI在实际中应用得较多,也
是PKI推荐使用的加密API。以下主要讨论微软CryptoAPI是如何调用加密服务提供(CSP)以及如何开发
基于微软CryptoAPI加密服务提供。

1 加密体系结构

     MicrosoftCryptoAPI是“Microsoftcryptographicapplicationprogramminginterface”的简称,是Microsoft公
司提出的安全加密应用框架和服务。Windows系列操作系统,都支持MicrosoftCryptoAPI。与其他安全加密
应用框架一样,MicrosoftCryptoAPI也遵循一系列PKI标准和规范。应用开发者可以比较简便、快速地开发
出标准、通用和易于扩展的安全加密应用。C
ryptoAPI功能是为应用程序开发者提供在Win32环境下使用加密、验证等安全服务时标准加密接口。微
软CryptoAPI体系结构见图1。CryptoAPI之上是应用程序,之下是CSP。CSP是一个真正执行加密功能独
立模块,典型的CSP有微软RSABaseProvider。目前任何一个加密服务提供者若想成为微软合法CSP,就必
须获得微软授予的一个签名文件,该签名文件保证了微软CryptoAPI识别该CSP。对于Microsoft合法CSP,

微软会提供与其CryptoAPI接口规范。微软提供CSP安装程序会将该CSP各个文件安放到相应目录下
,并在注册表中按CSP的类型和名称为该CSP注册。CryptoAPI使用系统注册表存储CSP数据库,CSP数
据库中记录了所有已安装到计算机中的CSP。

2 CryptoAPI调用底层CSP服务方式

    微软CryptoAPI从2方面保证安全通信:保密性和验证。CSP是真正执行加密工作独立的模块。物理上一
个CSP由2部分组成:一个动态链接库,一个签名文件。若加密算法用硬件实现,则CSP还包括硬件装置。

CryptoAPI函数调用底层CSP函数时,首先使用函数CryptAcquireContext,给出欲选择CSP名称参数和
类型参数即可,该函数返回一个指向被选择的CSP句柄。CSP有一个密钥库。密钥库用于存储密钥,每个密
钥库包括一个或多个密钥容器(keycontainers)。每个密钥容器中含属于一个特定用户所有密钥对。每个

密钥容器被赋予唯一名字;以这个名字做函数CryptAcquireContext参数,从而获得指向这个密钥容器句柄
。CSP将永久保存密钥容器,包括保存每个密钥容器中公/私钥对(会话密钥除外)。在交换密钥时,或密钥需要离开

CSP(即导出密钥)时,就存在选择什么样数据结构存储密钥问题。微软CryptoAPI采用KeyBlob数据结构存储离开了

CSP内部的密钥。密钥总是在CSP内部被安全地保存,应用程序只能通过句柄访问密钥,而KeyBlob则例外。当使用

CryptExportKey函数从CSP中导出密钥时,KeyBlob被创建。之后某一时间,使用CryptImportKey函数将密钥导入到其
他CSP中(不同机器上的不同CSP)。因此,KeyBlob是在不同CSP之间安全传送密钥载体。KeyBlob有一个标准信息
头和位于信息头之后一段表示密钥本身的数据组成。应用程序不访问KeyBlob内部,而是把KeyBlob当作一个透明对
象。

    由于公/私钥对私钥部分需要绝对保密,所以私钥要用对称加密算法加密。加密PrivateKeyBlob时,除了
BLOBHEADER之外所有部分都要加密。但加密所用算法和密钥(或密钥参数)不与该KeyBlob存储在一起
,应用程序负责管理这些信息。

 

3 CSP程序开发

     进行CSP程序开发,首先选择和实现CSP支持加密算法和数据格式;确定好加密算法和数据格式后,应该
清楚CSP实现的函数及函数流程,在了解这些之后,具体程序设计较为容易。

1)开发CSP基本流程。

      选择和实现CSP要支持每一个加密算法和数据格式后,创建一个CSP过程如下:

    1创建CSP.dll,导出CrytoSPI函数接口。

    2开发CSP安装程序,创建合适注册表项。

    3测试所开发出CSP.dll的实现功能。

    4通过CryptAPI测试开发出的CSP。

    5让微软正式对该CSP签名,使CSP可以应用到MicrosoftWindows系列操作系统中。

    6测试经过微软正式签名CSP。这个步骤和4相同,不过此时的CSP已经通过了微软正式签名。

下面主要对CSP开发第一步进行详细的说明,只有做好1,对2~6也较为容易,不进行详述。

 

2)CSP应实现的函数及其功能。

     在所创建的CSP.dll中,CSP应实现以下24个函数。

初始化函数:CSP初始化函数有CPAcquireContext、CPReleaseContext,其中CPAcquireContext有2个作
用,其一是根据提供参数获取不同CSP,其二是根据参数产生或销毁密钥容器。CPReleaseContext用于释放
加密接口函数句柄。以上2函数调用成功则返回非0值。

散列函数:CSP散列函数有CPCreateHash、CPHashData、CPGetHashParam、CPDestroyHash、

CPHash-SessionKey、CPGenRandom共6个函数,前面4个函数通常一起使用,并根据给定数据产生散列值。

CPCre-ateHash用于产生CSP散列对象句柄,该句柄用于后续CPHashData函数产生散列值,紧接着使用

CPGetH-ashParam获取所产生散列值。最后由CPDestroyHash销毁散列对象句柄。具体散列算法根据

CPCreateHash参数确定。可以设定CPGetHashParam中参数防止同一数据进行多次加密。CPHashSessionKey

用于对密钥对象产生散列值,CPGenRandom用于由随机数填充缓冲区,这个函数主要用于利用随机数进行加密。

密钥生成函数:产生密钥函数有CPDeriveKey、CPGenKey、CPDestroyKey等函数,其中CPDeriveKey用于
根据口令产生密码,CPGenKey用于根据随机数产生密码,使用CRYPT-EXPORTABLE参数时,产生一个
可以输出密钥,以便不同计算机或会话之间采用,CPDestroyKey用于释放密钥句柄。

加/解密类函数:加密和解密函数有CPEncrypt、CPDecrypt、CPSignHash、CPVerifySignature等函数,

CPEncrypt用于进行加密操作,CPDecrypt用于进行解密操作,这2个函数特别有用,他们包含以下参数,密钥句柄、

散列对象句柄、用于判断是否为最后一块布尔值、加密/解密数据块指针、加密/解密缓冲区数量等参数。

注意有些加密算法使得加密数据长度与解密数据长度相同,但有些算法会增加加密数据块长度。CPSign-Hash

对数据进行签名,其实质是对数据进行散列和对散列结果进行加密(签名私钥)合成。CPVerifySig-nature对签名

进行验证,其实质是对原始数据进行散列得到结果一,对签名数据进行解密(签名公钥)得到结果二,比较二者是否一致。

如果是,则验签成功,否则失败。

密钥操作函数:密钥输入/输出函数有CPExportKey、CPImportKey,其中CPExportKey用于导出密钥,使其产生一个副本,CPImportKey用于导入副本密钥。获取和设置密钥参数函数有CPGetKeyParam、CPGetUserKey、CPSetKeyParam等,CPGetKeyParam用于获取当前密钥操作的数据,CPGetUserKey用于获取用户密钥参数句柄,CPSetKeyParam用于对密钥进行各种定制操作。

其他函数:其他对CSP对象和哈西对象进行操作的函数有CPGetProvParam、CPSetHashParam、

CPSet-Provider、CPSetProvParam等,其中CPGetProvParam用于获取当前操作CSP参数,CPSetHashParam用于对散
列对象定制操作,CPSetProvider用于指定当前用户默认CSP,CPSetProvParam用于定制各种CSP操作。

3)CSP开发其他注意事项。

在开发CSP过程中,对其函数流程应非常清楚。CSP提供运算功能可分为:散列运算、加密/解密运算、签名/验签运算、

密钥输出/输入操作、对象属性设置和读取等几类。CSP内部运行时,一般通过CPAcquireContext得到密钥容器句柄,

并在以后函数调用中通过密钥容器句柄来使用CSP提供各种密码运算。因此在开发CSP过程中,对CSP各种初始化工作应在CPAcquireContext中完成。在开发CSP过程中,最重要的就是一定要考虑好其数据结构,只有合理的数据结构,才能保证其有序运行。其数据结构主要包含存储数据结构和内存数据结构,下面是开发中所采用的数据结构,以供参考。

1存储数据结构 

    CSP中存储数据结构包括2部分,一部分是CSP注册信息,即安装了CSP后它为OS提
供定位信息;一部分是CSP自身信息,即对CSP中用到密钥容器内容保存。CSP安装好以后,在注册表中为
OS提供定位信息和使用密钥容器信息位置。在该密钥容器中,应区分不同加密方式,对不同加密方式,应给
出不同加密动态连接库函数。在密钥容器中可以有各种用户密钥信息,如可以包含签名公钥值,签名私钥值
,签名密钥对是否可以输出,加密公钥值,加密私钥值,加密密钥对是否可以输出等各种信息。

2内存数据结构 

            内存数据结构主要介绍密钥值内存表示,不管是何种类型密钥,它在内存中都是一个结构化数据块。

可将其统一处理为一个一维数组。底层密码算法的动态连接库函数应能处理此一维数组。很明显,

Container在注册表中必须保存密钥值数组值。

4 结 语

           按照以上方法,可以开发自己的CSP,并将该CSP嵌入微软操作系统中,利用微软CryptoAPI函数调用该
CSP,从而方便实现加密、解密、签名、验签等操作,真正实现CSP密码模块本地化。为在网络上进行安全数
据传输打下了基础。

分享到:
评论

相关推荐

    海泰方圆SM2Key开发指南

    海泰方圆SM2Key开发指南 包括开发指标、接口、设备管理以及开发流程等

    CSP评估者「CSP Evaluator」-crx插件

    审查CSP策略通常是一个非常手动的过程,大多数开发人员都不了解CSP绕过的情况。 CSP评估程序检查基于大规模的经验研究,旨在帮助开发人员强化其CSP。 仅为了方便开发人员而提供此工具,Google对此工具不提供任何担保...

    CSP Evaluator-crx插件

    审查CSP策略通常是一个非常手动的过程,大多数开发人员都不了解CSP绕过的情况。 CSP评估程序检查基于大规模的经验研究,旨在帮助开发人员强化其CSP。 仅为了方便开发人员而提供此工具,Google对此工具不提供任何担保...

    csp-evaluator

    它有助于审查CSP策略的过程,并帮助识别会破坏策略价值的细微CSP绕过。 CSP评估程序检查基于,旨在帮助开发人员强化其CSP并提高其应用程序的安全性。 仅为了方便开发人员而提供此工具,Google对此工具不提供任何...

    java 开发工具集,包含网络,并发逻辑处理,csp队列,热更新加载器.zip

    开发工具在软件开发生命周期中扮演着至关重要的角色,它们旨在...总之,开发工具极大地提升了软件工程师的工作效率,保证了开发过程中的准确性与一致性,同时也促进了团队合作,使得软件开发更系统化、规范化和工业化。

    CSP测试仪「CSP Tester」-crx插件

    这个扩展帮助web管理员测试web应用程序的行为,而内容安全策略2.0实现了。 此扩展帮助网站管理员...确认在开发人员工具控制台中报告的许多CSP违规以及可能的视觉更改6 。根据这些报告对策略进行更改 支持语言:English

    加密服务提供(CSP)的实现与开发 (2003年)

    介绍微软操作系统加密体系结构,并分析微软操作系统调用底层加密服务提供(CSP)实现过程以及如何在微软操作系统中嵌入自己的加密服务提供(CSP)。详尽阐述了自主知识产权的加密服务提供(CSP)的开发原理和过程。

    CSP Tester-crx插件

    语言:English 此扩展帮助网站管理员在实施内容安全策略2.0版的情况下测试Web应用程序的行为。 此扩展帮助网站管理员...确认在开发人员工具控制台中报告的许多CSP违规以及可能的视觉更改6 。根据这些报告对策略进行更改

    IPD集成产品开发各阶段评审要素说明(3p) IPD-DCP和TR各阶段评审要素表完整(模板)

    IPD集成产品开发各阶段评审要素说明(3p) IPD-DCP和TR各阶段评审要素表完整(模板)

    华为完整版IPD体系流程.pdf

    华为IPD产品研发流程完整版。集成产品开发(Integrated Product Development, 简称IPD)是一套产品开发的模式、理念与方法。IPD的思想来源于美国PRTM公司出版的《产品及生命周期优化法》(简称PACE--Product And Cycle-...

    CSP在基于智能卡的移动终端中的开发与应用

    由于移动公网的广泛发展和手机PDA的大力普及,移动终端作为固网上业务...然而,移动终端通过基于GPRS/CDMA的移动公网接入业务服务器的过程存在着较大的安全风险。在没有执行任何安全保护措施的情况下,移动终端就与

    CSP流程生产全工艺无取向电工钢 (2009年)

    为了简化传统无取向电工钢的生产工艺,降低消耗,提高无取向电工钢的磁学性能,通过氧气顶吹转炉( BOF)—RH 真空处理—LF精炼炉—薄板坯连铸连轧( CSP)—酸洗连轧—连续退火流程,成功开发了全工艺冷轧无取向电工钢 50...

    CCM 摄像头模组 培训资料 基础知识

    13 CCM开发及量产周期; 14 相关知识;">目录 1 CCM定义 分类 应用; 2 CCM在手机上的位置及功能说明; 3 CCM产品结构; 4 CSP SENSOR结构; 5 SENSOR 规格 功能简介; 6 LENS规格简介; 7 CCM光学原理简介; 8 CCM性能评价及...

    CsGo:C#并发流程控制框架、运动控制框架,适用于工业自动化运动控制、机器视觉流程开发

    C#并发流程控制框架,基于CSP模型构建,主要用于工控逻辑、运动控制开发。开发者联系591170887相对于传统多线程模型、状态机模型、类PLC模型,逻辑结构紧凑清晰,开发效率极高,易于维护升级;在golang语言的编程...

    用C++编译 Openssl Engine及分享一个Openssl Engine框架

    实现ENGINE的时候,可以使用CSP。P11或者算法实现的API等。 本模板支持Linux、Windows 、Mac。兼容:openssl1.0和.0.9.8 如果在使用过程中有任何问题。 在windows上编译,使用vc2005或vc2008 在linux下,请运行...

    C#运控框架 雷赛运动控制 DMC系列 运动控制项目 C#源码 1.别看它界面丑,里面的应有应该尽有; 2.麻雀虽小五脏俱全,很

    C#运控框架 雷赛运动控制 DMC系列 运动控制项目 C#源码 1.别看它界面丑,里面的应有应该尽有; 2.麻雀虽小五脏俱全,很适合新手的一个学习项目,绝对推荐

    白帽子讲浏览器安全.钱文祥(带详细书签).pdf

    3.1.5 实例:针对导航过程发起攻击 49 3.2 建立安全连接 50 3.2.1 HTTPS 50 3.2.2 HTTPS请求中的Cookie 51 3.3 响应数据的安全检查——XSS过滤器 52 3.3.1 IE XSS Filter的实现原理 53 3.3.2 Chrome ...

    IPD7个TR评审表要素文字版(8P)

    IPD7个TR评审表要素文字版(8P) IPD-DCP和TR各阶段评审要素表完整(模板)

    CSPromod汉化文件

    由于该项目的难度,开发过程中前九个月有两次必须彻底重新开始制作,而每次都换了一个主程序员。这个项目开始于2006年的春天,2006秋天的时候换了一个主程序员后重新开始,第三次在2007年初,这次由 Kevin “arQon”...

Global site tag (gtag.js) - Google Analytics