加密技术基础:对称加密与非对称加密、哈希算法、数字签名原理

聊到加密审计日志,绕不开的就是底层那几根支柱。说白了,整个日志的可信度,全靠对称加密、非对称加密、哈希算法和数字签名在撑着。我习惯把这四样东西看作一栋房子的四堵墙。少一面,房子就塌。

这一章我们就来把这四堵墙拆开看看。不扯太深奥的数学公式,重点放在「它是什么」、「它能干什么」以及「用在审计日志里要注意什么」。嗯,我们开始吧。

加密技术基础 — 四根支柱 加密审计日志 对称加密 AES / 3DES / 国密SM4 非对称加密 RSA / ECC / SM2 哈希算法 SHA-256 / SHA-3 数字签名 ECDSA / RSA-PSS 加密审计日志的可信度,依赖这四者的协同工作 缺少任何一项,完整性和不可否认性都无法保证

先说对称加密

对称加密,就是一把钥匙开一把锁。加密和解密用同一个密钥,又快又直接。我在项目中遇到的第一个审计日志系统,就用的 AES-256。为什么呢?因为日志量大,对称加密速度最快。

主流算法就那么几个,我整理了一个表格,方便你一眼看懂区别:

算法 密钥长度 分组大小 常见场景
AES (主流) 128 / 192 / 256 位 128 位 日志记录加密、文件加密
3DES (淘汰中) 168 位 64 位 遗留系统兼容
SM4 (国密) 128 位 128 位 国内合规需求

我的建议:审计日志环节,优先选 AES-256-GCM。它自带认证标签,能顺带检测数据是否被篡改。省一步是一步。

对称加密最大的痛点是密钥分发。你想想看,如果服务端和客户端用同一个密钥,那密钥在网络上传输的过程就变成了攻击者的靶子。所以实战中,对称密钥通常搭配非对称加密来传输。这就是我们下一个要聊的。

再说非对称加密

非对称加密,有一对密钥——公钥和私钥。公钥可以公开,私钥自己藏着。公钥加密的数据,只有私钥能解开;反过来,私钥加密的数据,公钥也能验证。

「既然非对称加密这么好,为什么不全都用它?」——你会问。

原因很简单:慢。非对称加密比对称加密慢了几个数量级。RSA 加密 2KB 的数据,耗时要远高于 AES 加密 1MB 的数据。所以在审计日志里,非对称加密不直接用来加密日志内容。它只用来做两件事:加密对称密钥、生成数字签名。

算法 密钥长度 优势 劣势
RSA 2048 / 4096 位 兼容性好,生态成熟 密钥太长,运算慢
ECC (椭圆曲线) 256 / 384 位 密钥短、性能高 实现复杂,有专利坑
SM2 (国密) 256 位 国内标准、抗量子威胁 海外兼容性差

核心原则:不要把非对称加密当对称加密用。用它签数据、传密钥就好。直接加密日志本体,性能会让你怀疑人生。

哈希算法——单向的指纹机

哈希算法,输入任意长的数据,输出固定长度的摘要。这个摘要是唯一的,几乎不会碰撞。而且它是单向的——你不能从摘要反推出原文。我在项目中见过很多人搞混哈希和加密,这不是一回事。

为什么要提哈希?因为审计日志的完整性验证,核心靠的就是哈希链。每条日志的哈希值,都包含了上一条日志的哈希值。只要改动了前面任何一条,后面的链条就全断了。

注意:MD5 和 SHA-1 已经被证明不安全,不要再用在审计日志里。至少用 SHA-256。不,直接用 SHA-256 或 SHA-3。

哈希在审计日志里主要有三个用途:

  • 生成日志的完整性校验值
  • 构建哈希链,防篡改
  • 对敏感字段(如密码、令牌)做摘要存储

多提一句。我曾经接手过一个项目,他们用 SHA-256 做日志摘要,但忘了把时间戳加进去。结果攻击者把整个日志文件的顺序一换,哈希链居然还是完整的。那叫一个惨。所以,哈希的输入一定要包含上下文:时间戳、日志序号、上一条哈希值。缺一不可。

数字签名——谁说签名只能手写?

数字签名 = 非对称加密 + 哈希算法。它解决了三个问题:身份认证、完整性、不可否认性。

过程是这样的:

  1. 计算日志内容的哈希值
  2. 用自己的私钥加密这个哈希值
  3. 把签名附在日志后面

验证的时候,接收方用你的公钥解密签名,拿到哈希值A。再对日志内容自己算一遍哈希,得到哈希值B。A 等于 B,就说明日志没改过,而且确实是你签的。

个人习惯:我一般在每条日志末尾附加一个 signature 字段,格式类似 signature = base64(ECDSA_sign(hash(log_entry)))。后续审计员只需要公钥就能验证,不需要解密整条日志。

常见的签名算法对比:

算法 签名速度 验证速度 签名长度
RSA-SHA256 较慢 较快 256 字节 (2048位密钥)
ECDSA (P-256) 快 快 64 字节
SM2 快 快 64 字节

签名长度在审计日志里很有讲究。你想想,一天几千万条日志,每条多出 256 字节,那存储成本可不是开玩笑的。我建议查用 ECDSA,签名短、性能好、安全等级也够。

四者怎么配合?

讲到这里,你大概能看出来了吧?这四样东西不是各自为政的。

  • 对称加密负责快速加密日志本体。
  • 非对称加密保护对称密钥的传输,并提供签名能力。
  • 哈希算法保证内容不被偷偷改动。
  • 数字签名确保日志确实由声明的来源生成。

一个典型的审计日志写入流程大概是这样的:

1. 生成日志条目(JSON 格式)
2. 计算该条日志的 SHA-256 哈希值(带上上一条的哈希)
3. 用 ECDSA 私钥对哈希值签名
4. 用 AES-256 密钥加密整条日志(可选)
5. 将加密后的日志 + 签名写入存储
6. 对称密钥用非对称公钥加密后单独存储

关键点:哈希链保证了日志的顺序不被调换。数字签名保证了每条日志的身份可信。对称加密保证了日志内容在传输和存储过程中不泄露。

嗯,说到这,你应该对加密技术在审计日志中的作用有个底了。别小看这四根柱子。现实中有太多日志系统,就是因为少了一根柱子,出了大问题。要么被篡改了没人知道,要么被伪造了发现不了。把这些基础打牢,后续构建审计日志系统才能走得稳。