← 返回加密工具箱

SM2 国密非对称加密:与 RSA 的区别、密钥格式与签名

加密工具箱 · 使用教程

SM2 是国密体系里的非对称算法,作用和 RSA 一样:加密、解密、签名、验签。但它底层的数学完全不同,这也是为什么“256 位的 SM2 比 2048 位的 RSA 还安全”这句话是对的。

一、SM2 是什么

SM2 是国家密码管理局在 2010 年发布的椭圆曲线公钥密码算法,2016 年成为国家标准(GB/T 32918)。它属于 **ECC(椭圆曲线密码)** 家族,而不是 RSA 那样的“大整数分解”路线。

项目SM2RSA
数学基础椭圆曲线离散对数大整数分解
常用密钥长度256 位2048 / 4096 位
安全强度对标256 位 ≈ RSA 3072 位—
密钥体积小(几十字节)大(几百字节)
运算速度快慢
标准来源中国国密标准美国/国际标准

密钥更短、运算更快、强度更高——这是椭圆曲线算法的普遍优势,SM2 和 ECDSA(比特币用的那个)是同一类。

二、为什么 256 位就够

因为攻击难度不同。破解 RSA 需要分解大整数,最好的算法(数域筛法)复杂度是亚指数级;破解椭圆曲线需要解离散对数,最好的算法(Pollard rho)复杂度是纯指数级。

结果是:要达到同样的安全强度,椭圆曲线需要的密钥短得多。

SM2 / ECC 256 位  ≈  RSA 3072 位

这不是“SM2 比 RSA 高级”,而是两类数学问题的性质差异。

三、密钥格式:为什么公钥以 04 开头

这是使用 SM2 时最常见的困惑。SM2 公钥通常是一串十六进制,长度 130 个字符,以 04 开头:

04 || X坐标(32字节) || Y坐标(32字节)
= 1 + 32 + 32 = 65 字节 = 130 个十六进制字符

那个 04 是**未压缩点格式的标识符**,告诉解析方“后面跟的是完整的 X 和 Y 坐标”。还有一种压缩格式用 02/03 开头,只存 X 坐标和 Y 的奇偶性,用在带宽敏感的场景。

私钥则是 32 字节(64 个十六进制字符),是一个大整数。

项目长度格式
公钥130 hex 字符04 开头,未压缩
私钥64 hex 字符纯十六进制大整数
如果你拿到一个 128 字符的公钥(没有 04 前缀),说明对方省掉了标识符。导入前补上 04 即可,或者确认对方用的是压缩格式。

四、加密和签名

SM2 同时支持两种用途,密钥用途不同但格式相同:

加密

用**对方公钥**加密,对方用**自己私钥**解密。语义和 RSA 一致。

SM2 加密有一个特点:**每次加密结果都不同**,因为内部引入了随机数。这是安全设计,不是问题。

签名

用自己的**私钥**对数据签名,对方用你的**公钥**验证。

SM2 签名比 RSA 多一个参数:**用户 ID(默认 1234567812345678)**。这是 SM2 特有的设计,签名时把这个 ID 和公钥一起参与计算。如果双方 ID 不一致,验签会失败——这是国密对接时一个非常隐蔽的坑。

五、SM2 和 SM4 怎么配合

和 RSA+AES 的组合完全对应:

用途国际算法国密算法
对称加密大流量AESSM4
密钥交换/签名RSA / ECDSASM2
完整性校验SHA-256SM3

实际系统里是三者配合:SM2 传递 SM4 密钥,SM4 加密业务数据,SM3 做摘要和签名。整套国密改造就是把这三种算法替换进去。

六、怎么用本站工具

  1. 打开加密工具箱的 SM2 标签页
  2. 公钥填 130 位十六进制(04 开头),私钥填 64 位十六进制
  3. 加密用公钥,解密用私钥;签名用私钥,验签用公钥

全部在浏览器本地计算,密钥不会上传。

七、常见问题

SM2 能加密长文本吗?
能,这是它比 RSA 好的地方之一。SM2 本身没有 RSA 那种“245 字节上限”的硬限制,配合适当的实现可以加密较长的数据。但工程实践中仍然推荐混合加密(SM2 + SM4),因为对称算法快得多。
为什么我的验签总是失败?
按概率排序:用户 ID 不一致(SM2 特有,默认值是 1234567812345678,但很多系统会改成别的);签名数据被转码过(Base64 和 hex 混用);公钥少了 04 前缀;签名值 r/s 拼接顺序不同。国密对接失败基本出在这四项。
SM2 和 ECDSA 一样吗?
数学基础相同(都是椭圆曲线),但具体参数和流程不同。SM2 用自己的推荐曲线参数,签名算法里加入了用户 ID,哈希用 SM3 而不是 SHA。所以两者不兼容,不能互换。
为什么 SM2 加密同一段数据两次结果不同?
因为加密过程引入了随机数(k 值)。这保证了相同明文产生不同密文,避免泄露模式信息。RSA 用 OAEP 填充时也是同样道理。
普通互联网项目需要上 SM2 吗?
不需要,除非客户或合规要求。SM2 的生态(库支持、文档、调试工具)不如 RSA/ECDSA 成熟,非合规场景用 RSA 或 ECDSA 更省事、踩坑更少。
SM2 私钥泄露了怎么办?
立刻换密钥对并通知所有对接方,同时评估泄露期间是否有异常签名或解密行为。非对称密钥泄露比对称密钥更严重——因为对方可以长期冒充你的身份签名,而不仅仅是解密历史数据。