第二章预习报告

密码系统设计

第二周预习报告

学习内容

要求
  • 让AI(kimi,元宝等)阅读学习内容并进行总结,教材内容可以使用微信读书或者云班课电子教材
总结
HFC第八章总结

第八章主要讨论了静态库和动态库的概念、创建和使用。以下是本章的主要内容总结:

  1. 静态链接与动态链接

    • 静态链接:在程序编译时将库代码链接到可执行文件中,形成一个单一的文件。这样做的缺点是如果库更新,需要重新编译整个程序。
    • 动态链接:在程序运行时才将库代码加载到内存中。这允许程序在不重新编译的情况下使用库的最新版本。
  2. 创建自己的库

    • 介绍了如何将代码组织成库,以便在多个程序中重用。
    • 展示了如何将函数encryptchecksum组合成一个安全库。
  3. 静态库的创建和使用

    • 讲解了如何将多个对象文件(.o)打包成一个静态库(.a)。
    • 介绍了如何使用ar命令创建静态库,并如何使用-L-l选项在编译时链接静态库。
  4. 动态库的创建和使用

    • 讲解了如何创建动态库(在不同操作系统上可能有不同的扩展名,如.dll、.so、.dylib)。
    • 介绍了如何使用-shared选项和-fPIC(生成位置无关代码)编译选项来创建动态库。
    • 讨论了在运行时如何通过设置环境变量(如LD_LIBRARY_PATHPATH)来定位动态库。
  5. 库的组织和包含

    • 讨论了如何组织和包含头文件(.h),以便在不同的项目中共享。
    • 介绍了如何使用标准目录或全路径名来包含头文件。
  6. 编译和链接命令

    • 详细解释了使用gcc进行编译和链接时的各种命令和选项。
  7. 实际应用案例

    • 通过一个健身房设备监控的例子,展示了如何使用静态和动态库来处理不同国家的不同度量单位和设备。
  8. OpenCV库的介绍

    • 简要介绍了OpenCV库,这是一个用于实时图像处理的开源计算机视觉库。
    • 提供了如何使用OpenCV来创建一个简单的入侵检测系统的概念。

本章通过实例和详细步骤,使读者能够理解库的重要性,以及如何在C语言项目中有效地使用静态和动态库。同时,也提供了关于如何组织代码和头文件以便于重用的最佳实践。

WCC++三五章
第三章

文件中的内容涵盖了对称密码算法的多个方面,包括基本概念、算法分类、特定算法(如RC4和DES/3DES)的详细介绍,以及SM4算法的实现。以下是对3.4和3.5节内容的重点总结,特别是3.4.4节:

3.4 对称密码算法

3.4.1 对称加解密算法的分类
  • 流加密算法:使用伪随机密钥流与明文进行异或操作,常见的有RC4。
  • 分组加密算法:将明文分成等长块,用相同密钥对每块加密,如DES、3DES、AES。
3.4.2 流加密算法
  • 基本概念:使用伪随机数据流作为密钥,与明文逐位异或。
  • 优点:速度快,硬件实现简单,实时性好。
  • 缺点:错误传播,软件实现复杂,扩散性差。
3.4.3 RC4算法
  • 概述:由Ron Rivest设计,密钥长度1~256字节,广泛用于SSL/TLS和WEP。
  • 特点:算法简单,执行速度快,密钥流长度可变。
  • 原理:通过密钥生成伪随机密钥流,然后与明文异或。
3.4.4 DES和3DES算法
  • DES概述:分组加密算法,使用64位分组,56位有效密钥。
  • 密钥:64位用户密钥转换为56位工作密钥,生成16个子密钥。
  • 原理:明文分组经过16轮加密,每轮使用不同的子密钥。
  • 3DES:使用两个或三个不同的密钥对DES加密三次,增强安全性。

