SM2加密算法

这篇具有很好参考价值的文章主要介绍了SM2加密算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

几何学基础

  1. 欧式几何
  • 从一点向另一点可以引一条直线。
  • 任意线段能无限延伸成一条直线。
  • 给定任意线段,可以以其一个端点作为圆心,该线段作为半径作一个圆。
  • 所有直角都相等。
  • 若两条直线都与第三条直线相交,并且在同一边的内角之和小于两个直角,则这两条直线在这一边必定相交。
  1. 罗巴切夫斯基几何
  • 第五公设不能被证明。
  • 在新的公理体系中展开的一连串推理,得到了一系列在逻辑上无矛盾的新的定理,并形成了新的理论。这个理论像欧氏几何一样是完善的、严密的几何学。
  1. 黎曼几何
    对于三维空间,有以下三种情形:
  • 曲率恒等于零
  • 曲率为负常数
  • 曲率为正常数

前两种情形分别对应于欧几里得几何学和罗巴切夫斯基几何学,而第三种情形则是黎曼本人的创造,它对应于另一种非欧几何学。黎曼的这第三种几何就是用命题“过直线外一点所作任何直线都与该直线相交”代替第五公设作为前提,保留欧氏几何学的其他公理与公设,经过严密逻辑推理而建立起来的几何体系。这种几何否认“平行线”的存在,是另一种全新的非欧几何,这就是如今狭义意义下的黎曼几何,它是曲率为正常数的几何,也就是普通球面上的几何,又叫球面几何。

椭圆曲线

定义:一条椭圆曲线就是一组被 \(y^2 = x^3 + ax + b\) 定义的且满足 \(4a3+27b2≠0\) 的点集。

椭圆曲线加法(非有限域):
在椭圆曲线上取一点P(Xp,Yp),再取一点Q(Xq,Yq),连接P、Q两点作一条直线,这条直线将在椭圆曲线上交于第三点G,过G点作垂直于X轴的直线,将过椭圆曲线另一点R(一般是关于X轴对称的点),R点则被定义为P+Q的结果,既P+Q=R:
椭圆曲线加法(有限域):
公式如下
Xr = (λ² - Xp - Xq) mod p
Yr = (λ(Xp - Xr) - Yp) mod p
椭圆曲线乘法:
乘法简化成加法

伽罗瓦域

有限域亦称伽罗瓦域(galois field),是仅含有限个元素的域,它是伽罗瓦(Galois,E.)于18世纪30年代研究代数方程根式求解问题时引出的.有限域的特征数必为某一素数p,因此它含的素域同构于Zp.若F是特征为p的有限域,则F中元素的个数为pⁿ,n为某一正整数.元素个数相同的有限域是同构的.因此,通常用GF(pⁿ)表示pⁿ元的有限域.GF(pⁿ)的乘法群是(pⁿ-1)阶的循环群.

有限域椭圆曲线点的阶

如果椭圆曲线上一点P,存在最小的正整数n使得数乘 \(n P = O ∞ ​\) ,则将n称为P的阶
若n不存在,则P是无限阶的.

加密原理

考虑 \(K=kG\) ,其中K、G为椭圆曲线Ep(a,b)上的点,n为G的阶(\(nG=O∞ \)​ ),k为小于n的整数。则给定k和G,根据加法法则,计算K很容易但反过来,给定K和G,求k就非常困难。因为实际使用中的ECC原则上把p取得相当大,n也相当大,要把n个解点逐一算出来列成上表是不可能的。这就是椭圆曲线加密算法的数学依据 。

  • 点G称为基点(base point)

  • \(k(k<n)\) 为私有密钥(private key)

  • K为公开密钥(public key)

    下面是利用椭圆曲线进行加密通信的过程:

    1. 用户A选定一条椭圆曲线Ep(a,b),并取椭圆曲线上一点,作为基点G。
    2. 用户A选择一个私有密钥k,并生成公开密钥K=kG。
    3. 用户A将Ep(a,b)和点K,G传给用户B。
    4. 用户B接到信息后 ,将待传输的明文编码到Ep(a,b)上一点M(编码方法很多,这里不作讨论),并产生一个随机整数r(r<n)。
    5. 用户B计算点 \(C1 = M + r K \)和\(C2 = M + r K \)。
    6. 用户B将 C 1 、 C 2传给用户A。
    7. 用户A接到信息后,计算 \(C 1 − k C 2\) ​,结果就是点M。再对点M进行解码就可以得到明文。 因为\( C 1 − k C 2 = M + r K − k ( r G ) = M + r k G − k r G = M\)

密钥交换ECDH

ECDH使得交换双方可以在不共享任何秘密的情况下协商出一个密钥。密钥磋商过程:
假设密钥交换双方为Alice、Bob,有相同的椭圆曲线。

  1. Alice生成随机数私钥a,计算a*G。 生成Alice公钥
  2. Bob生成随机数私钥b,计算b*G。 生成Bob公钥
  3. Alice将公钥aG和基点G传递给Bob。窃听者C可以获取公钥aG和基点G。
  4. Bob将bG传递给Alice。同理,窃听者C同样可以获得bG。
  5. Bob收到Alice传递过来的公钥a*G,计算Q =baG;
  6. Alice收到Bob传递的公钥b*G,计算Q=abG,窃听者C可以获得G、aG、bG但是得不到abG

签名

