zoukankan      html  css  js  c++  java
  • 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_SystemExperimentexpei_5

    五、参考资料

    1. Linux下OpenSSL的安装与使用
    2. OpenSSL简介
    3. 混合密码系统
    4. 混合密码系统的加密
    5. linux下的OPENSSL编程- 简单函数介绍
  • 相关阅读:
    $resource详解
    大白话讲解Promise(一)
    《AngularJS》5个实例详解Directive(指令)机制
    Openstack实现共有云VPC的SDN网络
    Openstack实现共有云多flat网络
    Openstack使用NFS作为后端存储
    Openstack块存储cinder安装配置
    Openstack创建镜像
    Openstack深入了解虚拟机
    Python全栈day26-27(面向对象进阶)
  • 原文地址:https://www.cnblogs.com/Yogile/p/11970482.html
Copyright © 2011-2022 走看看