数字签名在电子文件接收中的应用

2011-06-22 08:32杨文刚
北京档案 2011年5期
关键词:发送者数字签名明文

杨文刚

摘要:在档案馆数字化建设中,电子文件作为档案实体移交到档案馆,比起纸质档案存在着很多安全隐患。介绍数字签名的加密技术,掌握数字签名与签名验证的原理,利用微软的集成软件Visual Studio2005开发并建立以CA为核心PKI体系模块,实现电子文件在移交、接收、存档过程中不被做任何修改,最终保证电子文件的真实性、完整性、原始性以及不可否认性。

关键字:数字签名 公钥加密 RSA 电子文件

在数字化档案馆的建设中,电子文件作为数字档案的实体,在检索利用方面给档案工作人员带来了很大的方便。不过,电子档案的安全性比起纸质档案又相差很远。任何一个人都可以在计算机上对电子文件进行修改,电脑病毒的侵蚀也可能会导致原始电子文件被篡改。与此同时,档案作为一种严肃、真实、敏感的信息载体,特别是党政类的文书档案,它会直接或间接地关系到组织的发展与档案利用者的利益。这就要求我们建立的电子档案必须要具备真实性、完整性、原始性及不可否认性。而数字签名技术的引入恰恰为解决这个问题提供了理论基础和技术的可行性。同时,《中华人民共和国电子签名法》的颁布实施,也为数字签名在电子文件中的应用提供了法律的依据和保障。

一、需求分析与解决方案

1.需求分析

我校档案馆以往对电子文件的收集都是采取磁盘、USB存储设备等拷贝电子文件,然后打印移交目录并由电子文件形成部门负责人和档案接收负责人一一核对后签字,这样做不仅浪费了档案工作人员在收集过程中投入的时间和精力,降低了工作效率。而且在电子文件的安全性方面也存在着隐患,特别是当电子文件信息与实际信息不一致的时候,没有人或一个仲裁能够准确判断出电子文件是在创建的过程中被修改了,还是在接收以后保管的过程中被修改了。如果这个问题不能解决,电子文件的存在价值也就失去了意义。所以,我校档案馆在电子文件接收的過程中,要建立一个电子文件接收平台,实现以下功能:一是能够识别电子文件发送者的身份;二是保证电子文件在建立、发送、接收、存储这四个阶段不被篡改;三是保证经过电子签名后的电子文件,不能被电子文件的签名者所否认。

2.解决方案

建立以CA(Certificate Authority)为核心的公钥基础设施(Public Key Infrastructure 简称PKI)体系,通过CA签发证书给电子文件发送者,并通过证书来识别他的身份。运用数字签名技术实现电子文件不被改动,并保证经过电子签名的电子文件不能被该文件签名者所否认。

在PKI体系中,需要两台服务器,一台服务器用于CA的应用服务器,另一台服务器用于CA的证书数据库服务器,操作流程可分为如下三个阶段:如图1

图1 PKI系统的操作流程

(1)证书签发阶段

①电子文件的发送者(即电子文件创建者,以下称为发送者)向CA应用服务器申请证书。

②CA应用服务器响应申请,产生证书和一对密钥即公钥与私钥,并将证书信息与公钥存入CA的证书数据库中。

③CA应用服务器将证书信息和私钥返回给证书申请者。私钥的存储介质一般包括硬盘、U盘、IC卡及USB智能卡,为了安全起见,我们为证书申请者选用USB智能卡来存储私钥。

(2)数字签名阶段

①发送者提交要发送的电子文件、证书和存在USB智能卡中的私钥到CA的应用服务器,申请数字签名。

②CA应用服务器根据证书对发送者进行身份识别,同时响应申请,通过逻辑算法,将电子文件的数字签名返回给发送者。

(3)签名验证阶段

①发送者将电子文件的明文与电子文件的数字签名发送给接收者。

