密码学基础:对称加密与非对称加密原理,SM4、SM2、SM3算法简介

做国密改造,首先得搞清楚密码学里最核心的两个概念——对称加密和非对称加密。说白了,这俩就是加密世界里的一对经典搭档,各有各的脾气,也各有各的战场。我当年刚接触国密项目时,第一件事就是把它们的原理掰扯清楚,不然后面代码怎么写的都不知道。

对称加密:一把钥匙开一把锁

对称加密,顾名思义,加密和解密用的是同一个密钥。你想想看,就像拿一把钥匙开一扇门,出门锁上,回家再用同一把钥匙打开。速度快,效率高,特别适合处理大量数据。

它的工作流程很简单:发送方用密钥把明文加密成密文,接收方收到后用同一个密钥解密。这中间最关键的环节是密钥的传递——怎么安全地把密钥送到对方手里?万一被截获,整个加密就形同虚设了。

我曾经在一个内部数据同步项目里用过对称加密,当时为了密钥分发的问题头疼了好几天。后来加了一层非对称加密专门管密钥交换,才算稳定下来。嗯,这里要注意:对称加密的核心优势是快,短板就是密钥管理。

常见的对称加密算法对比

算法 密钥长度 分组模式 典型场景
AES 128/192/256位 CBC、ECB、GCM 文件加密、网络通信
SM4 128位 CBC、ECB、GCM 国密合规、政务系统
DES 56位 CBC、ECB 已淘汰(不推荐)
我个人习惯:在国密改造中,对称加密优先选SM4。别图省事用AES,回头等保测评过不了,那才叫冤枉。

非对称加密:两把钥匙,各司其职

非对称加密的思路完全不一样。它生成一对密钥:公钥和私钥。公钥人人可以知道,私钥自己保管。用公钥加密的数据,只有对应的私钥能解开;反过来用私钥加密,公钥也能验证。

这设计巧妙在哪?你想想看,别人想给你发加密消息,直接用你的公钥加密就行,就算中间被人截了公钥也无所谓,反正没你的私钥谁也解不开。这就绕开了对称加密那个棘手的密钥分发问题。

不过代价是性能。非对称加密的计算量比对称加密大好几个数量级。所以实际系统中,我们从来不用非对称加密去加密整段数据——太慢了。正确的做法是结合使用:非对称加密用来交换对称密钥,对称加密负责实际的数据加密。我做过一个金融交易系统,里面就是这么搭的,跑起来很稳。

非对称加密 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名称和调整密钥生成逻辑。

避坑指南:SM4的密钥不能存明文。建议用KMS(密钥管理系统)或者国密硬件密码机托管。我以前有个项目直接写死在配置里,被安全扫描抓个正着,后来改了整整一周。

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的私钥生成必须使用真随机数发生器。用伪随机数生成的私钥在学理上就存在被攻击的风险。国密标准对此有明确规定,不要在这个上面图省事。

国密算法知识体系总览

下面的图把SM2、SM3、SM4在整个加密通信过程中的角色展示得很清楚。你一看就明白哪个环节该用哪种算法。

国密算法应用体系结构图 发送方(明文) SM3 哈希摘要 SM2 私钥签名 SM4 对称加密 网络传输(密文 + 签名 + 摘要) 接收方(密文) SM4 对称解密 SM2 公钥验签 SM3 摘要比对 验签通过 → SM3摘要一致 → 数据完整、来源可信
这张图讲的是什么?从发送方开始,原文明文先算SM3摘要,然后用SM2私钥签名,接着用SM4对称加密整个包,再丢到网络上。接收方收到后,先用SM4解密,再用SM2公钥验签,最后拿本地算的SM3摘要比对。每一步各司其职,既保证了数据机密性(SM4),又保证了数据完整性和来源合法性(SM3+SM2)。

对称加密和非对称加密的取舍,说白了就是性能和安全之间的平衡。在实际项目里,没有哪一种算法能包打天下——你得根据场景选对工具。国密改造中常用的搭配就是SM4做加解密、SM3做完整性校验、SM2做签名和密钥交换。把这套组合拳打熟了,Spring Cloud微服务体系里的安全加固基本就稳了。