20221307《密码系统设计》第一周

学习内容

  • 《Windows C/C++加密解密实战》第 1,2 章

  • openssl在Linux中安装

  • gmssl在Linux中安装

  • 学习使用思维导图

openssl在Linux中的下载安装过程

在Ubuntu中,输入命令

openssl version

可以发现openssl是最新版本

在这里插入图片描述

在openeuler中

在这里插入图片描述

Gmssl在Linux中的下载过程

gmssl在Linux中并不能自带,因此需要自己下载安装

可以根据gmssl的安装文档自行进行下载
在这里插入图片描述
从这个md文档中可以看到,我们只需要在互联网上将gmssl的源码下载后解压,之后在终端里进行解压编译就可以了,具体发生了什么问题,又是怎么解决的我放在后面
安装之后可以输入

gmssl version

查看是否安装成功
在这里插入图片描述

出现这个截图说明成功

AI对学习内容的总结和我自己的反思体会补充

AI的总结

密码学概述

  • 密码学起源古老,早期主要用于军事、政治等领域,信息的加密和解密通常由密码本或密钥来控制。

  • 1949 年,Shannon 发表的论文为现代密码学奠定了理论基础,使密码学走向科学轨道。

  • 1977 年,美国国家标准局公布实施的数据加密标准(DES)标志着近代密码学的开始。

  • 20 世纪 70 年代中期公钥密码体制的出现为信息认证提供了新的解决途径。

密码学基本概念

  • 密码学要解决的问题:机密性、可用性、完整性、认证性和不可否认性。

  • 密码学中的五元组:明文、密文、密钥、加密算法和解密算法。

加解密算法的分类:对称算法和非对称算法。对称算法加密和解密使用相同密钥,速度快,适用于加密大量数据;非对称算法使用公钥和私钥,安全性高,但速度较慢。

玛丽女王的密码

  • 1586 年,苏格兰的玛丽女王因密谋行刺伊丽莎白女王而被审判,其与支持者的通信使用了密码,但最终被托马斯・菲利普破解,导致其被判处死刑。此事件体现了密码学在历史上的重要作用。

密码学简史

  • 第一次世界大战之前,密码学的重要进展未公开,直到 1918 年,相关信息论和技术开始引起重视。

  • 从 1949 年到 1975 年,密码学研究在一些政府机构的秘密进行,同时 Shannon 的理论为其发展奠定了基础。

  • 1976 年以后,密码学的研究和应用得到了快速发展,出现了许多新的密码算法和技术。

搭建 C 和 C++ 密码开发环境

密码编程的两个重要的国际库

  • OpenSSL:一个强大的开源密码库,支持多种密码算法和协议,包括 SSL/TLS、AES、RSA 等。它具有优秀的跨平台性能,广泛应用于各种操作系统和开发环境中。

  • Crypto++:一个用 C++ 编写的密码学类库,功能强大,支持多种密码算法,包括椭圆曲线加密算法、AES 等。它在密码学教学和研究中具有重要价值。

C/C++ 密码库 OpenSSL

  • 编译安装:在 Windows 上,可以从官网下载 OpenSSL 的源码,然后使用 Visual Studio 进行编译。需要注意的是,编译过程中可能会遇到一些问题,如版本不兼容、缺少依赖等,需要根据具体情况进行解决。

  • 测试使用:通过查看版本号、查看支持的加解密算法、查看某个命令的帮助信息等方式,可以对编译安装后的 OpenSSL 进行测试。

命令行工具:OpenSSL 提供了命令行工具 openssl.exe,通过该工具可以进行各种密码操作,如加密、解密、生成密钥等。

纯 C++ 密码开发 Crypto++ 库

  • 编译:可以从官网下载 Crypto++ 的源码,然后使用 make 进行编译。

使用:通过示例代码展示了如何使用 Crypto++ 库进行 RC4 算法的加密和解密。

国产密码开发库 GmSSL

  • 特点:支持 SM2/SM3/SM4/SM9/ZUC 等国密算法,支持国密 SM2 双证书 SSL 套件和国密 SM9 标识密码套件,高效实现,在主流处理器上可完成 4.5 万次 SM2 签名,支持动态接入具备 SKF/SDF 接口的硬件密码模块,支持门限签名、秘密共享和白盒密码等高级安全特性,支持 Java、Go、PHP 等多语言接口绑定和 REST 服务接口。

  • 历史:自 2014 年发布以来,在多个项目和产品中获得部署与应用,并获得 2015 年度 “一铭杯” 中国 Linux 软件大赛二等奖。

  • 下载安装:可以从 GitHub 网站上下载源码,然后在 Windows 和 Linux 上进行编译安装。

  • 验证:通过示例代码展示了如何使用 GmSSL 库进行加密和解密操作,并验证其在 Windows 和 Linux 上的正确性。