②接收者将收到电子文件的明文与电子文件的数据签名提交给CA应用服务器,申请验证。

③CA应用服务器从证书服务器中提交公钥,利用公钥解密数字签名,并通过逻辑算法来验证电子签名是否合法,电子文件是否被改动。

④接收者得到CA应用服务器响应返回的验证结果。

二、数字签名技术及其原理

数字签名是基于非对称加密技术基础上的一种应用①。非对称加密技术又称为公钥加密,密钥是由公钥和私钥组成的。数字签名是利用私钥加密来签名,再用公钥解密来验证。在通信中,通过信息明文计算出单项散列值,这个值往往是固定长度的,我们称这个值为消息摘要,然后我们用私钥对这个消息摘要进行加密得到的就是数字签名②。数字签名包括两个过程:数字签名与签名验证。我们假设A要发送数据C给B,并保证A不能否认数据C是A发送给B的数据C,可以参考图2来说明数字签名与验证的过程。

1.数字签名过程

①A用Hash函数加密数据C,得到:[Hash(数据C)],即消息摘要

②A用自己的私钥对消息摘要加密,得到:[私钥(Hash(数据C))],即数字签名

③A将数据C及数字签名发送给B,发送:[(数据C)+ 私钥(Hash(数据C))]

2.数字验证过程

①B接收到信息:[(数据C)+ 私钥(Hash(数据C))]

②B用相同的Hash算法算出数据C的消息摘要,得到:[Hash(数据C)]

③B用A的公钥对数字签名解密,即解密[私钥(Hash(数据C))],得到[公钥(私钥(Hash(数据C)))]

如果通过公钥能计算出[公钥(私钥(Hash(数据C)))],说明[私钥(Hash(数据C))]是A发送的,即数字签名是A本人的,没有冒充。

④比较上面第2、3两个步骤中得到的消息摘要是否相等,即比较[Hash(数据C)]与[公钥(私钥(Hash(数据C)))]是否相等,如果相等说明数据C没有被别人修改过。

3.数字签名的用途

一是防伪造。任何人如果没有发送信息者的私钥是无法完成数字签名的,这使得除了签名者本人外无人能伪造签名③。二是防止数字签名的重用性。消息摘要的值取决于文件的内容,数字签名又是通过对消息摘要的加密得到的,这使得不同内容的文件得到的数字签名一定不一样。这样就防止了签名者对一个文件的签名被盗取后用在别的文件上的情况④。三是防止抵赖、否认。只有具有私钥的签名者才能进行数字签名。这就证明了经过数字签名的文件就是签名者所发,具有不可否认性。四是防止文件被篡改。在签名验证过程中可以分别通过对消息使用单项散列函数和对数字签名解密这两种方法得到,通过判断这两次得到的消息摘要是否相等可以判断文件是否被篡改,也为衡量是否对原始文件做过改动提供了验证标准⑤。

三、电子文件接收平台的设计与实现

1.系统构架

系统设计分为三个步骤:第一步是电子文件发送者通过申请得到密钥,将得到的私钥存储在自己的USB智能卡中并妥善保存,公钥存放到CA证书服务器的数据库中,由CA将公钥发布给电子文件的接收人员便于签名验证。第二步是对自己电子文件进行数字签名,并把数字签名作为附件与信息正文一起发送给电子文件接收人员。第三步是电子文件接收人员将接收到的电子文件提交到CA应用服务器,进行签名验证。同时,系统中还可以设立专门的CA应用服务器管理员对公钥及证书信息进行管理。

2.系统环境

①CA应用服务器安装IIS6.0以及DotNetFramework 2.0

②CA证书数据库采用SQLServer2005

③程序开发利用微软集成软件Visual Studio 2005,程序编写用C#2.0

④为每个电子文件发送者配置一个USB智能卡,便于身份识别和私钥存储

3.数据库设计

在数据库设计上,我们主要用到的是5个表:公钥列表、电子文件列表、发送者信息列表、部门信息表、管理员信息表。

