第1章 课程概述与学习目标
先说说我为什么想讲这门课。
几年前我接手一个政务系统项目,客户明确要求所有密码操作必须走国密标准。当时团队里没人系统搞过SM2和SM3,我们一边翻文档一边改代码,光密钥格式就踩了三个坑——一个证书解析的问题熬了两天。从那时起我就觉得,市面上缺一门真正从工程角度讲国密算法集成的课。所以这门《SM2 SM3算法集成与密钥管理实践》的定位就是:帮你把算法原理、标准规范、代码落地一次打通。
1.1 为什么需要国密算法
说白了,密码算法是一个国家网络安全的"地基"。过去我们大量使用RSA、ECDSA、SHA-256这些国际算法,不是说它们不安全,而是你得考虑一个问题:如果哪天上游授权断了或者出现后门风险,我们有没有备选方案?
我个人的习惯是,在关键基础设施项目里,国密算法不只是"合规要求",更是一种风险分散策略。SM2对标的是ECDSA/ECDH,SM3对标SHA-256,但它们在曲线参数、杂凑结构上都做了独立设计。举个例子,SM2使用的素域256位椭圆曲线参数完全自主定义,SM3的填充方式和迭代结构与SHA-2不同,但安全强度相当。
你可能会问:直接用国际算法不行吗?嗯,国内等保2.0、密评都有明确要求,涉及三级及以上信息系统的密码应用必须优先采用国密算法。这不是可选项,是硬性规定。
1.2 国密标准体系速览
国密标准由GM/T系列构成,覆盖了算法、接口、协议、设备等多个层面。我建议你先把这几个核心标准记住,因为后续所有代码和集成方案都围绕它们展开。
| 标准编号 | 对应算法 | 功能定位 | 我的备注 |
|---|---|---|---|
| GM/T 0003-2012 | SM2 | 椭圆曲线公钥密码算法(签名、密钥交换、加密) | 最常用,三合一 |
| GM/T 0004-2012 | SM3 | 密码杂凑算法,输出256位摘要 | 对标SHA-256 |
| GM/T 0009-2012 | SM2 密码算法使用规范 | 接口定义与数据格式 | 写代码时反复翻 |
| GM/T 0010-2012 | SM2 密码算法加密签名消息语法 | 消息封装格式 | 跟证书、PKCS相关 |
除了算法本身,还要了解密钥管理体系。国密密钥分为三个层级:根密钥(设备主密钥)、密钥加密密钥(KEK)、会话密钥(SK)。SM2主要用于非对称密钥对的管理和分发,SM3则用在完整性校验和密钥派生中。
1.3 课程安排与学习路径
这门课一共30章,我按"基础→进阶→实战"三个大阶段来组织。你想想看,如果一上来就讲密钥分割和协同签名,大多数人会懵。所以我刻意把路径设计得平滑一些。
- 基础篇(第1-10章):算法原理、标准解读、开发环境搭建、SM2签名/验签、SM3哈希、密钥对生成与存储。学完你能自己写一个控制台工具完成基本的国密操作。
- 进阶篇(第11-20章):密钥协商协议、证书格式解析、PKI体系集成、硬件加密模块对接、密钥生命周期管理。这里会涉及多线程安全和性能优化,我建议你跟着代码走一遍。
- 实战篇(第21-30章):完整项目案例——国密网关、安全通信组件、密钥管理系统(KMS)、密码测评支撑工具。每一章都是一个可交付的模块。
前置知识方面,你需要了解基本的数据结构(尤其是ASN.1、DER编码)、对称/非对称密码学概念,以及一种编程语言的基础(课程示例用Go和Python,但你用Java或C++也能跟上)。如果你还不熟悉椭圆曲线密码学,没关系,第2章会从头推公式。
环境方面,推荐使用OpenSSL 1.1.1以上版本(原生支持SM2/SM3),或者用GmSSL这个国密分支。我个人更喜欢GmSSL,因为它对国密标准的覆盖更全,而且命令行工具可以直接做SM2签名和SM3摘要,省掉不少测试代码。
1.4 本章知识体系
下面这张图把第1章的核心内容串起来了。你可以把它当作整个课程的"导航地图"——算法背景是地基,国密标准是规则,课程安排是路线,学习路径是你的装备清单。
这张图里的四个板块就是我们这门课的四个支柱。我个人觉得,算法背景和国密标准是"道",决定了你遇到问题时的判断力;课程安排和学习路径是"术",决定了你的学习效率。两者缺一不可。
好,第1章就到这里。从第2章开始,我们会正式进入SM2的椭圆曲线数学基础,我会尽量用通俗的比喻把域、阶、基点这些概念讲清楚。你准备好纸笔和开发环境,我们动手干。