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

小酌SM2的背景、数字签名

目录

1.国密算法背景

2.SM2的数字签名

3. 小结


翻了下之前一直没写国密相关的内容,鉴于前期椭圆曲线的知识已经有铺垫了,索性也把这块给聊了。

1.国密算法背景

国产密码算法在2007年启动研发,原因很简单,其一为了打破垄断,其二不能确信国际密码算法真的没有后门;于是2010年12月17日,国密局正式发布SM2椭圆曲线公钥密码算法,与SM1/SM3/SM4共同构成中国商用密码标准体系,其中“SM”代表“商密”,数字“2”标识序列。

SM2在2012年被纳入国家密码标准开始试点,在2016年优化,2017年发布GB/T 35276-2017:SM2密码算法使用规范,明确算法参数SM2P25V1、基点G坐标、密钥格式及加密/签名流程。大家可以在全国标准信息公共服务平台查询标准:

很明显,SM2包含了加解密、数字签名、密钥交换等功能,由于属于椭圆曲线的一类,也逃不过大数运算的框架,所以该算法整体架构如下图所示:

2.SM2的数字签名

既然是椭圆曲线,那么SM2的安全基础也就依赖椭圆曲线离散对数问题​,简单来说就是:给定一个起点(基点G)和终点(公钥Q),但很难有人能能逆向算出到达终点后走了多少步(私钥d)。

这样,SM2的方程样式基本就确定了,如下:

y² ≡ x³ + ax + b (mod p)

 其中,

  • 素数域模数 p
    FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFF

  • 系数 a
    FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFC

  • 系数 b
    28E9FA9E 9D9F5E34 4D5A9E4B CF6509A7 F39789F5 15AB8F92 DDBCBD41 4D940E93
    (经国密局严格筛选,规避已知数学漏洞)

除此之外,还有我们的老朋友基点G和阶数n,如下:

  • 基点 G
    坐标 (x, y) 为:
    Gx32C4AE2C 1F198119 5F990446 6A39C994 8FE30BBF F2660BE1 715A4589 334C74C7
    GyBC3736A2 F4F6779C 59BDCEE3 6B692153 D0A9877C C62A4740 02DF32E5 2139F0A0

  • 阶数 n
    FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF 7203DF6B 21C6052B 53BBF409 39D54123
    (即椭圆曲线群的循环子群大小,用于密钥生成范围限制)

  • 余因子 h
    1

有了这个基本概念,我们就来看看数字签名,大家都知道,数字签名一般来说就是用私钥对消息的摘要进行加密,验签就是使用公钥进行解密,那么SM2也不例外,只是在这个基础上,SM2新增了更多的玩法,加入了所谓的数字身份指纹ZA。具体如下:

Step1:签名者A需要使用lenA比特长度的ID,联合方程参数、公钥计算一个身份指纹ZA,公式如下:ZA = SM3(ENTL || ID || a || b || Gx || Gy || Px || Py),ENTL是ID长度的比特数高位补零,例如16位ID对应ENTL=0x00 0x10

Step2:生成随机数k,必须在[1,n-1]之间;

Step3:利用G点和K,生成坐标Q = k*G =(x1, y1);

Step4:将ZA和原始M拼接,计算其Hash值,e = SM3(ZA || M);

Step5:然后进行双模运算,r = (e+x1) mod n,值得注意,如果r = 0或者r+k = n,就必须重新计算k,防止信息泄露;

Step6:通过模逆运算再次构建签名,s = (k -r*d)*(1+d)^(-1) mod n,如果s=0,仍然要重新生成k

Step7:导出签名(r,s)

 想了下,还是画个图更简单,如下图所示:

验签过程就更简单了,首先检查r与s是否在[1,n-1]之间,这是第一道防线;通过后计算 t = (r+s) mod n,利用得到的t去计算椭圆曲线点,公式R(x',y') = s * G + t * Pa,注意,Pa = d* G,这里面有一个很神奇的变换,如下:

 s * G + t * Pa = s* G +(r+s) * d * G = [s + d*(r+s)] * G,

还记得签名的step6吗?s = (k - r*d)/(1+d) mod n,其实很容易得出 s(1+d)≡k - r*d mod n ,从而得到s + sd +rd ≡ k mod n ,进而得到s+d(r+s) ≡ k mod n,所以,上述公式[s + d*(r+s)] * G ≡ k*G ≡Q,

接着计算e‘ = SM3(ZA || M),使用生成的Q的x1'进行计算得到 r ≡(e‘ + x1’) mod n,比较r,如果与签名值r相等,那就验签通过了。

3. 小结

原理看起来就是这么简单和朴实无华,SM2验签通过巧妙的数学构造,将k的验证隐含在公钥和签名值的代数关系中。

我们只需关注验签公式的输入参数(r、s、公钥、消息),无需追溯k的生成过程。

好了,就酱!

相关文章:

  • 慕慕手记项目日记 首页数据的渲染,使用js 2025-3-16
  • 【Linux内核系列】:动静态库详解
  • 企业数据治理解决方案(46页PPT)(文末有下载方式)
  • CMAC算法原理
  • springboot 打包 failed with MalformedInputException: Input length = 1
  • SaaS系统的销售微服务与权限微服务边界设计
  • 湖仓一体:数据湖与数据仓库的融合模式解析
  • 算法系列——有监督学习——3.逻辑回归
  • 现代时尚标签海报包装网站设计几何风PSAI无衬线英文字体安装包 Matahari Sans Font Family
  • 【linux】统信操作系统修改默认编辑模式从nano改为vim
  • Q2流动式起重机司机考试模拟题库
  • 耘想Android NAS 用户权限设置说明书
  • SQL 中 WHERE 与 HAVING 子句的使用
  • 一些关于瓶装燃气送气工考试的常见考点
  • Spring MVC 参数校验-校验注解
  • Asahi Linux 核心开发者暂停苹果 GPU Linux 驱动开发工作
  • GGUF、Transformer、AWQ 详解与关系梳理
  • 【最新版0.47.8】Cursor下载安装教程
  • iPhone 16怎么编辑图片?图片编辑技巧、软件分享
  • [Xilinx]工具篇_PetaLinux自动编译
  • 中共中央、国务院印发《党政机关厉行节约反对浪费条例》
  • 阳光保险拟设立私募证券投资基金,总规模200亿元
  • 博物馆日|为一个展奔赴一座城!上海171家博物馆等你来
  • 王伟妻子人民日报撰文:81192,一架永不停航的战机
  • 长期吃太饱,身体会发生什么变化?
  • “16+8”“生酮饮食”,网红减肥法究竟靠谱吗?