加密技术基础:对称加密与非对称加密、哈希算法、数字签名原理
聊到加密审计日志,绕不开的就是底层那几根支柱。说白了,整个日志的可信度,全靠对称加密、非对称加密、哈希算法和数字签名在撑着。我习惯把这四样东西看作一栋房子的四堵墙。少一面,房子就塌。
这一章我们就来把这四堵墙拆开看看。不扯太深奥的数学公式,重点放在「它是什么」、「它能干什么」以及「用在审计日志里要注意什么」。嗯,我们开始吧。
先说对称加密
对称加密,就是一把钥匙开一把锁。加密和解密用同一个密钥,又快又直接。我在项目中遇到的第一个审计日志系统,就用的 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 做日志摘要,但忘了把时间戳加进去。结果攻击者把整个日志文件的顺序一换,哈希链居然还是完整的。那叫一个惨。所以,哈希的输入一定要包含上下文:时间戳、日志序号、上一条哈希值。缺一不可。
数字签名——谁说签名只能手写?
数字签名 = 非对称加密 + 哈希算法。它解决了三个问题:身份认证、完整性、不可否认性。
过程是这样的:
- 计算日志内容的哈希值
- 用自己的私钥加密这个哈希值
- 把签名附在日志后面
验证的时候,接收方用你的公钥解密签名,拿到哈希值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. 对称密钥用非对称公钥加密后单独存储
关键点:哈希链保证了日志的顺序不被调换。数字签名保证了每条日志的身份可信。对称加密保证了日志内容在传输和存储过程中不泄露。
嗯,说到这,你应该对加密技术在审计日志中的作用有个底了。别小看这四根柱子。现实中有太多日志系统,就是因为少了一根柱子,出了大问题。要么被篡改了没人知道,要么被伪造了发现不了。把这些基础打牢,后续构建审计日志系统才能走得稳。