当前位置: 首页 > article >正文

SM2 算法介绍

SM2算法 是中国国家密码管理局(OSCCA)基于椭圆曲线密码学(ECC, Elliptic Curve Cryptography)设计的 公钥密码算法。它于 2010 年成为中国国家标准,主要用于数字签名、加密和密钥交换。SM2算法被广泛应用于密码学领域,尤其是在金融、政务和安全通信等场景中。


SM2算法简介

SM2 是一种 基于椭圆曲线的公钥密码算法,提供以下核心功能:

  1. 数字签名:用于验证消息的来源和完整性。
  2. 公钥加密:实现安全数据传输。
  3. 密钥交换:用于双方安全协商共享密钥。

与其他椭圆曲线密码算法(如 ECDSA、ECDH)相比,SM2 在算法设计上针对某些攻击场景做了优化,并且增加了一些额外的安全性检查。


SM2算法的关键特点

  1. 安全性高

    • 基于椭圆曲线离散对数问题(ECDLP),其难度等价于 RSA 的整数分解问题,但密钥长度更短,安全性更高。
    • 提供对抗特定攻击(如选择密文攻击)的机制。
  2. 效率高

    • 与 RSA 相比,SM2 的密钥更短,运算速度更快,适合资源受限的设备(如智能卡和嵌入式设备)。
  3. 符合国家标准

    • 是中国的国家标准,标准号为 GB/T 32918-2016
  4. 支持多功能

    • 支持数字签名、公钥加密和密钥交换,功能全面。

SM2算法的数学基础

SM2基于椭圆曲线密码学,其核心依赖于以下数学概念:

  1. 椭圆曲线方程

    • SM2使用的椭圆曲线为:
      [
      y^2 = x^3 + ax + b , \pmod{p}
      ]
      其中,( p ) 是素数,( a ) 和 ( b ) 是曲线参数,必须满足 ( 4a^3 + 27b^2 \neq 0 )(确保曲线是非奇异的)。
  2. 椭圆曲线点运算

    • 点加法和点乘法是椭圆曲线密码学的基础操作:
      • 点加法:给定曲线上的两点 ( P ) 和 ( Q ),计算 ( P + Q )。
      • 点乘法:给定曲线上的点 ( P ) 和整数 ( k ),计算 ( k \cdot P )。
  3. 椭圆曲线离散对数问题(ECDLP)

    • 给定曲线上的点 ( P ) 和 ( Q = k \cdot P ),找到整数 ( k ) 是一个计算上非常困难的问题。
    • SM2 的安全性依赖于此问题的难解性。

SM2算法的三大功能

1. 数字签名

SM2的数字签名用于验证消息的完整性和来源,过程分为两个部分:签名生成签名验证

签名生成
  1. 输入私钥 ( d )、消息 ( M ) 和随机数 ( k )。
  2. 计算消息哈希 ( e = H(Z || M) ),其中:
    • ( Z ) 是用户标识符的杂凑值(结合了用户公钥等信息)。
    • ( H ) 是 SM3 哈希函数。
  3. 计算椭圆曲线点 ( k \cdot G = (x_1, y_1) ),取 ( r = (e + x_1) \mod n )。
  4. 计算 ( s = ((1 + d)^{-1} \cdot (k - r \cdot d)) \mod n )。
  5. 签名为 ( (r, s) )。
签名验证
  1. 输入公钥 ( P )、消息 ( M ) 和签名 ( (r, s) )。
  2. 计算消息哈希 ( e = H(Z || M) )。
  3. 计算椭圆曲线点:
    [
    t = (r + s) \mod n, \quad (x_2, y_2) = s \cdot G + t \cdot P
    ]
  4. 验证:
    [
    r \stackrel{?}{=} (e + x_2) \mod n
    ]
    如果相等,则签名有效。

2. 公钥加密

SM2公钥加密用于安全传输数据,过程分为:加密解密

加密过程
  1. 输入消息 ( M )、接收方公钥 ( P ) 和随机数 ( k )。
  2. 计算椭圆曲线点 ( k \cdot G = (x_1, y_1) ) 和 ( k \cdot P = (x_2, y_2) )。
  3. 使用 ( x_2, y_2 ) 作为密钥生成种子,计算共享密钥 ( t = KDF(x_2 || y_2, klen) )。
  4. 计算密文:
    [
    C = (x_1, y_1, C_2 = M \oplus t, C_3 = H(x_2 || M || y_2))
    ]
