首页 > 范文大全 > 正文

CAPICOM组件技术实现数字签名的研究

开篇:润墨网以专业的文秘视角,为您筛选了一篇CAPICOM组件技术实现数字签名的研究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

[摘要] 本文分析了利用capicom 组件实现数字签名和验证的技术,并结合实际给出了应用实例。

[关键词] 数字签名 CAPICOM

数字签名技术是信息化建设中的关键安全机制之一,广泛应用于电子商务、电子银行、电子证券等系统。CAPICOM 是由微软公司推出的一个高性能的用于密码方面的组件,它提供的功能强大的方法为数字签名的实现提供了一条实用、快捷、安全的途径。

一、用CAPICOM实现数字签名的主要技术

1.获取数字证书

本方案中使用了Windows2000下提供的证书管理服务申请获得数字证书,并使用CAPICOM 提供certificates类的Certificates.Find方法来加载符合搜索条件的数字证书并加载到某个Certificate对象上。

2.生成摘要的实现

CAPICOM 中的HashedData类提供使用hash函数生成指定字符串的摘要的功能。该类的HashedData.Hash(p)方法使用Algorithm 属性中指定的算法标识产生P字符串的摘要,并将结果存放于Value属性中。

3.数字签名的实现

CAPICOM 提供的SignedData类封装了实现数字签名的SignedData.Sign方法。该方法的第一个参数为一个Signer对象,该Signer对象能够获得其Signer.Certificate属性指定的数字证书对应的密钥,SignedDa―taSign方法将会使用该密钥对SignedData.Content属性中指定的内容进行数字签名,然后返回经过加密后的数字签名。

4.签名验证的实现

签名的认证使用CAPICOM 中的SignedData对象的SignedData.Verify方法实现。该方法首先验证由第一个参数指定的数字签名是否有效,如果有效,则调出签名者的公钥对数字签名进行解密,获得报文摘要,然后在使用签名者的Hash值对SignedData.Content属性中指定的值计算生成摘要,最后比较两个摘要,如果相同,则返回验证成功值,反之,验证失败。

二、 应用实例

在一个电子商务平台中要实现一项安全电子交易,交易信息的安全和完整性是至关重要的。为了预防商家在验证持卡人支付指令时盗用持卡人的信用卡账号信息,以及银行在验证持卡人的定购信息时跟踪持卡人的交易活动而侵犯持卡人的隐私,但又不能影响商家和银行的合法验证要求,可以采用双重签名来达到这一目的。

双重签名的产生与验证过程如图所示。

1.双重签名的产生过程

(1)持卡人C产生订购信息OI和支付指令PI的消息摘要H(OI)和H(PI)。

(2)连接这两个消息摘要得到消息OP。

(3)生成OP的消息摘要H(OP)。

(4)用发送者C的签名私有密钥加密H(OP)得到数字签名Sign(H(OP))。持卡人C必须把另一消息的摘要包含在消息中以保证接收者能够验证。即持卡人C发给商家M 的消息为(OI,H(PI),Sign(H(OP))),C 发给银行B 的消息为(PI,H(OI),Sign(H(OP)))。

2.双重签名的验证过程

(1)接收者创建所接收消息的消息摘要,即M仓建H(OI),B仓建H(PI)。

(2)将所创建的消息摘要和另一所接收的消息摘要连接成新的消息OP。

(3)生成OP 的消息摘要H(OP)。

(4)用发送者C的签名公共密钥解密收到的双重签名Sign(H(OP))得到H(OP)。比较H(OP)和H(OP),若一致,则验证的所接收的消息是有效的。

这样,接收者只能看到他应该看到的消息,对于不应该看到而验证签名所需的消息则只以消息摘要的形式出现,而非消息的本身。

3.签名核心代码

Function Signature()

set SelectedCertificate=CreateObject(“CAPICOM.Certificate”)

SelectedCertificate.load(CERTIFICATE_PATH,CERTIFICATE_NAME)//加载数字证书

set SignedData= CreateObject(“CAPICOM.SignedData”)//初始化数字签名对象

set Signer=CreateObject(“CAPICOM.Signer”)//产生一个签名者对象

SignedData.Content=SIGNED_CONTENT//设置签名的内容

Signer.Certificate= SelectedCertificate

Datasigned= SignedData.Sign(Signer,true)//进行数字签名并返回签名后的内容

end Function

4.验证签名核心代码

Function VerifySig ()

SignedData.Content= SIGNED_CONTENT

SignedData.Verify datasigned,true,CAPIC0M_VERIFY_SIGNATURE_AND_CERTIFICATE//验证签名

end Function

5.结果

在整个电子交易的过程中,服务器与服务器之间,服务器与浏览器之间交换的定购信息和支付信息采用xml语言描述,并采用序列化技术将传输的信息转换成xml流,因此,在本案例中实际上是对xml数据进行数字签名。

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。