综上所述,密码学是一门重要的学科,在信息安全中起着关键作用。搭建好密码开发环境是进行密码学研究和应用的基础,OpenSSL、Crypto++ 和 GmSSL 等库为密码开发提供了强大的支持。

对AI总结的反思与补充

AI的总结在我看来,第一章的相关内容总结的是很全面的,首先在玛丽的密码那个开篇小故事中,跳过了与课程无关的历史部分,直接给我了密码学相关的启示,并且很好的为我总结了密码学的历史和相关基本概念等问题,没有什么需要补充的问题。

但是对于第二章的内容还是有很多AI并没有关注,这里需要补充的

  1. 首先对于Crypto++和openssl二者的关系的问题,AI并没有很好的解释,书中提到,Crypto++虽好,但是功能不如Openssl,比如openssl的面向对象和多态来支持多种加密算法,,因为很多著名的软件都是用C语言来实现面向对象的设计的

  2. Openssl的开发语言是C语言,让Openssl具有优秀的跨平台性能,Openssl支持Linux、Mac、BSD、Windows等平台

  3. Openssl实现了8种对称加密算法,如AES、DES等,实现了4中非对称加密算法,实现了5种信息摘要算法

  4. Openssl实现了密钥和证书的管理

  5. Openssl的目录结构

    Crypto源码文件相关标准
    SSLSSL协议、TLS协议
    Apps应用程序源码
    Docs使用说明文档
    Demos应用程序例子
    Include头文件
    Test测试源码文件
  6. Openssl加密库的调用方式

  7. BIO接口相关内容

  8. EVP接口相关内容

  9. 在Linux下编译Openssl,结合老师的脚本理解

学习思维导图

思维导图代码

mindmap
  root((密码系统设计第一周))
    ::icon(fa fa-book)
    教材内容学习
     AI对学习内容的总结
       密码学概述
        起源古早,用于军事政治领域
        1949年,Shannon发表的论文奠定基础
        1977年,美国国家标准局公布DES
        20世纪70年代中期公钥密码体制的出现为信息认证提供了新的解决途径
       密码学基本概念
        密码学要解决的问题
         机密性
         可用性
         完整性
         认证性(真实性)
         不可否认性
        密码学中的五元组
         明文
         密文
         密钥
         加密算法
         解密算法
        玛丽女王的密码
         1586年,玛丽女王密码被破译导致被判死刑,体现了密码学的重要作用
        密码学简史
         直到1918年才被重视
         1949-1975年政府秘密研究
         1976以后快速发展  
       搭建C和C++密码开发环境
       密码编程的两个重要国际库
        Openssl:C/C++
        Crypto++:C
       国产密码开发库Gmssl
        支持国密算法
        2014年发布以来得到很多部署应用
        Github下载源码
        示例代码验证         
      
     对AI的总结的反思和补充
      第一章总结全面
      第二章有很多遗漏
       Crypto++和Openssl关系
       Openssl特点
       Openssl支持加密算法
       Openssl目录内容
       Openssl加密库调用方式
       BIO接口内容
       EVP接口内容
       在Linux下编译Openssl
    课件内容学习
     ProcessOn思维导图
      密码系统设计概论
       网络空间安全
       密码与密码系统
       密码法规标准
       密码应用与密评
      Linux程序命令
       Linux基础命令复习
        查找
         man:查看命令详细说明 
         help:获取该命令帮助
         whatis:~
         whereis:~
         find:在文件目录中查找
         locate:数据库定位,比find块
         grep:在文本文件中搜索
        目录
         ls:列出文件
         pwd:打印当前工作目录
         cd:切换工作目录
         tree:递归列出目录
         mkdir:创建目录
         rmdir:删除空目录
         rm:删除目录
    实践内容
     安装Linux虚拟机
      ubuntu
      openeuler
      在Ubuntu中尝试写代码
      学习教材中编译openssl
    项目内容
     初步阅读zuc算法相关代码
     查阅资料,准备编译gmssl和openssl

基于AI的学习

学习一下Linux下编译openssl

