构筑密码学基础世界观 —— 搭建完整密码底层认知体系
构筑密码学基础世界观 —— 搭建完整密码底层认知体系前言一、密码学到底在解决什么问题1. 保密性Confidentiality2. 完整性Integrity3. 身份认证Authentication4. 不可否认性Non-repudiation二、密码学里最基础的几个概念1. 明文、密文、密钥2. 编码、哈希、加密的区别3. 公钥、私钥是什么三、三类最核心的密码学工具1. 对称加密2. 非对称加密用途一密钥交换 / 加密少量数据用途二数字签名3. 哈希与消息认证码3.1 哈希函数3.2 消息认证码MAC4. 三类工具怎么组合使用四、为什么后面的内容都离不开这些基础1. 流密码 分组密码2. RSA ECC3. TLS / HTTPS五、总结密码学的整体框架Crypto专栏https://blog.csdn.net/r_feynman_/category_13190241.htmlCrypto 密码解析实战靶场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-8MD5、SHA-1、SHA-256AES、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、SM4AES 是目前最主流的分组密码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 消息认证码MACMAC 可以理解为带密钥的哈希。普通哈希消息 → 哈希值 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 / HTTPSTLS 是密码学的集大成者——把前面讲的所有概念几乎全用上了。大致分两个阶段握手阶段用数字证书和数字签名验证服务器身份用 ECDHE 等密钥交换算法协商会话密钥。传输阶段用对称加密AES-GCM 或 ChaCha20-Poly1305加密数据同时用 AEAD 保证完整性和认证。TLS 协议细节很多版本、扩展、套件一大堆但抓住主线就不会乱握手用非对称加密建立信任、交换密钥传输用对称加密加密数据全程用签名和 AEAD 保证身份和完整性。为什么说基础最重要讲到这里你应该能看出来流密码、分组密码 → 对称加密的具体实现RSA、ECC → 非对称加密的具体实现TLS → 三类工具的组合应用后面学任何具体算法或协议先问自己三个问题它属于哪一类工具它提供哪些安全能力保密/完整性/认证/不可否认它和同类方案比优缺点是什么带着这三个问题去学你就不是在从零学一个新东西而是在给已有的框架填细节。这就是为什么我们要花一整篇文章讲第零阶段——先搭架子再填内容。五、总结密码学的整体框架密码学看起来知识点很多但底层的世界观其实很清晰。从目标上说就是解决四件事保密性防偷看、完整性防篡改、身份认证防冒充、不可否认性防抵赖。从工具上说就是三类核心技术对称加密速度快、适合加密大量数据非对称加密有公私钥配对、负责建立信任和交换密钥哈希与消息认证码负责校验完整性和身份。把这些串起来就是一句话非对称加密负责交换密钥和证明身份对称加密负责真正加密数据哈希和 MAC 负责验证完整性。所有上层协议从 TLS 到 SSH 再到区块链本质上都是这几类工具的不同组合。有了这个框架后面再学具体算法就不会迷路了。下一篇我们从模运算到离散对数开始正式进入现代密码学的世界。