用私钥 a 对消息 m签名,得到的结果是两个整数 (r,s),计算过程如下。文章来源地址https://www.toymoban.com/news/detail-516141.html

  1. 随机生成临时私钥 k,并计算其对应的公钥 K=k⋅G=(xK,yK)
  2. 计算 \(r=xK mod n\),若 r为 0,则回到第一步
  3. 计算消息 m的哈希 e=hash(m),并将 e的二进制序列转成一个整数
  4. 计算\( s=k−1(e+ra)modn\),若 s为 0,则回到第一步
  5. 得到签名 (r,s)

到了这里,关于SM2加密算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Core Animation实战三(图层几何学),【一步教学,一步到位

    //calculate hour hand angle //calculate minute hand angle CGFloat minsAngle = (components.minute / 60.0) * M_PI * 2.0; //calculate second hand angle CGFloat secsAngle = (components.second / 60.0) * M_PI * 2.0; //设置锚点 self.hourLabel.layer.anchorPoint =self.minuteLabel.layer.anchorPoint =self.secondLabel.layer.anchorPoint = CGPointMake(0.5f, 0.9f); //r

    2024年04月25日
    浏览(27)
  • 【生物力学】《人体骨肌系统生物力学》- 王成焘老师 - 第2章 - 人体几何学测量与仿真建模

    第1章 回到目录 第3章 人体测量学 (anthropometry) 是人类学的一个分支学科,旨在通过对人体整体和局部测量,探讨人体的类型、特征、变异和发展规律。人体几何仿真建模是通过数字化技术构建数字化的人体模型,数字化的人体模型能够精确地再现人体复杂的三维结构,其应用

    2024年02月10日
    浏览(29)
  • CGAL的三角网格曲面脊线和脐点的近似计算(需要微分几何学的知识)

             脊线(Ridges) :在光滑曲面上,脊线是一种特殊的曲线。沿着这条曲线,曲面的一个主曲率在其曲率线上达到极值(最大或最小)。这意味着脊线是那些曲率发生突变的区域,它们在形状感知、物体识别和计算机图形学中都有重要的应用。         脐点(U

    2024年02月03日
    浏览(36)
  • SM2加密算法

    欧式几何 从一点向另一点可以引一条直线。 任意线段能无限延伸成一条直线。 给定任意线段,可以以其一个端点作为圆心,该线段作为半径作一个圆。 所有直角都相等。 若两条直线都与第三条直线相交,并且在同一边的内角之和小于两个直角,则这两条直线在这一边必定

    2024年02月11日
    浏览(29)
  • 国密SM2算法(JS加密,C#、Java解密)

    常见的渗透测试会将网站登录时密码使用明文传输视为风险。推荐使用国密算法或者RSA算法对密码进行加密传输。 RSA加密(JS加密,C#、Java解密)请参考《RSA对称加密(JS加密,C#、Java解密)》​​​​​​ 本文描述国密SM2算法的实现。 一、工作原理 前端js使用公钥进行加密

    2024年02月02日
    浏览(43)
  • 如何选择 SSL证书的加密算法:RSA、ECC、SM2

    沃通CA可以提供这三种加密算法的SSL证书。 RSA、ECC、SM2。这也是目前 SSL证书涉及到的 3 种加密算法。 按照目前的使用普遍度:RSA ECC SM2 SSL证书在提交申请的时候,就会需要选择加密算法,目前使用较多的依然是 RSA,或者 RSA 和 ECC 配合使用。在某些情况下会选择 SM2 算法。

    2023年04月09日
    浏览(48)
  • 4.Java开源RSA/SM2非对称加密算法对比介绍

    前期内容导读: Java开源RSA/AES/SHA1/PGP/SM2/SM3/SM4加密算法介绍 Java开源AES/SM4/3DES对称加密算法介绍及其实现 Java开源AES/SM4/3DES对称加密算法的验证说明 非对称加密 主要是指 秘钥对 是非对称的(相对于 对称加密 而言),简单理解就是加密秘钥和解密秘钥不同,一般叫做公钥和私

    2024年02月14日
    浏览(34)
  • 商用密码应用与安全性评估要点笔记(SM2公钥加密算法)

    1、SM2算法简介         SM2密码算法是我国2010年发布的商用密码算法,属于公钥密码算法,也成为非对称密钥机制密码算法。SM2基于椭圆曲线离散对数问题,相对于RSA基于大整数因数分解更具优越性。         SM2算法于2012年成为我国密码行业标准,并于2017年被ISO采纳,成为

    2024年02月01日
    浏览(32)
  • 使用 Java Bouncy Castle实现国密算法SM4、SM3以及SM2的加密

    国密算法的实现借助了Java库函数 Bouncy Castle,加密库安装使用教程请参考链接 SM4,又称为商密算法,是一种分组密码算法,于2012年由中国密码技术研究中心(中国密码学会成员)发布,目前已成为我国国家密码算法,并在多个领域得到了广泛的应用。SM4算法采用了32轮迭代结

    2024年02月16日
    浏览(30)
  • 国密SM2算法的加密签名消息语法封装解析p7格式signedData

    前文可参考:SM2算法的加密签名消息语法规范(三)如何构造signedData_天对地,雨对风的博客-CSDN博客系列。 这里直接讲openssl asn1解析和封装的部分代码。 国密 p7格式标准,参考:GMT0010-2012 1、p7 签名结构:  编写结构体GMTSignedData.h 注意:SM2_SignedData_st结构中的sign类型修改为

    2024年02月11日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包