那么,你能告诉我什么是编译吗?它在 Linux 系统中起到什么作用呢?
编译一下openssl和gmssl的c语言文件,在Linux系统中的作用不知道
那么,你知道在 Linux 中编译 openssl 和 gmssl 需要哪些准备工作吗?比如需要安装哪些依赖库等。
我并不知道所需要的依赖库
那么,你认为我们应该如何去查找编译 openssl 和 gmssl 所需的依赖库呢?
准备问问你,或者去找找相关的博客
那么,你觉得在查找相关博客时,应该关注哪些方面的内容,才能确保找到准确的依赖库信息呢?
编译 openssl 和 gmssl 所需的常见依赖库有哪些?
那么,你认为这些依赖库的作用是什么呢?它们是如何影响 openssl 和 gmssl 的编译过程的呢?
依赖库中可能有一些openssl和gmssl中要用到的函数,编译过程可能用得到
那么,你知道如何在 Linux 系统中安装这些依赖库吗?
假如我知道了依赖库的话,那么用apt下载软件包并解压应该可行
那么,你知道如何确定你所使用的 Linux 发行版是否支持使用 apt 来下载和安装软件包吗?
我使用的Ubuntu中支持apt命令
那么,你知道在使用 apt 安装依赖库时可能会遇到哪些问题吗?以及如何解决这些问题呢?
感觉没什么问题
那么,你知道安装完依赖库后,下一步应该做什么来编译 openssl 和 gmssl 吗?
下载openssl之后解压,建立一下软链接
那么,你知道建立软链接的具体命令是什么吗?
ln -s /我的安装目录
那么,建立软链接之后,还需要进行哪些操作呢?
建立软连接之后,我可以在命令行中使用openssl了
那么,你知道如何验证 openssl 是否正确安装并可以正常使用吗?
可以输入openssl -version
那么,这个命令输出的信息中哪些部分是重要的呢?它们分别代表什么含义呢?
看一下openssl的目录内容和版本号,目录中包含支持的算法和ssl协议等

学习一下openssl的目录结构

我在学习openssl目录的知识点,请你以苏格拉底的⽅式对我进⾏提问,⼀次⼀个问题
那么,你知道 openssl 的目录结构通常包含哪些主要部分吗?
Crypto

源码文件相关标准

SSL

SSL协议、TLS协议

Apps

应用程序源码

Docs

使用说明文档

Demos

应用程序例子

Include

头文件

Test
那么,你认为在这些部分中,哪个部分对于理解 openssl 的核心功能最为重要呢?
你认为呢
那么,你觉得 “Crypto” 这个部分主要负责什么功能呢?
它包含源码文件相关标准
那么,你知道这些源码文件相关标准具体有哪些作用吗?
你认为有什么作用呢
那么,你觉得这些标准会不会影响到加密算法的安全性呢?
会
那么,你能举例说明这些标准是如何影响加密算法安全性的吗?
可能规定了openssl中使用算法的密钥量等
那么,你知道不同的密钥量对加密强度有怎样的影响吗?
密钥量应该和加密强度弱正相关
那么,为什么是弱正相关而不是强正相关呢?
我觉得对于一些算法来说,并不能单单凭借密钥量来界定他们的加密强度,算法的抗差分性,结构也很重要
那么,你能举例说明一种具有良好抗差分性的算法吗?
GIFT算法
那么,GIFT 算法在 openssl 中有被使用吗?
openssl中不支持GIFT算法
那么,你知道为什么 openssl 不支持 GIFT 算法吗?
因为他善
你的回答不太清晰哦,可以重新组织一下语言吗?不太明白 “因为他善” 是什么意思呢。😃
就是,因为她并不具有普适性
那么,什么样的算法在 openssl 中会被认为具有普适性呢?
国际标准,例如zuc,DES,aes,rsa等
那么,这些国际标准算法在 openssl 中的实现方式有哪些不同呢?
你认为有哪些不同呢
那么,你觉得不同的算法在加密速度上会有差异吗?
包有的
那么,哪种算法的加密速度通常比较快呢?
流密码更快
那么,流密码为什么加密速度会比较快呢?
结构简单
那么,结构简单会带来其他什么影响吗?
不可靠,无法加密一些特定的数据
那么,哪些特定的数据流密码可能无法可靠加密呢?
你认为呢
那么,你觉得可能是那些包含复杂结构或者特殊格式的数据吗?
图片,视频
那么,为什么流密码难以可靠地加密图片和视频数据呢?
你认为呢
可能是因为图片和视频数据通常体积较大,流密码在处理大量数据时可能会出现一些问题。比如可能会出现加密不完整或者加密过程中出现错误。而且图片和视频数据通常有特定的格式和编码方式,流密码可能难以适应这些复杂的结构,从而导致加密不可靠。
那么,你觉得还有其他原因吗?
没了,
好的,了解了。希望我们的讨论对你有所帮助。如果还有其他问题随时找我交流。😉

