第十一章 密码学

文章目录

一、加密

1.1、概述
1.1.1、什么是加密?

加密是一种将原始信息(明文)通过特定算法转换为不可读形式(密文)的过程,目的是保护数据的机密性,防止未授权访问。只有掌握正确密钥或解密方法的接收方才能将密文还原为明文。

1.1.2、什么是密钥?

密钥是加密和解密过程中使用的关键参数,它控制着加密算法如何将明文转换为密文以及如何还原数据。不同的加密方法依赖不同类型的密钥。

1.1.3、什么是算法?

在密码学中,算法是指一组明确的数学规则或计算步骤,用于执行加密、解密、签名、验证等安全操作。它定义了如何将明文转换为密文(加密过程),以及如何从密文恢复明文(解密过程),通常依赖于密钥的参与。

1.2、对称加密算法
1.2.1、定义

对称加密是指加密和解密使用相同密钥 的加密方式。

该类算法分为两类:

  • 分组密码(Block Cipher):将数据分成固定长度块加密,如AES、SM4
  • 流密码(Stream Cipher):逐位或逐字节加密,如RC4

安全性依赖于密钥保密性,而非算法本身。

1.2.2、关于"数据加密标准"(DES)

DES 是一种对称加密算法,于1977年被美国采纳为联邦信息处理标准。

  • 分组长度:64位
  • 密钥长度:56位(有效)
  • 现已不安全,因密钥过短易被暴力破解

其改进版为3DES(三重DES),通过三次加密提升安全性,但仍效率低下。

1.2.3、高级加密标准(AES)

AES 是目前最广泛使用的对称加密算法,由NIST于2001年确立,取代DES。

  • 支持密钥长度:128、192、256位
  • 分组大小:128位
  • 安全性强,性能高,适用于软硬件实现

AES基于Rijndael算法,采用多轮置换-代换网络(SubBytes, ShiftRows, MixColumns, AddRoundKey)。

1.2.4、中国国家商用密码算法(SM系列)

中国国家密码管理局发布的商用密码标准,其中:

  • SM4 是对称加密算法,原名SMS4,用于无线局域网标准。

    • 分组长度:128位
    • 密钥长度:128位
    • 结构类似Feistel,但为非平衡结构,共32轮变换
    • 已成为ISO/IEC国际标准
  • SM2:基于椭圆曲线的非对称加密算法,用于数字签名、密钥交换

  • SM9:基于标识的密码体制(IBC)

1.2.5、对称加密算法的优缺点
特性 优点 缺点
加密速度 快,适合大量数据加密 ------
资源消耗 低,适合嵌入式设备 ------
密钥管理 ------ 密钥分发困难,需安全通道
安全性 AES、SM4安全性高 若密钥泄露则全部失效
1.3、非对称加密算法
1.3.1、定义

非对称加密(又称公钥加密)使用一对数学相关的密钥:公钥私钥。其中:

  • 公钥可公开,用于加密或验证签名;
  • 私钥保密,用于解密或生成签名。

典型算法包括:RSA、ECC(椭圆曲线密码)、DSA、SM2等。

1.3.2、公开密钥密码体制------RSA

RSA 是最早实用的非对称加密算法之一,由Rivest、Shamir 和 Adleman 于1977年提出,基于大整数分解难题。

RSA 广泛用于数字签名、SSL/TLS 握手、密钥交换等场景。

1.3.3、非对称加密算法的优缺点
类别 优点 缺点
解决密钥分发问题 公钥可公开传播,无需预先共享秘密信道 ------
支持数字签名 可实现身份认证、不可否认性(如用私钥签名) ------
易于密钥管理 每个用户仅需保管自己的私钥,系统扩展性强 ------
加解密速度慢 ------ 运算复杂(模幂运算),不适合加密大量数据
资源消耗高 ------ 对CPU和内存要求较高,尤其在嵌入式设备中受限
密钥长度大 ------ RSA 需要2048位以上才安全,而AES-128即可达到同等安全强度
1.3.4、非对称加密与对称加密结合使用

由于非对称加密效率低,实际应用中通常采用混合加密系统(Hybrid Cryptosystem)

