加密基础理论:对称加密与非对称加密的区别
说到加密,我经常被问到这样一个问题:「到底用对称加密还是非对称加密?」
这个问题,其实没有标准答案。得看场景。
对称加密:一把钥匙开一把锁
对称加密,说白了就是加密和解密用同一把密钥。就像你家的门锁,用钥匙锁上,再用同一把钥匙打开。
常见的对称加密算法有:
- AES(高级加密标准)—— 我现在项目里最常用的
- DES(数据加密标准)—— 太老了,不建议再用
- SM4(国密算法)—— 国内项目必须考虑
核心特点:
- 速度快,适合大量数据加密
- 密钥管理是痛点 —— 怎么安全地把密钥传给对方?
我在基站项目里遇到过一个问题:基站和核心网之间要传输大量信令数据。用非对称加密?太慢了。最后我们用了 AES-256,配合动态密钥协商机制。嗯,这里要注意,密钥不能写死在代码里,否则一旦被逆向,整个网络就裸奔了。
非对称加密:公钥私钥,各司其职
非对称加密就有点意思了。它有两把钥匙:公钥和私钥。公钥可以公开,私钥自己藏着。
你想想看,别人用你的公钥加密数据,只有你能用私钥解密。这不就解决了密钥分发的问题吗?
常见的非对称加密算法:
- RSA —— 经典但越来越吃力
- ECC(椭圆曲线加密)—— 我个人更推荐,同等安全强度下密钥更短
- SM2(国密)—— 国内政企项目标配
我的建议:实际项目中,别只用一种。混合使用才是王道。用非对称加密协商对称密钥,然后用对称加密处理实际数据。这叫「混合加密体系」,HTTPS 就是这么干的。
哈希函数的作用
哈希函数,很多人以为它是加密。其实不是。它是「指纹」。
哈希函数的特点:
- 输入任意长度,输出固定长度(比如 SHA-256 输出 256 位)
- 不可逆 —— 从哈希值推不出原文
- 抗碰撞 —— 很难找到两个不同输入产生相同输出
我曾经踩过一个坑:用 MD5 做文件完整性校验。结果发现攻击者可以构造碰撞,伪造文件。后来全部换成了 SHA-256。记住,MD5 和 SHA-1 现在已经不安全了,别再用。
哈希函数在基站安全里的典型应用:
- 密码存储 —— 存哈希值,不存明文密码
- 消息完整性校验 —— 发消息时附带哈希值,接收方重新计算对比
- 数字签名的基础 —— 先哈希,再签名
数字签名与完整性校验
数字签名,说白了就是「盖章」。证明这消息是你发的,而且没被改过。
流程是这样的:
- 发送方对消息做哈希,得到摘要
- 用私钥加密这个摘要,生成签名
- 把消息和签名一起发出去
- 接收方用公钥解密签名,得到摘要
- 接收方自己对消息做哈希,对比两个摘要
关键点:数字签名解决的是「谁发的」和「改没改」两个问题。完整性校验只解决「改没改」。
我记得有一次做基站 OTA(空中升级)安全方案。固件包如果不做数字签名,攻击者可以植入恶意固件。我们用了 ECDSA 签名,每次升级前校验签名。嗯,这里有个细节:签名用的私钥必须硬件隔离,存在安全芯片里,不能放在文件系统里。
密钥管理基础概念
密钥管理,这是整个加密体系里最容易出问题的地方。算法再强,密钥泄露了,一切白搭。
密钥管理包含几个核心环节:
| 环节 | 说明 | 常见问题 |
|---|---|---|
| 密钥生成 | 必须用真随机数,不能用伪随机 | 随机数种子被预测 |
| 密钥分发 | 安全地传给通信双方 | 中间人攻击 |
| 密钥存储 | 加密存储,硬件隔离 | 硬编码在代码里 |
| 密钥更新 | 定期更换,防止长期使用 | 忘记更新,密钥过期 |
| 密钥销毁 | 彻底删除,不可恢复 | 只删文件,磁盘残留 |
避坑指南:我曾经见过一个项目,密钥生成用的是 C 语言的 rand() 函数。这函数是伪随机的,种子固定的话每次生成的「随机数」都一样。攻击者只要拿到一次密钥,就能预测后续所有密钥。后来我们换成了硬件随机数发生器。
在基站网络里,密钥管理尤其重要。一个基站可能管理上千个用户设备,每个设备都有会话密钥。怎么管理这么多密钥?
我的做法是分层管理:
- 主密钥 —— 长期有效,存在 HSM(硬件安全模块)里
- 会话密钥 —— 每次通信临时生成,用完就销毁
- 派生密钥 —— 从主密钥通过 KDF(密钥派生函数)生成
你想想看,如果所有设备都用同一个密钥,一个设备被攻破,整个网络就完了。分层管理的好处是:即使某个会话密钥泄露,也只影响那一次通信,主密钥还是安全的。
个人经验:密钥管理没有银弹。我的原则是:能硬件就不软件,能动态就不静态,能短期就不长期。这三个「能...不...」帮我避了不少坑。
好了,这一章的内容就到这里。加密基础理论是后面所有安全机制的地基。地基打不牢,上面盖再高的楼也是危房。下一章我们聊聊基站网络里具体的加密协议实现,到时候会用到今天讲的所有概念。