第十一章 密码学

文章目录

一、加密

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、消息认证码的工作流程
相关推荐
Sinclair11 小时前
简单几步,安卓手机秒变服务器,安装 CMS 程序
android·服务器
JaguarJack16 小时前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo16 小时前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
Rockbean1 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek
茶杯梦轩2 天前
CompletableFuture 在 项目实战 中 创建异步任务 的核心优势及使用场景
服务器·后端·面试
JaguarJack2 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理2 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
海天鹰2 天前
【免费】PHP主机=域名+解析+主机
服务器
不是二师兄的八戒2 天前
Linux服务器挂载OSS存储的完整实践指南
linux·运维·服务器
芝士雪豹只抽瑞克五2 天前
Nginx 高性能Web服务器笔记
服务器·nginx