第1章 RSA和SM2概述:发展历史与应用场景
各位好,我是老韩。做密码迁移这些年,我见过最多的场景就是大家一上来就问:“SM2到底行不行?RSA用了二十年,说换就换?”
我的回答通常是:别急,先搞懂它们各自的来路,再聊迁移。
本章我们不碰代码,也不谈密钥转换细节。我们就聊两件事:RSA为什么能称霸那么久,SM2又是凭什么后来居上。把这些背景吃透了,后面的迁移工作才站得住脚。
一句话先记住:RSA靠大整数分解,SM2靠椭圆曲线离散对数。后者在相同安全强度下,密钥长度短得多,计算也更快。
1.1 RSA的发展历史
1977年,Ron Rivest、Adi Shamir和Leonard Adleman三位大佬提出了RSA算法。我第一次接触它是在大学密码学课上,当时觉得“这玩意儿真神奇——两个大质数一乘,反过来就难死你”。
RSA的核心安全基础是大整数分解难题。给你一个1024位的合数,找到它的两个质因子?超级计算机也得算几百年(理论值)。
正因为这个数学难题足够硬,RSA成了全球公钥加密的“默认选项”。从SSL/TLS、数字证书到PGP、SSH,几乎无处不在。
| 年代 | 事件 |
|---|---|
| 1977 | RSA算法发表 |
| 1983 | RSA获得美国专利 |
| 1990s | RSA成为SSL/TLS标准算法 |
| 2000后 | RSA密钥长度从512位升至2048位 |
| 2015至今 | 量子计算威胁浮现,RSA逐步被后量子算法替代 |
我个人遇到过一个真实案例:某金融系统还在用1024位RSA证书,2019年安全审计直接亮了红灯。客户还不理解——当初不是说1024位够用30年吗?
嗯,攻击者的计算能力增长,比我们想象的要快得多。
所以现在行业共识是:RSA至少要用2048位,建议直接上3072或4096。但位数一大,性能就成了硬伤——服务器握手慢,移动端设备发热。
1.2 SM2的发展历史
SM2是中国国家密码管理局于2010年发布的椭圆曲线公钥密码算法标准(GM/T 0003-2012)。说白了,它是中国自己的ECC算法,但曲线参数和签名机制都有独特设计。
SM2基于椭圆曲线离散对数问题。这玩意儿的数学底层比大整数分解更“硬”——同样的安全强度,SM2只需要256位密钥,RSA需要3072位。
- 2010年:SM2正式发布,包含加密、签名、密钥交换三部分
- 2012年:成为国家标准(GM/T 0003)
- 2018年:被国际标准化组织ISO采纳为国际标准
- 2020年后:国内政务、金融、电力等关键行业开始强制替换
我记得2015年第一次给某政务云做密码方案时,对方直接要求“所有业务必须支持SM2”。当时我们感叹:国产密码的春天终于来了。
1.3 核心差异对比
直接上表,大家看得更清楚。后面所有迁移决策都基于这些差异。
| 对比项 | RSA | SM2 |
|---|---|---|
| 数学难题 | 大整数分解 | 椭圆曲线离散对数 |
| 推荐密钥长度 | 2048~4096位 | 256位 |
| 同安全强度密钥长度 | 3072位 | 256位 |
| 签名速度 | 慢(模幂运算) | 快(点乘运算) |
| 国际标准 | RSA PKCS#1 | ISO/IEC 14888-3 |
| 中国标准 | 无对应国标 | GM/T 0003 |
注意:SM2的256位密钥安全强度对标的是RSA 3072位。这不是我胡说的,是国家密码管理局的评估结论。你也别觉得“256位看起来短,肯定弱”——实际上它比RSA 2048还安全一个量级。
1.4 应用场景
两种算法都不是万能的。我根据自己的项目经验,把它们的典型场景列一下:
- RSA传统强项:Web服务器证书、代码签名、PDF数字签名、旧版HTTPS。如果你接手的是21世纪初的老系统,大概率用的是RSA。
- SM2的战场:国密SSL VPN、电子政务、金融IC卡、物联网身份认证。国内监管要求越来越严,新项目基本默认SM2。
你可能会问:有些场景是不是两者都能用?对。但迁移时你得看——现有系统的密码库是否支持SM2?硬件密码机是否已有SM2算法卡?
一个小建议:从现在开始,所有新建系统直接上SM2。如果必须兼容国际业务,可以在服务端同时保留RSA和SM2双证书,客户端自动协商。
1.5 知识体系结构图
下面这张SVG图把RSA和SM2的脉络理清楚了。建议你先看一遍,再回头看前面的内容,会更有感觉。
1.6 我的一点经验总结
我个人习惯,每次做密码迁移前,先画一张类似的图——把老算法和新算法的背景、参数、场景摆在一起看。你会发现,迁移不只是“换一个库”,而是对整个密码体系的重新审视。
举个例子:我以前帮一家银行做TLS证书迁移,他们在线交易系统用了RSA 2048,后端服务却还在用RSA 1024。迁移到SM2后,整个证书链、密钥管理系统都要跟着改。如果早期不清楚两种算法的设计哲学,后面肯定会掉坑。
所以本章的核心就一句话:RSA靠长度,SM2靠曲线。理解这个底层区别,剩下的都是工程细节。
避坑指南:我曾经见过一个团队,直接拿OpenSSL的ECC代码改成SM2的曲线参数就上线了。结果呢?签名格式不兼容,互操作性全挂。SM2的签名和加密都有自己独特的推导流程,千万别想当然“抄作业”。