🔑 SM2 国密非对称加密工具
生成 SM2 密钥对 | 签名 | 验签
公钥: -
※ 基于 sm-crypto 库实现,SM2 签名格式为 r||s(各32字节)。公钥为压缩或非压缩格式(此处使用压缩公钥)。
SM2 国密算法详解
SM2 是中国国家密码管理局于 2010 年发布的椭圆曲线公钥密码算法标准(GB/T 32918),基于 256 位素数域椭圆曲线。SM2 与 RSA 功能类似,提供密钥对生成、数字签名、密钥交换和加密功能,但在相同安全强度下密钥更短、运算更快。SM2 的 256 位密钥安全强度约等于 3072 位 RSA。
SM2 椭圆曲线参数
SM2 使用推荐曲线 sm2p256v1,曲线方程为 y^2 = x^3 + ax + b (mod p)。基点 G 的坐标在标准中明确定义。曲线参数包括素数 p、系数 a 和 b、基点 G 的坐标 (Gx, Gy) 和阶 n。SM2 签名使用 SM3 哈希算法(256 位),签名值为 (r, s) 对,总长度 64 字节。
签名与验签流程
SM2 签名与标准 ECDSA 不同,采用了 GB/T 32918.2 定义的签名方案,包含预处理步骤。签名时首先计算 Z 值(用户标识的 SM3 哈希),然后对消息 M 计算 e = SM3(Z || M),再生成随机数 k 并计算 r = (e + x1) mod n、s = (1 + d)^(-1) * (k - r*d) mod n,其中 d 为私钥。验签时使用公钥验证 (r, s) 的正确性。SM2 签名在国密 TLS、电子政务和金融 IC 卡中广泛应用。
在智能卡中的应用
中国金融 IC 卡(PBOC 3.0)和电子政务卡支持 SM2 算法。卡片在制造阶段生成 SM2 密钥对,私钥存储在安全区域且不可导出。签名操作通过 INTERNAL AUTHENTICATE(INS=88)APDU 命令触发。SM2 证书采用国密 CA 体系签发,签名算法标识为 OID 1.2.156.10197.1.501。本工具支持浏览器端 SM2 密钥对生成、签名和验签操作,使用 Web Crypto API 或 SM2 JavaScript 库实现。
卡智通