SM2 是形如 y² = x³ + ax + b 的短 Weierstrass 曲线,定义在 256 位素域上,其素数阶子群为 256 位,余因子为 1;估计安全级别为 128 位。状态:安全,但仅限特定地区或小众场景。
该曲线是 p = 2^256 − 2^224 − 2^96 + 2^64 − 1 上的 y² = x³ − 3x + b,2010年由中国国家商用密码管理办公室(OSCCA)发布,后被标准化为 GB/T 32918。OpenSSL 称之为 SM2,TLS 则将其列为 curveSM2。
SM2 签名算法不是 ECDSA:签名者先对用户标识和公钥做哈希,得到值 Z_A,并将其拼接在消息之前,而且签名方程也不同,因此 SM2 密钥无法配合 ECDSA 验证器使用。RFC 8998 将 SM2 和 SM3 引入 TLS 1.3(组 41,签名方案 sm2sig_sm3),RFC 9563 则将它们作为算法 17 引入 DNSSEC。
各标准中的名称
| 标准 | 名称 |
|---|
| GB/T 32918.5-2017 | SM2 |
| OpenSSL | SM2 |
| IANA TLS | curveSM2 |
域参数
256 位素域 · 约 128 位安全强度
- 域素数 p
- 0xfffffffeffffffffffffffffffffffffffffffff00000000ffffffffffffffff
- 系数 a
- 0xfffffffeffffffffffffffffffffffffffffffff00000000fffffffffffffffc
- 系数 b
- 0x28e9fa9e9d9f5e344d5a9e4bcf6509a7f39789f515ab8f92ddbcbd414d940e93
- 基点 x 坐标
- 0x32c4ae2c1f1981195f9904466a39c9948fe30bbff2660be1715a4589334c74c7
- 基点 y 坐标
- 0xbc3736a2f4f6779c59bdcee36b692153d0a9877cc62a474002df32e52139f0a0
- 基点的阶 n
- 0xfffffffeffffffffffffffffffffffff7203df6b21c6052b53bbf40939d54123
- 余因子 h
- 0x1
用于
- Chinese commercial cryptography (SM2/SM3/SM4)
- TLS 1.3 (RFC 8998)
- DNSSEC (algorithm 17)
← 全部曲线