第三章 加密算法选型: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,用户传输交易数据。流程是这样的:

  1. 客户端随机生成AES-256密钥(会话密钥)
  2. 用服务端的SM2公钥加密这个AES密钥
  3. 用AES密钥加密交易数据(AES-GCM)
  4. 服务端用SM2私钥解密,拿到AES密钥
  5. 服务端用AES密钥解密交易数据

这样做的好处是:既能保护大数据,又能安全传递密钥。而且每次会话的密钥不同,即使一次被攻破,也不会影响历史数据。

性能建议:

非对称加密只用来加密一个32字节的AES密钥,而不是加密整个文件。有些团队图省事,用RSA加密几百KB的Payload,结果服务器CPU直接飙到100%。记住,非对称加密只做“钥匙”,不做“箱子”。

选型决策树

讲了这么多理论,来点实际的。下面这张SVG图,就是我每次做加密选型时用的思考框架。

加密算法选型决策树 加密算法选型 对称加密 非对称加密 AES-256-GCM SM4-GCM RSA-2048 SM2 混合加密体系 选型核心逻辑:海量数据 → 对称加密;密钥分发/签名 → 非对称加密;企业级实战 → 混合加密

实战对比表:四种算法快速选型

业务场景 推荐算法 理由
文件加密(大文件) 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模式,除非你真的知道自己在做什么。