第三周预习报告

密码系统设计

第三周预习报告

学习内容

AI 对学习内容的总结(1分)

要求
  • 让AI(kimi,元宝等)阅读学习内容并进行总结,教材内容可以使用微信读书或者云班课电子教材
总结
  • 1.嗨翻C第四章
    本章内容主要围绕C语言编程中的一些核心概念和实践技巧,特别是在处理大型项目和使用多个源文件时的代码组织和管理。以下是本章的关键点总结:
  1. 编译器的作用:介绍了编译器如何将源代码分解成小部分,然后重建为一个大型程序的过程。

  2. 数据类型:深入探讨了C语言中不同类型的数据(如字符、整数、浮点数)及其存储方式,包括ASCII码、整数和浮点数的存储。

  3. 使用多个源文件:解释了如何将大型程序拆分成多个可管理的小源文件,以及如何使用make工具来自动化编译过程。

  4. 类型转换:讨论了如何在整数和浮点数之间进行转换,以及如何使用类型转换来确保数据类型的正确性。

  5. 头文件的使用:介绍了如何使用头文件来声明函数和变量,以及如何通过头文件来共享代码。

  6. 编译过程:详细描述了编译过程的四个阶段:预处理、编译、汇编和链接。

  7. 自动化构建:通过makefile文件,可以告诉make工具如何编译和链接程序,从而自动化构建过程。

  8. 代码共享:讨论了如何在不同的程序之间共享代码和变量,以及如何通过分离函数声明和定义来提高代码的可维护性。

  9. 编译优化:介绍了如何通过保存对象文件来加快编译速度,以及如何通过make工具来避免不必要的重新编译。

  10. make工具的使用:详细说明了如何创建makefile文件,以及如何使用make命令来编译和链接程序。

  11. Arduino编程:最后,本章还提供了一个Arduino编程实验室,介绍了如何使用Arduino和C语言来创建一个可以监测植物土壤湿度并与之交互的设备。

整体而言,本章内容强调了代码的组织、编译过程的理解以及如何使用工具来提高编程效率。通过这些实践,程序员可以更好地管理大型项目,确保代码的清晰和可维护性。

  • 2.C加解密
    本章内容主要围绕杂凑函数(Hash函数)、HMAC以及SHA系列算法进行了深入探讨,以下是4.2、4.3和4.5节的重点内容总结:

4.2 杂凑函数和HMAC

  • 杂凑函数概述:介绍了杂凑函数的定义、特性(如单向性、抗碰撞性等)和应用场景(如数字签名、认证方案)。
  • 密码学与杂凑函数:讨论了杂凑函数在信息安全中的重要性,特别是在网络通信中确保消息完整性和不可否认性的作用。
  • 杂凑函数的发展:从最初的消息认证到现代密码学中的关键工具,杂凑函数经历了重要的发展过程。
  • 杂凑函数的设计:主要分为基于分组密码算法的杂凑函数和直接构造的杂凑函数,其中迭代型杂凑算法如SM3被特别提及。
  • 杂凑函数的分类:分为不带密钥的杂凑函数(如MD5、SHA-1)和带密钥的杂凑函数(如HMAC),后者提供身份认证功能。
  • 杂凑函数的碰撞:碰撞是杂凑算法安全性的重要考量,介绍了碰撞的概念和对数字签名安全性的影响。

4.3 HMAC

  • 什么是HMAC:HMAC是一种基于密钥的杂凑运算消息认证码,用于提供消息的完整性和认证性。
  • 产生背景:随着互联网的发展,HMAC被设计出来以应对网络安全问题,确保数据传输的安全性。
  • 设计目标:HMAC的设计目标包括易于使用已知的散列函数、保持散列函数性能、简单处理密钥等。
  • 算法描述:详细介绍了HMAC的算法流程,包括密钥处理、消息填充、哈希计算等步骤。
  • 独立实现HMAC-SM3:提供了HMAC-SM3算法的具体实现代码,展示了如何在实际编程中应用HMAC。

4.5 SHA系列杂凑算法

  • SHA算法概述:介绍了SHA算法的发展历程,包括SHA-1、SHA-2和SHA-3,其中SHA-2是目前应用最广泛的。
  • SHA的发展史:从最初的SHA-0到SHA-1,再到SHA-2和SHA-3的发布,反映了算法在安全性和效率上的不断改进。
  • SHA系列算法的核心思想和特点:SHA算法通过接收明文并转换成固定长度的密文,具有单向性和抗碰撞性。
  • SHA256算法原理解析:深入分析了SHA256算法的原理,包括初始化、信息预处理、逻辑运算等步骤。
  • SHA384和SHA512算法:讨论了这两种算法的原理和实现,它们是SHA-2算法的一部分,提供更高级别的安全性。

