第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的脉络理清楚了。建议你先看一遍,再回头看前面的内容,会更有感觉。

RSA 与 SM2 知识体系结构图 RSA 与 SM2 概览 RSA (Rivest–Shamir–Adleman) 大整数分解难题 密钥长度:2048~4096位 典型场景:HTTPS、代码签名、PGP SM2 (中国国家密码标准) 椭圆曲线离散对数问题 密钥长度:256位 典型场景:国密SSL、政务、金融IC卡 迁移核心:同安全强度下,SM2 密钥长度仅为 RSA 的 1/12 📌 RSA 3072位 ≈ SM2 256位(安全强度对标) 📌 RSA 1024位已被攻破,2048位仍可接受,SM2推荐256位 📌 国内监管要求:新系统优先采用SM2

1.6 我的一点经验总结

我个人习惯,每次做密码迁移前,先画一张类似的图——把老算法和新算法的背景、参数、场景摆在一起看。你会发现,迁移不只是“换一个库”,而是对整个密码体系的重新审视。

举个例子:我以前帮一家银行做TLS证书迁移,他们在线交易系统用了RSA 2048,后端服务却还在用RSA 1024。迁移到SM2后,整个证书链、密钥管理系统都要跟着改。如果早期不清楚两种算法的设计哲学,后面肯定会掉坑。

所以本章的核心就一句话:RSA靠长度,SM2靠曲线。理解这个底层区别,剩下的都是工程细节。

避坑指南:我曾经见过一个团队,直接拿OpenSSL的ECC代码改成SM2的曲线参数就上线了。结果呢?签名格式不兼容,互操作性全挂。SM2的签名和加密都有自己独特的推导流程,千万别想当然“抄作业”。