2024年3月21日发(作者:)

题 目: 数字签名算法(RSA)

一、课题名称

实现数字签名,其中加密算法使用RSA。

二、课题内容和要求

1、主要任务与目标

1)被发送文件采用某种算法对原始消息进行运算,得到一个固定长度的数字串,称

为消息摘要(MD),不同的消息得到的消息摘要各异,但是对相同的消息它的消息摘

要却是唯一的;

2)发送方生成消息的消息摘要,用自己的私钥对摘要进行加密来形成发送方的数字

签名;

3)这个数字签名将作为消息的附件和消息一同用接收方的公钥进行加密,将加密后

的密文一起发送给接收方;

4)接收方首先把接收到的密文用自己的私钥解密,得到原始消息和数字签名,再用

发送方的公钥解密数字签名,随后用同样的算法计算出消息摘要;

5)如果计算出来的消息摘要和发送方发送给他的消息摘要(通过解密数字签名得到

的)是相同的,这样接收方就能确认数字签名确实是发送方的,否则就认为收到的消

息是伪造的或是中途被篡改的。

数字签名通过认证技术来辨认真伪。认证技术主要包括数字签名认证、身份认证

以及公开密钥证明等。数字签名认证机制提供了一种对数字签名进行鉴别的方法;身

份认证机制提供了辨别和确认通信双方真实身份的方法;公开密钥证明机制则对密钥

进行验证。网络时代中,人们验证数字签名来确定你正在和谁打交道,验证你的文件

是否已被黑客篡改。数据的安全性和真实性已成为网络安全中至关重要的一部分。

数字签名类似手书签名,它具有以下的性质:

1)能够验证签名产生者的身份,以及产生签名的日期和时间;

2)能用于证实被签消息内容;

3)数字签名可由第三方验证,从而能够解决通信双方的争议。

为了实现数字签名的以上性质,它就应满足下列要求:

1)签名是可信的:任何人都可以验证签名的有效性;

2)签名是不可伪造的:除了合法的签名者外,任何人伪造其签名是困难的;

3)签名是不可复制的:对一个消息的签名不能通过复制变为另一个消息的签名。如

果一个消息的签名是从别处复制得到的,则任何人都可以发现消息与签名之间的不一

致性,从而可以拒绝签名的消息;

4)签名的消息是不可改变的:经签名的消息不能篡改,一旦签名的消息被篡改,任

何人都可以发现消息与签名之间的不一致性;

5)签名是不可抵赖的:签名者事后不能否认自己的签名。可以由第三方或仲裁方来

确认双方的信息,以做出仲裁。

2、各模块功能描述

模块一 创建创建密钥容器,得到CSP句柄

微软的CryptoAPI是PKI推荐使用的加密 API。其功能是为应用程序开发者提供

在Win32环境下使用加密、验证等安全服务时的标准加密接口。CryptoAPI处于应用

程序和CSP之间(见图一)。

应用程序

CryptoAPI

CSP

密钥库

图一

从图一可以看到,每个CSP有一个密钥库,密钥库用于存储密钥。而每个密钥库

包括一个或多个密钥容器(Key Containers)。每个密钥容器中含属于一个特定用户的

所有密钥对。每个密钥容器被赋予一个唯一的名字。在销毁密钥容器前CSP将永久保

存每一个密钥容器,包括保存每个密钥容器中的公/私钥对。

在这个模块中,实现创建密钥容器,得到CSP密钥句柄的作用,并且它被绑定到

以UserName为名的密钥容器上。

模块二 计算Hash值,签名

在这个模块中,实现实现对原始报文的签名。首先,对原始报文进行散列值的计

算。此处通过CryptoAPI中的函数,直接调用实现。然后调用CryptSignHash(),对

散列值进行签名。过程如图二所示。