密码学基础

说真的,很多搞TLS的人,密码学基础是薄弱的。

我自己早年也踩过坑。有一次排查一个SSL握手失败的问题,查了三天,最后发现是签名验证时哈希算法用错了。从那以后,我要求团队每个人必须先把这四个核心概念搞透:对称加密、非对称加密、哈希函数、数字签名。

它们是TLS的基石。不理解它们,密钥边界保护就是空中楼阁。

对称加密

对称加密,说白了就是加密和解密用同一把钥匙。

你想想看,就像你家大门,一把钥匙既能锁门也能开门。发送方用密钥加密数据,接收方用同一个密钥解密。速度快,适合加密大量数据。

核心特征:同一个密钥,既用于加密,也用于解密。

我在项目中遇到过一个问题。一个银行内部系统,用对称加密传输交易数据,密钥放在配置文件里。结果运维同事不小心把配置提交到了Git仓库。嗯,整个系统都得换密钥。

常用的对称加密算法:

  • AES – 目前最主流的选择。我个人习惯用AES-256-GCM,带认证,能防篡改。
  • SM4 – 中国国家密码标准,国密TLS里的核心算法。
  • 3DES – 老了,别用了。我见过还在用3DES的项目,性能差还不安全。

非对称加密

和对称加密不同,非对称加密用一对密钥:公钥和私钥。

公钥可以公开,私钥必须保密。公钥加密的数据,只有私钥能解开。反过来,私钥签名的数据,公钥可以验证。

我经常跟新人说:公钥是锁,私钥是钥匙。你把锁给别人,别人锁上箱子,只有你能打开。

实用建议:非对称加密速度慢,不适合加密大量数据。TLS里主要用于密钥交换和身份认证。

举个例子:TLS握手阶段,客户端用服务器的公钥加密一个临时密钥(前向保密场景下会复杂一些,但原理类似),服务器用私钥解密。之后双方用这个临时密钥做对称加密通信。

常见算法:

  • RSA – 经典,但逐渐被淘汰。密钥越长越慢。
  • ECC(椭圆曲线) – 更短的密钥达到相同安全强度。TLS 1.3 首选。
  • SM2 – 国密标准,基于椭圆曲线。
特性 对称加密 非对称加密
密钥数量 1个 2个(公钥+私钥)
速度 快(硬件加速) 慢(数学运算复杂)
典型用途 批量数据加密 密钥交换、数字签名
密钥管理难度 高(需安全分发) 较低(公钥可公开)

哈希函数

哈希函数,你可以把它理解成数据的数字指纹。

任意长度的数据,经过哈希函数,输出一个固定长度的字符串。而且,哪怕原数据只改一个比特,哈希结果都会变得面目全非。

为什么TLS需要它?

  • 验证数据完整性 – 收发双方对比哈希值,就知道数据有没有被篡改。
  • 密码存储 – 不存明文密码,存哈希值。
  • 证书签名 – 先对证书内容做哈希,再对哈希值签名,效率更高。

避坑指南:我曾经见过一个团队直接用MD5做TLS证书签名。MD5已经能被碰撞攻击了,这在安全审计里是致命问题。切记,生产环境至少用SHA-256。

常用哈希算法:

  • SHA-256 – 当前最低安全标准。
  • SHA-3 – 新一代标准,更安全,但生态还在建设中。
  • SM3 – 国密标准,输出256位,对标SHA-256。

哈希是单向的。你没办法从哈希值反推出原始数据。这个特性在TLS的密钥派生和证书验证里非常关键。

数字签名

数字签名解决的是身份认证和不可否认性。

签名过程:发送方用私钥对数据的哈希值加密,生成签名。接收方用公钥验证签名。

为什么先哈希再签名?因为非对称加密太慢了。对哈希值签名,相当于给整个数据打了一个防伪标签。

我记得有一次做国密TLS改造,客户问:“我怎么证明这个证书真的是CA签发的?”答案就在数字签名里。CA用自己的私钥签名证书,浏览器用CA的公钥验证。只要签名通过,证书就是真实的。

通俗理解:数字签名 = 对数据的哈希值做非对称加密。

常见的签名算法:

  • RSA-PSS – RSA的现代变体,比传统RSA签名更安全。
  • ECDSA – 基于椭圆曲线,TLS 1.3 推荐。
  • SM2 签名 – 国密标准,与ECDSA类似但不同。

这里有个细节:签名算法和哈希算法是绑定的。比如 ECDSA 通常搭配 SHA-256,SM2 搭配 SM3。选错了,握手就会失败。

好,这四个基础概念搞清楚了,我们就能理解国密TLS的密钥边界保护到底在保护什么。下面这张图梳理了它们之间的关系。

密码学基础四件套 密码学基础 对称加密 非对称加密 哈希函数 数字签名 • 同一密钥 • 速度快 • AES / SM4 • 批量加密 • 公钥+私钥 • 速度慢 • RSA / ECC / SM2 • 密钥交换 • 单向函数 • 固定输出 • SHA-256 / SM3 • 完整性验证 • 私钥签名 • 公钥验证 • ECDSA / SM2 • 身份认证 TLS中的组合应用 非对称加密交换对称密钥 → 对称加密传输数据 → 哈希验证完整 → 签名确认身份

看到这个图你就明白了。TLS协议把四个基础技术串起来了:

  • 非对称加密用来安全传递对称密钥
  • 对称加密用来加密实际通信数据
  • 哈希函数确保数据没被篡改
  • 数字签名确认通信双方的身份

缺了任何一个,整个安全体系都会有漏洞。国密TLS也一样,只是把算法换成了SM2、SM3、SM4。逻辑是相通的。

个人习惯:我每次做TLS调试,第一件事就是确认这四个基础组件是否配置正确。算法不匹配、密钥长度不够、签名验证失败,八成问题出在这里。