2025-2026-1 20231301 《信息安全设计》第三周学习总结
2025-2026-1 20231301 《信息安全设计》第三周学习总结
目录
作业信息
作业 | 链接 |
---|---|
作业课程 | <班级>(2025-2026-1 信息安全设计) |
作业要求 | <作业>(2025-2026-1 信息安全设计 预习作业要求) |
作业目标 | 《Head First C 嗨翻C语⾔》 第四章 《Windows C/C++ 加密解密实战》> 预习第四章 |
作业正文 | <博客>(第三周学习总结) |
学习内容总结
杂凑函数概述
1. 基本概念
杂凑函数(Hash Function),又称哈希函数、消息摘要函数或散列函数,是一种将任意长度的输入消息转换为固定长度输出的单向函数。如图1所示:
2. 核心特性
- 压缩性:任意长度输入→固定长度输出
- 单向性:难以从输出反推输入
- 抗碰撞性:难以找到两个不同输入产生相同输出
- 雪崩效应:输入微小变化导致输出巨大变化
3. 安全要求
输入长度任意
输出长度固定(至少128位)
计算效率高
抗碰撞性
杂凑函数分类
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结构,如图:
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 $<
思维导图
安全建议
避免使用MD5、SHA-1等已被破解算法
推荐使用SHA-256、SHA-3或SM3
HMAC密钥长度应不小于哈希输出长度
注意抵抗生日攻击(输出长度≥256位)
posted on 2025-09-28 20:47 20231301周子昂 阅读(4) 评论(0) 收藏 举报