• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

twilight0966

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

2025-2026-1 20231301 《信息安全设计》第三周学习总结

2025-2026-1 20231301 《信息安全设计》第三周学习总结

目录
  • 作业信息
  • 学习内容总结
    • 杂凑函数概述
      • 1. 基本概念
      • 2. 核心特性
      • 3. 安全要求
    • 杂凑函数分类
      • 1. 不带密钥杂凑函数
      • 2. 带密钥杂凑函数(HMAC)
    • SM3算法详解
      • 1. 算法结构
      • 2. 算法流程
      • 3. 核心组件
      • 4. 代码实现关键
    • HMAC机制
      • 1. 基本原理
      • 2. 设计目标
      • 3. 算法步骤
    • SHA系列算法
      • 1. 算法比较
      • 2. SHA-256核心流程
    • C语言实现要点
      • 1. 数据类型处理
      • 2. 多文件组织
      • 3. Makefile示例
    • 思维导图
    • 安全建议

作业信息

作业 链接
作业课程 <班级>(2025-2026-1 信息安全设计)
作业要求 <作业>(2025-2026-1 信息安全设计 预习作业要求)
作业目标 《Head First C 嗨翻C语⾔》 第四章
《Windows C/C++ 加密解密实战》> 预习第四章
作业正文 <博客>(第三周学习总结)

学习内容总结

杂凑函数概述

1. 基本概念

杂凑函数(Hash Function),又称哈希函数、消息摘要函数或散列函数,是一种将任意长度的输入消息转换为固定长度输出的单向函数。如图1所示:

2. 核心特性

  • 压缩性:任意长度输入→固定长度输出
  • 单向性:难以从输出反推输入
  • 抗碰撞性:难以找到两个不同输入产生相同输出
  • 雪崩效应:输入微小变化导致输出巨大变化

3. 安全要求

输入长度任意
输出长度固定(至少128位)
计算效率高
抗碰撞性

杂凑函数分类

截屏2025-09-28 下午8.35

1. 不带密钥杂凑函数

仅用于完整性校验
如MD5、SHA系列、SM3

分类:
弱单向(OWHF):给定h,难找m使H(m)=h
强单向(CRHF):难找不同m1,m2使H(m1)=H(m2)

2. 带密钥杂凑函数(HMAC)

提供认证功能
需要共享密钥
可用于消息认证码(MAC)

SM3算法详解

1. 算法结构

SM3采用Merkle-Damgard结构,如图:

截屏2025-09-28 下午8.38

2. 算法流程

填充:附加"1"+k个"0"+长度值

示例:消息"abc"填充后:

61626380 00000000 00000000 00000000
00000000 00000000 00000000 00000018

迭代压缩:

分组处理512位数据块
使用压缩函数CF进行迭代

输出:256位哈希值

3. 核心组件

初始值IV:8个32位字
常量Tj:分段定义
布尔函数:FFj和GGj
置换函数:P0和P1

4. 代码实现关键

// 压缩函数核心
for(int j=0; j<=63; ++j) {
    SS1 = SL(SL(A,12) + E + SL(Tj(j),j), 7);
    SS2 = SS1 ^ SL(A,12);
    TT1 = FFj(j,A,B,C) + D + SS2 + W1[j];
    TT2 = GGj(j,E,F,G) + H + SS1 + W[j];
    D = C;
    C = SL(B,9);
    B = A;
    A = TT1;
    H = G;
    G = SL(F,19);
    F = E;
    E = P0(TT2);
}

HMAC机制

1. 基本原理

HMAC = H(K⊕opad || H(K⊕ipad || M))

2. 设计目标

直接使用现有哈希函数
保持原哈希函数性能
简单密钥处理
明确的安全边界

3. 算法步骤

调整密钥K长度
K⊕ipad
附加消息并哈希
K⊕opad
附加中间结果并哈希

SHA系列算法

1. 算法比较

算法 输出长度 分组长度 安全性
SHA-1 160位 512位 已不安全
SHA-256 256位 512位 安全
SHA-512 512位 1024位 安全
SM3 256位 512位 安全

2. SHA-256核心流程

  • 预处理:填充+附加长度
  • 消息扩展:16字→64字
  • 压缩函数:64轮循环 -- 使用Ch、Maj、Σ0、Σ1等逻辑函数
  • 最终哈希:拼接中间状态

C语言实现要点

1. 数据类型处理

// 正确处理数据类型转换
float z = (float)x / y;  // 显式类型转换

2. 多文件组织

project/
├── encrypt.h // 函数声明
├── encrypt.c // 函数实现
└── main.c // 主程序

3. Makefile示例

makefileCC = gcc
CFLAGS = -Wall

message_hider: message_hider.o encrypt.o
    $(CC) $(CFLAGS) -o $@ $^

%.o: %.c
    $(CC) $(CFLAGS) -c $<

思维导图

截屏2025-09-28 下午8.46

安全建议

避免使用MD5、SHA-1等已被破解算法
推荐使用SHA-256、SHA-3或SM3
HMAC密钥长度应不小于哈希输出长度
注意抵抗生日攻击(输出长度≥256位)

posted on 2025-09-28 20:47  20231301周子昂  阅读(4)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3