解密过程
  1. 输入密文 ( C = (x_1, y_1, C_2, C_3) ) 和私钥 ( d )。
  2. 计算椭圆曲线点 ( d \cdot (x_1, y_1) = (x_2, y_2) )。
  3. 使用 ( x_2, y_2 ) 计算共享密钥 ( t = KDF(x_2 || y_2, klen) )。
  4. 解密消息:
    [
    M = C_2 \oplus t
    ]
  5. 验证 ( C_3 \stackrel{?}{=} H(x_2 || M || y_2) )。

3. 密钥交换

SM2密钥交换允许两方协商一个共享的会话密钥,过程分为两轮通信。

第一轮
  1. 双方生成各自的临时私钥 ( r_A, r_B ) 和临时公钥 ( R_A, R_B )。
  2. 双方交换临时公钥。
第二轮
  1. 双方计算共享密钥:
    • ( U_A = r_A \cdot R_B + r_A \cdot P_B )。
    • ( U_B = r_B \cdot R_A + r_B \cdot P_A )。
  2. 使用 ( U_A ) 或 ( U_B ) 生成会话密钥。

与其他公钥算法对比

特性SM2RSAECDSA
安全性高,基于椭圆曲线难题高,基于大整数分解高,基于椭圆曲线难题
密钥长度较短(256 位曲线)长(2048 位或更长)较短(256 位曲线)
效率较低
用途国密应用、签名、加密广泛用于签名、加密主要用于签名

应用场景

  1. 金融行业
    • 数字证书、在线支付、电子签章等。
  2. 政府系统
    • 政务系统中的身份认证与安全通信。
  3. 物联网
    • 嵌入式设备中的安全数据传输。
  4. 区块链
    • 数字签名与交易验证。

SM2 验签功能 C语言移植参考

https://github.com/chenpei97/sm2-stm32

验签网址参考

https://const.net.cn/tool/sm2/verify/

使用代码中的数据进行验签示例
在这里插入图片描述

总结

SM2 是中国国家标准的公钥密码算法,基于椭圆曲线密码学,具有高安全性、高效率和多功能的特点。它在数字签名、公钥加密和密钥交换方面表现优异,并被广泛应用于金融、政务和物联网等高安全性场景中。


http://www.kler.cn/a/445391.html

相关文章:

  • CH340系列芯片驱动电路·CH340系列芯片驱动!!!
  • arcgisPro相接多个面要素转出为完整独立线要素
  • Linux crontab 使用教程
  • Linux线程同步
  • 苹果电脑可以安装windows操作系统吗?Mac OS X/OS X/macOS傻傻分不清?macOS系统的Java支持?什么是macOS的五大API法王?
  • 【从零开始入门unity游戏开发之——C#篇08】逻辑运算符、位运算符
  • UG NX二次开发(C#)-机电概念设计-UIStyler中selection块选择信号等对象的过滤器设置
  • Python语法之列表(包含检测练习)
  • 第十七章:反射+设计模式
  • facebook商业管理平台有什么作用?
  • 计算机网络 八股青春版
  • Spring Boot 2.1.7 数据源自动加载过程详解
  • 计算机图形学与虚拟现实(VR):相关学点、图形学、虚拟现实、未来发展
  • 细粒度生物医学多模态对比学习
  • OpenSSL 心脏滴血漏洞(CVE-2014-0160)
  • 番外篇 Git 的原理与使用
  • 【AIGC】结构化的力量:ChatGPT 如何实现高效信息管理
  • 【进阶编程】MVVM的物理架构目录
  • VarifocalLoss在Yolov8中的应用
  • SpringBoot 启动类 SpringApplication 一 构造器方法
  • ESP32物联网开发
  • ChatGPT等大语言模型与水文水资源、水环境领域的深度融合
  • Spring(一)---IOC(控制权反转)
  • Vue.js前端框架教程10:Vue生命周期钩子onBeforeMount 和onMounted
  • ctf文件包含
  • [创业之路-200]:什么是business(业务)?B2B, B2C, B2G业务, 什么是业务设计?