3.5 OpenSSL中的对称加解密

  • 基本概念:加密技术将数据转换为不可读格式,以保护信息安全。
  • OpenSSL支持:提供对称和非对称加密算法的实现。
  • 函数介绍
    • EVP_CIPHER_CTX_init:初始化加密上下文。
    • EVP_EncryptInit_ex:设置加密算法和密钥。
    • EVP_EncryptUpdateEVP_EncryptFinal_ex:执行加密。
    • EVP_DecryptInit_exEVP_DecryptUpdateEVP_DecryptFinal_ex:执行解密。

3.4.4 SM4算法的实现

  • 概述:国密算法SM4,适用于无线局域网安全。
  • 密钥扩展:从128位密钥生成32个轮密钥。
  • 轮函数:非线性变换和线性变换的组合。
  • 加密算法:32次迭代运算,每次使用轮函数。
  • 解密算法:与加密算法结构相同,轮密钥顺序相反。

这部分内容详细介绍了对称加密算法的工作原理和实现方式,特别强调了RC4、DES/3DES和SM4算法的细节,以及如何在实际应用中使用OpenSSL库进行对称加密和解密操作。

第五章

第5章主要讨论了密码学中常见的编码格式,特别是Base64编码和ASN.1(抽象语法表示)及其相关编码规则。以下是对第5章,尤其是5.3.7节的重点内容总结:

5.3.7 ASN.1的文法描述

ASN.1(Abstract Syntax Notation One)是一种标准的语法描述语言,用于数据结构的描述和编码。它广泛应用于数据通信和网络协议中,特别是在需要跨平台、跨语言进行数据交换的场合。

1. ASN.1的优点
  • 独立于机器:与特定硬件平台无关。
  • 独立于程序语言:不依赖于任何特定的编程语言。
  • 独立于应用程序的内部表示:使用统一的方式来描述数据结构。
2. ASN.1的文法描述

ASN.1提供了一套丰富的数据类型,包括基本类型(如整数、字符串、位串等)和结构类型(如序列、集合等)。这些数据类型可以组合使用,以描述复杂的数据结构。

3. ASN.1编码规则

ASN.1定义了多种编码规则,用于将ASN.1描述的数据结构转换为二进制形式,以便于在网络上传输。主要的编码规则包括:

  • BER(Basic Encoding Rules):最基础的编码规则,允许多种编码方式,具有一定的灵活性。
  • DER(Distinguished Encoding Rules):是BER的子集,要求编码具有唯一性,适用于需要确保数据一致性的场景。
  • CER(Canonical Encoding Rules):用于确保数据在不同系统间传输时的一致性。
4. ASN.1的应用

ASN.1广泛应用于各种网络协议和安全协议中,如X.509证书、PKCS(Public Key Cryptography Standards)、SNMP(Simple Network Management Protocol)等。它为这些协议提供了一种标准化的方法来描述和编码数据。

5. ASN.1的实现

在实际应用中,ASN.1可以通过ASN.1编译器转换为特定编程语言的代码,从而实现对ASN.1数据结构的编解码。这些编译器支持多种语言,如C、C++、Java等,使得开发者可以在不同的编程环境中使用ASN.1。

总结

第5章详细介绍了Base64编码和ASN.1及其编码规则,这些都是在网络通信和数据交换中非常重要的概念和技术。通过理解和应用这些编码格式,可以确保数据在不同系统和平台间的兼容性和安全性。特别是ASN.1,它提供了一种强大而灵活的方法来描述和编码复杂的数据结构,是现代网络协议设计的基础。

对 AI 总结的反思与补充(2分)

  • AI总结的问题
HFC第八章

第八章的学习重点和难点主要集中在对静态库和动态库的深入理解和应用上。以下是本章的主要学习重点和难点:

