第三章 加密算法选型:AES、RSA、SM2、SM4 怎么选
选加密算法,说白了就是选武器。武器不对,仗就没法打。
我见过不少项目,上来就拍脑袋说“用AES-256”,也不管密钥怎么分发。或者一听“国密”就全上SM2,连对称加密都不用。结果要么性能扛不住,要么安全漏洞一堆。
这一章,我就把我在几个企业级项目里踩过的坑、用过的招,跟你掰扯清楚。
对称加密:AES 还是 SM4?
对称加密,就一把密钥。加密解密都用它。优点是快,缺点是密钥分发麻烦。
我习惯先看使用场景:
- 数据量大、吞吐要求高——必然选对称加密。AES和SM4都行。
- 存量系统改造——如果已经用了AES,且无合规强制要求,别瞎折腾。
- 国密合规——比如金融、政务、信创项目,SM4是必选项。
| 特性 | AES-256 | SM4 |
|---|---|---|
| 密钥长度 | 128 / 192 / 256 位 | 128 位固定 |
| 分组大小 | 128 位 | 128 位 |
| 工作模式 | ECB / CBC / CTR / GCM 等 | ECB / CBC / CTR / GCM 等 |
| 安全性 | 业界公认,非常成熟 | 国标GM/T 0002,等效AES-128 |
| 硬件支持 | Intel AES-NI 加速 | 部分国产CPU有SM4指令集 |
| 合规场景 | 通用国际项目 | 国密合规、信创 |
我推荐的做法:
- 海量数据加密——优先AES-256-GCM。自带认证,防篡改。
- 国密合规——SM4-CTR或SM4-GCM。GCM模式同时解决加密和完整性校验。
- 千万别用ECB模式。我在项目中见过有人用ECB加密用户头像,结果头像轮廓清晰可见,等于没加密。
避坑指南:
我曾经接手过一个项目,AES-CBC模式,IV每次都写死成0。黑客拿到一份密文就能推导出密钥流。正确的做法是:IV必须随机生成,并且每次都不一样。
非对称加密:RSA 还是 SM2?
非对称加密,公钥私钥成对出现。公钥公开,私钥自己拿着。特点是安全,但慢。
你想想看,用非对称加密加密大文件,性能肯定顶不住。所以实战中,非对称加密只干两件事:
- 密钥交换——传输对称密钥
- 数字签名——验证身份和完整性
我个人的经验是:RSA和SM2的核心差异,不在数学原理,而在实战感受。
| 特性 | RSA-2048 | SM2 |
|---|---|---|
| 密钥长度 | 2048 / 4096 位 | 256 位 (等效RSA-3072) |
| 运算速度 | 慢(指数级增长) | 快(基于椭圆曲线) |
| 签名效率 | 签名快,验签慢 | 签名慢一点,验签快 |
| 安全性 | 2048位可满足当前安全要求 | 等效RSA-3072,抗量子攻击稍好 |
| 兼容性 | 几乎全平台原生支持 | 需要国密证书、特定SDK |
| 证书体系 | X.509标准证书 | SM2国家密码局证书 |
重要警告:
RSA-1024已经在2015年被攻破。我见过有的老系统还在用RSA-1024,必须立刻升级到2048位以上。另外,RSA的填充方式一定要用OAEP,PKCS#1 v1.5已经被证明有漏洞。
混合加密体系:实战最优解
讲了这么多,你可能会问:到底怎么用?
答案是:混合加密。
用非对称加密保护对称密钥,用对称加密保护业务数据。这是企业级项目的标准打法。
我举一个真实的例子:
某金融APP,用户传输交易数据。流程是这样的:
- 客户端随机生成AES-256密钥(会话密钥)
- 用服务端的SM2公钥加密这个AES密钥
- 用AES密钥加密交易数据(AES-GCM)
- 服务端用SM2私钥解密,拿到AES密钥
- 服务端用AES密钥解密交易数据
这样做的好处是:既能保护大数据,又能安全传递密钥。而且每次会话的密钥不同,即使一次被攻破,也不会影响历史数据。
性能建议:
非对称加密只用来加密一个32字节的AES密钥,而不是加密整个文件。有些团队图省事,用RSA加密几百KB的Payload,结果服务器CPU直接飙到100%。记住,非对称加密只做“钥匙”,不做“箱子”。
选型决策树
讲了这么多理论,来点实际的。下面这张SVG图,就是我每次做加密选型时用的思考框架。
实战对比表:四种算法快速选型
| 业务场景 | 推荐算法 | 理由 |
|---|---|---|
| 文件加密(大文件) | AES-256-GCM / SM4-GCM | 对称加密速度快,GCM自带完整校验 |
| API接口签名 | SM2 签名 / RSA-SHA256 | 非对称签名,防抵赖;SM2性能更优 |
| TLS/SSL通信 | ECDHE + AES-GCM | 前向安全性 + 性能兼顾;国密场景用SM2 + SM4 |
| 数据库字段加密 | AES-256-GCM | 等保三级要求;字段级加密注意IV管理 |
| 硬件加密机(HSM) | SM2 / SM4 国密算法 | 金融合规要求;国产密码机原生支持 |
| 区块链交易签名 | SM2 / ECDSA | 短签名、高性能;SM2是国密区块链标准 |
一个血的教训:
我曾经遇到一个数据湖项目,他们用AES-ECB加密PB级数据。ECB模式相同的明文块产生相同的密文块。数据分析师拿着密文还能画出了数据的趋势图。加密等于没做。记住:永远不要用ECB模式,除非你真的知道自己在做什么。