客户和服务器端的安全通信.docx
《客户和服务器端的安全通信.docx》由会员分享,可在线阅读,更多相关《客户和服务器端的安全通信.docx(14页珍藏版)》请在冰豆网上搜索。
客户和服务器端的安全通信
第三章密码技术基础分组作业
------客户和服务器端的安全通信功能
第七组
赵鹏p-zhao07@
田敏求tianminqiu@
卓雪君zhuoxj07@
张秋艳zhang-qy07@
宋晓明songxm07@
1
目录
1. 作业要求 ............................................................................................. 3
2. 作业分工 ............................................................................................. 3
3. 程序设计原理 ..................................................................................... 3
3.1 通信协议设计 ............................................................................. 3
3.2 技术原理 ..................................................................................... 4
4.技术细节 ............................................................................................... 6
4.1 申请证书 ..................................................................................... 6
4.2 双向身份认证 ............................................................................. 8
4.3协商会话密钥 .............................................................................. 9
4.4 生成摘要 ..................................................................................... 9
4.5 加解密文件 ................................................................................. 9
4.6完整性验证 ................................................................................ 10
5.实验演示 .......................................................................................... 10参考文献 ................................................................................................ 16 2
1.作业要求
实现客户和服务器端的安全通信功能,其中包括:
(1)基于公钥证书,实现双向的身份认证
(2)会话密钥协商(算法自选)
(3)数据传输:
加密、完整性保护(算法自选)
(4)简明的设计文档
图1.1协议流程图
2.作业分工
赵鹏:
认证,会话密钥协商,代码整合
田敏求:
数据加解密
卓雪君张秋艳:
通信部分,摘要生成,完整性验证,界面,代码整合宋晓明:
文档
3.程序设计原理
3.1通信协议设计
整个通信过程包括了:
证书申请、双向身份验证、会话密钥协商、传送/接收加密文件、文件完整性校验五大部分。
具体协议设计如图3.1所示。
3
图3.1C/S通信协议图
图中一些符号注释如下:
KS_PUBLIC:
服务器公钥
KS_PRIVATE:
服务器私钥
KC_PUBLIC:
客户端公钥
KC_PRIVATE:
客户端私钥
n1,n2:
随机数,用来防止重放攻击
K:
会话密钥
Seed:
生成会话密钥的种子
M:
发送的明文文件
m:
明文文件对应的摘要
其中证书采用离线拷贝的方式,保证通信双方在建立连接前已经拥有对方的证书。
在双向身份验证的过程中采用生成随机数的方式防止了重放攻击。
协商会话密钥的过程中传送的是经过加密的生成会话密钥的种子。
传送文件时,在文件末尾附上了用MD5生成的文件摘要,方便接收方进行文件的完整性验证。
3.2技术原理
(1)Openssl简介
SSL是SecureSocketLayer(安全套接层协议)的缩写,目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。
改协议能使用
户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。
Openssl是一个功能丰富且自包含的开源安全工具箱。
它提供的主要功能有:
SSL协议实现(包括SSLv2、SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1编解码库、证书请求(PKCS10)编解码、数字证书编解码、CRL编解码、OCSP协议、数字证书验证、PKCS7标准实现和PKCS12个人数字证书格式实现等功能。
Openssl采用C语言作为开发语言,这使得它具有优秀的跨平台性能。
Openssl支持Linux、UNIX、windows、Mac等平台。
openssl目前最新的版本是0.9.8e.OpenSSL整个软件包大概可以分成三个主要的功能部分:
密码算法库、SSL协议库以及应用程序。
OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。
(2)CryptoAPI简介
微软的CryptoAPI是PKI推荐使用的加密API。
其功能是为应用程序开发者提供在Win32环境下使用加密、验证等安全服务时的标准加密接口。
CryptoAPI处于应用程序和CSP(cryptographicserviceprovider)之间,如图3.2所示。
图3.2MicrosoftCryptoAPI
CryptoAPI的编程模型同Windows系统的图形设备接口GDI比较类似,其中加密服务提供者CSP等同于图形设备驱动程序,加密硬件(可选)等同于图形硬件,其上层的应用程序也类似,都不需要同设备驱动程序和硬件直接打交道。
CryptoAPI共有五部分组成:
简单消息函数(SimplifiedMessageFunctions)、低层消息函数(Low-levelMessageFunctions)、基本加密函数(BaseCryptographicFunctions)、证书编解码函数(CertificateEncode/DecodeFunctions)和证书库管理函数(CertificateStoreFunctions)。
其中前三者可用于对敏感信息进行加密或签名处理,可保证网络传输信心的私有性;后两者通过对证书的使用,可保证网络信息交流中的认证性。
5
CryptoAPI可以从保密和确证这两方面来保证安全通信。
CryptoAPI系统有四类函数:
基本Cryptographic函数、简化Cryptographic函数、存储函数和验证加密/解密函数,前两类函数提供保密性,后两类函数提供确证。
CryptoAPI允许调用这些函数来加密数据、交换公钥、散列一个消息来建立摘要以及生成数字签名。
CryptoAPI使用两种密钥:
会话密钥与公钥/私钥对。
会话密钥采用单钥密码体制,效率高,但必须保证密钥的安全传递。
公钥/私钥算法较慢,主要用于身份的认证以及用于加密少量数据,例如用于加密会话密钥。
MicrosoftCryptoAPI体系结构如图3.3所示:
图3.3MicrosoftCryptoAPI体系结构
4.技术细节
4.1申请证书
主要通过openssl的命令来手工生成证书,主要过程为:
(1)生成RSA密钥对:
Opensslgenrsa-outprikey.pem1024
6
(2)利用密钥对生成证书请求:
Opensslreq–new–keyprikey.pem–outreq.pem
(3)利用openssl自带的ca来给证书请求签名
Opensslca–inreq.pem–outcert.pem–notext
参数notext的作用是生成的证书中不带明文的生成过程。
利用同样的步骤生成client.pem,server.pem和各自相应的私钥文件prikeyclient.pem,prikeyserver.pem
4.2双向身份认证
假设通信双方为A,B,在通信之前都拿到了对方的证书。
那么验证过程为:
(1)生成一个随机的字符串m
(2)sha1(m),利用hash算法对m做sha1计算
(3)利用A自己的私钥对sha1(m)加密,完成签名A{sha1(m)}
(4)利用B的公钥来对m进行加密,B<>,然后和第3步完成的内容一起发送给B
(5)B利用自己的私钥对B<>进行解密,同时利用A的公钥对A{sha1(m)}解密,然后比较内容是否相同。
(6)在B端重复
(1)-(5)的步骤。
4.3协商会话密钥
由A端生成一个随机的字符串,用这个字符串作为对称密钥生成的种子。
然后将这个字符串用B的公钥进行加密然后传输给B。
B接收到后利用自己的私钥进行解密,得到种子字符串。
双方都利用这个种子字符串来生成对称加密密钥。
4.4生成摘要
首先获得指定CSP密钥容器句柄,然后创建一个空哈希对象,并将指定的文件加到指定的哈希对象,进行哈希。
这样就实现了对一个不定长度的文件生成摘要的过程,摘要长度为128Bit。
4.5加解密文件
(1)文件加密步骤
①打开源文件"File.txt"
②取得密钥容器(CSP)句柄
③根据用户输入的密码创建一个会话密钥,即应用对称密钥对原文件加密。
i.
ii.
iii.
iv.创建一个Hash对象用用户输入的密码产生一个散列通过散列生成一个会话密钥销毁Hash对象
④非对称密钥由于效率非常低,所以一般不用于对数据直接加密,而是对会话
密钥进行加密,然后把它传送给对方。
对方通过非对称密钥解密获得会话密钥(即对称密钥),然后再对数据文件进行解密。
⑤加密数据文件
i.pbBuffer循环读入待加密文件的固定长度的内存块;如果一次读入整
个文件,那样会很浪费内存空间,而且影响扩展性,即存在缓冲区
溢出的可能。
⑥清理回收工作
i.释放内存缓冲区空间、密钥句柄、CSP句柄等。
(2)文件解密步骤
①打开加密文件"EnctyptedFile.txt"
②取得密钥容器(CSP)句柄
③根据用户输入的密码创建一个会话密钥,即应用对称密钥对原文件解密。
实际应用中,这个用户输入的“密码”是一个产生密钥的种子,一旦产生完会话密钥