学习重点:

  1. 理解静态链接与动态链接的区别

    • 掌握静态链接和动态链接的基本概念和它们在实际应用中的使用场景。
    • 理解静态链接的编译时链接和动态链接的运行时链接的特点。
  2. 掌握静态库和动态库的创建方法

    • 学习如何将代码组织成库,包括对象文件(.o)和静态库(.a)的创建。
    • 学习如何创建动态库,并了解不同操作系统下动态库的文件扩展名和创建方法。
  3. 了解库的使用和编译链接命令

    • 掌握如何使用ar命令创建和使用静态库。
    • 掌握如何使用gcc命令和相关选项(如-L-l)来编译和链接库。
  4. 学习头文件的组织和包含策略

    • 理解如何有效地组织和包含头文件,以便在多个项目中共享。
  5. 实际应用案例分析

    • 分析如何使用静态和动态库解决实际问题,如处理不同国家的不同度量单位。
  6. OpenCV库的初步了解

    • 了解OpenCV库的基本功能和如何用于创建入侵检测系统。

学习难点:

  1. 静态库与动态库的选择和使用

    • 理解在何种情况下选择静态库或动态库,并掌握它们各自的优势和局限。
  2. 动态库的运行时链接机制

    • 掌握动态库的运行时链接原理,以及如何通过环境变量来管理动态库的搜索路径。
  3. 编译和链接命令的灵活运用

    • 熟练运用gcc的各种编译和链接命令,特别是与库相关的命令选项。
  4. 跨平台动态库的创建和使用

    • 理解不同操作系统(如Windows、Linux、Mac)上创建和使用动态库的差异。
  5. OpenCV库的实际应用

    • 掌握如何使用OpenCV进行图像处理,并将其应用于实际问题,如入侵检测。

通过对这些重点和难点的深入学习,读者将能够更好地理解库的概念,掌握在C语言项目中如何有效地使用静态和动态库,以及如何利用OpenCV库进行基本的图像处理和分析。

CC++三五章

第三章的学习重点和难点主要集中在理解对称加密算法的工作原理、加密模式、以及如何使用OpenSSL库进行加密操作。以下是本章的主要学习重点和难点:

学习重点:

  1. 对称加密算法的分类

    • 理解流加密和分组加密的区别和应用场景。
  2. RC4算法

    • 掌握RC4算法的工作原理,包括密钥流的生成和使用。
  3. DES和3DES算法

    • 理解DES算法的加密过程,包括密钥的生成和16轮的迭代加密过程。
    • 了解3DES算法如何通过使用两个或三个密钥增强安全性。
  4. SM4算法

    • 掌握SM4算法的特点和加密解密过程,包括密钥扩展和轮函数的使用。
  5. OpenSSL中的对称加密

    • 学习如何使用OpenSSL库提供的函数进行对称加密和解密操作。

学习难点:

  1. 密钥管理

    • 对称加密中密钥管理是一个复杂的问题,特别是如何在大规模系统中安全地分发和存储密钥。
  2. 加密模式的理解

    • 理解不同的加密模式(如ECB、CBC、CFB、OFB)以及它们的特点和适用场景。
  3. 算法的安全性分析

    • 分析和理解各种对称加密算法的安全性,以及它们在不同情况下的适用性。
  4. 编程实现

    • 将理论知识转化为实际的编程技能,特别是在使用OpenSSL库进行加密解密操作时,如何正确地使用各种函数和处理错误。
  5. 性能考量

    • 理解不同加密算法在性能上的差异,以及如何在安全性和性能之间做出权衡。
  6. OpenSSL库的深入使用

    • 深入理解OpenSSL库的内部机制和高级特性,以便在实际开发中能够灵活运用。

通过对这些重点和难点的深入学习,读者将能够全面理解对称加密算法的工作原理,掌握在实际应用中如何安全有效地使用这些算法进行数据保护。

第5章的学习重点和难点主要集中在理解Base64编码和ASN.1(抽象语法表示)及其相关编码规则的应用。以下是本章的主要学习重点和难点:

