加密基础理论

大家好,我是这节课的主讲。咱们先聊聊最基础的东西——加密到底在干嘛?

很多人一听到加密就觉得是数学,是算法,是密码。但说白了,加密就是「让不该看的人看不懂」。你想想看,我们在网络上发消息、转账、登录,数据就像明信片一样在路上跑,谁都能瞟一眼。加密就是给明信片套个信封,再上把锁。

我做架构设计这么多年,遇到过不少团队把加密当「功能特性」来加,结果性能崩了、密钥丢了、证书过期了……嗯,这些坑我后面会一个个掰开了讲。这一章先把地基打牢:对称加密、非对称加密、哈希函数、数字签名、证书。它们是加密世界的五块砖。

加密架构概述

先问一个问题:一套完整的加密架构长什么样?

我个人习惯把它分成三层:

  • 算法层:具体的加密算法、哈希算法、签名算法。这是砖块。
  • 协议层:怎么用这些算法协商密钥、交换证书、加密通信。比如TLS、IPSec。这是图纸。
  • 应用层:最终的产品或服务怎么调用这些协议和算法。比如HTTPS、VPN、数字版权。这是房子。

很多人只盯着算法层,觉得用AES-256就安全了。我在项目中遇到过这种情况——算法没问题,但密钥写死在代码里,一上生产就被反编译。所以架构思维比单个算法重要得多。

核心目标:机密性(别人看不懂)、完整性(别人改不了)、可用性(需要时能用)、不可否认性(做过的事赖不掉)。

对称加密与非对称加密

这是加密的两大流派。先看对称加密。

对称加密:加密和解密用同一把钥匙。最常见的算法是AES(高级加密标准)。速度快,适合加密大量数据。但问题来了——这把钥匙怎么安全地给到对方?

非对称加密:一把公钥,一把私钥。公钥公开,私钥自己藏好。你用我的公钥加密,只有我的私钥能解开。算法有RSA和ECC(椭圆曲线)。速度慢得多,但解决了密钥分发难题。

实际场景里怎么用?我举个例子:你要给一个文件加密传输。直接拿RSA加密文件?文件一大,RSA慢得你怀疑人生。所以通常是:先用对称加密(AES)随机生成一把会话密钥加密文件,再用非对称加密(RSA)把会话密钥加密传过去。这叫「混合加密」。HTTPS底层就是这么干的。

特性对称加密非对称加密
密钥数量1个(共享密钥)2个(公钥+私钥)
典型算法AES, DES, 3DESRSA, ECC, DSA
速度快(硬件加速可达GB/s)慢(通常慢100~1000倍)
密钥分发困难(需要安全信道)容易(公钥可公开)
适用场景大量数据加密小数据加密、签名、密钥交换

我的建议:不要试图用RSA加密超过几百字节的数据,性能扛不住。用RSA加密AES密钥,再用AES加密正文,这是标准做法。

哈希函数

哈希不是加密。它把任意长度的输入变成固定长度的「指纹」。而且不可逆——你不能从指纹倒推出原文。

常见用途:

  • 校验文件完整性(下载后比对哈希值)
  • 存储密码(存哈希值,不存明文)
  • 数字签名的基础(先对消息哈希,再对哈希签名)

主流算法是SHA-256(安全哈希算法256位)。MD5和SHA-1已经不被推荐了。我曾经在早期项目里偷懒用MD5,结果上线后服务被彩虹表扫得稀里哗啦。还好只是内部工具,不然就完了……嗯,从那以后我只用SHA-256以上。

哈希有一个重要特性:抗碰撞性。两个不同的输入产生相同的哈希,叫碰撞。优秀的哈希算法碰撞概率极低。

避坑指南:存储密码别只用哈希。加盐(salt)是必须的,否则彩虹表一跑一个准。我曾经见过一个系统连盐都不加,被拖库后明文直接暴露。

数字签名

数字签名解决两个问题:**谁发的**(身份认证)和 **发的内容有没有被改**(完整性)。

流程很简单:

  1. 发送方对消息做哈希,得到摘要。
  2. 用发送方的私钥对摘要加密,这就是签名。
  3. 接收方用发送方的公钥解密签名,得到原摘要。
  4. 接收方再对消息做哈希,对比两个摘要。一致则签名有效。

你看,这里用了哈希缩短消息长度,又用了非对称加密保证「只有私钥拥有者才能签名」。但注意:公钥怎么确保是发送方本人的?这就需要证书了。

我顺手给个OpenSSL命令例子,平时做实验常用:

# 生成私钥
openssl genrsa -out private.pem 2048
# 提取公钥
openssl rsa -in private.pem -pubout -out public.pem
# 对文件签名
openssl dgst -sha256 -sign private.pem -out sign.txt file.txt
# 验签
openssl dgst -sha256 -verify public.pem -signature sign.txt file.txt

证书基础

证书就是公钥的「身份证」。它是一个数据结构,包含:

  • 主体(谁持有这个公钥)
  • 颁发者(谁签发的证书)
  • 公钥本身
  • 有效期、序列号、签名算法等

最重要的是一句话:证书由颁发者(CA)用它的私钥签名。你验证证书时,需要先信任CA的公钥。这构成信任链。根CA自签名,中间CA由根CA签发,终端证书由中间CA签发。

我在帮客户做内部PKI时,发现他们直接把根证书放在每台服务器上,私钥居然没加密。我说这个根证书私钥暴露,整个信任体系就完了。所以证书生命周期管理——生成、分发、轮换、吊销,每一步都不能马虎。

关键理解:证书的本质是「公钥+CA签名」。浏览器验证HTTPS证书,就是沿着证书链直到根证书,检查签名是否有效。如果链断了或者根证书不受信任,就会报安全警告。

最后,我把这五块的关系画成一张图,帮你理清脉络。

加密基础理论体系 加密架构 对称加密(AES) 非对称加密(RSA) 哈希函数(SHA-256) 数字签名 X.509证书 哈希函数为数字签名提供消息摘要;数字签名依赖非对称加密;证书绑定公钥和身份;对称和非对称混合使用

好,加密基础理论的核心框架就是这样。我们后面会在这个基础上一步步搭建高可用架构。记住一句话:安全不是一条龙服务,而是每一层都加固。只要有一块短板,整个体系就废了。