密码学基础:对称加密与非对称加密原理,SM4、SM2、SM3算法简介
做国密改造,首先得搞清楚密码学里最核心的两个概念——对称加密和非对称加密。说白了,这俩就是加密世界里的一对经典搭档,各有各的脾气,也各有各的战场。我当年刚接触国密项目时,第一件事就是把它们的原理掰扯清楚,不然后面代码怎么写的都不知道。
对称加密:一把钥匙开一把锁
对称加密,顾名思义,加密和解密用的是同一个密钥。你想想看,就像拿一把钥匙开一扇门,出门锁上,回家再用同一把钥匙打开。速度快,效率高,特别适合处理大量数据。
它的工作流程很简单:发送方用密钥把明文加密成密文,接收方收到后用同一个密钥解密。这中间最关键的环节是密钥的传递——怎么安全地把密钥送到对方手里?万一被截获,整个加密就形同虚设了。
我曾经在一个内部数据同步项目里用过对称加密,当时为了密钥分发的问题头疼了好几天。后来加了一层非对称加密专门管密钥交换,才算稳定下来。嗯,这里要注意:对称加密的核心优势是快,短板就是密钥管理。
常见的对称加密算法对比
| 算法 | 密钥长度 | 分组模式 | 典型场景 |
|---|---|---|---|
| AES | 128/192/256位 | CBC、ECB、GCM | 文件加密、网络通信 |
| SM4 | 128位 | CBC、ECB、GCM | 国密合规、政务系统 |
| DES | 56位 | CBC、ECB | 已淘汰(不推荐) |
非对称加密:两把钥匙,各司其职
非对称加密的思路完全不一样。它生成一对密钥:公钥和私钥。公钥人人可以知道,私钥自己保管。用公钥加密的数据,只有对应的私钥能解开;反过来用私钥加密,公钥也能验证。
这设计巧妙在哪?你想想看,别人想给你发加密消息,直接用你的公钥加密就行,就算中间被人截了公钥也无所谓,反正没你的私钥谁也解不开。这就绕开了对称加密那个棘手的密钥分发问题。
不过代价是性能。非对称加密的计算量比对称加密大好几个数量级。所以实际系统中,我们从来不用非对称加密去加密整段数据——太慢了。正确的做法是结合使用:非对称加密用来交换对称密钥,对称加密负责实际的数据加密。我做过一个金融交易系统,里面就是这么搭的,跑起来很稳。
非对称加密 vs 对称加密
| 特性 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥数量 | 一个密钥 | 公钥+私钥一对 |
| 加解密速度 | 快(硬件加速容易) | 慢(数学运算密集) |
| 密钥分发难度 | 困难(需要安全通道) | 容易(公钥可公开) |
| 典型算法 | SM4、AES | SM2、RSA |
国密算法三剑客:SM4、SM3、SM2
做国产化改造,这三个算法几乎就是标配。不分轻重的同学容易乱,我按自己的理解捋一下:
SM4 —— 对称加密,主打批量数据
SM4是我国自主设计的对称分组密码算法,密钥长度128位,分组大小也是128位。它和AES-128在安全性上旗鼓相当,但算法结构完全不同。SM4采用的是32轮非平衡Feistel结构,而AES是SPN结构。
在Spring Cloud国密改造中,SM4主要用于数据库敏感字段加密、配置文件的本地加密存储——说白了就是那些需要频繁读取的数据。我曾经遇到一个案例:某个微服务用AES加密配置文件,等保检查时被勒令整改,换SM4之后,加密部分代码改动不大,主要是替换cipher名称和调整密钥生成逻辑。
SM3 —— 哈希算法,防篡改
SM3是国密哈希算法,输出256位的摘要值。它的设计借鉴了SHA-256,但细节上有差异。SM3主要用于数字签名里的消息摘要、完整性校验、以及密码存储。
做分布式系统时,我们经常需要验签、校验请求参数是否被篡改。SM3在这里就派上用场了——它对输入的微小变动极其敏感,哪怕只改一个字节,生成的摘要也完全不同。我建议把所有需要防篡改的接口请求都带上SM3摘要,然后再用SM2签名,这样双保险。
SM2 —— 非对称加密,身份认证和密钥协商
SM2基于椭圆曲线密码学(ECC),比RSA更安全、效率更高。同样的安全强度下,SM2的密钥长度只有256位,而RSA需要3072位。SM2的典型应用包括:数字签名、密钥交换、以及身份认证。在我们Spring Cloud微服务体系里,SM2常用于TLS握手、服务间调用鉴权签名。
我记得在改造一个网关网关服务时,把原来的RSA签名全部换成SM2,接口的性能反而提升了一点——因为SM2的签名长度更短,网络传输开销也小。
国密算法知识体系总览
下面的图把SM2、SM3、SM4在整个加密通信过程中的角色展示得很清楚。你一看就明白哪个环节该用哪种算法。
对称加密和非对称加密的取舍,说白了就是性能和安全之间的平衡。在实际项目里,没有哪一种算法能包打天下——你得根据场景选对工具。国密改造中常用的搭配就是SM4做加解密、SM3做完整性校验、SM2做签名和密钥交换。把这套组合拳打熟了,Spring Cloud微服务体系里的安全加固基本就稳了。