学习重点:

  1. Base64编码的原理和应用

    • 理解Base64编码的用途,特别是在电子邮件和网络传输中的应用。
    • 掌握Base64编码和解码的过程。
  2. ASN.1的基本概念

    • 理解ASN.1的语法描述和数据结构表示方法。
  3. ASN.1的数据类型

    • 掌握ASN.1提供的基本数据类型和结构数据类型。
  4. ASN.1编码规则

    • 理解BER、DER和CER等ASN.1编码规则的区别和应用场景。
  5. ASN.1在网络协议中的应用

    • 了解ASN.1如何在X.509证书、PKCS和SNMP等协议中应用。
  6. ASN.1的编程实现

    • 学习如何使用ASN.1编译器将ASN.1模型转换为特定编程语言的代码。

学习难点:

  1. 理解ASN.1的复杂性

    • ASN.1的语法和数据类型描述可能比较抽象,需要深入理解其表示方法。
  2. 编码规则的细微差别

    • BER、DER和CER之间的区别可能难以把握,尤其是它们在实际应用中的使用。
  3. ASN.1编译器的使用

    • 学习如何使用ASN.1编译器,并将ASN.1模型转换为实际可用的代码。
  4. 实际编程应用

    • 将ASN.1的理论知识应用到实际编程中,特别是在处理复杂的数据结构时。
  5. 安全性考虑

    • 理解ASN.1在安全协议中的应用,以及如何确保数据的安全性和一致性。
  6. 跨平台和跨语言的数据交换

    • 掌握如何在不同的系统和编程语言之间使用ASN.1进行有效的数据交换。

通过对这些重点和难点的深入学习,读者将能够更好地理解Base64和ASN.1在现代网络通信中的重要性,以及如何有效地使用这些技术进行数据的编码、传输和解码。

反思与补充
  • 自己的补充
    在第八章学习中,我们应该区别动态库与静态库的区别,如何合理选择动态库与静态库,并且我们应该学会如何利用库文件的内容,可以利用NM命令查看库文件中的符号以及信息的作用以及用法,另外还需要掌握Make file的编写,认识到编写中的常见错误,设备驱动和接口的变化的要求;
    在第三章的学习中我们需要注意对称密码的概念了解什么时对称算法,以及密钥分发的问题,以及分组加密算法的工作模式的理解,了解在实现加密算法时应该遵循的相关标准和规范,确保算法的安全性和兼容性;
    在第五章学习中我们该注意Base64编码以及解码的练习,了解应用的背景,以及具体应用的实例,如何利用编码技术实现安全技术实现,理解PEM格式等等。

学习思维导图(2分)

要求
思维导图
  • 代码
  root((第二章预习报告))
    静态库和动态库
      静态链接
        编译时链接库代码
        更新库需要重新编译
      动态链接
        运行时加载库代码
        不重新编译使用最新库
      创建自己的库
        代码组织成库
        函数encrypt和checksum组合
      静态库的创建和使用
        对象我呢见打包成静态库
        使用AR命令创建库
        使用-L和-l选项链接库
      动态库的创建和使用
        创建动态库
        使用-shared和-fPIC选项
        设置环境变量定位库
      库的组织和包含
        组织包含头文件
        使用标准目录或全路径名
      编译和链接命令
        使用gcc编译链接
        详细命令和选项
      实际应用案例、
        健身房设备监控例子
        处理不同国家度量单位
      OpenCV库的介绍
        OpenCV实时图像处理
        创建入侵检测系统
    
      ::icon(fa fa-book)
    Base64编码和ASN.1
      Base64编码
        Base64编码原理
        Base64编码应用
      ASN.1及其编码规则
        ASN.1文法描述
          丰富的数据类型
          基本类型和结构类型
        ASN.1编码规则
          BER
          DER
          CER 
        ASN.1应用
          X.509证书
          PKCS
          SNMP
        ASN.1实现
          ASN.1编译器
          支持多种语言
    对称密码算法
      3.4 对称密码加解密算法的分类
        流加密算法
          RC4
          使用伪随机密钥流
          与明文进行异或操作
        分组加密算法
          DES
            64位分组
              56位有效密钥
                16个子密钥生成
                  16轮加密过程
          3DES
            两个或三个密钥
              对DES加密三次
          AES
      3.5 OpenSSL中的对称加解密
        基本概念
          数据转换为不可读格式
        OpenSSL支持
          提供对称和非对称加密算法实现
        函数介绍
          EVP_CIPHER_CTX_init
          EVP_EncryptInit_ex
          EVP_EncryptUpdate和EVP_EncryptFinal_ex
          EVP_DecryptInit_ex、EVP_DecryptUpdate和EVP_DecryptFinal_ex
      3.4.4 SM4算法的实现
        概述
          国密算法SM4
        密钥扩展
          从128位密钥生成32个轮密钥
        轮函数
          非线性变换和线性变换的组合
        加密算法
          32次迭代运算
        解密算法
          轮密钥顺序相反
  • 思维导图

