《密码系统设计》第三周

第三周预习报告

学习内容

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

要求

  • 让AI阅读学习内容并进行总结

总结

1. Head First C 嗨翻 C 语言 第4章

在C语言中,函数是执行特定任务的代码块,可以被重复调用。以下是一些关于C语言函数的关键点:

  1. 定义函数:使用关键字 int(或其他数据类型)和 return 语句来定义一个函数,这表示函数的返回类型和返回值。
  2. 函数参数:函数可以有参数,这些参数在函数调用时传递给函数,用于传递数据。
  3. 局部变量:在函数内部定义的变量称为局部变量,它们只在函数内部可见。
  4. 返回值:函数可以通过 return 语句返回一个值给调用者。
  5. 函数调用:调用函数时,需要使用函数名和括号,括号内可以包含传递给函数的参数。
  6. 函数原型:在C语言中,可以在函数实际定义之前声明函数原型,这有助于编译器理解函数的类型和参数。
  7. 作用域:函数内部的变量只在该函数内部有效,而全局变量则在整个程序中都有效。
  8. 递归:函数可以调用自身,这种技术称为递归,常用于解决复杂问题,如算法中的树遍历。
  9. 函数指针:在C语言中,可以创建指向函数的指针,这允许更高级的编程技巧,如回调函数。
  10. 标准库函数:C语言提供了许多标准库函数,如 printfscanf,这些函数在程序中广泛使用。

2. 《Windows C/C++加密解密实战》4.2 SM3杂凑算法

  1. 算法概述
  • SM3算法由王小云等人设计,用于生成256比特(32字节)的杂凑值。
  • 算法采用Merkle-Damgard结构,消息分组为512比特,输出杂凑值为256比特。
  • 算法的压缩函数与SHA-256类似,但设计更为复杂,如每轮使用两个消息字,消息拓展过程使用5个消息字。
  1. 算法细节
  • 常量和函数:定义了算法中使用的初始值IV、常量和布尔函数。
  • 填充:消息末尾添加一个“1”和若干“0”,以及一个64位的比特串表示消息长度,确保填充后的消息长度为512的倍数。
  • 迭代压缩:将消息分组,通过压缩函数迭代生成杂凑值。
  • 消息扩展:将消息分组扩展为多个字,用于压缩函数。
  • 压缩函数:使用字寄存器和中间变量,按照一定的计算流程生成杂凑值。
  1. 算法实现
  • 一段式实现:提供了一个函数,输入全部消息,得到哈希值。
  • 三段式实现:提供了初始化(Init)、中间处理(Update)和结束(Final)三个函数,适用于分批处理消息的场景。
  • OpenSSL实现:介绍了如何使用OpenSSL库中的函数来实现SM3算法,这种方法简化了实现过程。
  1. 实践指南
  • 提供了使用Visual C++ 2017实现SM3算法的步骤,包括新建工程、编写代码、设置编译选项等。
  • 提供了具体的代码示例,包括一段式和三段式SM3算法的实现,以及如何使用OpenSSL库。
  1. 测试和验证
  • 描述了如何编写测试代码来验证算法实现的正确性,并展示了预期的运行结果。

3. 《Windows C/C++加密解密实战》4.3 HMAC

  1. 定义:HMAC是一种结合了密钥和哈希函数的消息认证方法,它可以与任何迭代型散列函数一起使用,如SM3、SHA-1、SHA-256等。
  2. 产生背景:随着互联网的发展,网络安全变得越来越重要。HMAC提供了一种通过散列函数进行消息认证的方法,确保消息在传输过程中的完整性和发送者的身份验证。
  3. 设计目标
  • 直接使用已知的散列函数,易于实现且执行速度快。
  • 能够轻松替换为更快或更安全的散列函数。
  • 保持散列函数的性能,不因嵌入HMAC而降低。
  • 密钥的使用和处理简单。
  • 能够根据散列函数的强度推断出认证机制的安全性。
  1. 算法描述
  • HMAC算法需要一个哈希函数和一个密钥。
  • 密钥长度大于哈希函数块大小时,先进行哈希处理;小于则填充至块大小。
  • 使用密钥与特定填充(ipad和opad)进行两次哈希运算,第一次使用ipad,第二次使用opad。
  1. 运算步骤
  • 检查并调整密钥长度。
  • 将密钥与ipad进行异或运算。
  • 将消息与上一步的结果结合,进行哈希运算。
  • 将密钥与opad进行异或运算。
  • 将上一步的哈希结果与opad的结果结合,进行第二次哈希运算。
  • 输出最终的HMAC值。
  1. 代码实现:您提供了一个使用C++实现HMAC-SM3算法的例子,包括了函数的声明、实现和测试代码。这个过程展示了如何将HMAC算法应用到实际的编程中,以确保数据的安全性。

