《密码系统设计》第二周

第二周预习报告

学习内容

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

要求

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

总结

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

  1. 函数指针:学习如何声明和使用函数指针,这是C语言中一个强大的特性,允许将函数作为参数传递给其他函数。
  2. 返回函数指针:了解如何从函数中返回函数指针,这在创建回调函数时非常有用。
  3. 动态内存分配:深入探讨如何在堆上分配和释放内存,这是管理大型数据结构和复杂程序中资源的关键。
  4. 指针和数组:进一步理解指针和数组之间的关系,以及如何通过指针操作数组。
  5. 指针的指针:学习如何使用指向指针的指针,这在处理多维数组和复杂的数据结构时非常有用。
  6. 结构体和联合:介绍如何定义和使用结构体和联合,这些是C语言中创建复杂数据类型的方式。
  7. 递归函数:探讨如何编写递归函数,这是一种通过函数自身调用来解决问题的方法。
  8. 错误处理:学习如何在函数中进行错误检查和处理,以确保程序的健壮性。
  9. 标准库函数:介绍一些常用的标准库函数,如mallocfreememcpy等,这些函数在C语言编程中非常重要。
  10. 函数的高级用法:可能还会包括一些函数的高级用法,如变长参数列表的使用。

2. 《Windows C/C++加密解密实战》3.4.4

1. SM4算法概述

  • 定义:SM4是一种分组密码算法,适用于安全通信。
  • 特点:易于在软件和硬件上实现,运算速度快。
  • 结构:采用非平衡Feistel结构,明文和密钥长度均为128比特。
  • 迭代:加密和解密算法都采用32轮非线性迭代结构,解密时轮密钥使用顺序与加密相反。

2. 密钥

  • 长度:密钥长度为128比特(16字节)。
  • 轮密钥:由加密密钥通过密钥扩展算法生成,共32个轮密钥。

3. 密钥扩展算法

  • 过程:从128位加密密钥生成32个32位的轮密钥。
  • 参数:使用系统参数FK和固定参数CK,这些参数在密钥扩展中使用。

4. 轮函数

  • 组成:轮函数F由非线性变换τ和线性变换L复合而成。
  • 非线性变换τ:由4个S盒并行组成。
  • 线性变换L:包括异或运算和循环左移。

5. 加密算法

  • 过程:包括32次迭代运算和一次反序变换。
  • 输入:128位明文。
  • 输出:128位密文。

6. 解密算法

  • 过程:与加密算法结构相同,但轮密钥使用顺序相反

7. SM4算法的实现

  • 示例:提供了16字节数据的SM4加解密函数实现。
  • 扩展:介绍了如何支持任意长度数据的加解密,包括ECB、CBC、CFB和OFB四种工作模式。

8. 检测函数

  • 自检:使用标准数据进行自检,确保算法实现正确。

9. 短块加密

  • 问题:讨论了如何处理非16字节倍数的数据,即短块加密问题。

总结

通过本节的学习,可以了解到SM4算法的基本原理、实现方法以及如何在C/C++中进行加解密操作。SM4算法因其高效性和安全性,在需要数据加密的应用中具有重要价值。

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

  1. ASN.1文法描述:ASN.1用于描述数据结构,包括原子类型和结构类型。数据类型可以是通用的、应用特定的、私有的或上下文特定的。每种类型都有一个唯一的类型标识(Tag)。
  2. 编码规则
  • BER:基本编码规则,允许数据自包含结构信息,使用TLV(Tag, Length, Value)三元组进行编码。BER支持定长和不定长编码方式。
    - DER:区分编码规则,是BER的子集,用于确保数据的唯一编码。DER编码是唯一的,适合安全技术应用,如电子商务系统。
    - CER:规范编码规则,主要用于早期的X.509证书。
    - PER:打包编码规则,用于压缩数据以减少编码后的数据大小。
  1. 数据类型标识
  • 通用类(Universal):所有应用中定义相同。
  • 应用类(Application):只为某一种应用定义。
  • 私有类(Private):为特定企业或公司定义。
  • 上下文说明类(Context Specific):为特定类型定义。
  1. 派生数据类型
  • 显式派生法:改变数据类型的编码,使用新的类型标识。
  • 隐式派生法:改变数据类型的标识值,但不改变编码方式。
  1. 数据类型的ASN.1描述和DER编码
  • 隐式派生类:改变类型标识值以区分相同类型的数据成员。
  • 显式派生类型:不改变数据类型,但使用新的类型标识。
  • BIT STRING:用于编码任意比特串,如数字签名结果。
  • IA5STRING:用于编码ASCII码字符组成的字符串。
  • INTEGER:用于编码任意整数。
  • OBJECT IDENTIFIER:用于标识算法或属性类型。
  • OCTET STRING:用于编码任意字节串,如摘要数据。
  • SEQUENCE:用于定义有序且成员数量固定的结构。

总结

每种数据类型都有其特定的ASN.1描述和DER编码规则,这些规则确保了数据在不同系统和网络中的一致性和互操作性。DER由于其唯一性和适合安全应用的特性,被广泛认为是电子商务和安全系统中的首选编码规则。

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

要求

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

反思与补充

1. 反思

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

2. 补充

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

  • 函数指针在C语言中非常有用,但它们也增加了代码的复杂性。理解它们如何在底层工作,以及如何安全地使用它们,对于编写健壮的程序至关重要。
  • 指针的指针在处理复杂的数据结构时非常有用,但它们也增加了代码的复杂度。在实际编程中,它们通常用于实现数据结构,如链表、树等。
  • 递归是一种强大的编程技术,但它也可能导致栈溢出等问题。理解递归的工作原理和如何正确使用它,对于解决复杂问题非常重要。

2. 《Windows C/C++加密解密实战》3.4.4

  • 理论与实践结合:虽然书中提供了SM4算法的理论基础和实现示例,但实际应用中需要更多地考虑如何将理论应用到实际项目中,解决实际问题。
  • 安全性考量:在实现加密算法时,除了算法本身的安全性,还需要考虑实现的安全性,比如密钥管理、侧信道攻击防护等。

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

  • 实际应用场景的重要性
    学习ASN.1和编码规则不仅仅是理论上的,更重要的是理解它们在实际应用中的作用。例如,在安全协议、数据传输、分布式系统中,ASN.1和DER/BER的使用确保了数据的一致性和安全性。
  • 编码效率
    虽然DER提供了一种唯一的编码方式,适合安全应用,但它可能不是最高效的编码方式。在某些情况下,PER或BER的压缩特性可能更适合带宽有限的环境。

学习思维导图(2分)

要求

思维导图

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


2. 《Windows C/C++加密解密实战》3.4.4


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


基于 AI 的学习(2分)

要求

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

学习内容

1. 针对SM4算法进行提问




2. 针对编码规则进行提问


作业提交要求(1分)

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

参考资料

posted @ 2024-09-15 12:45  妍妍妍妍  阅读(15)  评论(0编辑  收藏  举报