整体而言,本章内容强调了杂凑函数和HMAC在现代密码学中的核心地位,特别是在确保数据完整性和认证方面的重要性。同时,通过介绍SHA系列算法,展示了杂凑函数在实际应用中的广泛性和有效性。

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

反思与补充
  • AI总结的问题
    • 1.嗨翻C
      在学习本章内容时,您可能会遇到以下问题:
  1. 理解编译器的作用

    • 初学者可能难以理解编译器如何将源代码分解并重建为可执行程序的具体过程。
  2. 掌握数据类型

    • 各种数据类型(如字符、整数、浮点数)及其在内存中的表示可能会让初学者感到困惑。
  3. 使用多个源文件

    • 管理大型项目时如何有效地组织多个源文件和头文件可能是一个挑战。
  4. 类型转换

    • 理解何时以及如何进行类型转换,以确保数据类型的正确性和程序的准确性。
  5. 头文件的使用

    • 学习如何正确使用头文件来声明函数和变量,避免重复定义和编译错误。
  6. 编译过程的理解

    • 编译过程的四个阶段(预处理、编译、汇编和链接)可能难以完全掌握,特别是它们如何相互协作。
  7. 自动化构建

    • 编写makefile文件来自动化构建过程可能对初学者来说比较复杂。
  8. 代码共享

    • 学习如何在不同程序或模块之间共享代码,以及如何避免命名冲突和依赖问题。
  9. 编译优化

    • 理解并实施编译优化策略,如使用对象文件来加速编译过程。
  10. make工具的使用

    • 正确编写和使用makefile可能需要一定的实践和经验积累。
  11. Arduino编程

    • 对于没有硬件编程经验的程序员来说,理解如何将C语言应用于Arduino设备可能需要额外的学习。

为了解决这些问题,您可以采取以下措施:

  • 实践操作:通过实际编写代码和项目来加深理解。
  • 查阅文档:对于编译器、make工具和Arduino编程,官方文档是很好的学习资源。
  • 在线课程和教程:参加在线编程课程或阅读相关教程,这些通常包含示例和练习。
  • 社区和论坛:加入编程社区和论坛,向其他开发者提问和交流经验。
  • 分步学习:将复杂的概念分解成小部分,逐一攻克。
  • 实验和调试:通过实验不同的代码和配置,以及使用调试工具来理解代码行为。

记住,编程是一个实践性很强的技能,不断练习和应用所学知识是提高的关键。

  • C加解密
    在学习4.2、4.3和4.5节关于杂凑函数、HMAC和SHA系列算法的内容时,您可能会遇到以下问题:
  1. 理解杂凑函数的单向性和抗碰撞性

    • 初学者可能难以理解为什么杂凑函数是单向的,以及抗碰撞性的重要性。
  2. 杂凑函数的应用场景

    • 可能不清楚杂凑函数如何在数字签名和认证方案中具体应用。
  3. 杂凑函数的分类和区别

    • 难以区分不带密钥的杂凑函数和带密钥的杂凑函数(如HMAC)之间的不同。
  4. 杂凑函数的碰撞概念

    • 碰撞的含义和它如何影响杂凑函数的安全性可能不够直观。
  5. HMAC的工作原理

    • HMAC的密钥处理和消息填充步骤可能难以完全理解。
  6. HMAC与杂凑函数的关系

    • 可能不清楚HMAC如何利用杂凑函数来提供消息认证。
  7. SHA系列算法的发展历程

    • SHA算法的历史演变和各个版本之间的联系可能难以把握。
  8. SHA算法的核心思想和特点

    • SHA算法的单向性和抗碰撞性可能需要进一步的实例来加深理解。
  9. SHA256算法的详细步骤

    • SHA256算法的初始化、信息预处理和逻辑运算步骤可能较为复杂,难以一次性掌握。
  10. SHA384和SHA512算法的特点

    • 这两种算法与SHA256的相似之处和区别可能需要更多的对比和实例来理解。
  11. 算法实现中的编程问题

    • 在实际编写代码实现算法时,可能会遇到语法错误、逻辑错误等问题。
  12. 算法性能和安全性的评估

    • 如何评估一个杂凑函数或HMAC实现的性能和安全性可能是一个挑战。

