2019-2020-1 《信息安全系统设计基础》 实验五 通讯协议设计

一、实验内容

1、通讯协议设计-1

在Ubuntu中完成 http://www.cnblogs.com/rocedu/p/5087623.html 中的作业
提交运行结果截图

2、通讯协议设计-2

在Ubuntu中实现对实验二中的“wc服务器”通过混合密码系统进行防护
提交测试截图

二、实验步骤

1、通讯协议设计-1

了解OpenSSL
OpenSSL是一个SSL协议的开源实现,采用C语言作为开发语言,具备了跨平台的能力,支持Unix/Linux、Windows、Mac OS等多种平台。
OpenSSL最早的版本在1995年发布,1998年后开始由OpenSSL项目组维护和开发。当前最新的版本是1.1.0 alpha版本,完全实现了对SSLv1、SSLv2、SSLv3和TLS的支持。。目前,OpenSSL已经得到了广泛的应用,许多类型的软件中的安全部分都使用了OpenSSL的库,如VOIP的OpenH323协议、Apache服务器、Linux安全模块等等。
OpenSSL整个软件包大概可以分成三个主要的功能部分:

  • 密码算法库
  • SSL协议库
  • 应用程序
    了解更多可以参考:OpenSSL简介

在Linux下OpenSSL的安装

从 OpenSSL源码下载地址 这里下载源码,下载它的压缩包,将其通过共享文件夹移到虚拟机里。

在虚拟机压缩包文件夹下的终端里使用以下命令:

  • 解压源码:unzip openssl-master.zip

  • 进入源代码目录:cd openssl-master

  • 编译安装:./config

  • make

  • sudo make install

  • 使用make test进行测试
    编写测试代码test_openssl.c

#include <stdio.h>
#include <openssl/evp.h>

int main(){
    
    OpenSSL_add_all_algorithms();
    
    return 0;
}

进行编译:gcc -o test_openssl test_openssl.c -L/usr/local/ssl/lib -lcrypto -ldl -lpthread

实现 echo $? 进行执行,结果打印了一个 0

作业

  • 两人一组
  • 基于 Socket 实现 TCP 通信,一人实现服务器,一人实现客户端
  • 研究 OpenSSL 算法,测试对称算法中的 AES ,非对称算法中的 RSA , Hash 算法中的 MD5
  • 选用合适的算法,基于混合密码系统实现对 TCP 通信进行机密性、完整性保护。
  • 学有余力者,对系统进行安全性分析和改进。

完成

  • 基于 Socket 实现 TCP 通信,一人实现服务器,一人实现客户端

  • 编写代码

  • 研究OpenSSL算法,测试对称算法中的AES,非对称算法中的RSA,Hash算法中的MD5

AES

  • 码云链接:AES
  • 使用 gcc AES.c -o AES -lssl -lcrypto 进行编译
  • 运行截图

RSA

  • 码云链接:RSA
  • 使用openssl工具
  • 生成一个密钥:openssl genrsa -out test.key 1024 (-out接生成的文件名)
  • 提取出公钥:openssl rsa -in test.key -pubout -out test_pub.key (-in接输入文件,-out接生成公钥的文件名)
  • 在目录中创建一个hello的文本文件
  • 利用生成的公钥加密文件:openssl rsautl -encrypt -in hello -inkey test_pub.key -pubin -out hello.en (-in接要加密的文件,-inkey接密钥,-pubin表明是用纯公钥文件加密,-out接加密后的文件)
  • 解密文件:openssl rsautl -decrypt -in hello.en -inkey test.key -out hello.de (-in接被加密的文件,-inkey接私钥文件,-out接解密后的文件

MD5

  • 码云链接:MD5
  • 运行截图:

2、通讯协议设计-2

了解混合密码系统
混合密码系统:将对称密码和公钥密码的优势相结合的方法。一般情况下,将两种不同的方式相结合的做法就称为混合。
将消息通过对称密码来加密,将加密消息时使用的密钥通过公钥密码来加密,这样的两步密码机制就是混合密码系统的本质。
了解更多可以参考混合密码系统
关于混合密码系统的加密,参考混合密码系统的加密

1. 对于linux下的OPENSSL编程

  • 头文件:
#include <openssl/ssl.h>
#include <openssl/err.h>
  • 基于OpenSSL的程序都要遵循以下几个步骤:
    • OpenSSL初始化
在使用OpenSSL之前,必须进行相应的协议初始化工作,这可以通过下面的函数实现:
int SSL_library_int(void)
  • 选择会话协议

    • 目前能够使用的协议包括TLSv1.0、SSLv2、SSLv3、SSLv2/v3
  • 创建会话环境

申请SSL会话环境的OpenSSL函数是:
SSL_CTX *SSL_CTX_new(SSL_METHOD * method);
  • 建立SSL套接字
申请一个SSL套接字:
SSL *SSl_new(SSL_CTX *ctx);
  • 完成SSL握手
  • 进行数据传输
  • 结束SSL通信

详细过程参考:

linux下的OPENSSL编程- 简单函数介绍

生成私钥和证书:

openssl genrsa -out privkey.pem 1024
openssl req -new -x509 -key privkey.pem -out CAcert.pem -days 1095

编译

gcc server_wc.c -o server_wc.out -lssl -lcrypto
gcc client_wc.c -o client_wc.out -lssl -lcrypto

三、实验中遇到的问题及解决方法

问题1:

  • 运行AES时出现错误

问题1解决方法:

  • 输入命令sudo ln -s /usr/local/lib/libssl.so.3 /usr/lib/libssl.so.3和sudo ln -s /usr/local/lib/libcrypto.so.3 /usr/lib/libcrypto.so.3

四、代码托管

码云链接:https://gitee.com/Yogile/YogileOne/tree/master/2019-2020-第1学期\subject_5_Cpt_System\Experiment\expei_5

五、参考资料

  1. Linux下OpenSSL的安装与使用
  2. OpenSSL简介
  3. 混合密码系统
  4. 混合密码系统的加密
  5. linux下的OPENSSL编程- 简单函数介绍
posted @ 2019-12-02 14:39  Yogile  阅读(172)  评论(0编辑  收藏  举报