在这里插入图片描述

基于 AI 的学习(2分)

要求
  • 至少找到自己理解不是太好 2 个概念,让 AI 对自己进行苏格拉底提问
  • 参考下面提示语或者使用 AI Agent

提示词:“我在学习XXX知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”

  1. 核心是要求AI工具:“请你以苏格拉底的方式对我进行提问”
  2. 然后AI工具就会给你提问,如果不知道问题的答案,可以反问AI:“你的理解(回答)是什么?”
  3. 如果你觉得差不多了,可以先问问AI工具:“针对我XXX知识点,我理解了吗?”
  4. AI工具会给出它的判断,如果你也觉得自己想清楚了,可以最后问AI工具:“我的回答结束了,请对我的回答进行评价总结”,让它帮你总结一下。
学习内容
  • 学习对称密码的对话
    链接
    你的回答展示了你对对称加密算法,特别是AES算法的基本理解。你正确地指出了在AES加密过程中,S盒用于字节替换以增加算法的复杂性和安全性。S盒的设计是为了引入混淆(Confusion),使得密文与密钥之间的关系变得复杂,不易被破解。

如果你能进一步详细说明S盒是如何实现这种混淆的,或者描述一下S盒的一个具体例子,那将有助于更全面地理解这一概念。不过,总体而言,你已经很好地掌握了对称加密算法的一些基本概念和原理。

如果你还有兴趣继续深入探讨这个话题或者其他任何问题,都可以继续提出。继续保持好奇心和求知欲,这对学习任何领域的知识都是非常有益的。

你的回答表明你已经理解了静态库在不同场景下的应用及其潜在的影响。你提到了内存大小、工作效率、跨平台需求等因素,这些都是在选择静态库时需要考虑的重要方面。

特别地,你强调了跨平台需求对于选择静态库的重要性,这是一个非常实际且重要的考量点。静态库可以减少应用程序在不同平台上运行时的依赖问题,使得程序更加便携。

整体而言,你对静态库的理解是准确的,并且能够从多个角度去思考其适用性和局限性。如果你有更多关于静态库或其他计算机科学领域的问题,或者想要进一步探讨某个方面,随时欢迎提出。继续深化你对这些概念的理解将会对你今后的学习和实践非常有帮助

学习实践过程遇到的问题与解决方式(AI 驱动,优先使用AI工具解决问题)(2分)

至少两个

  • 问题 1在学习过程中,我不懂如何科学的使用静态库与动态库,以及在选择中应该考虑哪些实际的因素
    询问kimi后,他给我了解决方法
    在学习如何科学地使用静态库与动态库时,了解它们的特点和适用场景是非常重要的。以下是一些在选择静态库与动态库时应该考虑的实际因素:

静态库(Static Libraries):

优点

  1. 简化部署:应用程序包含所有必要的代码,易于分发和部署。
  2. 性能:由于代码在编译时已经包含在内,可能减少运行时的开销。
  3. 版本控制:可以确保应用程序使用的是特定版本的库。

缺点

  1. 增加可执行文件大小:每个应用程序的副本都会包含库的代码。
  2. 更新困难:如果库更新,需要重新编译和重新部署所有使用该库的应用程序。
  3. 资源浪费:如果多个应用程序使用相同的库,磁盘和内存资源可能会被不必要地重复占用。

动态库(Dynamic Libraries):

