【2018-2019-1】20165223 实验五 通讯协议设计


实验成员:20165223

实验名称:通讯协议设计


目录


一、实验目的

二、实验内容

二、实验总结


一、实验目的

1.了解OpenSSL

  • OpenSSL的简介
    OpenSSL是一个SSL协议的开源工具包,采用C语言作为开发语言,现了安全套接字层(SSL v2/v3)和传输层安全(TLS v1)协议以及全强大的通用加密库,且具备了跨平台的能力,支持Unix/Linux、Windows、Mac OS等多种平台。

  • OpenSSL的组成和功能
    (1)SSL协议库:The SSL Library(SSL、TLS开发代码库)
    (2)密码算法库:The Crypto Library(密码学相关开发代码库)
    (3)应用程序:Command Line Tool(命令行工具,提供CA、证书等功能)

  • 使用 man OpenSSL 命令查看功能


2.安装和使用OpenSSL

二、实验内容


任务一:通讯协议设计-1

(一)实验要求

1.在Ubuntu中完成 Linux下OpenSSL的安装与使用 中的作业
2.提交运行结果截图

(二)实验步骤

(1)OpenSSL的安装与测试

$ tar xzvf openssl-1.1.0-pre1.tar.gz

  • 2.安装OpenSSL
$ cd openssl-1.1.0-pre1
$ ./config

$ sudo make

$ sudo make install

$ make test    //测试

  • 3.编写测试代码 test_openssl.c
#include <stdio.h>
#include <openssl/evp.h>

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

  • 4.使用OpenSSL密码算法库编译运行
//编译
$ gcc -o test_openssl test_openssl.c -I /usr/local/ssl/include -L/usr/local/ssl/lib -lssl -lcrypto -ldl -lpthread

//运行,打印0
$ echo $?

注意要加上 -lssl 链接OpenSSL密码算法库,否则会报错

(2)Linux下OpenSSL的安装与使用中的作业

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

首先了解一下OpenSSL算法的指令内容(man openssl)

  • 对称算法
使用的标准命令为 enc
openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64]
   [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md]
   [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id]

-in filename:指定要加密的文件存放路径

-out filename:指定加密后的文件存放路径

-salt:自动插入一个随机数作为文件内容加密,默认选项

-e:可以指明一种加密算法,若不指的话将使用默认加密算法

-d:解密,解密时也可以指定算法,若不指定则使用默认算法,但一定要与加密时的算法一致

-a/-base64:使用-base64位编码格式
  • AES
openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass pass:123456 //密码123456
  • RSA
openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename] [-passin arg] [-out filename] [-passout arg]
   [-sgckey] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-engine id]
常用选项:

-in filename:指明私钥文件

-out filename:指明将提取出的公钥保存至指定文件中 

-pubout:根据私钥提取出公钥
  • MD5
openssl passwd -1 -in test.txt -salt 12345678    

生成密码需要使用的标准命令为 passwd ,用法如下:

openssl passwd [-crypt] [-1] [-apr1] [-salt string] [-in file] [-stdin] [-noverify] [-quiet] [-table] {password}
常用选项有:

-1:使用md5加密算法

-salt string:加入随机数,最多8位随机数

-in file:对输入的文件内容进行加密

-stdion:对标准输入的内容进行加密

再实现作业中的内容

  • 1.基于Socket实现TCP通信

  • 2.使用OpenSSL算法,测试对称算法AES

  • 3.使用OpenSSL算法,测试非对称算法RSA(生成私钥→生成公钥→加密→解密)
/*生成RSA密钥*/

$ openssl genrsa -des3 -passout pass:123456 -out RSA.pem 

/*提取公钥*/
$ openssl rsa -in RSA.pem -passin pass:123456 -pubout -out pub.pem 

/*使用RSA作为密钥进行加密,实际上使用其中的公钥进行加密*/

$ openssl rsautl -encrypt -in plain.txt -inkey RSA.pem -passin pass:123456 -out enc.txt

/*使用RSA作为密钥进行解密,实际上使用其中的私钥进行解密*/

$ openssl rsautl -decrypt -in enc.txt -inkey RSA.pem -passin pass:123456 -out replain.txt

/*比较原始文件和解密后文件*/

$ diff plain.txt replain.txt 

/*使用公钥进行加密*/

$ openssl rsautl -encrypt -in plain.txt -inkey pub.pem -pubin -out enc1.txt

/*使用RSA作为密钥进行解密,实际上使用其中的私钥进行解密*/

$ openssl rsautl -decrypt -in enc1.txt -inkey RSA.pem -passin pass:123456 -out replain1.txt

/*比较原始文件和解密后文件*/

$ diff plain.txt replain1.txt

  • 4.使用OpenSSL算法,测试Hash算法中的MD5(使用MD5加密“20165223cn”)

(三)实验结果

  • 编译运行测试代码:test_openssl.c

(四)代码分析

返回目录


任务二:通讯协议设计-2

(一)实验要求

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

(二)实验步骤

  • 1.编写客户端和服务器代码

  • 2.编译客户端和服务器代码

$ gcc -o server server.c -I /usr/local/ssl/include -L/usr/local/ssl/lib -lssl -lcrypto -ldl -lpthread
$ gcc -o telent telent.c -I /usr/local/ssl/include -L/usr/local/ssl/lib -lssl -lcrypto -ldl -lpthread

  • 3.产生私钥
$ openssl genrsa -out privkey.pem 1024

  • 4.生成证书(需要填写信息)
$ openssl req -new -x509 -key privkey.pem -out CAcert.pem -days 1095

  • 5.运行实现对实验二中的“wc服务器”通过混合密码系统进行防护
$ ./server 8888 1 CAcert.pem privkey.pem
$ ./telent 127.0.0.1 8888

(三)实验结果

  • 实现对实验二中的“wc服务器”通过混合密码系统进行防护

(四)代码分析

返回目录


二、实验总结


(一)遇到的问题

在编译测试代码的时候报错如下

  • 原因:没有加上-lssl来链接OpenSSL的密码算法库
  • 解决:在编译命令上加上-lssl即可
$ gcc -o to test_openssl.c -I /usr/local/ssl/include -L/usr/local/ssl/lib -lssl -lcrypto -ldl -lpthread

(二)分析与总结

(1)实验心得

  • 这次的实验让我了解了OpenSSL的功能与基本使用方法,学会了通过OpenSSL来测试对称算法中的AES,非对称算法中的RSA,Hash算法中的MD5等,掌握了许多新的知识。

(2)OpenSSL知识点总结

OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。

  • OpenSSL的基本功能

    • 密码算法库
    • SSL协议库
    • 应用程序
  • OpenSSL实现对称加密
    OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。这7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。

  • OpenSSL实现非对称加密
    OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用于密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。

  • OpenSSL的应用程序功能
    OpenSSL的应用程序是基于OpenSSL的密码算法库和SSL协议库写成的,提供了相对全面的功能。OpenSSL的应用程序主要包括密钥生成、证书管理、格式转换、数据加密和签名、SSL测试以及其它辅助配置功能。

(三)参考资料

  1. Linux下OpenSSL的安装与使用
  2. SSL编程- 简单函数介绍
  3. OpenSSL证书操作
  4. Linux下的OpenSSL编程——openssl例子

返回目录

原文地址:https://www.cnblogs.com/moddy13162201/p/10126100.html