目录
[一、密码学安全的核心目标:CIA 三元组](#一、密码学安全的核心目标:CIA 三元组)
[1.加密算法:解决 "机密性" 问题](#1.加密算法:解决 “机密性” 问题)
[(3)两者的 "黄金搭配":用非对称加密传对称密钥](#(3)两者的 “黄金搭配”:用非对称加密传对称密钥)
[2.哈希函数:解决 "完整性" 问题](#2.哈希函数:解决 “完整性” 问题)
[3.数字签名:解决 "不可否认性" 和 "身份验证"](#3.数字签名:解决 “不可否认性” 和 “身份验证”)
[三、密码学安全的 "敌人":常见攻击方式](#三、密码学安全的 “敌人”:常见攻击方式)
[4.密码学中的 "盐"(Salt):原理、作用与实战解析](#4.密码学中的 “盐”(Salt):原理、作用与实战解析)
[一、先搞懂:为什么需要 "盐"?(哈希存储的痛点)](#一、先搞懂:为什么需要 “盐”?(哈希存储的痛点))
[二、"盐" 到底是什么?(本质与核心特性)](#二、“盐” 到底是什么?(本质与核心特性))
[2.盐的 3 个核心特性(必须满足才安全)](#2.盐的 3 个核心特性(必须满足才安全))
[三、"盐" 怎么工作?(一步一步看流程)](#三、“盐” 怎么工作?(一步一步看流程))
[四、"盐" 的局限性:不能单独用,要搭配 "增强哈希算法"](#四、“盐” 的局限性:不能单独用,要搭配 “增强哈希算法”)
密码学安全的本质,是通过数学算法 和安全协议,解决信息在 "存储" 和 "传输" 过程中可能遇到的安全问题,核心目标是保障信息的三大属性 ------ 这也是整个密码学领域的基石,先从这里讲起。
一、密码学安全的核心目标:CIA 三元组
所有密码学技术的设计,最终都是为了实现以下三个核心目标(业界称为CIA 三元组),缺一个都可能导致安全漏洞:

补充:实际应用中还会延伸出 "不可否认性(Non-repudiation)"------ 比如你发了消息 / 付了钱,不能事后否认,这通常靠数字签名实现。
二、密码学的核心技术:三大基础支柱
密码学安全不是靠 "复杂的密码" alone,而是靠三大核心技术支撑:加密算法 、哈希函数 、数字签名。这三者分工不同,却经常配合使用(比如 HTTPS 就同时用到了这三种)。
1.加密算法:解决 "机密性" 问题
加密算法的作用是把 "能看懂的信息"(明文)转换成 "看不懂的乱码"(密文),只有拥有 "密钥" 的人才能把密文还原成明文。根据 "密钥是否相同",分为对称加密 和非对称加密,两者各有优劣,实际场景中通常 "搭配使用"。
(1)对称加密:"一把钥匙开一把锁"
-
核心逻辑 :加密和解密用同一把密钥(称为 "对称密钥"),就像你家的门,钥匙既能锁门也能开门。
-
优点:算法简单、加密速度极快,适合加密 "大量数据"(比如你手机里的照片、视频加密)。
-
缺点:密钥传递是 "死穴"------ 如果要给朋友发加密文件,你得先把 "对称密钥" 传给朋友,但传递密钥的过程中可能被黑客截获(比如微信发密钥,黑客能看到),一旦密钥被偷,加密就白费了。
-
常见算法:AES(最主流,比如手机指纹解锁、Wi-Fi 加密、银行数据加密都用它)、DES(较老旧,已被 AES 取代)。
-
通俗例子:你用压缩包给文件加密(设一个密码),朋友只有输入相同的密码才能解压 ------ 这个 "压缩包密码" 就是对称密钥。
(2)非对称加密:"公钥锁门,私钥开门"
-
核心逻辑 :生成一对 "密钥对"------公钥 ( Public Key ) 和私钥 ( Private Key )。
-
公钥:可以公开给任何人(比如挂在网站上、发给朋友),只能用来 "加密",不能解密;
-
私钥:只有自己保管(不能泄露),只能用来 "解密" 公钥加密的内容,也能用来签名。
-
-
优点:解决了 "密钥传递问题"------ 不需要传递私钥,只传公钥即可,黑客拿到公钥也无法解密。
-
缺点:算法复杂、加密速度慢,不适合加密 "大量数据"(比如用非对称加密传一部电影,可能要等几小时)。
-
常见算法:RSA(最常用,比如网银 U 盾、数字证书、SSH 登录)、ECC(更高效,适合手机、物联网设备)。
-
通俗例子:你生成 "公钥 A" 和 "私钥 A",把公钥 A 发给朋友;朋友用公钥 A 把消息加密后发给你,只有你用私钥 A 能解密 ------ 即使黑客拿到公钥 A 和加密消息,也解不开。
(3)两者的 "黄金搭配":用非对称加密传对称密钥
实际场景中,不会单独用某一种加密,而是结合两者的优点:
-
用对称加密加密 "大量数据"(比如 1GB 的文件),因为速度快;
-
用非 对称加密加密 "对称密钥"(比如 AES 密钥只有 256 位,很小),因为不需要担心密钥传递被截获;
-
把 "加密后的对称密钥" 和 "加密后的文件" 一起发给对方;
-
对方先用自己的私钥解密 "对称密钥",再用对称密钥解密 "文件"。例子: HTTPS 协议就是这么做的 ------ 用 RSA (非对称)交换 AES (对称)密钥,再用 AES 加密网页数据。
2.哈希函数:解决 "完整性" 问题
哈希函数(又称 "散列函数")和 "加密" 完全不同 ------ 它是单向的:能把 "任意长度的输入" 转换成 "固定长度的输出"(称为 "哈希值" 或 "摘要"),但无法从哈希值反推回原始输入。它的核心作用是 "验证信息有没有被篡改",因为只要原始输入有一点点变化(哪怕改一个字符),哈希值就会完全不同(称为 "雪崩效应")。
-
核心特点:
-
单向性:只能 "输入→哈希值",不能 "哈希值→输入";
-
固定输出:无论输入是 1KB 的文本还是 1GB 的视频,输出的哈希值长度固定(比如 SHA-256 的哈希值是 64 个字符);
-
雪崩效应:输入微小变化,哈希值剧烈变化。
-
-
常见算法:SHA-2 系列(SHA-256、SHA-512,最安全,用于文件校验、密码存储)、MD5(已被破解,不适合安全场景,仅用于简单校验)。
-
实际应用:
-
文件校验:你从官网下载软件,官网会提供软件的 "SHA-256 哈希值";你下载后用工具计算文件的哈希值,和官网的对比 ------ 如果一致,说明文件没被篡改(没植入病毒);
-
密码存储:网站不会直接存储你的明文密码,而是存储密码的哈希值(比如你的密码是 "123456",存储的是它的 SHA-256 值);登录时,网站把你输入的密码转成哈希值,和存储的对比,一致就登录 ------ 即使黑客拿到数据库,也只能看到哈希值,无法反推密码(除非用 "彩虹表" 暴力破解,所以通常会加 "盐",后面讲)。
-
3.数字签名:解决 "不可否认性" 和 "身份验证"
数字签名的本质是 "用私钥加密",作用是证明 "信息确实是某人发的,且没被篡改",就像现实中的 "手写签名",但更难伪造。

-
核心流程(以 "你给朋友发消息" 为例):
-
你先对 "消息内容" 计算哈希值(比如 SHA-256),得到 "消息摘要";
-
你用自己的私钥对 "消息摘要" 加密,得到 "数字签名";
-
你把 "原始消息" 和 "数字签名" 一起发给朋友;
-
朋友收到后,先用你的公钥解密 "数字签名",得到 "原始摘要";
-
朋友再对 "原始消息" 计算哈希值,得到 "新摘要";
-
对比 "原始摘要" 和 "新摘要"------ 如果一致,说明:①消息确实是你发的(只有你的私钥能生成签名);②消息没被篡改(摘要没变)。
-
-
实际应用:
-
电子合同:双方用数字签名签署合同,无法事后否认 "自己签过字";
-
数字证书:HTTPS 网站的 "证书" 就是 CA 机构(权威机构)给网站发的 "身份证明"------CA 用自己的私钥给网站的公钥签名,浏览器用 CA 的公钥验证证书,确认 "这个网站是真的,不是黑客伪造的"(防御中间人攻击的核心)。
-
Q&A:
1.为何先算 哈希值 ?
非对称加密(如 RSA)速度较慢,若直接加密 1GB 文件等长消息会耗时极久。先通过哈希算法将 "任意长度消息" 压缩为 "固定长度摘要"(如 SHA-256 仅 64 字符),再加密摘要,既能保证效率,又能通过 "摘要匹配" 验证消息完整性(消息若被改,摘要必变)。
2. 公钥 / 私钥 的分工:
-
发送方只用「私钥」签名(绝不泄露私钥),确保 "只有我能生成这个签名";
-
接收方只用发送方的「公钥」验证(公钥可公开),确保 "只能用我的公钥解密,证明签名是我发的"。
3.验证结果的意义:
-
若 "摘要不一致",要么消息在传输中被黑客改了(比如 "14 点" 改成 "18 点"),要么签名是黑客伪造的(用了假私钥);
-
若 "摘要一致",接收方可以 100% 确定:消息是你发的,且没被动过手脚,你无法事后否认("不可否认性")。
三、密码学安全的 "敌人":常见攻击方式
了解了核心技术,再看攻击方式 ------ 所有攻击都是针对 "CIA 三元组" 或核心技术的漏洞:

4.密码学中的 "盐"(Salt):原理、作用与实战解析
在密码学中,"盐"(Salt)是专门用于增强 哈希值 安全性 的技术,核心解决 "相同 明文 对应相同哈希值" 的漏洞------ 这个漏洞会让黑客通过 "彩虹表" 批量破解密码,而 "盐" 能从根本上让彩虹表失效。下面从 "为什么需要盐""盐是什么""怎么用盐" 三个维度展开,结合例子让你彻底理解。
一、先搞懂:为什么需要 "盐"?(哈希存储的痛点)
之前提到过:网站不会直接存储你的明文密码,而是存储密码的哈希值 (比如用 SHA-256 计算)。比如你密码是 "123456",它的 SHA-256 哈希值是固定的:8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
这个 "固定对应关系" 会带来两个致命问题:
1.相同密码的 哈希值 完全一样如果 100 个用户都用 "123456" 当密码,网站数据库里会存储 100 个相同的哈希值。黑客只要破解其中 1 个,就能批量拿到 100 个用户的密码。
2.彩虹表(Rainbow Table)攻击 黑客会提前用计算机 "预计算" 海量常见密码(如 "123456""abc123""生日密码")的哈希值,整理成巨大的 "明文→哈希值" 对应表,这就是彩虹表 。一旦黑客拿到网站的哈希数据库,直接用彩虹表 "查表匹配"------ 比如查到8d969eef...
对应 "123456",瞬间就能破解一大批密码,效率极高。
而 "盐" 的出现,就是为了打破这种 "固定对应关系",让即使相同的明文,也能生成完全不同的哈希值。
二、"盐" 到底是什么?(本质与核心特性)
1.盐的定义
"盐" 是一串随机生成的字符串 (比如 16 个字符的乱码:xQf9#2pZ$kL7@rT3
),在计算明文的哈希值之前,会先把 "盐" 和 "明文"拼接在一起,再对拼接后的内容计算哈希值。
用公式表示:最终哈希值 = 哈希算法(明文 + 盐)
而不是原来的:最终哈希值 = 哈希算法(明文)
2.盐的 3 个核心特性(必须满足才安全)
-
随机性 :盐必须用 "密码学安全的随机数生成器"(如 Python 的
secrets
模块、Java 的SecureRandom
)生成,不能是 "固定值"(比如每个用户都用 "abc123" 当盐),也不能是可预测的值(如用户 ID、注册时间)------ 否则黑客能猜到盐,依然能破解。 -
唯一性 :最好给每个用户、每个密码都生成独立的盐(比如用户改密码时,重新生成新盐),确保即使两个用户密码相同,盐也不同,哈希值自然不同。
-
可存储性 :盐不需要保密,可以明文 存储 在数据库里(比如和用户的哈希值存在同一行,字段名就叫
salt
)------ 因为盐的作用是 "让相同明文哈希不同",不是 "加密明文",黑客知道盐也没关系。
三、"盐" 怎么工作?(一步一步看流程)
以 "你注册某网站,密码是'123456'" 为例,看 "加盐哈希" 的完整流程,对比 "无盐哈希" 的差异:
1.无盐哈希(不安全)

风险:黑客用彩虹表查到哈希值对应 "123456",直接破解。
2.加盐哈希(安全)

安全点:
-
即使另一个用户也用 "123456",他的盐是 "yRg8!5qW% jM6*sU4",最终哈希值会是另一串完全不同的字符,不会批量泄露;
-
黑客拿到 "盐 + 哈希值" 后,彩虹表完全没用(因为彩虹表是 "明文→无盐哈希" 的对应,而这里是 "明文 + 盐→哈希",黑客不可能预计算所有 "明文 + 随机盐" 的组合)。
四、"盐" 的局限性:不能单独用,要搭配 "增强哈希算法"
虽然 "盐" 能防彩虹表,但它不能防暴力破解------ 如果用户密码太简单(比如 "123456"),黑客拿到 "盐 + 哈希" 后,依然可以用 "暴力枚举":
-
假设黑客知道盐是 "xQf9#2pZ$kL7@rT3";
-
他会不断尝试明文:"123456"→拼接盐→算哈希→对比数据库;"123457"→拼接盐→算哈希→对比...... 直到猜对。
为了应对暴力破解,现代密码存储会用 "带盐的增强哈希算法"------ 这类算法不仅内置了 "自动加盐",还能通过 "迭代次数" 控制哈希计算的速度,让暴力破解变得 "耗时极久"(比如 1 秒只能算 100 次,破解一个 8 位复杂密码需要几百年)。
常见的增强哈希算法(推荐用,不要自己手动加盐):
-
BCrypt:自动生成随机盐,支持设置 "工作因子"(比如 12,值越大计算越慢),广泛用于网站密码存储;
-
Argon2:2015 年密码哈希竞赛(PHC)的获胜算法,安全性更高,支持调整内存、CPU、迭代次数,能防 "GPU 加速暴力破解"(黑客用显卡批量计算的方式);
-
PBKDF2:通过多次迭代哈希(比如迭代 10 万次)增加计算时间,兼容性好,适合旧系统。
"盐" 的本质是给 哈希值 "加随机性",打破 "相同 明文 →相同哈希" 的固定关系,从根本上让彩虹表攻击失效。
说了这么多,其实密码学安全的核心逻辑是:用数学方法构建 "信任" ------ 让信息在不可信的环境(如互联网、公共 Wi-Fi)中,依然能保证 "只有该看的人能看,没被改,能证明是谁发的"。