第2章 密码学基础

密码学是整个安全架构的地基。说实话,很多人觉得密码学就是一堆数学公式,离实际工程很远。但你要设计端到端安全,密码学是绕不开的硬知识。

我早年做第一个安全项目时,以为随便选个加密算法就算完事了。结果上线第一天就被曝出密钥硬编码——那感觉,真是后背发凉。从那以后,我对密码学的每一个细节都不敢马虎了。

密码学核心知识体系 密码学基础 对称加密 非对称加密 哈希函数 数字签名 密钥管理 PKI体系 国密算法 对称加密加密效率高 非对称用于密钥交换 哈希验证数据完整性

对称加密:又快又简单,但密钥怎么传?

对称加密,说白了就是加密和解密用同一个密钥。你想把数据加密塞进信封,再交给对方,对方用同一把钥匙打开。我习惯用AES-256,它目前是行业标准。

  • 常用算法:AES(推荐)、SM4(国密)、3DES(已过时)
  • 优点:计算速度快,适合大数据量加密
  • 痛点:密钥配送问题——你怎么安全地把密钥发给对方?
我在项目中遇到过:直接写死在代码里的AES密钥被反编译发现。之后改用密钥协商+硬件安全模块(HSM)存储,才解决问题。

非对称加密:公钥私钥,天生一对

非对称加密用一对密钥:公钥加密,私钥解密。公钥可以公开,私钥必须保密。它的核心价值在于解决了密钥分发问题——你不用偷偷传递密钥,直接把公钥扔给对方就行。

特性对称加密非对称加密
密钥数量1个密钥2个密钥(公钥+私钥)
速度快(硬件加速可达GB/s)慢(主流千倍差距)
典型场景大数据量加密密钥交换、数字签名
算法举例AES-256RSA-2048、SM2、ECC

不过非对称加密计算开销大。所以实际工程中我们不会用它加密整个文件,而是用来加密对称密钥——也就是混合加密。比如HTTPS就是这样做的。

对称加密加密内容,非对称加密加密密钥——这是安全架构的黄金搭档。

哈希函数:不可逆的指纹

哈希函数能把任意长度的输入转换成固定长度的摘要。它是不可逆的——你无法从摘要反推出原始数据。我第一次理解它的作用是在做文件完整性校验时:把下载后的文件算一个SHA-256值,和官网对比,就知道有没有被篡改过。

  • 常用算法:SHA-256(推荐)、SM3(国密)、MD5(已被攻破,别用了)
  • 主要用途:数据完整性校验、密码存储、数字签名
我曾经犯过一个低级错误:用MD5存用户密码。后来彩虹表一查,明文全暴露。记住,密码存储一定要加盐(salt)+ 慢哈希(如bcrypt或SM3多次迭代)。

数字签名:你说是你发的,怎么证明?

数字签名 = 哈希 + 非对称加密。流程很简单:发送方用私钥对摘要签名,接收方用公钥验签。谁也伪造不了——除非私钥泄露。我参与过一个金融交易系统,所有订单都强制RSA-SHA256签名,就是为了防抵赖。

  1. 发送方计算文档的哈希值
  2. 用自己的私钥加密哈希值,得到签名
  3. 接收方用发送方公钥解密签名,得到哈希值1
  4. 接收方重新计算文档哈希值,得到哈希值2
  5. 对比两个哈希值,相同则签名有效

密钥管理基础:密钥安全是整个系统的底线

密钥管理不是技术问题,是工程纪律问题。我见过太多项目因为密钥泄漏而导致全盘皆输。密钥管理至少包含以下要点:

  • 密钥生成:必须使用真随机数生成器(TRNG),不能用伪随机
  • 密钥存储:不要明文存储,用HSM或密钥管理服务(KMS)
  • 密钥分发:非对称用证书,对称用Diffie-Hellman或KMS
  • 密钥轮换:定期更换,比如90天轮换一次
  • 密钥销毁:销毁时要覆写多遍,不能只删除文件
我个人的铁律:密钥永远不出HSM,内存用完立即清零,日志里绝不能出现密钥。

PKI体系:让公钥不再裸奔

PKI(公钥基础设施)解决的核心问题是:你怎么确认这个公钥就是真正属于对方的?PKI通过证书链来建立信任。每一张证书由上一级CA(证书颁发机构)签名,根CA自签名。

我做过的一个政务系统需要打通多级CA,每个单位都用自己的子CA签发证书。调试证书链的时候,最烦的就是中间证书缺失或过期。嗯,用openssl验签是基本功。

# 验证证书链
openssl verify -CAfile rootCA.crt -untrusted intermediate.crt server.crt
  • X.509证书:包含公钥、颁发者、有效期、签名等
  • CRL/OCSP:证书撤销机制,防止证书泄露后继续被信任
  • 信任锚:浏览器、操作系统预置的根证书

国密算法简介:中国造,要会用

国密算法是中国国家密码管理局推荐的密码算法标准。现在等保2.0和关键信息基础设施都要求优先使用国密。说实话,刚开始接触时觉得和AES、RSA差不多,但实际实现中坑不少。

国密算法对应国际算法用途
SM2ECC(椭圆曲线)非对称加密、数字签名
SM3SHA-256哈希函数
SM4AES对称加密
SM9基于标识的密码IBE(无证书)
注意:国密算法需要持有国家密码管理局颁发的型号证书才能商用。我在一个项目里直接用开源SM2库,被客户指出没有合规认证,被迫换成了商密产品。所以做合规项目时,一定要提前确认密码模块是否已有资质。

我的习惯是:如果项目面向国内政务、金融、关键基础设施,直接上国密。国际项目则首选AES+ECC+RSA。但核心原则不变——算法选对了,密钥管好了,安全才有基础。