密钥学基础:对称与非对称加密、哈希函数、数字签名

密钥学,说白了就是整个资产密钥依赖分析的基石。你想想看,如果没有这些加密手段,我们手里的资产密钥就跟写在墙上的电话号码一样,谁都能看,谁都能用。那还谈什么安全?

我个人习惯把这部分内容拆成四个核心模块:对称加密、非对称加密、哈希函数和数字签名。它们不是孤立的,而是层层递进、互相配合的关系。

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

对称加密,就是加密和解密用同一把密钥。这就像你家里的大门钥匙——你用这把钥匙锁门,也用这把钥匙开门。

  • 常见算法:AES、DES、3DES、SM4(国密)
  • 优点:加解密速度极快,适合大量数据的加密
  • 缺点:密钥分发是个大问题——你怎么安全地把密钥交给对方?

我在做支付系统时遇到过这个问题。交易报文需要实时加密传输,AES-256-GCM是首选。性能非常好,单机轻松跑满万兆网卡。但痛点在哪?密钥协商。

核心要点:对称加密的核心矛盾是「密钥配送问题」。你随便找个安全通道把密钥传过去?那为什么不直接用这个安全通道传数据?

举个例子,假设你的服务端要跟100个客户端通信。如果每个客户端都用不同的对称密钥,那服务器要维护100把密钥。管理成本很高,密钥泄漏的风险也大。

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

非对称加密解决了密钥分发问题。它生成一对密钥:公钥公开给所有人,私钥只有自己保管。

公钥加密的数据,只有对应的私钥能解开。反过来,私钥加密的数据,公钥也能验证。这就像你家的信箱——任何人(公钥)都能往里面塞信,但只有你有钥匙(私钥)能打开取信。

特性 对称加密 非对称加密
密钥数量 1把(共享密钥) 2把(公钥+私钥)
加密速度 快(硬件加速友好) 慢(数学运算复杂)
密钥分发难度 高 低(公钥可公开)
典型算法 AES, SM4 RSA, ECC, SM2
典型用途 加密大量数据 密钥交换、数字签名

为什么非对称加密慢?因为它依赖大整数分解或椭圆曲线上的离散对数问题。RSA-2048签名一次,要花好几毫秒。而AES加密16字节数据,只需要几纳秒。差了上千倍。

实践技巧:实际项目中没人用非对称加密直接加密大文件。都是「混合加密」——用非对称加密传递对称密钥,再用对称密钥加密实际数据。HTTPS就是这么干的。

我记得有一次帮客户审计一个物联网平台。他们直接用RSA加密每个传感器上报的1KB数据包,结果服务器CPU直接爆了。改成ECDH密钥协商 + AES-128-GCM之后,性能提升了两个数量级。

哈希函数:单向的指纹

哈希函数是个单向通道。你把任意长度的数据扔进去,它吐出一个固定长度的摘要。但你没办法从摘要反推出原始数据。这就是所谓的「抗原像性」。

  • 常用算法:MD5(已不推荐)、SHA-1(已破)、SHA-256、SM3(国密)
  • 特性:
    1. 确定性:同样的输入,永远得到同样的输出
    2. 快速:计算速度很快
    3. 抗碰撞:很难找到两个不同的输入,产生相同的哈希值

哈希函数在资产密钥管理中最常见的用途是什么?验证完整性。你下载了一个密钥文件,把它哈希一下,跟官方公布的哈希值比较。一样,文件没被篡改。不一样,赶紧重新下载。

曾经踩过的坑:我曾经在项目里用MD5做文件校验,结果被人说:「你还在用MD5?这玩意儿早在2004年就被王小云团队撞破了。」嗯,虽然实际攻击门槛不低,但合规审计过不去。从那以后,非SHA-256以上我不碰。

还有一个容易被忽略的点:哈希函数的输出长度决定了它的安全强度。SHA-256输出256位,意味着平均要尝试2^128次才能找到碰撞。这数字有多大?比宇宙中的原子总数还多。所以目前足够安全。

数字签名:谁签的?改没改?

数字签名结合了非对称加密和哈希函数。它的核心作用是两件事:身份认证和完整性保护。

流程是这样的:

  1. 发送方对消息做哈希,得到摘要
  2. 发送方用自己的私钥加密这个摘要,生成签名
  3. 接收方拿到消息和签名
  4. 接收方用发送方的公钥解密签名,得到摘要A
  5. 接收方对消息做哈希,得到摘要B
  6. 比较A和B——相同则签名有效,不同则被篡改

你可能会问:为什么要先哈希再签名?直接加密整个消息不行吗?行,但太慢了。非对称加密不适合处理大数据。用哈希把消息浓缩成固定长度的摘要再签名,效率高出好几个数量级。

实战场景:软件包签名。你从网上下载的操作系统安装包,几乎都有PGP签名或GPG签名。系统安装程序会自动验证签名,确认这个包确实是官方发布的、没被中间人篡改过。没有这步?你的电脑可能装了个带后门的「官方包」。

数字签名跟手写签名有个本质区别:手写签名可以伪造,数字签名不行(前提是私钥没泄漏)。因为私钥只有所有者知道,只要私钥安全,签名就具备法律意义上的「不可否认性」。

嗯,这里要注意:数字签名 ≠ 加密。很多人搞混。签名不隐藏消息内容,它只是给消息贴了个防伪标签。消息本身可能是明文传输的,但有了签名,你就能确定这条消息是谁发的、有没有被改过。

四者关系:一张图理清

我画了张结构图,把这四个核心概念串起来。你看完应该能理解它们各自的定位和协作关系。

密钥学核心概念结构图 对称加密 AES / SM4 非对称加密 RSA / ECC / SM2 哈希函数 SHA-256 / SM3 数字签名 身份认证 + 完整性 解决「密钥配送问题」 非对称加密交换对称密钥 哈希 = 数字指纹 不可逆、抗碰撞 非对称密钥 + 哈希 数字签名 = 私钥签名 + 公钥验签 应用场景:数字证书 · HTTPS · 软件签名 · 密钥交换 · 区块链

你可以从左往右看。对称加密快但密钥分发难,所以需要非对称加密来协助密钥交换。哈希函数不加密数据,只生成摘要,用来验证完整性。数字签名站在非对称加密和哈希的交汇点上——它用私钥签名哈希摘要,用公钥验证身份和数据是否完整。

这四个概念组合起来,几乎构成了现代信息安全体系的全部密码学基础。后面章节讲资产密钥的生命周期管理、密钥存储安全、依赖关系分析,都离不开这套基础。先把这里搞懂,后面的路就好走了。