第一章:国密SSL概述——从算法到标准
说实话,刚接触国密的那会儿,我也有点懵。SM2、SM3、SM4、SM9,光名字就够绕的。但干了几年的国密改造项目之后,我发现这些算法其实有很清晰的逻辑。今天咱们就把国密SSL的底牌翻出来,从头捋一遍。
1.1 国密算法体系——四个核心算法
国密算法不是几颗散落的珍珠,而是一套完整的密码工具箱。我个人习惯把这四个算法按用途分成三组:
| 算法 | 类型 | 核心用途 | 我见过的坑 |
|---|---|---|---|
| SM2 | 公钥密码(椭圆曲线) | 密钥协商、数字签名、加密 | 很多项目没用SM2做签名,只用RSA,结果评测不通过 |
| SM3 | 密码杂凑(哈希) | 消息摘要、完整性校验 | 输出256位,记得和SM2配合时检查公钥长度 |
| SM4 | 对称分组密码 | 数据加密(块加密,128位密钥) | ECB模式容易出问题,我一定用CBC或GCM |
| SM9 | 基于标识的密码(IBC) | 无证书场景的加密/签名 | 密钥托管风险要提前评估,不是所有场景都适合 |
一个小技巧:你在SSL握手阶段,SM2负责身份认证和密钥交换,SM4负责后续数据传输加密,SM3给整个握手过程做完整性校验。这三个配合起来,就是国密SSL的核心骨架。
我记得有一次做电子政务平台改造,客户坚持用SM9做终端证书管理,理由是"不需要CA"。但SM9的密钥中心一旦被攻破,所有终端信任都会崩塌。嗯,这里要注意:SM9不是银弹,它适合物联网、私有域等可控场景,用在开放互联网上要慎之又慎。
1.2 SSL/TLS协议基础——握手才是精髓
SSL/TLS协议,说白了就是在不安全的信道上,帮两个通信方"先交个朋友,再开始说悄悄话"。这个"交朋友"的过程就是握手。
标准握手流程(以国密双证书模式为例):
- 客户端发送Hello:我支持哪些密码套件(比如ECC_SM4_SM3)
- 服务端回应Hello:选一个,然后把SM2签名证书发过来
- 双方协商密钥:用SM2做ECDHE密钥交换,生成共享密钥
- 握手完成:用SM4加密后续通信,用SM3做消息认证
避坑指南:我曾经在一个项目中遇到握手耗时超过3秒的问题,排查下来发现是SM2签名验签没有做预计算。如果你用硬件密码机,一定要提前把SM2密钥对加载到HSM里,别在握手时临时生成。
你想想看,如果没有SSL/TLS,每次传输都是明文,那和在大街上喊银行卡密码有什么区别?
1.3 国密SSL标准——GM/T 0024 都规定了什么
国内SSL/TLS的国标就是GM/T 0024-2023(替代2014版),全称《SSL VPN 技术规范》。不过实际行业里大家常说的"国密SSL"指的是遵循国密算法套件的TLS实现,GM/T 0024更多是VPN设备的规范,而GB/T 38636才是真正的《信息安全技术 传输层密码协议(TLCP)》。很多初学者容易把这两个搞混。
来,我帮你整理一个对比表:
| 标准号 | 名称 | 覆盖范围 | 常见误解 |
|---|---|---|---|
| GM/T 0024-2023 | SSL VPN 技术规范 | VPN网关、客户端、密钥管理 | 很多人以为它管所有SSL通信,其实只限VPN产品 |
| GB/T 38636-2020 | 传输层密码协议(TLCP) | 通用的国密TLS协议,对标RFC 5246 | 这是你在开发中实际要实现的国密SSL协议 |
| GM/T 0005-2012 | 随机性检测规范 | 密钥生成时的随机数质量 | 没通过这个检测,证书发证都可能卡住 |
重要提醒:GM/T 0024 里的密码套件编号和IETF的TLS套件编号不同,比如国密ECC_SM4_SM3的套件值是0xE011,而国际TLS 1.2里找不到这个值。在做协议解析的时候,千万注意不要拿国际标准去套。
1.4 国密SSL的技术架构——一张图看懂
下面这张图是我自己画的,把国密SSL的核心层次和数据流转理清了。你把这图记住,后面的章节展开全绕不开它。
我的经验:实际开发中,最容易被忽略的是密钥派生层。很多团队直接拿SM2协商出来的主密钥当对称密钥用,这不符合NIST SP 800-108和国密的密钥派生规范(GM/T 0086)。一定要用SM3做一个PRF(伪随机函数)来派生会话密钥。
1.5 一点总结——帮你理清主线
国密SSL不是某个单一技术,而是一整套从算法到协议再到工程实现的组合拳。我个人建议你按这个顺序记忆:
- 算法是根基——SM2、SM3、SM4、SM9,先把它们的能力边界搞清楚。
- 协议是骨架——GB/T 38636(TLCP)定义了国家标准的握手和记录协议。
- 标准是准绳——GM/T 0024 针对VPN,但其中的密码套件定义和检测要求通用。
- 工程是落地——密钥生命周期管理、硬件密码模块调用、性能优化,这些才是实战中最磨人的地方。
嗯,这一章就到这。你先把上面那张架构图存脑子里,后面讲握手细节、证书链验证、密钥边界设计的时候,你会反复用到这张图。