4. 《Windows C/C++加密解密实战》4.5 更通用的基于OpenSSL的哈希运算

  1. EVP概述
  • EVP是OpenSSL中的一个高级加密算法库,它封装了多种加密算法,使得开发者可以通过统一的接口使用不同的加密技术。
  1. EVP函数
  • EVP_MD_CTX_create:创建并初始化摘要上下文结构体。
  • EVP_MD_CTX_destroy:销毁摘要上下文结构体。
  • EVP_DigestInit_ex:初始化摘要算法。
  • EVP_DigestUpdate:更新摘要计算,可以多次调用以处理大数据。
  • EVP_Digest_Final_ex:完成摘要计算并输出结果。
  • EVP_Digest:用于计算短消息的摘要。
  1. 获取摘要算法
  • EVP_get_digestbyname:根据算法名称(如"sha256")获取对应的摘要算法结构体。
  1. 使用EVP进行哈希运算
  • 首先,需要包含头文件#include<openssl/evp.h>
  • 使用EVP_MD_CTX_create创建并初始化摘要上下文。
  • 使用EVP_DigestInit_ex设置摘要算法。
  • 通过EVP_DigestUpdate多次更新数据,实现多包哈希运算。
  • 最后,使用EVP_Digest_Final_ex获取哈希结果。
  1. 代码示例
  • 提供了一个示例代码,展示了如何使用EVP进行SHA512哈希运算。
  • 示例中演示了如何更换哈希算法,只需更改EVP_get_digestbyname的参数。
  • 还展示了如何进行多包哈希运算,并格式化输出哈希结果。
  1. 配置环境
  • 在Visual Studio中配置工程,需要添加OpenSSL的包含目录和库目录。
  1. 运行结果
  • 运行示例代码后,将显示计算出的哈希值。

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

要求

  • AI总结的问题
  • 自己的补充

反思与补充

1. 反思

在学习中利用AI助手对知识点进行总结,可以帮助我们对知识点进行梳理,有助于我们更全面地理解、掌握学习内容。同时,AI助手还能帮助我们对不理解的知识点展开更为详细的解释,确保我们能对所学内容清晰掌握。

2. 补充

1. Head First C 嗨翻 C 语言 第4章

  1. 函数的重要性:函数是编程中的基础构件,它们帮助我们模块化代码,提高代码的可读性和可重用性,我们应该思考如何设计函数以使其更加高效和易于维护。
  2. 参数传递:C语言中有两种参数传递方式:值传递和指针传递。值传递是默认方式,它传递参数的副本,而指针传递则允许函数直接修改原始数据。理解这两种方式的区别对于编写正确的程序至关重要。
  3. 函数的副作用:一些函数可能会改变程序的状态,例如修改全局变量或文件系统。在设计和使用函数时,应该明确函数的副作用,并考虑它们对程序行为的影响。

2. 《Windows C/C++加密解密实战》4.2 SM3杂凑算法

  • 算法安全性
    文章主要介绍了算法的实现,但没有深入讨论SM3算法的安全性。在实际应用中,了解算法的安全性和抗攻击能力是非常重要的。需要补充学习一些关于SM3算法安全性的研究和分析,以及它在不同场景下的适用性。
  • 性能考量
    算法的效率和性能也是实际应用中需要考虑的因素。需要补充学习一些关于SM3算法在不同硬件和软件环境下的性能测试结果,以及与其他杂凑算法(如SHA-256)的性能比较。

3. 《Windows C/C++加密解密实战》4.3 HMAC

  1. 安全性分析
  • 需要考虑HMAC在不同场景下的安全性,包括对抗常见的攻击手段,如重放攻击、篡改攻击等。
  • 分析密钥管理的重要性,因为密钥的泄露或弱密钥都可能导致HMAC机制的失效。
  1. 密钥长度和强度
  • 密钥长度应足够长,以抵抗暴力破解攻击。
  • 密钥应该随机生成,并且每次通信都尽可能使用不同的密钥。

4. 《Windows C/C++加密解密实战》4.5 更通用的基于OpenSSL的哈希运算

  • 安全性考虑
    在使用EVP进行哈希运算时,需要考虑算法的安全性。例如,SHA-1算法已经不再被认为是安全的,因为它容易受到碰撞攻击。因此,选择如SHA-256或更高版本的哈希算法是更安全的选择。
  • 错误处理
    在实际应用中,对每个EVP函数调用的结果进行检查是非常重要的。如果函数返回0,应该检查并处理错误,例如通过调用ERR_print_errors_fp(stderr)来打印错误信息。

学习思维导图(2分)

要求

思维导图

1. Head First C 嗨翻 C 语言 第4章


2. 《Windows C/C++加密解密实战》4.2 SM3杂凑算法


3. 《Windows C/C++加密解密实战》4.3 HMAC


4. 《Windows C/C++加密解密实战》4.5 更通用的基于OpenSSL的哈希运算


基于 AI 的学习(2分)

要求

  • 至少找到自己理解不是太好 2 个概念,让 AI 对自己进行苏格拉底提问
  • 参考下面提示语或者使用 AI Agent
    提示词:“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”
  1. 核心是要求AI工具:“请你以苏格拉底的方式对我进行提问”
  2. 然后AI工具就会给你提问,如果不知道问题的答案,可以反问AI:“你的理解(回答)是什么?”
  3. 如果你觉得差不多了,可以先问问AI工具:“针对我XXX知识点,我理解了吗?”
  4. AI工具会给出它的判断,如果你也觉得自己想清楚了,可以最后问AI工具:“我的回答结束了,请对我的回答进行评价总结”,让它帮你总结一下。

学习内容

1. 针对SM3杂凑算法进行提问


2. 针对HMAC进行提问




作业提交要求(1分)

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

参考资料

posted @ 2024-09-22 21:55  妍妍妍妍  阅读(13)  评论(0编辑  收藏  举报