构筑密码学基础世界观 —— 搭建完整密码底层认知体系
- 前言
- 一、密码学到底在解决什么问题
- 1. 保密性(Confidentiality)
- 2. 完整性(Integrity)
- 3. 身份认证(Authentication)
- 4. 不可否认性(Non-repudiation)
- 二、密码学里最基础的几个概念
- 1. 明文、密文、密钥
- 2. 编码、哈希、加密的区别
- 3. 公钥、私钥是什么
- 三、三类最核心的密码学工具
- 1. 对称加密
- 2. 非对称加密
- 用途一:密钥交换 / 加密少量数据
- 用途二:数字签名
- 3. 哈希与消息认证码
- 3.1 哈希函数
- 3.2 消息认证码(MAC)
- 4. 三类工具怎么组合使用?
- 四、为什么后面的内容都离不开这些基础
- 1. 流密码 & 分组密码
- 2. RSA & ECC
- 3. TLS / HTTPS
- 五、总结:密码学的整体框架
Crypto专栏:https://blog.csdn.net/r_feynman_/category_13190241.html
Crypto 密码解析实战靶场:https://blog.csdn.net/r_feynman_/category_13194584.html
前言
学密码学最容易走的弯路,就是一上来就扎进算法细节里。
AES 的 S 盒怎么设计的、RSA 的大数分解怎么回事、ECC 的椭圆曲线方程长什么样……这些当然重要,但如果没有先搞清楚最基础的问题——这些算法分别在解决什么问题?——那学再多也只是零散的知识点。
这篇文章是整个密码学系列的"第零阶段"。我们不讲具体算法,先搭世界观。
你会搞清楚这几件事:密码学的四大安全目标是什么?明文、密文、密钥这些基础概念怎么理解?编码、哈希、加密三者有什么本质区别?对称加密和非对称加密分别适合什么场景?加密、签名、MAC、密钥交换各自负责什么任务?以及,为什么后面学 AES、RSA、TLS 的时候,这些基础概念永远绕不开。
读完你不会马上成为密码学高手,但至少不会再把哈希和加密混为一谈,也不会再觉得 AES 和 RSA 是"两种不同的加密算法"这么简单。
往下看,我们从最基础的问题开始。
一、密码学到底在解决什么问题
很多人一提到密码学,第一反应就是“加密”——也就是把明文变成密文,让别人看不懂。
这个理解没有错,但它只说对了一部分。
在现代密码学中,真正要解决的问题并不只是“隐藏内容”,而是围绕信息安全建立一套完整的保障机制。简单来说,密码学主要服务于四个核心目标:
| 安全目标 | 解决的问题 | 常见技术 |
|---|---|---|
| 保密性 | 防止别人偷看内容 | AES、RSA、ChaCha20 |
| 完整性 | 防止内容被篡改 | SHA-256、MAC |
| 身份认证 | 防止别人冒充身份 | MAC、数字签名、证书 |
| 不可否认性 | 防止事后抵赖 | 数字签名 |
下面分别来看。
1. 保密性(Confidentiality)
保密性解决的是:
消息内容会不会被别人偷看?
比如你在网上登录账号、发送聊天消息、提交银行卡信息时,都不希望中途的第三方看到真实内容。
加密的作用就是让攻击者即使截获了数据,也只能看到一串无法理解的密文。
常见实现方式包括:
AES、ChaCha20、RSA、ECC不过要注意,实际系统中加密大量数据时,通常使用的是AES、ChaCha20 这类对称加密算法;RSA、ECC 更多用于密钥交换或数字签名。
2. 完整性(Integrity)
完整性解决的是:
这条消息中途有没有被人改过?
保密性只能保证“别人看不懂”,但不能保证“别人没修改”。
例如攻击者虽然看不懂密文内容,但仍然可能尝试篡改数据包,导致接收方拿到错误内容。
完整性的目标就是让接收方能够发现:
数据是否被修改、删除、插入或替换常见技术包括:
哈希函数、消息认证码(MAC)、HMAC其中,哈希函数可以为数据生成“指纹”,而 MAC / HMAC 则是在哈希基础上加入密钥,用来确认消息确实来自可信一方。
3. 身份认证(Authentication)
身份认证解决的是:
这条消息真的是他发的吗?
在通信过程中,我们不仅关心消息内容有没有被改,还要确认消息来源是否可信。
否则攻击者完全可以伪装成别人,发送一条看似正常的消息。
身份认证常见于:
登录系统、HTTPS 证书、接口签名、消息认证常见技术包括:
MAC、HMAC、数字签名、数字证书需要注意的是,MAC 和数字签名都能做认证,但它们的使用场景不同:
MAC 通常要求双方共享同一把密钥,而数字签名使用的是公钥和私钥。
4. 不可否认性(Non-repudiation)
不可否认性解决的是:
他发过这条消息,事后能不能赖账?
身份认证可以证明“消息来自某个身份”,而不可否认性更进一步:
它要求发送方在事后不能否认自己曾经发送或签署过这条消息。
典型例子包括:
电子合同、数字证书、软件发布签名、区块链交易签名这个目标通常依赖数字签名实现。
因为数字签名使用私钥生成,其他人可以用对应公钥验证。一旦验证通过,就可以说明这条消息确实由私钥持有者签署。
小结
密码学并不只是“加密”,而是在解决一组完整的信息安全问题:
| 目标 | 简单理解 |
|---|---|
| 保密性 | 防偷看 |
| 完整性 | 防篡改 |
| 身份认证 | 防冒充 |
| 不可否认性 | 防抵赖 |
后面学习任何密码算法或安全协议时,都可以先问自己一句:
它到底是在解决这四类问题中的哪一个?
这样一来,AES、RSA、SHA-256、HMAC、数字签名、TLS 这些概念就不会再是零散的名词,而会变成整个密码学体系中的不同工具。
二、密码学里最基础的几个概念
搞清楚密码学解决什么问题之后,我们来建立最底层的概念模型。这几个概念看起来简单,但它们是理解所有后续算法的基础——很多混淆都源于基础概念没抠清楚。
1. 明文、密文、密钥
这是密码学最基本的三元组。
- 明文(Plaintext):原始的、可直接阅读的信息。
- 比如你要发送的消息、要存储的文件内容。
- 密文(Ciphertext):明文经过加密变换后得到的、不可直接阅读的信息。
- 看起来是一堆乱码,只有持有正确密钥的人才能还原。
- 密钥(Key):控制加密和解密过程的秘密参数。
- 它不是"密码",而是一串参与运算的数字或字节。
- 同一个明文,用不同的密钥加密,会得到不同的密文。
加密的本质,就是用密钥作为"参数",把明文"变换"成密文;解密则是反过来,用密钥把密文"还原"回明文。
这里有一个非常重要的原则——柯克霍夫原则(Kerckhoffs’s Principle):
一个密码系统的安全性,不应该依赖于算法的保密,而只应该依赖于密钥的保密。
换句话说:算法可以公开,所有人都知道加密解密的步骤,但只要密钥是秘密的,系统就是安全的。
这也是为什么 AES、RSA 这些算法都是公开的——全世界都知道它们怎么算,但没有密钥就是解不开。
2. 编码、哈希、加密的区别
这是初学者最容易混淆的三个概念。很多人看到"乱码"就叫"加密",其实不一定。
| 编码(Encoding) | 哈希(Hash) | 加密(Encryption) | |
|---|---|---|---|
| 目的 | 格式转换,方便传输/存储 | 生成摘要,验证完整性 | 保密,防止信息泄露 |
| 是否可逆 | 可逆,有固定解码方式 | 不可逆,无法还原原文 | 可逆,有密钥就能解密 |
| 是否需要密钥 | 不需要密钥 | 不需要密钥(MAC除外) | 需要密钥 |
| 输出长度 | 通常和输入等比例增长 | 固定长度(如 SHA-256 总是 256 位) | 和输入长度相关 |
| 典型例子 | Base64、URL 编码、UTF-8 | MD5、SHA-1、SHA-256 | AES、RSA、SM4 |
一句话区分:
- 编码是"换一种写法",谁都能还原回去——不是安全手段。
- 哈希是"打个指纹",只能验证是不是同一个东西,还原不出原文——用于完整性校验。
- 加密是"锁起来",只有持钥匙的人能打开——用于保密性。
常见误区:Base64 不是加密,MD5 也不是加密。前者是编码,后者是哈希,它们都不提供保密性。
3. 公钥、私钥是什么
公钥和私钥是非对称加密(也叫公钥密码学)里的核心概念。
在对称加密里,加密和解密用的是同一把密钥——就像一把锁,上锁和开锁用同一把钥匙。
而非对称加密里,有两把不同的密钥:
- 公钥(Public Key):可以公开给任何人,不怕泄露。
- 私钥(Private Key):必须自己保密,绝对不能让别人知道。
这两把钥匙在数学上是配对的——用公钥加密的东西,只有对应的私钥能解开;反过来,用私钥做的签名,只有对应的公钥能验证。
两种最基本的用法:
用法一:加密消息(保证保密性)
我用你的公钥加密消息发给你,只有你的私钥能解开。
——别人就算截获了密文,没有你的私钥也读不了。
用法二:数字签名(保证身份和不可否认)
我用自己的私钥对消息签名,你用我的公钥验证。
——因为私钥只有我有,所以能确认是我签的,而且我事后不能抵赖。
一个简单的记忆法:公钥加密,私钥解密;私钥签名,公钥验证。
公钥密码学的厉害之处在于:它解决了"密钥怎么安全发给对方"这个问题——对称加密需要双方先共享密钥,但怎么把密钥安全地送过去本身就是个难题。而非对称加密里,公钥可以随便公开,私钥自己留着,不需要提前交换秘密。
三、三类最核心的密码学工具
搞清楚密码学的四大安全目标之后,我们来看实现这些目标的三类核心工具——对称加密、非对称加密、哈希与消息认证。
这三类工具是整个密码学体系的基础构件,所有上层协议(TLS、SSH、VPN 等)本质上都是它们的组合应用。
| 工具 | 核心作用 | 典型算法 |
|---|---|---|
| 对称加密 | 快速加密大量数据,提供保密性 | AES、ChaCha20、SM4 |
| 非对称加密 | 密钥交换、数字签名、身份认证 | RSA、ECC、SM2 |
| 哈希 / MAC | 完整性校验、消息来源认证 | SHA-256、SM3、HMAC |
简单记:对称加密负责"快",非对称加密负责"建立信任",哈希与 MAC 负责"验真伪"。
1. 对称加密
对称加密的核心特征很简单:加密和解密用同一把密钥。
明文 + 密钥 → 密文 密文 + 同一把密钥 → 明文它最大的优点是速度极快——通常比非对称加密快几个数量级,所以真实系统里加密大量数据(网页内容、文件、磁盘)用的几乎都是对称加密。
对称加密主要分两大类:
| 类型 | 工作方式 | 典型算法 |
|---|---|---|
| 流密码 | 逐字节/逐位加密,像流水一样连续生成密钥流 | ChaCha20、RC4 |
| 分组密码 | 把数据切成固定大小的块(如 128 位),一块一块加密 | AES、DES、SM4 |
AES 是目前最主流的分组密码,ChaCha20 则是现代常用的流密码,两者在 TLS 中都有广泛应用。
对称加密最大的问题不是"够不够安全",而是密钥怎么安全地交给对方。
如果密钥本身在传输中被偷走,后面加密得再复杂也没用。这个问题,对称加密自己解决不了——这就是非对称加密存在的意义。
2. 非对称加密
非对称加密(也叫公钥密码学)和对称加密最大的区别是:它有一对密钥——公钥和私钥。
公钥可以随便公开,私钥必须自己保密。两把钥匙数学上配对,用公钥加密的只有对应私钥能解开,用私钥签名的只有对应公钥能验证。
第二章已经讲过公私钥的基本概念,这里重点说非对称加密的两个核心用途。
用途一:密钥交换 / 加密少量数据
用对方的公钥加密消息,只有对方的私钥能解密。这样双方不需要提前共享密钥,也能建立安全通信。
但非对称加密有个致命缺点:速度太慢。
所以它几乎从不用来加密真正的业务数据,而是用来加密对称密钥——双方先用非对称加密协商出一把对称密钥,之后所有数据都用对称密钥加密。
非对称加密:负责安全地交换会话密钥 对称加密:负责用会话密钥加密大量数据这就是所谓的"混合加密"模式,也是 HTTPS、SSH 等几乎所有安全通信的标准做法。
补充一个细节:现代 TLS 中更多使用 ECDHE 这类密钥协商算法,而不是简单地"用 RSA 加密一个 AES 密钥"(那叫密钥传输)。两者的区别在于,密钥协商可以提供前向安全性——即使长期私钥泄露,之前的会话内容也不会被解密。
用途二:数字签名
用自己的私钥对消息签名,别人用你的公钥验证。
签名解决两个问题:身份认证(证明消息是私钥持有者发的)和不可否认性(发的人事后不能抵赖)。软件发布、区块链交易、电子合同、HTTPS 证书……所有需要"证明是谁干的"场景,都离不开数字签名。
常见非对称算法:
| 算法 | 特点 |
|---|---|
| RSA | 最经典,基于大数分解难题 |
| ECC | 椭圆曲线密码学,同等安全强度下密钥短得多 |
| SM2 | 国密标准的椭圆曲线公钥算法 |
3. 哈希与消息认证码
这两类工具不负责"加密保密",它们解决的是完整性和身份认证问题。
3.1 哈希函数
哈希函数把任意长度的输入,压缩成固定长度的摘要(哈希值)。
核心性质:
- 单向性:给你哈希值,算不出原文是什么
- 确定性:同一个输入永远得到同一个输出
- 雪崩效应:输入改一个比特,输出完全不同
- 抗碰撞性:很难找到两个不同输入得到相同哈希值
常见算法:MD5(已破解)、SHA-1(已淘汰)、SHA-256(主流)、SHA-3(新一代)、SM3(国密)。
哈希的用途很广:文件完整性校验、数字签名预处理、区块链、数据去重……
一个重要误区:普通哈希不能直接用来存密码。
很多人觉得"密码存哈希值,就算数据库泄露了也不怕"——但普通哈希(比如 SHA-256)计算太快了,攻击者可以用彩虹表或暴力破解快速撞出原文。真正存密码应该用bcrypt、Argon2、PBKDF2这类慢哈希函数(KDF),专门设计成计算慢、耗资源,让暴力破解成本高到不可接受。
但单纯的哈希有个局限:任何人都能算。攻击者改了消息,可以重新算一个哈希值一起发过去,接收方发现不了。所以哈希只能证明"数据和摘要匹配",不能证明"数据是谁发的"。
这就需要 MAC。
3.2 消息认证码(MAC)
MAC 可以理解为带密钥的哈希。
普通哈希:消息 → 哈希值 MAC: 消息 + 密钥 → MAC 值只有知道密钥的人,才能生成正确的 MAC。这样接收方不仅能验证消息没被篡改,还能确认消息来自持有密钥的一方。
MAC 同时提供完整性和身份认证,但不提供不可否认性——因为双方都有同一把密钥,你没法向第三方证明"这条消息一定是对方发的,不是我自己伪造的"。
这也是 MAC 和数字签名最核心的区别:MAC 是"两个人之间的验证",签名是"可以公开验证的证明"。
最常用的 MAC 是HMAC(比如 HMAC-SHA256、HMAC-SM3)。注意,HMAC 不是简单地"密钥 + 消息拼起来算哈希",而是有专门的双层构造,防止长度扩展攻击等安全问题。
4. 三类工具怎么组合使用?
真实系统从来不是单一工具在工作,而是组合使用。
以 HTTPS 为例:
| 阶段 | 用到的工具 | 解决的问题 |
|---|---|---|
| 验证网站身份 | 数字证书 + 数字签名 | 证明你访问的是真网站 |
| 协商会话密钥 | ECDHE 密钥交换 | 安全地产生共享对称密钥 |
| 加密网页内容 | 对称加密(AES-GCM / ChaCha20-Poly1305) | 防止通信内容被偷看 |
| 防止数据篡改 | AEAD / MAC | 保证数据完整性和来源认证 |
注意最后一行的AEAD(认证加密)——这是现代密码学的标准做法:加密和认证不分开做,而是用一个算法同时完成,比如 AES-GCM、ChaCha20-Poly1305。
为什么不推荐"先加密,再单独算 MAC"?因为分开做很容易出错——比如加密和 MAC 的顺序搞反、密钥复用、时序攻击等。AEAD 把两件事打包成一个经过严格验证的标准方案,用起来更安全。
一句话总结
对称加密负责快速保密,非对称加密负责交换密钥和证明身份,哈希与 MAC 负责验真伪防篡改;真实系统把它们组合起来,各干各擅长的事。
四、为什么后面的内容都离不开这些基础
讲到这里,我们已经认识了三类核心工具——对称加密、非对称加密、哈希与 MAC。从功能角度再快速收一下:加密负责保密,签名证明来源,MAC 防篡改验身份,密钥交换负责安全地协商共享密钥。这四件事,就是密码学最核心的四个功能。
后面你要学的所有具体算法和协议,本质上都没有跳出这个框架——要么是某一类工具的具体实现,要么是多个工具的组合应用。我们快速过一遍,你就明白为什么说"基础世界观"最重要。
1. 流密码 & 分组密码
两者都属于对称加密,解决的都是保密性问题。
- 流密码:逐字节/逐位加密,像流水一样生成密钥流和明文异或。代表算法 ChaCha20、RC4。
- 分组密码:把数据切成固定大小的块(如 128 位)一块一块加密。代表算法 AES、SM4。
分组密码还有各种工作模式——ECB、CBC 只提供保密性,GCM、CCM 属于 AEAD 认证加密,同时提供保密性、完整性和身份认证。
不管内部结构多复杂,它们的本质都是"同一把密钥加密解密",解决的都是"怎么快速保密"这个问题。
2. RSA & ECC
两者都属于非对称加密,框架完全一致——公钥加密私钥解密,私钥签名公钥验签。
- RSA:基于大数分解难题,最经典的公钥算法。
- ECC:基于椭圆曲线离散对数,同等安全强度下密钥短得多,适合移动设备和区块链。
它们的数学基础不同,但使用方式和解决的问题是一样的——都能做密钥交换、都能做数字签名、都能加密少量数据。
所以学非对称加密的时候,先搞懂"非对称密码能做什么、怎么用",再去看具体算法的数学细节,思路会清晰很多。
3. TLS / HTTPS
TLS 是密码学的集大成者——把前面讲的所有概念几乎全用上了。
大致分两个阶段:
- 握手阶段:用数字证书和数字签名验证服务器身份,用 ECDHE 等密钥交换算法协商会话密钥。
- 传输阶段:用对称加密(AES-GCM 或 ChaCha20-Poly1305)加密数据,同时用 AEAD 保证完整性和认证。
TLS 协议细节很多,版本、扩展、套件一大堆,但抓住主线就不会乱:
握手用非对称加密建立信任、交换密钥,传输用对称加密加密数据,全程用签名和 AEAD 保证身份和完整性。
为什么说基础最重要?
讲到这里你应该能看出来:
- 流密码、分组密码 → 对称加密的具体实现
- RSA、ECC → 非对称加密的具体实现
- TLS → 三类工具的组合应用
后面学任何具体算法或协议,先问自己三个问题:
- 它属于哪一类工具?
- 它提供哪些安全能力?(保密/完整性/认证/不可否认)
- 它和同类方案比,优缺点是什么?
带着这三个问题去学,你就不是在"从零学一个新东西",而是在"给已有的框架填细节"。
这就是为什么我们要花一整篇文章讲"第零阶段"——先搭架子,再填内容。
五、总结:密码学的整体框架
密码学看起来知识点很多,但底层的世界观其实很清晰。从目标上说,就是解决四件事:保密性防偷看、完整性防篡改、身份认证防冒充、不可否认性防抵赖。从工具上说,就是三类核心技术:对称加密速度快、适合加密大量数据,非对称加密有公私钥配对、负责建立信任和交换密钥,哈希与消息认证码负责校验完整性和身份。
把这些串起来就是一句话:非对称加密负责交换密钥和证明身份,对称加密负责真正加密数据,哈希和 MAC 负责验证完整性。所有上层协议,从 TLS 到 SSH 再到区块链,本质上都是这几类工具的不同组合。有了这个框架,后面再学具体算法就不会迷路了。
下一篇,我们从模运算到离散对数开始,正式进入现代密码学的世界。