学习实践过程遇到的问题与解决⽅式(AI 驱动,优先使⽤AI⼯具解决问题)

问题1:在vscode中安装markdown插件后,不会创建文件,没找到相应语言

重新删除插件重新安装解决

对ai进行提问,预习指导中的脚本什么意思

这个脚本主要用于在当前用户的主目录下安装特定版本(3.3.2)的 OpenSSL,并进行一些相关的配置。
具体步骤如下:
检查并创建相关目录:如果rocopenssl、rocopensslsrc和rocopenssldir目录不存在,则创建它们。
下载和解压 OpenSSL 源码:如果本地没有openssl - 3.3.2.tar.gz文件,则从指定网址下载,并解压到~/rocopensslsrc目录下。
配置、编译和安装 OpenSSL:进入解压后的目录,进行配置(指定安装路径为${ROCHOME}/rocopenssl,openssl目录为${ROCHOME}/rocopenssldir),然后进行编译(make)和安装(sudo make install)。
根据操作系统进行链接和替换:
如果操作系统是 Ubuntu,则将系统原有的/usr/lib/x86_64 - linux - gnu/libcrypto.so.3/usr/lib/x86_64 - linux - gnu/libssl.so.3分别重命名为/usr/lib/x86_64 - linux - gnu/libcrypto.so.3.rocbaknewopenssl和/usr/lib/x86_64 - linux - gnu/libssl.so.3.rocbaknewopenssl,并创建新的链接,指向新安装的 OpenSSL 的库文件。同时,将原有的/usr/bin/openssl重命名为/usr/bin/opensslbak,并创建新的链接指向新安装的 OpenSSL 的可执行文件。
如果操作系统是 WSL(Windows Subsystem for Linux),也进行类似的操作。
最后,显示安装的 OpenSSL 的版本信息,并删除下载的源码压缩包。
使用方法:
将此脚本保存为一个文件,例如install_openssl.sh。
在终端中,确保具有足够的权限(可能需要使用sudo),然后运行该脚本:

学习了一波

对AI进行提问:vscode中怎么编辑mermaid

发现没有网页版好用

对AI进行提问:你能不能帮我修改一下颜色字体高亮之类的

  • 发现mermind语法不支持相关内容

下载编译全过程遇到的问题和解决方案

解决Ubuntu24.04版本无法联网,无法复制粘贴,开机黑屏问题

无法联网问题对我造成了很大的阻碍,为什么会发生这种问题,和系统自身并不稳定,网络服务容易出现问题脱不开关系。
如何解决呢,输入以下命令

sudo systemctl start NetworkManager

sudo systemctl restart NetworkManager
`sudo su
`apt-get install gedit
`gedit /etc/NetworkManager/NetworkManager.conf(这里false改为true)
service NetworkManager stop
rm /var/lib/NetworkManager/NetworkManager.state 
service NetworkManager start 
reboot

就解决了

复制粘贴也是因为vmtools本身不稳定的原因
输入命令

sudo apt install update
sudo apt-get install open-vm-tools-desktop

解决

openssl和gmssl可能发生冲突问题

在网上查找如何编译gmssl时,有人强调需要将gmssl编译成静态库,否则会与openssl发生冲突,让我通过以下命令

./config --prefix=/usr/local/gmssl --openssldir=/usr/local/gmssl no-shared

进行编译运行,但是我在执行过程中,发现gmssl目录下并没有config文件,这种方法无疑是错误的,由于不知道为什么会冲突,可能是路径问题,但是在我安装过程中并没有出现
在这里插入图片描述

Ubuntu24.04安装过慢黑屏问题

安装过慢是因为在开始的时候没有进行换源导致的,国外的服务器本身速度并不快,因此并没有什么好办法

编译报错问题

在这里插入图片描述
可以看到在运行 gmssl 时找不到所需的共享库 libgmssl.so.3
解决方法

   sudo ldconfig

这个命令会扫描系统的库目录,并更新缓存,以便系统能够找到新安装的库。
之后就可以使用gmssl了

代码托管链接

/https://gitee.com/eleven-thousand-and-thirty-two/mmsys20221307

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值