基于PKI技术的文件保密系统的实现
编号
毕业论文
基于PKI 技术的文件保密系统题 目 的实现
学生姓名
学 号 学 院
专 业 班 级 指导教师 计算机科学与技术学院 讲师
二〇 年 月
诚信承诺书
本人郑重声明:所呈交的毕业设计(论文)(题目: 基于PKI 技术的文件保密系统的实现)是本人在导师的指导下独立进行研究所取得的成果。尽本人所知,除了毕业设计(论文)中特别加以标注引用的内容外,本毕业设计(论文)不包含任何其他个人或集体已经发表或撰写的成果作品。
作者签名: 年 月 日
(学号):
基于PKI 技术的文件保密系统的实现
摘 要
文件传输作为网络信息交换的关键技术, 文件安全性将直接影响信息系统的安全性能。传统网络上的文件传输并没有对数据进行安全处理,达不到安全的需求。
本文对文件保密系统所涉及的加密算法基础及OpenSSL 做大量研究,并介绍了公开密钥基础设施和数字签名的基本原理,在此基础上, 详细阐述了安全文件传输系统的设计过程与实现细节并分析了安全文件传输系统的安全性。对于数据的加密算法, 本文在分析比较目前常用的加密算法的基础上, 同时兼顾了加密解密的效率, 采用了比较成熟的加密算法:DES 、RSA 和安全的散列算法:SHA-1。从而实现了网上文件传输中的身份认证,保密性,完整性和不可否认性。
关键词:文件保密传输系统,公钥基础设施,数字签名
Design and implementation of secret file transmission
system based on PKI
Abstract
The key technologies of file transfer as a network information exchange, file security will directly affect the security of information systems performance. Traditional solution is not enough to protect the secret data.
The document mainly focus on a substantial research about the knowledge involved in the files secret system, such as basic encryption algorithm, open-source OpenSSL library, and briefly introduces the basic principles of Public Key Infrastructure and digital signatures. On this basis, elaborate the design process of the secure file transfer system and the implementation details and analyze the security of a secret file transmission system. Data encryption algorithm, on the basis of analysis compares the current commonly used encryption algorithms, taking into account the efficiency of encryption and decryption, using a more mature encryption algorithm: DES, RSA and secure hash algorithm: SHA-1. In order to achieve the authentication, confidentiality, integrity, and non-repudiation of the data.
Key Words:Secret File Transmission System; Public Key Infrastructure; Digital Signature
目 录
摘 要 .................................................................... ⅰ Abstract ................................................................... ⅱ
第一章 引 言 ............................................................. 1
1.1 背景及现状 .......................................................... 1
1.2 本文主要工作 ........................................................ 1
第二章 公开密钥基础设施 ................................................... 2
2.1 相关密码学技术 ...................................................... 2
2.1.1 对称密钥密码技术 .............................................. 2
2.1.2 非对称密钥密码技术 ............................................ 3
2.1.3 Hash 函数 ..................................................... 4
2.1.4 数字签名 ...................................................... 4
2.1.5 数字信封 ...................................................... 5
2.2 PKI 概述 ............................................................ 5
2.2.1 PKI 定义 ...................................................... 5
2.2.2 PKI 的基本组成 ................................................ 6
2.2.3 RSA 算法 . ..................................................... 6
2.3 PKI 服务 ............................................................ 7
2.3.1 认证服务 ...................................................... 7
2.3.2 数据完整性服务 ................................................ 7
2.3.3 数据保密性服务 ................................................ 8
2.3.4 不可否认性服务 ................................................ 8
2.4 PKI 技术标准 ........................................................ 8
2.4.1 PKIX ......................................................... 8
2.4.2 PKCS ......................................................... 8
2.5 证书认证中心 ....................................................... 9
2.5.1 认证中心的作用 ................................................ 9
2.5.2 认证中心的职能 ............................................... 10
第三章 文件保密系统的分析与设计 .......................................... 11
3.1 系统目标分析 ....................................................... 11
3.2 系统模块划分 ....................................................... 11
3.2.1 用户模块 ..................................................... 11
3.2.2 更新模块 ..................................................... 11
3.2.3 文件保密模块 ................................................. 12
3.2.4 服务器模块 ................................................... 12
3.3 系统安全性分析 ..................................................... 14
第四章 PKI 文件保密系统的实现 ............................................ 15
4.1 编程环境介绍 ....................................................... 15
4.1.1 ODBC ........................................................ 15
4.1.2 OpenSSL ..................................................... 15
4.2 证书认证中心(CA )的实现 . .......................................... 16
4.2.1 建立CA 服务器 ............................................... 16
4.2.2 密钥及证书的生成 ............................................. 16
4.3 用户控制模块的实现 ................................................. 16
4.4 数字签名模块的实现 ................................................. 18
4.5 数字信封模块的实现 ................................................. 19
4.6 服务器模块的实现 ................................................... 20
4.7 系统运行效果 ....................................................... 20
第五章 总结与展望 ........................................................ 32
5.1 论文总结 ........................................................... 25
5.2 工作展望 ........................................................... 25
参考文献 .................................................................. 26
致谢 ...................................................................... 27
第一章 引 言
1.1 背景及现状
随着网络的普及与发展,信息资源的共享程度不断加强。当前的信息系统已经涵盖内部办公和遍及全国的业务系统。一些机要部门,如军事、政府、金融等单位的日常工作也逐步实现了网络化、自动化,给人们带来很多便利,但随之而来的信息安全问题也日益突出,诸如系统被破坏、数据丢失、机密被盗和直接、间接的经济损失等,这都是不容忽视的问题。为了解决网络环境的信息安全问题,经过世界各国的研究,初步形成了一套完整的解决方案,即PKI (Public Key Infrastructure)体系架构,并成为目前网络安全建设的基础与核心。目前,PKI 广泛地应用于电子商务[1]和电子政务[2]等领域。
1.2 本文主要工作
本文根据当前网络安全问题的研究成果, 参考国际国内现有的算法和体制及一些有关的应用实例, 在密码学基础、PKI 理论等方面做了大量研究,对于系统中的证书管理、认证授权、数字信封的分发等方面做了认真的分析和细致的设计,并结合个人的思想提出一种基于PKI 的文件保密系统,较好地解决了网上信息传输中的身份认证、保密性、完整性和不可否认性等问题。
第二章 公开密钥基础设施
2.1 相关密码学技术
2.1.1 对称密钥密码技术
对称加密是密码学中的一类加密算法。该类密码的加密算法是它自己本身的逆反函数,所以其解密算法等同于加密算法,也就是说,要还原对等加密的密文,套用加密同样的算法即可得到明文。在实际应用中,体现为加密和解密使用同一个密钥,或者知道一方密钥能够轻易计算出另一方密钥。对称密钥密码体制从加密模式上可分为流密码(序列密码)和分组密码(块密码)两大类,在PKI 中常用的是分组密码算法,图2.1是分组密码示意图。分组密码的工作方法是将明文分成固定长度(块),用同一密钥和算法对每一块加密,输出也是固定长度的密文[3]。
图2.1 分组密码示意图 密钥k 密钥k
比较成熟的分组密码算法有:DES 及其多种变形、RCZ 、RC4、IDEA 、AES 等算法。常用的四种工作模式为:电码本(ECB )、密码反馈链接(CBC )、密码反馈(CFB )、输出反馈(OFB )。
由于系统的保密性主要取决于密钥的安全,所以在公开的计算机网络上安全地传送和保管密钥是一个严峻的问题。因为任何人拥有了密钥就可以解开加密信息。对称密码具有算法简单,运行速度快,占用的空间小等特点,它能提供的服务有认证,消息完整性以及机密性等项服务。
2.1.2 非对称密钥密码技术
非对称密钥密码技术是在密码体制中加密和解密采用两个不同的相关的密钥的技术,又称为公钥密码技术。公钥系统的概念于1976年由Diffie 和Hellman 提出,这一体制的最大特点是采用两个密钥将加密和解密能力分开。它使用到两个密钥:公开密钥和私有密钥,分别
用于对数据的加密和解密。这两个密钥是数学相关,用某用户加密密钥加密后所得的信息,只能用该用户的解密密钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。称公开的密钥为公钥;不公开的密钥为私钥[4]。工作流程如图2.2所示。
图2.2 非对称密码体制示意图
公钥加密主要算法有:RSA 、DSS 、DSA 、ECC 等,在后面在这些算法中,有些适用于密钥分配,有些可作为加密算法,还有一些仅用于签名。RSA 公钥密码算法是一种公认十分安全的公钥密码算法。它的命名取自3个创始人:Rivest 、Shamir 和Adelman 。RSA 公钥密码算法是目前网络上进行保密通信和数字签名的最有效的安全算法。RSA 算法的安全性基于数论中大整数分解的困难性,所以,RSA 需采用足够大的整数。因子分解越困难,密码就越难以破译,加密强度就越高[5]。
在通过网络传输信息时,公钥密码算法体现出了单密钥加密算法不可替代的优越性。对于参加电子交易的商户来说,希望通过公开网络与成千上万的客户进行交易。若使用对称密码算法,则每个客户都需要由商户直接分配一个密钥,并且密钥的传输必须通过一个单独的安全通道。相反,在公钥密码算法中,同一个商户只需自己产生一对密钥,并且将公钥对外公开。客户只需用商户的公钥加密信息,就可以保证将信息安全地传送给商户。
2.1.3 Hash函数
Hash 函数又称散列函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值的指纹。散列值通常用来代表一个短的随机字母和数字组成的字符串。一个安全的散列函数H 具有以下的属性:
H 能够应用到大小不一的数据上。
H 对任何输入报文数据生成固定长度的输出。
对于任意给定的x ,H (x)的计算相对简单。
对于任意给定的h ,要发现满足以H(x)=h在计算上是不可行的。
要发现满足H(x)=H (y)的(x,y)对在计算上是不可行的。
Hash 函数可用于验证消息或数据的完整性,发信人通过将原消息和散列值一起发送,接受者可以确认消息是否被篡改。
目前采用比较多的散列算法是MD5和SHA-1。SHA (Secure Hash Algorithm)是由美国国家标准和技术协会开发的,1994年适时发布了原始算法的修订版,称为SHA-l 。与MD5相比,SHA-l 生成160位的消息摘要,大于MD5的128位,虽然执行更慢,却被认为更安全。
2.1.4 数字签名
数字签名是基于公共密钥技术的一项重要的安全技术, 使用密码算法对待发的数据进行加密处理, 生成一段信息, 附着在原文上一起发送, 这段信息类似现实中的签名或印章, 接受方对其进行验证, 判断原文真伪[6]。数字签名具有如下特点:
签名是可信的:任何人都可以验证签名的有效性。
签名是不可伪造的:除了合法的签名者之外, 任何其他人伪造其签名是困难的。
签名是不可复制的:对一个消息的签名不能通过复制变为另一个消息的签名。如果对一个消息的签名是从别处复制得到的, 则任何人都可以发现消息与签名之间的不一致性, 从而可以拒绝签名的消息。
签名的消息是不可改变的:经签名的消息不能被篡改。一旦签名的消息被篡改, 则任何人都可以发现消息与签名之间的不一致性。
签名是不可抵赖的:签名者事后不能否认自己的签名。
数字签名主要是采用非对称加密算法, 先采用Hash 函数, 将待发送的数据生成消息摘要MD1, 发送方使用自己的私钥对消息摘要加密生成数字签名, 将数字签名附着在原(原文可以加密)上一起发送。接收方收到消息以后, 先用发送方的公钥将签名解密, 得到消息摘要。然后利用接收的原数据进行Hash 函数的计算得到消息摘要MD2, 如果MD1=MD2, 说明签名成功。
2.1.5 数字信封
数字信封(Digital Envelope)技术是混合加密技术的具体应用。数字信封的功能类似于普通信封。普通信封在法律的约束下保证只有收信人才能阅读信的内容;数字信封则采用密
码技术保证了只有规定的接收人才能阅读信息的内容[7]。
数字信封中采用了对称密码体制和公钥密码体制。信息发送者首先利用随机产生的对称密码加密信息,再利用接收方的公钥加密对称密码,被公钥加密后的对称密码被称之为数字信封。在传递信息时,信息接收方要解密信息时,必须先用自己的私钥解密数字信封,得到对称密码,才能利用对称密码解密所得到的信息。这样就保证了数据传输的真实性和完整性。
2.2 PKI概述
2.2.1 PKI定义
PKI (Public Key Infrastructure,公开密钥基础设施)产生于20世纪80年代, 它是在公开密钥理论和技术的基础上发展起来的一种综合性安全平台, 能够透明地为所有的网络应用提供加密和数字签名等密码服务所必须的密钥和证书管理, 从而保证网上传递信息的安全、真实、完整和不可抵赖性。利用PKI 可以方便地建立和维护一个可信的网络环境, 从而使人们在这个环境里能够确认彼此的身份和所交互的信息, 能够安全的进行各种活动[8]。 2.2.2 PKI的基本组成
PKI 是一种遵循标准的密钥管理平台, 主要包括五个模块:CA (Certificate Authority,认证中心),证书数据库(Certificate Database),密钥管理(生成、备份、恢复和更新)系统(Key Manage System),证书撤消管理系统(Certificate Revocation List Manage System)和PKI 应用接口系统(PKI Application Interface System)[9]。PKI 平台总体框架结构如图2.3所示。
图2.3 PKI框架结构
认证中心:数字证书的申请及签发机关, PKI 的核心。认证中心必须具备权威性。 证书数据库:证书的集中存放地, 是网上的一种公共信息库, 用户可以从此处获得其它用户的证书和公钥。构造证书库的最佳方法是采用支持LDAP 协议的目录系统, 用户或相关的应用通过LDAP 来访问证书库。系统必须确保证书库的完整性, 防止伪造、篡改证书。
密钥管理系统:提供备份与恢复脱密密钥的机制。密钥的备份与恢复应该由可信的机构来完成, 例如CA 可以充当这一角色。值得强调的是, 密钥备份与恢复只能针对解密密钥, 签名私钥不能够作备份。
证书撤消管理系统:终止证书的生命期, 是PKI 的一个重要组件。
PKI 应用接口系统:提供良好的跨平台的应用接口系统, 使用户能够方便地使用加密、数字签名等安全服务, 使得各种各样的应用能够以安全、一致、可信的方式与PKI 交互[10]。
2.3 PKI服务
PKI 作为安全基础设施,能为不同的用户按不同安全需求提供多种安全服务。这些服务主要包括认证、数据完整性、数据保密性、不可否认性、公正及时间戳服务等[11]。 2.3.1 认证服务
认证服务即身份识别与鉴别,就是确认实体即为其声明的实体,鉴别身份的真伪。PKI 向实体提供全面的核心服务必须满足两个需求:第一是实体甲必须能够准确无误地得到他希望通信的实体乙的公钥,这是证书的基本目的:第二是在甲没有乙的证书的情况下,甲必须可以从公共的资料库中查询。通过这种方式,两个陌生人能够建立安全通信(需要说明的是利用这样的公共资料库的概念,两个陌生人使用公钥技术能够进行安全通信)。
如甲乙双方的认证,甲首先要验证乙的证书的真伪。当乙在网上将证书传送给甲时,甲首先要用CA 的公钥解开证书上CA 的数字签名,如果签名通过验证,证明乙持有的证书是真的:接着甲还要验证乙身份的真伪,乙可以将自己的口令用自己的私钥进行数字签名传送给甲,甲已经从乙的证书中或从证书库中查得了乙的公钥,甲就可以用乙的公钥来验证乙用自己独有的私钥进行的数字签名。如果该签名通过验证,乙在网上的身份就确凿无疑。
PKI 的认证服务使得实体甲可以用自己的私钥加密一段挑战信息,乙收到信息后用甲的公钥(如果乙不知道甲的公钥可以到公开的网站或机构去查明)对信息进行解密,从而确定甲就是甲所声明的实体本身[12]。 2.3.2 数据完整性服务
数据完整性服务就是确认数据没有被修改。实现数据完整性服务的主要方法是数字签名,它既可以提供实体认证,又可以保障被签名数据的完整性。这是因为密码哈希算法和签名算法提供的保证,哈希算法的特点是输入数据的任何变化都会引起输出数据的不可预测的极大变化,而签名是用自己的私钥将该哈希值进行加密,和数据一起传送给接受方。如果敏感数据在传输和处理过程中被篡改,接受方就不会收到完整的数据签名,验证就会失败。反之,如果签名通过了验证,就证明接收方收到的是没经修改的完整性数据。 2.3.3 数据保密性服务
保密性就是确保数据的秘密,即除了指定的实体外,无人能读出这段数据。PKI 的保密性服务采用了类似于完整性服务的机制,具体如下:甲生成一个对称密钥(使用密钥协商协议),用对称密钥加密数据(使用对称分组密码),将加密后的数据发送给对方。 2.3.4 不可否认性服务
不可否认性服务是指从技术上保证实体对其行为的认可。不可否认性服务是属于PKI 支持的附加服务,有的CA 不支持不可否认性服务。所谓不可否认性服务是指从技术上保证实体对他们的行为的诚实性。最受关注的是对数据来源的不可抵赖,即用户不可能否认敏感消息或文件。此外,还包括其他类型的不可否认性,如传输的不可否认性、创建的不可否认性以及同意的不可否认性等[13]。
2.4 PKI技术标准
2.4.1 PKIX
IETF 公开密钥基础设施工作小组致力于制定基于X.509的可交互PKI 标准,公布了一系列Internet PKI的建议,统称为PKIX 规范。这些规范包括CA 应用指导、证书撤销、证书和
CRL 的分发与管理协议等,旨在使X.509标准所规定的证书和CRL 格式适用于在Internet 环境中建立PKI 的需要。PKIX 工作小组制定的规范主要包括如下四项专门领域:证书和证书撤销列表概貌;证书管理协议;证书操作协议;证书策略(CP )和认证实施陈述(CPS )结构。 2.4.2 PKCS
PKIX 规范的依据除了国际电信联盟制订的X.509标准外,还有RSA 数据安全实验室制订的公共密钥密码标准PKCS (Public Key Cryptography Standard)[14]。PKCS 是在认证注册、更新及CRL 分布方面定义PKI 的一系列标准,包括PKCS#1-PKCS#12。通过这些标准,RSA 数据安全公司希望为公开密钥密码学提的一个公开标准接口。下面简单介绍每个PKCS 的内容。
PKCS#1、PKCS#2、PKCS#4:描述了RSA 加密和解密的方法,主要用于PKCS 中所描述的数字签名结构和数字信封。
PKCS#3:描述了实现Diffie-Hellman 密钥交换协议的方法。
PKCS#5:描述了用一个从口令中派生的秘密密钥加密消息的方法。它使用MD2或MD5从口令中派生密钥,并采用DES 的CBC 模式加密。这个功能主要用于加密从一个计算机传送到另一个计算机的私钥,但是不能用于加密消息。
PKCS#6:描述了公开密钥证书的标准语法。这一语法是X.509证书的扩展,如果需要,可以取出X.509证书。X.509证书之外的这些附加属性已使证书处理不再局限于公开密钥。
PKCS#7:密文语法标准,是一个对数据加密或签名的通用语法,例如数字信封和数字签名。同时这些语法还提供了一些附加属性,例如可与消息内容一起被校验的时间标记。
PKCS#8:描述了私钥信息的语法,包括私钥、一组属性和加密私钥的语法。
PKCS#9:定义了PKCS#6扩展证书、PKCS#7数字签名消息和PKCS#8加密私钥的属性类型。
PKCS#10:描述了证书请求的标准语法。一个证书请求包括证书主体的辨识名、公钥和可选的一组属性,由请求证书的用户签名。
PKCS#11:是密码标记的API 标准,它详细定义了一个通用的编程接口,可用于各种可移植的密码设备。
PKCS#12:个人信息交换语法标准,描述了将用户的私钥、证书和其他相关的秘密信息存放在软件中的语法。它的目标是为各种应用提供一个标准的单一密钥文件。
2.5 证书认证中心
2.5.1 认证中心的作用
证书认证(Certificate Authority )中心简称CA ,它是PKI 的核心。CA 作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。为每个使用公开密钥的用户发放数字证书,用以证明证书中列出的用户名称与证书中列出的公开密钥相对应。证书中,CA 中心的数字签名使得攻击者不能伪造和篡改数字证书。因此在电子交易的各个环节,交易各方检验对方数字证书的有效性则可确定其身份的合法性,从而根本解决用户信任问题。以数字证书为核心的PKI/CA技术可以对网络上传输的信息进行加密和解密、数字签名和签名验证,从而保证信息除发送方和接收方外不被其它人窃取;信息在传输过程中不被篡改;发送方能够通过数字证书来确认接收方的身份;发送方对于自己的信息不能抵赖。CA 允许管理员撤销发放的数字证书,在证书注销列表(CRL )中添加新项并周期性地发布具有数字签名的CRL [15]。
2.5.2 认证中心的职能
概括地说,认证中心的功能有审批证书请求、证书发放、证书更新、证书注销和证书及CRL 的存储、检索,密钥生存期管理。CA 的核心功能就是发放和管理数字证书,CA 的数字签名保证了证书的合法性和权威性。
第三章 文件保密系统的分析与设计
3.1 系统目标分析
作为一个安全文件传输系统[16],系统必须达到以下目标:
保障数据机密性:系统必须确保只有预期的文件接收方才能读取文件信息。
保障数据完整性:文件接收方能够验证他所接收到的文件是否完整,是否在传输过程中被非法篡改过,以保证他接收到的文件与发送方发送出来的文件完全相同。
对数据源的身份验证:文件接收方可以验证文件是否确实是由指定的发送方发送过来的。 网络信息成功收发:系统必须确保发送方能够成功地将文件以及必要的即时消息传输给接收方。
3.2 系统模块划分
3.2.1 用户模块
当用户运行文件保密系统的客户端,用户模块便在后台启动。要求用户输入账号和密码,提交到服务器进行核对,并接收服务器的反馈信息。用户模块根据反馈信息,若登陆成功,把用户好友显示在用户列表框中,从证书服务器中下载好友加密证书(公钥)并保存在相应文件夹下。处于A 用户好友列表中的其他用户可以给A 用户自由发送加密文件,同时,A 用户可以给自己好友列表中的所有好友发送加密文件。 3.2.2 更新模块
更新模块将实时与服务器进行数据交互,及时获取其他用户的最新状况,反馈给本地用户,实现如下功能:
1. 定期把本地用户信息和公钥提交到证书服务器上。
2. 定期从证书服务器上下载更新好友列表和各好友对应的加密证书。 3. 接收来自好友的加密文件提醒信息。 3.2.3 文件保密模块
为了实现文件的安全传输目的, 发送方首先对文件进行数字签名和加密处理, 接受方则对其进行解密处理和验证签名, 以确保文件的保密性、完整性和不可否认性。其具体过程如图3.1所示。可描述如下:
1. 发送方A 将发送原文用SHA-1函数编码,产生一段固定长度的数字摘要; 2. 发送方A 用自己的私钥对摘要加密,形成数字签名[17],附在发送信息原文后面; 3. 发送方A 产生通信密钥,使用该密钥对带有数字签名的原文进行加密,传送到接收方B ;
4. 发送方A 用接收方B 的公钥对通信密钥进行加密后,传到接收方B ; 5. 接收方B 收到加密后的通信密钥,用自己的私钥对其解密,得到通信密钥; 6. 接收方B 用得到的通信密钥对收到的经加密的签名原文解密,得数字签名和原文; 7. 接收方B 用发送方A 公钥对数字签名解密,得到摘要;同时将原文用SHA-1函数编码,产生另一个摘要;
8. 接收方B 将2个摘要进行比较,若一致,说明信息没有被破坏或篡改,否则丢弃该文档。
3.2.4 服务器模块
服务器模块作为文件保密系统的核心,负责加密文件和数字信封的接收/分发。主要功能如下:
1. 对于文件加密用户对文件加密后同时生成数字信封,该用户把两者上传到服务器中,服务器负责记录发送者和接收者等相关信息。
2. 对于加密文件接受者,在收到新文件提醒后,与服务器建立连接,并发送要求数字信封和加密文件的信令。
3. 服务器在接到相关信令后,在后台进行判别,并反馈相关内容给该接受者。
3.3 系统安全性分析
1. 加密数据以隐藏被传送的数据
系统采用对称加密算法DES 对原文件进行加密, 从而隐藏原文件的信息, 并用非对称加密算法RSA 对DES 密钥加密,保证了数据的安全传送。
2. 保护数据的完整性和不可否认性
系统采用了哈希算法SHA-1对原文件进行加密获得摘要,因此可以对传送来的文件进行同样的SHA-1加密产生摘要, 若两个摘要相同, 则说明原文件未被修改, 从而保证数据的完整性和不可否认性。
3. 保障数据的不可改变性
由于经SHA-1加密的数据无法解密, 如果原文件被修改, 则所产生的摘要必定与原来的摘要不一致, 从而保障数据的不可改变性[18]。
图3.1 文件加解密流程图
第四章 PKI文件保密系统的实现
4.1 编程环境介绍
4.1.1 ODBC
ODBC (Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA ,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API (应用程序编程接口)。这些API 利用SQL 来完成其大部分任务。ODBC 本身也提供了对SQL 语言的支持,用户可以直接将SQL 语句送给ODBC 。
ODBC 技术以CS 结构为设计基础,它使得应用程序与DBMS 之间在逻辑上可以分离,使得应用程序具有数据库无关性。ODBC 定义了一个API ,每个应用程序利用相同的源代码就可以访问不同的数据库系统,存取多个数据库中的数据。与嵌入式SQL 相比,ODBC 一个最显著的优点是用它生成的应用程序与数据库或数据库引擎无关。
ODBC 使应用程序具有良好的互用性和可移植性,并且具备同时访问多种DBMS 的能力,从而克服了传统数据库应用程序的缺陷。 4.1.2 OpenSSL
OpenSSL 项目最早由加拿大人Eric A. Yang和Tim J. Hudson开发,现在由OpenSSL 项目小组负责改进和开发,这个小组是由全球的一些技术精湛的志愿技术人员组成。OpenSSL 是一个功能丰富且自包含的开源安全工具箱。它提供的主要功能有:SSL 协议实现(包括SSLv2, SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN. 1编解码库、证书请求(PKCS#10)编解码、数字证书编解码、CRL 编解码、OCSP 协议、数字证书验证、PKCS#7标准实现和PKCS#12个人数字证书格式实现等功能。
OpensSSL 采用C 语言作为开发语言,这使得OpenSSL 具有优秀的跨平台性能,这对于广大技术人员来说是一件非常美妙的事情,可以在不同的平台使用同样熟悉的东西。OpenSSL 支持Linux 、Windows 、BSD 、Mac 、VMS 等平台,这使得OpenSSL 具有广泛的适用性。
OpenSSL 整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL 协议库以及应用程序。OpenSSL 的目录结构自然也是围绕这三个功能部分进行规划的[19]。
作为一个基于密码学的安全开发包,OpenSSL 提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL 协议,并提供了丰富的应用程序供测试或其它目的使用。
4.2 证书认证中心(CA )的实现
4.2.1 建立CA 服务器
CA 服务器是一个应用程序,它从技术上实现了符合PKI 和X.509等相关标准的证书签发和管理功能。其基本功能应该包括以下几个方面:接受申请证书的请求、审核证书请求、签发证书、发布证书、吊销证书、生成和发布证书吊销列表(CRL )及证书库的管理。
本例用OpenSSL 模拟CA 服务器,指令如下: OpenSSL>perl ca.pl –newca 4.2.2 密钥及证书的生成
1. 生成一个1024位的RSA 密钥,并存储到userkey.pem 文件中,对输出密钥不进行加密。指令如下:
OpenSSL>genrsa -out userkey.pem 1024
2. 生成一个新的证书请求文件req.pem ,使用上步生成的密钥,不采用密钥的加密口令。指令如下:
OpenSSL>req -in privatekey.pem -out req.pem
3. 利用CA 服务器,签发用户证书,并存储到usercert.pem 文件中,使用上步生成的证书请求文件,指令如下:
OpenSSL>ca -in req.pem -out usercert.pem
4.3 用户控制模块的实现
用户控制模块在启动时要求输入用户名及密码,连接至服务器并通过身份认证后,显示在线的好友列表,用户可通过选择好友来发送保密文件。服务器端数据库userinfo 表各列意义如下:NAME (用户名),PWD (登陆密码),IP (用户IP 地址),PORT (用户开放端口),STATUS (用户在线状态)。
与数据库的连接采用ODBC 技术。 pdata->Open();
pdata->m_strFilter="NAME=? AND PWD=?"; pdata->p1=dlg->m_name; pdata->p2=dlg->m_pwd; pdata->Requery(); if(pdata->IsEOF())
AfxMessageBox("用户名或密码错误"); else { }
pdata->Close();
username=dlg->m_name; pdata->Edit(); pdata->m_IP=ip; pdata->m_PORT=port; pdata->m_STATUS="1"; pdata->Update();
pdata->m_strFilter="NAME!=?"; pdata->p1=dlg->m_name; pdata->Requery(); int count=0;
while(!pdata->IsEOF()) { }
m_listctrl.InsertItem(count,pdata->m_NAME); if(pdata->m_STATUS=="1")
m_listctrl.SetItemText(count,1,"在线");
else
m_listctrl.SetItemText(count,1,"离线");
pdata->MoveNext(); count++;
4.4 数字签名模块的实现
本例用数字签名用SHA-1 with RSA,用SHA-1计算文件摘要,用RSA 计算其签名[20]。 BIO* in = BIO_new(BIO_s_file());
BIO_read_filename(in,keyname);
EVP_PKEY* pkey = PEM_read_bio_PrivateKey(in, NULL, NULL, NULL); BIO_free(in);
EVP_MD_CTX mdctx;
unsigned char* sig_value = (unsigned char* )malloc(sizeof(char) * EVP_PKEY_size(pkey)); unsigned int sig_len; char mdname[] = "sha1"; OpenSSL_add_all_digests(); OpenSSL_add_all_ciphers();
const EVP_MD* md = EVP_get_digestbyname(mdname); EVP_MD_CTX_init(&mdctx); EVP_SignInit(&mdctx, md); char id[256];
FILE* f = fopen(localpath, "rb"); while(!feof(f)&&!ferror(f)) { } fclose(f);
EVP_SignFinal(&mdctx, sig_value, &sig_len, pkey); EVP_MD_CTX_cleanup(&mdctx); EVP_PKEY_free(pkey);
memset(id, 0, 256); fread(id, 255, 1, f);
EVP_SignUpdate(&mdctx, id, strlen(id));
4.5 数字信封模块的实现
PKI 得以实现的主要基础是公钥密码标准(PKCS )系列,该标准系列最初是为推进公钥密码系统的互操作性,由RSA 实验室与工业界、学术界和政府代表合作开发的。在RSA 带领下,PKCS 的研究随着时间不断发展,它涉及了不断发展的PKI 格式标准、算法和应用程
序接口。PKCS 标准提供了基本的数据格式定义和算法定义,它们实际是今天所有PKI 实现的基础。其中,PKCS#7为使用密码算法的数据规定了通用语法,比如数字信封。本例采用PKCS#7标准实现数字信封[21]。 OpenSSL_add_all_algorithms(); CString cipname=path+"cip"+localname;
CString certname=path+m_listctrl.GetItemText(nIdx,0)+"cert.pem"; BIO* srcbio = BIO_new_file(localpath, "rb"); BIO* cipbio = BIO_new_file(cipname, "wb"); BIO* fp = BIO_new_file(certname, "r"); STACK_OF(X509)* certs = sk_X509_new_null();
509* cert = PEM_read_bio_X509(fp, NULL, NULL, NULL); sk_X509_push(certs, cert); BIO_free(fp);
const EVP_CIPHER* cipher = EVP_aes_128_cfb();
PKCS7* pkcs = PKCS7_encrypt(certs, srcbio, cipher, PKCS7_BINARY); SMIME_write_PKCS7(cipbio, pkcs, srcbio, 0); BIO_free(srcbio); BIO_free(cipbio);
4.6 服务器模块的实现
WinInet API提供了对现有Internet 应用全面的支持,可以编写面向Internet 的应用程序,并不用考虑基本的通讯协议。MFC 提供的WinInet 类是对WinInet API函数封装而来的,是面向对象的高级编程接口。本例采用CInternetSession 类建立连接。 CInternetSession* pSession=new CInternetSession; CFtpConnection* pConnection;
pConnection = pSession->GetFtpConnection(); pConnection->PutFile(cipname,"cip"+localname); pConnection->GetFile("cip"+s2,cipname); pConnection->Close();
4.7 系统运行效果
客户端启动时。
图4.2 登录框
登陆后界面。
图4.3 用户界面
选择待加密发送文件。
图4.4 选择文件
发送成功。
图4.5 发送成功
另一客户端收到提醒。
图4.6 新文件提醒
选择文件保存位置。
图4.7 选择位置
接收并校验成功。
图4.8 接收结果
第五章 总结与展望
5.1 论文总结
文件保密是当前网络安全领域的研究热点,不仅是在电子商务,电子银行,电子政务等应用领域,在社会生活的各个领域也有极广泛的应用前景。由于电子文件在传输过程中易被偷窥,篡改,为了解决电子文件面临的这些安全威胁,需要为电子文件增加一些安全功能。本文分析了安全文件传输系统所要达到的目标,以公钥密码学为基础,通过数学的手段来达到文件加密功能,引入了PKI 机制,利用数字证书,数字信封等来对文件进行数字签名、加密等安全处理,然后通过并不安全的网络通道进行传输,接收方接收到文件后相应地进行解密、验证签名等安全处理而得到原始文件,从而保障了传输的文件的机密性、完整性并验证文件的真实来源,实现文件的安全传输。
从一定意义上说本文的文件保密系统实现了安全文件的主要功能需求,但由于时间和技术上的限制,本文的文件保密系统有的功能还未能实现或者实现得不理想,比如没有和操作系统密切结合起来,没有一键加密等方便功能。
5.2 工作展望
PKI 是利用公钥理论和技术建立的提供信息安全服务的基础设施,它可以作为支持认证、完整性、机密性和不可否认性服务的技术基础,从技术上解决网上身份认证、信息完整性和抗抵赖等安全问题,为网络应用提供可靠的安全保障。有广泛的应用,除文件加密外、还有如Email 加密、S/MIME、消息完整性、VPN 、权限授权与SSO 、会话保密等。
事实证明,PKI 是一项十分成功的技术,并且随着PKI 技术应用的不断深入发展和PKI 技术本身的不断变化和完善,因特网的安全应用已越来越离不开PKI 技术的支持,PKI 必将在未来的信息安全领域发挥巨大的作用。
参 考 文 献
[1] 梁晋,施仁. 电子商务核心技术,安全电子交易协议的理论与设计[M]. 西安:西安电子科技大学出版
社,2000.
[2] 徐炜. 电子政务中的PKI 体系研究及其应用[J]. 微计算机信息,2006,1(3):162~163. [3] 杨波. 现代密码学[M]. 北京:清华大学出版社,2003. 143~181. [4] 章照止. 现代密码学基础[M]. 北京:北京邮电大学出版社,2004.
[5] 贺卫红,曹毅. RSA公钥密码体制在数字签名中的应用[J]. 微机发展,2003,13(9):49~50. [6] 张先红. 数字签名原理及技术[M]. 北京:机械工业出版社,2003.
[7] 卢开澄. 计算机密码学-计算机网络中的数据加密和安全[M]. 北京:清华大学出版社,1998. [8] 荆继武,林璟锵,冯登国. PKI技术[M]. 北京:北京科学出版社,2008.
[9] Carlisle Adams,Lloyd Steve. 公开密钥基础设施——概念、标准和实施[M]. 北京:人民邮电出版社,
2001.
[10] 刘玉莎,张晔,张志皓,等. 公钥基础设施在网络安全中的研究与应用[J]. 计算机工程与应用,2000,
36(3):133~137.
[11] 邓晓军. PKI技术及其应用的分析[J]. 计算机技术与发展,2008,18(6):144~147.
[12] 周琦,郑学风. 基于PK I体系结构的双向身份认证模型[J]. 电子科技,2005,3(4):37~42.
[13] Nash Andrew,Duane William,Joseph Celia. 公钥基础设施(PKI):实现和管理电子安全[M]. 北京:清
华大学出版社,2002.
[14] 谢东清. PKI原理与技术[M]. 北京:清华大学出版社,2004.
[15] 关振兴. 公钥基础设施PKI 与认证机构CA[M]. 北京:电子工业出版社,2002.
[16] 王伟兵,肖永伟. 一种基于PKI 的保密文件传输方案[J]. 现代电子技术,2005,24(5):1~11. [17] 刘知贵,杨立春. 基于PKI 技术的数字签名身份认证系统[J]. 计算机应用研究,2004,21(9):158~160. [18] 马亚娜,钱焕延,孙亚民. 混合密码系统在安全传输中的应用[J]. 计算机应用研究,2003,20(2):90~92. [19] 王志海. OpenSSL与网络信息安全一一基础,结构和指令[M]. 北京:清华大学出版社,2007. [20] Schneier Bruce. 应用密码学(协议算法与C 源程序) [M]. 北京:机械工业出版社,2000. [21] 赖溪松,韩亮,张真诚. 计算机密码学及其应用[M]. 北京:国防工业出版社,2001.
致 谢
这次毕业设计可以圆满地完成,离不开各位老师和同学的关心和帮助,特别要感谢我的指导教师老师对我的无私指导和亲切关怀。她严谨的治学态度令我钦佩,没有她的教诲就不会我的进步和成长,对此我将终生铭记。