第一章:国密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协议,说白了就是在不安全的信道上,帮两个通信方"先交个朋友,再开始说悄悄话"。这个"交朋友"的过程就是握手。

标准握手流程(以国密双证书模式为例):

  1. 客户端发送Hello:我支持哪些密码套件(比如ECC_SM4_SM3)
  2. 服务端回应Hello:选一个,然后把SM2签名证书发过来
  3. 双方协商密钥:用SM2做ECDHE密钥交换,生成共享密钥
  4. 握手完成:用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的核心层次和数据流转理清了。你把这图记住,后面的章节展开全绕不开它。

国密SSL核心架构 应用层(HTTP / FTP / 自定义协议) 国密SSL协议层(TLCP / GB/T 38636) 握手协议 | 记录协议 | 告警协议 密码算法层 SM2(密钥交换/签名) SM3(哈希/完整性) SM4(对称加密) 密钥与证书管理层(PKI / SM2证书 / 密钥派生) 💡 每一层都有对应的国密标准规范和实现策略

我的经验:实际开发中,最容易被忽略的是密钥派生层。很多团队直接拿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,但其中的密码套件定义和检测要求通用。
  • 工程是落地——密钥生命周期管理、硬件密码模块调用、性能优化,这些才是实战中最磨人的地方。

嗯,这一章就到这。你先把上面那张架构图存脑子里,后面讲握手细节、证书链验证、密钥边界设计的时候,你会反复用到这张图。