4.主要程序

下面我们按上述系统设计的三个步骤进行具体实现:

①在申请密钥的过程中,出于安全性考虑,我们采用C/S模式,电子文件发送者首先下载申请密钥模块,然后在客户端运行申请密钥模块,服务器接收申请后将私钥返回给客户端,并将私钥写入到申请者的USB智能卡中,同时,将公钥更新到数据库公钥列表中。这里我们选用RSA算法来进行数字签名。

/*导入RSA加密解密的命名空间*/

using System.Security.Cryptography;

/*生成RSACryptoServiceProvider实例用于获取RSA密钥对*/

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

/*由 RSACryptoServiceProvider实例生成私钥*/

string privatekey = rsa.ToXmlString(true);

/*由 RSACryptoServiceProvider实例生成公钥*/

string publickey = rsa.ToXmlString(false);

/* RSA私钥存储到证书申请人的USB智能卡的MyPrivateKey.dat中*/

StreamWriter sw = new StreamWriter ("USBPATH:MyPrivateKey.dat");

sw.WriteLine(privatekey);

②在数字签名过程中,考虑到电子文件信息的机密性,我们提出对电子文件明文信息也进行加密。对明文信息的加密采用了对称加密技术,这是由于明文信息的长度不确定,往往内容会很多,而对称加密技术算法简单,运行速度快,占用空间小,使得明文加密效率大大提高,这里运用对称加密技术中的DES算法进行加密明文消息。对明文信息计算单项散列值生成消息摘要的过程运用MD5算法。数字签名运用RSA算法。数字签名的流程如图3,其核心代码如下:

/*从电子文件发送者的USB智能卡中读取RAS私钥,此时将USB智能卡接入电脑*/

StreamReader sw = StreamReader ("USBPATH:MyPrivateKey.dat");

String privatekey = sw.ReadLine();

/*生成RSACryptoServiceProvider实例*/

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

/*将私钥导入RSACryptoServiceProvider实例*/

rsa.FromXmlString(privatekey);

/*利用MD5生成消息摘要,利用私钥对messagebyes进行签名*/

byte[] output = rsa.SignData(messagebytes, "MD5");

③在簽名验证过程中,主要是验证签名是否来自发送方以及电子文件明文信息是否在签名后被修改,并没有涉及到私钥,所以为了方便操作,我们用B/S模式来构建。签名验证的具体过程如图4,其核心代码如下:

/*生成RSACryptoServiceProvider实例*/

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

/*将公钥导入RSACryptoServiceProvider实例*/

rsa.FromXmlString(publickey);

/*以MD5为生成消息摘要函数,利用公钥对messagebyes进行签名验证,并返回验证是否成功*/

bool flag = rsa.VerifyData(messagebytes, "MD5", output);

此外,程序在签名与验证的过程中,还要利用DES加密算法对明文信息进行加密与解密,但是,由于文章篇幅有限,这里就不分代码一一列出了。

注释:

①陈相琳.数字签名技术及算法的研究[D].哈尔滨:哈尔滨理工大学,2007.

②宁子岚.基于数字签名和数字水印技术的电子印章系统[D].长沙:长沙理工大学,2007.

③王华.数字签名技术的研究与应用[D].北京:华北电力大学,2009.

④张文波.基于数字签名的电子邮票模型研究[D].大连:大连理工大学,2009.

⑤郭延玲.公钥基础设施相关应用设计与实现[D].北京:北京邮电大学,2006.

作者单位:天津师范大学档案馆

猜你喜欢
发送者数字签名明文
网络表情符号的作用
表情符号的使用角度对亲密度感知的影响
浅析计算机安全防护中数字签名技术的应用
奇怪的处罚
基于数字签名的QR码水印认证系统
数字签名简述
奇怪的处罚
四部委明文反对垃圾焚烧低价竞争
基于概率论的发送者匿名性度量模型