为了克服这些问题,您可以采取以下措施:

  • 深入研究:通过阅读更多关于杂凑函数和HMAC的专业资料来加深理解。

  • 实践操作:通过编写和测试代码来实际应用所学知识。

  • 案例分析:研究杂凑函数和HMAC在实际安全协议中的应用案例。

  • 讨论和交流:加入相关的技术社区,与其他学习者和专家进行讨论。

  • 实验验证:通过实验来验证杂凑函数和HMAC的安全性和性能。

  • 逐步学习:将复杂的概念分解成小部分,逐一理解和掌握。

  • 自己的补充

1.编译器的作用:除了提到的编译器将源代码转化为可执行程序的过程外,还可以补充一点关于编译器的优化选项,这可以帮助开发者在编译过程中调整性能与代码大小之间的平衡。
2.数据类型:在介绍ASCII码、整数和浮点数存储的同时,可以增加一些关于位运算符的应用场景,因为它们在处理特定数据类型或实现某些算法时非常有用。
3.使用多个源文件:对于大型项目来说,模块化设计是非常重要的。可以进一步探讨如何合理地分割功能到不同的源文件中,以及如何管理和解决命名冲突的问题。
4.类型转换:除了基本的类型转换之外,还可以讨论强制类型转换的注意事项,特别是当涉及到指针类型转换时需要格外小心。
5.头文件的使用:可以扩展讨论如何在头文件中防止多次包含(使用#ifndef, #define, #endif等预处理器指令),以及如何有效地组织头文件中的内容以减少编译时间。
6.编译过程:对于编译过程的四个阶段,可以进一步解释每个阶段的具体操作,例如预处理阶段是如何处理宏定义和条件编译指令的。
7.自动化构建:除了使用make工具外,还可以提到现代的构建系统如CMake、Meson等,它们提供了更强大的跨平台支持和更灵活的配置选项。
8.代码共享:强调动态链接库(DLLs或SOs)的概念和使用,这对于开发可插拔的软件架构很有帮助。
9.编译优化:可以进一步探讨增量编译的概念,即只编译那些确实需要更新的部分,这对于持续集成/持续部署(CI/CD)环境尤为重要。
10.Arduino编程:Arduino编程是一个很好的实例,展示了如何将理论知识应用于实际硬件控制。还可以提及一些传感器接口的常见标准和协议,以及如何编写健壮的嵌入式软件。
11.密码学与杂凑函数:在网络通信中确保消息完整性和不可否认性。
12.杂凑函数的碰撞:碰撞会削弱数字签名的安全性。
13.HMAC算法具体步骤:包括检查密钥长度、异或运算、填充、哈希计算等。
14.SHA算法单向性与抗碰撞性:接收明文并转换成固定长度的密文,确保信息的不可逆性及防碰撞能力。

学习思维导图(2分)

  • Mermaid 代码
mindmap
  root((第三周预习报告))
    C语言核心概念与实践技巧
      编译器的作用
        分解源代码
        重建大型程序
      ::icon(fa fa-book)
      数据类型
        字符
        整数
        浮点数
        ASCII码
        整数存储
        浮点数存储
      使用多个源文件
        拆分大型程序
        管理小源文件
        自动化编译
      类型转换
        整数与浮点数
        类型转换确保正确性
      头文件的使用
       声明函数和变量
       共享代码
      编译过程
        预处理
        编译
        汇编
        链接
      自动化的构建
        makefile文件
        自动化构建过程
      代码共享
        共性代码和变量
        分离声明和定义
      编译优化
        保存对象文件
        加快编译速度
        避免不必要的重新编译
      make工具的使用
        创建makefile文件
        使用make命令
      Arduino编程
        Arduino与C语言
        监测植物土壤湿度
        设备交互
    杂凑函数和HMAC
      4.2 杂凑函数概述
        定义
          输入任意长度
          输出固定长度
          单向性
          抗碰撞性
        特性
          单向性
          抗碰撞性
        应用场景
          数字签名
          认证方案
        发展
          消息认证
          现代密码学
        设计
          基于分组密码
          直接构造
        分类
          不带密钥
            MD5
            SHA-1
          带密钥
            HMAC
        碰撞
          概念
          对安全性的影响
        
      4.3 HMAC
        什么是HMAC
          基于密钥
          消息认证
        产生背景
          互联网发展
          网络安全
        设计目标
          使用已知散列函数
          保持性能
          简单处理密钥
        算法描述
          密钥处理
          消息填充
          哈希计算
        实现HMAC-SM3
          代码实现
      4.5 SHA系列杂凑算法
        SHA算法概述
          发展历程
          SHA-1
          SHA-2
          SHA-3
        SHA的发展史
          从SHA-0到SHA-1
          SHA-2和SHA-3
        核心思想和特点
          单向性
          抗碰撞性
        SHA256算法原理
          初始化
          信息预处理
          逻辑运算
        SHA384和SHA512
          原理
          实现

  • 截图
    在这里插入图片描述

基于 AI 的学习(2分)

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

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

  1. 核心是要求AI工具:“请你以苏格拉底的方式对我进行提问”
  2. 然后AI工具就会给你提问,如果不知道问题的答案,可以反问AI:“你的理解(回答)是什么?”
  3. 如果你觉得差不多了,可以先问问AI工具:“针对我XXX知识点,我理解了吗?”
  4. AI工具会给出它的判断,如果你也觉得自己想清楚了,可以最后问AI工具:“我的回答结束了,请对我的回答进行评价总结”,让它帮你总结一下。
学习内容

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

至少两个

  • 问题 1在学习编译的过程这一知识点时,我觉的不是很熟悉,尤其是四个过程中如何协作,在询问kimi以及向舍友请教后解决了这一问题
    确实,理解编译过程的四个阶段以及它们如何协同工作对于初学者来说可能是个挑战。让我们逐一深入探讨每个阶段:
  1. 预处理(Preprocessing)

    • 在这个阶段,预处理器会根据特定的预处理指令(如#include#define等)处理源代码文件。
    • 它会展开所有的宏定义,包含所有需要的头文件,处理条件编译指令等。
    • 预处理后的代码仍然是一种文本形式,并不是最终的汇编代码或机器代码。
  2. 编译(Compilation)

    • 编译器将预处理后的源代码转换成汇编语言。
    • 这个阶段涉及到语法分析、语义分析、中间代码生成、优化以及代码生成等步骤。
    • 编译器会检查源代码中的语法错误,并将其转换成机器可以理解的低级代码。
  3. 汇编(Assembly)

    • 汇编器将编译后生成的汇编代码转换成机器代码。
    • 汇编代码是一种低级语言,它非常接近机器语言,但仍然包含一些助记符来方便阅读和编写。
    • 汇编器的工作是将这些助记符转换成CPU可以执行的二进制指令。
  4. 链接(Linking)

    • 链接器将一个或多个目标文件(由汇编阶段生成的机器代码)与库文件、其他资源合并,生成最终的可执行文件。
    • 如果程序中调用了其他文件或库中的函数,链接器会解析这些外部引用,确保程序中的函数调用能够正确链接到它们的实现。
    • 链接器还会处理内存分配、符号解析等任务。

这四个阶段是相互协作的,源代码经过预处理、编译、汇编,最后由链接器将所有部分整合成最终的可执行文件。理解每个阶段的具体任务和它们如何相互作用对于深入理解编译过程至关重要。

  • 问题 2,HMAC与杂凑函数的关系中HMAC如何利用哈希函数提供消息认证?
    HMAC(Hash-Based Message Authentication Code)是一种通过使用杂凑函数来提供信息认证的方法。它结合了密钥和杂凑函数来确保消息的完整性和真实性。下面是HMAC如何利用杂凑函数来提供消息认证的步骤:
  1. 密钥准备

    • 如果提供的密钥长度大于杂凑函数的块大小(例如,对于SHA-256,块大小是512位),则先对密钥进行杂凑,以产生一个固定长度的密钥。
    • 如果密钥长度小于块大小,则直接在密钥后填充,直到达到块大小。
  2. 内垫(Inner Padding)

    • 将处理后的密钥与内垫(通常是一个块大小的值,由0x36组成)进行异或(XOR)操作。
    • 将这个结果与原始消息进行连接。
  3. 第一次杂凑

    • 使用杂凑函数对上一步得到的连接结果进行杂凑,产生一个中间的杂凑值。
  4. 外垫(Outer Padding)

    • 将处理后的密钥与外垫(通常是一个块大小的值,由0x5C组成)进行异或操作。
    • 将这个结果与上一步产生的中间杂凑值进行连接。
  5. 第二次杂凑

    • 使用杂凑函数对上一步得到的连接结果再次进行杂凑,产生最终的HMAC值。
  6. 输出

    • 最终的HMAC值通常与原始消息一起传输,接收方可以使用相同的密钥和HMAC过程来验证消息的完整性和真实性。

通过这种方式,HMAC不仅利用了杂凑函数的单向性和抗碰撞性,还通过密钥的使用增加了消息认证的安全性。即使两个不同的消息产生了相同的杂凑值(这种情况极为罕见),由于HMAC使用了密钥,攻击者也无法构造一个有效的HMAC来进行欺骗,因为它们不知道密钥。这样,HMAC就能为消息提供强大的认证机制。

作业提交要求(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、付费专栏及课程。

余额充值