优点

  1. 减少可执行文件大小:库代码只需在系统中安装一次,所有应用程序共享。
  2. 易于更新:可以独立于应用程序更新库,无需重新编译应用程序。
  3. 节省资源:多个应用程序可以共享同一份库代码,节省磁盘和内存空间。

缺点

  1. 部署复杂:需要确保库在目标系统上存在,且版本兼容。
  2. 运行时依赖:如果库不存在或版本不兼容,应用程序可能无法运行。
  3. 可能的运行时开销:加载动态库可能需要额外的时间和资源。

选择时考虑的因素:

  1. 应用程序分发:如果你需要将应用程序轻松地分发给最终用户,静态库可能更合适,因为它们简化了部署过程。

  2. 库更新频率:如果库经常更新,动态库允许独立更新库而不需要重新编译应用程序。

  3. 资源利用:如果你关心磁盘空间和内存使用,动态库可以更有效地共享代码。

  4. 性能要求:对于性能敏感的应用程序,可能需要评估静态库和动态库在启动时间和运行时性能上的差异。

  5. 平台和环境:不同的操作系统和运行环境对静态库和动态库的支持程度不同,这可能会影响你的选择。

  6. 许可和版权:库的许可协议可能会限制你使用静态库或动态库的方式。

  7. 安全性:静态库可能更安全,因为它们不依赖于外部文件,减少了潜在的攻击面。

  8. 开发和维护成本:考虑长期维护和支持的成本,以及开发团队对静态库和动态库的熟悉程度。

  9. 用户环境:考虑目标用户的技术环境,例如,如果用户不太可能更新库,静态库可能是更好的选择。

  10. 兼容性:确保所选的库与目标平台和系统架构兼容。

在实际开发中,很多时候会根据项目需求和上述因素的权衡来决定使用静态库还是动态库。有时,甚至在同一应用程序中同时使用静态库和动态库,以获得最佳的结果。

  • 问题 2 对于RC4算法的工作原理,包括密钥流的生成和使用我不太懂让ai帮我解释

RC4(Rivest Cipher 4)是一种流加密算法,由Ron Rivest在1987年为RSA Security设计。它是一种对称密钥加密算法,意味着加密和解密使用相同的密钥。RC4以其简单和速度快而著称,曾经被广泛使用在各种安全协议中,如SSL/TLS和WEP。

RC4算法的工作原理包括两个主要阶段:密钥调度算法(Key-Scheduling Algorithm, KSA)和伪随机生成算法(Pseudo-Random Generation Algorithm, PRGA)。

  1. 密钥调度算法(KSA):这个阶段使用一个可变长度的密钥来初始化一个256字节的状态向量S,其中包含了0到255的值。然后,使用密钥对S进行重新排列。

  2. 伪随机生成算法(PRGA):在KSA的基础上,PRGA生成一个伪随机的字节流,称为密钥流。这个密钥流与明文进行逐字节的XOR操作,生成密文。解密过程与加密过程类似,只不过是将密钥流与密文进行XOR操作,恢复出明文。

RC4算法的特点是:

  • 支持可变长度的密钥,从40位到2048位不等。
  • 加密和解密过程相同,都是通过XOR操作与密钥流结合。
  • 速度快,适合软件和硬件实现。

然而,RC4也存在一些已知的弱点,例如在密钥流的初始部分存在偏差,这可能被利用来恢复密钥。因此,许多组织和协议已经停止使用RC4,并推荐使用更安全的加密算法,如AES或ChaCha20。

总的来说,RC4曾经是一种广泛使用的流加密算法,但由于其安全性问题,现在已经不推荐在新的应用中使用。

作业提交要求(1分)

  1. 提交Markdown 文件,文档命名“学号姓名《密码系统设计》.md”
  2. 提交Markdown 文件转为 PDF,文档命名“学号姓名《密码系统设计》第 X 周.pdf”
  3. 提交代码托管链接(可选):学号姓名 gitee(github) 链接
  4. 内容质量高有加分

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值