工作流程如下

  1. 通信开始时,双方通过非对称加密(如RSAECC)协商一个临时的会话密钥
  2. 使用该会话密钥进行后续的对称加密通信 (如AES
  3. 会话结束后销毁密钥

例如在 HTTPS 中:

  • 客户端生成随机的预主密钥,用服务器的公钥(RSA)加密后发送
  • 服务器用自己的私钥解密获得预主密钥
  • 双方基于该密钥派生出对称密钥用于AES加密通信

这种方式兼顾了安全性与效率。

1.3.5、非对称加密算法存在的安全风险
风险类型 说明
数学攻击进步 若大数分解(RSA)或离散对数(ECC)被高效算法破解(如量子计算Shor算法),则整个体系崩溃
密钥泄露 私钥一旦被窃取或导出,攻击者可完全冒充身份或解密历史通信
中间人攻击(MITM) 攻击者伪造公钥欺骗通信双方,需依赖数字证书和PKI体系防范
侧信道攻击 通过功耗、时间、电磁辐射等物理信息推断私钥,尤其影响智能卡设备
弱参数生成 使用过小的素数、弱随机数生成器会导致密钥易被预测或分解

此外,随着量子计算发展,传统RSAECC面临威胁,推动后量子密码(PQC) 的研究与标准化。

二、完整性

2.1.1、定义

数据完整性是指数据在传输或存储过程中未被篡改、删除或伪造 的性质。

通过使用单向散列函数生成固定长度的"指纹"(即摘要),可验证数据是否保持原始状态。

2.1.2、什么是单向散列函数?

单向散列函数(One-way Hash Function)是一种将任意长度输入映射为固定长度输出的函数,具有以下核心特性:

  • 单向性:从输出无法反推输入
  • 抗碰撞性:难以找到两个不同输入产生相同输出
  • 确定性:相同输入始终生成相同输出
  • 雪崩效应:输入微小变化导致输出巨大差异

常用于数字签名、消息认证、密码存储等场景。

2.1.3、信息摘要算法(MD5)

**MD5(Message Digest Algorithm 5)**由Ronald Rivest于1992年设计,输出长度为 128位(16字节) 的摘要。

基本流程

  1. 填充消息使其长度 ≡ 448 mod 512
  2. 添加64位原始长度
  3. 使用4个32位初始变量进行四轮非线性变换(每轮16步)
  4. 输出128位摘要(通常以32位十六进制字符串表示)

示例:
MD5("hello") = 5d41402abc4b2a76b9719d911017c592

⚠️ 安全性问题

  • 已被证实存在严重碰撞漏洞(如王小云教授2004年攻破)
  • 可构造两个不同文件具有相同MD5值
  • 不再适用于安全场景(如数字签名、证书),仅可用于校验非恶意错误
2.1.4、安全散列算法(SHA)

**SHA(Secure Hash Algorithm)**是由美国国家安全局(NSA)设计、NIST发布的系列散列算法,主要包括:

算法 输出长度 状态变量 安全性 备注
SHA-1 160位 5×32位 ❌ 已被破解(SHAttered攻击 不推荐使用
SHA-256 256位 8×32位 ✅ 安全 属于SHA-2家族,广泛用于SSL/TLS、比特币
SHA-512 512位 8×64位 ✅ 安全 适合64位系统
SHA-3 可变(224~512位) 1600位海绵结构 ✅ 安全 基于Keccak算法,结构不同于SHA-2

注:SHA-3 虽与SHA-2命名相似,但内部结构完全不同,采用"海绵结构"(sponge construction)。

应用举例:

  • Bitcoin使用SHA-256进行挖矿和地址生成
  • TLS协议使用 SHA-256 验证证书完整性
2.1.5、单向散列函数的特点
特点 说明
正向快速 给定明文和Hash算法,在有限时间和有限资源内计算Hash值
不可逆性 给定任意的Hash值,在有限时间内很难逆推出明文
输入敏感 如果输入的数据信息被轻微修改,输出的Hash值也会有很明显的变化
抗碰撞性 任意输入不同的数据,其输出的Hash值不可能相同

三、认证

3.1.1、定义

在密码学中,认证(Authentication)是指验证通信对方身份或数据来源真实性的过程。主要包括:

  • 实体认证:确认通信方是合法用户(如登录验证)
  • 消息认证:确认收到的消息来自可信发送者且未被篡改

认证可防止伪装、重放、篡改等攻击,常与完整性结合实现。

注意:认证 ≠ 授权。认证解决"你是谁",授权解决"你能做什么"。

3.1.2、消息认证码(MAC)

消息认证码 (Message Authentication Code,简称 MAC)是一种使用共享密钥 生成的小段数据,用于验证消息的完整性真实性

数学表示:

设消息为M,密钥为K,则 MAC 值为:
T = MAC K ( M ) T = \text{MAC}_K(M) T=MACK(M)

接收方用相同密钥重新计算T并与接收到的T 比较,若T = T则认为消息合法。

特点:

  • 使用对称密钥(双方共享)
  • 不能提供不可否认性(因双方都能生成相同MAC)
  • 常见类型:CBC-MACCMACHMAC
3.1.3、哈希运算消息认证码(HMAC)

HMAC (Hash-based Message Authentication Code)是一种基于单向散列函数的MAC实现方式,广泛应用于TLS、IPsec、JWT等协议中。

结构定义为:
HMAC K ( M ) = H ( ( K ′ ⊕ opad ) ∥ H ( ( K ′ ⊕ ipad ) ∥ M ) ) \text{HMAC}_K(M) = H\left((K' \oplus \text{opad}) \parallel H\left((K' \oplus \text{ipad}) \parallel M\right)\right) HMACK(M)=H((K′⊕opad)∥H((K′⊕ipad)∥M))

其中:

  • H:底层哈希函数(如SHA-256
  • K:扩展后的密钥
  • opac:外填充常量(0x5c重复)
  • ipad:内填充常量(0x36重复)
  • ||:拼接操作

优点:

  • 安全性强,依赖于哈希函数的抗碰撞性
  • 易于实现,兼容现有哈希算法
  • 被标准广泛采纳(RFC 2104FIPS PUB 198

示例:HMAC-SHA256 是当前推荐的安全选择。

3.1.4、消息认证码的工作流程
相关推荐
Lueeee.2 小时前
内核模块符号的导出
linux·运维·服务器
LSL666_2 小时前
12 MyBatis的连接池
java·服务器·mybatis
2301_800256112 小时前
第十一章 PostgreSQL 服务器编程知识点梳理(1)
服务器·数据库·postgresql
C语言魔术师2 小时前
【linux】linux进程概念(四)(环境变量)
linux·运维·服务器
源代码•宸2 小时前
分布式缓存-GO(简历写法、常见面试题)
服务器·开发语言·经验分享·分布式·后端·缓存·golang
秦jh_2 小时前
【Qt】常用控件(上)
服务器·数据库·qt
云和数据.ChenGuang3 小时前
自动化运维工程师之ansible启动rpcbind和nfs服务
运维·服务器·运维技术·数据库运维工程师·运维教程
yimengsama3 小时前
VMWare虚拟机如何连接U盘
linux·运维·服务器·网络·windows·经验分享·远程工作
松涛和鸣3 小时前
32、Linux线程编程
linux·运维·服务器·c语言·开发语言·windows