- 浏览: 863974 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (280)
- java相关 (29)
- linux系统 (55)
- ipsec (0)
- ssl (3)
- 信息安全 (13)
- web相关 (35)
- windows (9)
- c,c++ (14)
- log4j (3)
- hibernate (8)
- sqlite (1)
- 程序人生 (2)
- js (2)
- 生活点滴 (3)
- 网络相关 (14)
- 问题积累 (15)
- 数据库相关 (27)
- 软件测试 (2)
- PKI相关 (2)
- 程序设计 (7)
- 犄角旮旯 (0)
- 杂七杂八 (0)
- 硬件相关 (14)
- 防火墙 (2)
- 电子商务 (2)
- 多媒体相关 (1)
- 内存管理 (4)
- 面向对象 (1)
- csp (1)
- 驱动开发 (3)
- 移动开发 (2)
- openssl多线程实例 (1)
最新评论
-
xiaoyao3857:
博主很有探索精神嘛,学习了
Linux主机名Hostname详解 -
hiskyrisa:
言简意赅,好文章。
Flex是什么 -
layznet:
犯了类似错误。使用的是derby数据库。driverClass ...
java.sql.SQLException: No suitable driver -
idision:
你好,文章有一句createSubjectKeyId(keyT ...
bouncycastle 产生证书 -
zheng12tian:
代码有全的不?只贴一部分,,,,
在LOG4J中把日志写入远程数据库
当前,国内许多科研单位开发了高强度加密算法,这些加密算法或者以纯软件形式,或者以加密卡形式提
供给用户。不同加密服务提供者提供的加密接口往往各不相同,这就给用户带来不便。因此,出现了有关加
密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密码模块本地化。为在网络上进行安全数
据传输打下了基础。
发表评论
-
深入理解HTTP Session
2010-05-23 14:21 1204session在web开发中是一个 ... -
Apache和Tomcat的区别
2010-05-12 13:47 922Apache官方网站:http://www ... -
SGML
2010-05-11 08:12 1077SGML SGML(Standard Generali ... -
cookie
2010-01-26 16:33 1206当你第一次访问一个网站的时候,网站服务器会在响应头内加上Set ... -
Jetty 源码分析
2009-12-14 19:34 2571一、 总括 你了 ... -
用Java实现断点续传(HTTP)
2009-12-11 11:20 1109用Java实现断点续传(HTTP) (一)断点续传的原 ... -
什么是Jetty?
2009-12-11 11:18 1876作者: 来源:www.matrix ... -
HttpClient入门教程
2009-12-11 10:39 1216一般的情况下我们都是使用IE或者Navigator浏览器来访 ... -
forward与sendRedirect区别
2009-12-09 13:59 12881.RequestDispatcher.forward() ... -
HTML特殊符号对照表
2009-09-14 16:50 1133特殊符号 命名实体 十进制编码 ... -
安装thttpd的手册
2009-08-24 14:29 3245本手册是在新装的NetBSD上安装的。 (1) ftp上 ... -
thttpd
2009-08-24 11:22 25961 引言 随着微处理器技术、计算机网络技术的进步,基 ... -
使用XMLHTTP Request Object获取服务器数据
2009-08-08 12:20 1090在Web客户端使用xmlhttp对象,可以十分方便的和服 ... -
XMLHTTP---介绍
2009-08-08 12:16 937MSXML中提供了Microsoft.XMLH ... -
IIS环境下快速安装、配置和调试PHP5.2.0
2009-07-14 22:00 1450一,在哪里获得PHP 打开PHP官方网站的下载页:htt ... -
LAMP 技术简介
2009-07-14 11:22 2299本教程将探究 Linux-Apache-MySQL-PHP(也 ... -
JSP中的pageEncoding和contentType属性
2009-07-09 16:07 944关于JSP页面中的pageEnco ... -
prototype.js相关
2009-07-09 12:40 933prototype.js是什么? 万一你没有使用过大名鼎鼎的 ... -
select动态添加options操作
2009-07-02 09:20 1556<select id="ddlResour ... -
基于ActiveX 控件开发动态Web页
2009-06-21 22:41 3081Web页面的开发主要分为三类:静态Web页面、半动态Web页面 ...
相关推荐
### CSP开发基础大全:深入解析CryptoAPI及其在数据安全中的角色 #### 一、CryptoAPI:数据加密与安全服务的基石 **CryptoAPI**(Cryptographic Application Programming Interface),即加密应用编程接口,是由...
《CSP开发基础大全》是关于密码学和安全服务API的详细介绍,主要关注微软的CryptoAPI。CryptoAPI是一个在Windows操作系统中用于实现加密、安全服务和证书管理的关键组件。以下是该主题的详细解析: **一、加密API...
《CSP开发教程借鉴》主要探讨的是微软CryptoAPI(Cryptographic Application Programming Interface)的使用和开发,这是一种在Windows操作系统中广泛使用的加密服务提供接口。CSP(Cryptographic Service Provider...
【CSP开发大全.pdf】的概述 CSP(Cryptographic Service Provider)是微软在其操作系统中引入的一种加密服务提供者,它在WEB开发中扮演着重要角色,特别是在数据安全和网络通信方面。CSP是一个可插入的系统组件,...
这表明该MATLAB程序提供了一个完整的流程,从数据预处理到特征提取,再到分类决策,对于理解CSP和LDA在实际应用中的工作原理非常有帮助。 **标签详解:** 1. **CSP(Continuous Sliding Window)**:CSP是一种统计...
3. **数字签名**:CSP支持数字签名,用于验证数据的完整性和来源,确保信息在传输过程中未被篡改。 4. **证书管理**:CSP与证书颁发机构(CA)交互,处理证书的申请、撤销和更新,是PKI(公钥基础设施)中的重要...
1. **开发符合CryptoSPI接口的CSP程序**:为了实现CSP的功能,需要开发一系列与CryptoSPI兼容的接口函数,这些函数能够将USBKEY的密码运算功能封装成CryptoAPI可调用的形式。 2. **智能卡操作系统(COS)的定制**...
4. **烧写程序**:用于将编译后的代码写入微控制器的过程,是开发流程的关键环节。 5. **补丁**:用于修复问题、提升性能或添加新功能的小型软件更新。 6. **lpk.dll**:可能是一个动态链接库文件,为CCS提供必要的...
它可能包含了项目开发的过程记录、设计文档、测试报告或者任何与项目开发相关的详细信息。通过这个文件,用户可以了解到项目开发的背景、目标、设计思路以及实施过程。 综合以上信息,这个压缩包包含了一个使用CSP...
MSL允许开发者定义功能块、过程、图表、数据项和映像,这些元素存储在CSP的成员中。CSP/AD(Application Development)工具提供了创建和管理这些元素的能力,每个应用程序可以拥有一个或多个MSL,每个MSL包含不同...
CSP/AD的应用程序开发中,每个功能模块如过程、图表、数据项和界面都可以单独定义,它们都存储在CSP的特殊数据集MSL(Master Set Language)中。MSL成员包括记录、表、程序说明块(Procedure)、数据项、映像、映像...
1. **基础语法**:包括变量声明、数据类型(如int、char、bool等)、运算符(如算术、比较、逻辑、赋值等)、流程控制(如if-else、switch-case、循环语句for、while、do-while等)。 2. **函数**:理解函数的概念...
CSP求解的过程主要包括以下几个步骤: 1. **定义变量和域**:首先,需要确定问题中的变量及其可能的取值范围,即定义每个变量的域。 2. **设置约束**:接着,定义变量之间的关系,即约束条件。这些约束可以是等式...
本文将介绍欧姆龙NJ控制器实现BDHDE+CSP-CSV-CST模式间动态切换测试的详细过程和结果。 一、BDHDE模式 BDHDE(Base Drive Hardware Development Environment)是欧姆龙NJ控制器中的一个固件环境,它提供了一个灵活...
C++是一种广泛应用的编程语言,它在系统设计、软件开发以及高性能计算等领域具有广泛的影响力,是许多计算机科学竞赛的基础语言。 NOIP,全称全国青少年信息学奥林匹克联赛,是CCF组织的系列竞赛之一,CSP-J和CSP-S...
在C#的开发环境中,例如Visual Studio,当你创建或修改源代码后,编译器会将源代码编译成IL(Intermediate Language)代码,存放在`obj`目录下的`Debug`子目录。`temp`和`TempPE`可能是编译过程中临时存储的部分,...
这份通知可能详细介绍了2020年CSP-J和CSP-S(高级组)比赛的相关信息,包括报名流程、考试日期、规则变更等,对考生和指导教师来说是非常重要的官方指南。 3. 2019CSP-junior-参考答案-A.pdf:这份文件提供了2019年...
同时,由于CSP的实施可能会对某些依赖于内联脚本或不安全资源的旧代码产生影响,因此在升级过程中需谨慎处理兼容性问题。 总的来说,F2823x_RevA_CSP是对CSS3.3的一个重要补充,它提升了Web应用的安全性,是现代Web...
这本书籍针对小学生设计,通过生动活泼的案例,结合小学生的认知特点,利用流程图工具引导学生掌握基础编程概念。书中不仅简化了C++语法的难度,还通过多种算法示例来训练计算思维,适合小学四年级及以上的学生使用...